Date: Tue, 19 Sep 2023 16:48:40 +0000
Subject: [PATCH 120/176] Translated using Weblate (Japanese)
Currently translated at 100.0% (719 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
---
static/locales/ja.yaml | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/static/locales/ja.yaml b/static/locales/ja.yaml
index 3bdfb8fb0be2a..7a9c72271eb46 100644
--- a/static/locales/ja.yaml
+++ b/static/locales/ja.yaml
@@ -35,6 +35,12 @@ Global:
Live: ライブ配信
# Search Bar
+ Counts:
+ Video Count: 1 件の動画 | {count} 件の動画
+ Subscriber Count: 1 登録者 | {count} 登録者
+ View Count: 1 回表示 | {count} 回表示
+ Watching Count: 1 人が視聴中 | {count} 人が視聴中
+ Channel Count: 1 チャンネル | {count} チャンネル
Search / Go to URL: '検索 / URL の表示'
# In Filter Button
Search Filters:
@@ -101,7 +107,7 @@ Playlists: '再生リスト'
User Playlists:
Your Playlists: 'あなたの再生リスト'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 保存した動画はありません。一覧に表示させるには、ビデオの角にある保存ボタンをクリックします
- Playlist Message:
+ Playlist Message:
このページは、完全に動作する動画リストではありません。保存またはお気に入りと設定した動画のみが表示されます。操作が完了すると、現在ここにあるすべての動画は「お気に入り」の動画リストに移動します。
Search bar placeholder: 動画リスト内の検索
Empty Search Message: この再生リストに、検索に一致する動画はありません
@@ -772,6 +778,7 @@ Comments:
Member: メンバー
Hearted: ハート付
View {replyCount} replies: '{replyCount} 件の返信を表示'
+ Subscribed: チャンネル登録済み
Up Next: '次の動画'
# Toast Messages
@@ -876,7 +883,7 @@ Tooltips:
Replace HTTP Cache: Electron のディスクに基づく HTTP キャッシュを無効化し、メモリ内で独自の画像キャッシュを使用します。このことにより
RAM の使用率は増加します。
Distraction Free Settings:
- Hide Channels: チャンネル名またはチャンネル ID
+ Hide Channels: チャンネル名またはチャンネル ID
を入力すると、すべてのビデオ、再生リスト、チャンネル自体が検索や人気、およびおすすめに表示されなくなります。入力するチャンネル名は、大文字と小文字を区別するので完全に一致させてください。
Hide Subscriptions Live: この設定は、アプリ全体の "{appWideSetting}" 設定により上書きされます。"{settingsSection}"
項目の "{subsection}" にあります
From a271d4548f107d1a916fe074074de15bf149e51d Mon Sep 17 00:00:00 2001
From: Jason <84899178+jasonhenriquez@users.noreply.github.com>
Date: Tue, 19 Sep 2023 21:26:24 +0000
Subject: [PATCH 121/176] Fix Subscribe button being clipped on Channel page
(#4057)
---
src/renderer/components/ft-button/ft-button.css | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/renderer/components/ft-button/ft-button.css b/src/renderer/components/ft-button/ft-button.css
index aa9149feca78a..4642a184de499 100644
--- a/src/renderer/components/ft-button/ft-button.css
+++ b/src/renderer/components/ft-button/ft-button.css
@@ -4,6 +4,7 @@
font-size: 0.9rem;
padding-block: 10px;
padding-inline: 20px;
+ block-size: fit-content;
box-sizing: border-box;
cursor: pointer;
display: inline-block;
From cc6807ba48b8106661fef45d7ac616556a7d3194 Mon Sep 17 00:00:00 2001
From: PrestonN
Date: Tue, 19 Sep 2023 20:43:34 -0400
Subject: [PATCH 122/176] Add SVG variants of the logo / icon
---
_icons/iconBlack.svg | 1 +
_icons/iconColor.svg | 95 ++++++++++++++++++
_icons/iconWhite.svg | 95 ++++++++++++++++++
_icons/logoBlack.svg | 193 +++++++++++++++++++++++++++++++++++++
_icons/logoColor.svg | 224 +++++++++++++++++++++++++++++++++++++++++++
_icons/logoWhite.svg | 210 ++++++++++++++++++++++++++++++++++++++++
6 files changed, 818 insertions(+)
create mode 100644 _icons/iconBlack.svg
create mode 100644 _icons/iconColor.svg
create mode 100644 _icons/iconWhite.svg
create mode 100644 _icons/logoBlack.svg
create mode 100644 _icons/logoColor.svg
create mode 100644 _icons/logoWhite.svg
diff --git a/_icons/iconBlack.svg b/_icons/iconBlack.svg
new file mode 100644
index 0000000000000..e61b30d675bb0
--- /dev/null
+++ b/_icons/iconBlack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_icons/iconColor.svg b/_icons/iconColor.svg
new file mode 100644
index 0000000000000..86014119a00b6
--- /dev/null
+++ b/_icons/iconColor.svg
@@ -0,0 +1,95 @@
+
+
+
diff --git a/_icons/iconWhite.svg b/_icons/iconWhite.svg
new file mode 100644
index 0000000000000..285f9ee67aa2b
--- /dev/null
+++ b/_icons/iconWhite.svg
@@ -0,0 +1,95 @@
+
+
+
diff --git a/_icons/logoBlack.svg b/_icons/logoBlack.svg
new file mode 100644
index 0000000000000..8d167add15645
--- /dev/null
+++ b/_icons/logoBlack.svg
@@ -0,0 +1,193 @@
+
+
+
diff --git a/_icons/logoColor.svg b/_icons/logoColor.svg
new file mode 100644
index 0000000000000..35d5e45a8a65d
--- /dev/null
+++ b/_icons/logoColor.svg
@@ -0,0 +1,224 @@
+
+
+
diff --git a/_icons/logoWhite.svg b/_icons/logoWhite.svg
new file mode 100644
index 0000000000000..d95bc268fb171
--- /dev/null
+++ b/_icons/logoWhite.svg
@@ -0,0 +1,210 @@
+
+
+
From 50c64a82c9e5c64f2224c462de694af52810e004 Mon Sep 17 00:00:00 2001
From: Philip Goto
Date: Wed, 20 Sep 2023 06:00:47 +0000
Subject: [PATCH 123/176] Translated using Weblate (Dutch)
Currently translated at 99.5% (716 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
---
static/locales/nl.yaml | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/static/locales/nl.yaml b/static/locales/nl.yaml
index 38a6fe06325bc..32806e874599d 100644
--- a/static/locales/nl.yaml
+++ b/static/locales/nl.yaml
@@ -38,6 +38,12 @@ Global:
# Search Bar
Shorts: Shorts
Live: Live
+ Counts:
+ Video Count: 1 video | {count} video's
+ Subscriber Count: 1 abonnee | {count} abonnees
+ View Count: 1 weergave | {count} weergaven
+ Watching Count: 1 aan het kijken | {count} aan het kijken
+ Channel Count: 1 kanaal | {count} kanalen
Search / Go to URL: 'Zoeken / Ga naar URL'
# In Filter Button
Search Filters:
@@ -763,6 +769,8 @@ Video:
Upcoming: Aankomend
Show Super Chat Comment: Superchat-opmerking tonen
Pause on Current Video: Pauzeren bij huidige video
+ 'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live-chat
+ is niet beschikbaar voor deze stream. Mogelijk is deze uitgeschakeld door de uploader.
Videos:
#& Sort By
Sort By:
@@ -839,6 +847,7 @@ Comments:
Member: Lid
Hearted: Met hartje
View {replyCount} replies: '{replyCount} reacties bekijken'
+ Subscribed: Geabonneerd
Up Next: 'Volgende'
# Toast Messages
@@ -931,6 +940,12 @@ Tooltips:
om de afspeelsnelheid te besturen. Houd de Control-toets (Command-toets op Mac)
ingedrukt en klik met de linker muisknop om snel terug te schakelen naar de
standaard afspeelsnelheid (1x tenzij aangepast in de instellingen).
+ Allow DASH AV1 formats: Video's in DASH AV1-formaat kunnen er beter uitzien dan
+ die in DASH H.264-formaat. DASH AV1 verbruikt op oudere apparaten meer energie!
+ Dit formaat is niet beschikbaar voor alle video's, in welk geval het DASH H.264-formaat
+ wordt gebruikt.
+ Skip by Scrolling Over Video Player: Gebruik het scroll-wieltje om door de video
+ te spoelen, zoals bij MPV.
Subscription Settings:
Fetch Feeds from RSS: Wanneer ingeschakeld zal FreeTube RSS gebruiken in plaats
van de standaard methode om de videolijsten van je abonnementen te verzamelen.
@@ -969,6 +984,14 @@ Tooltips:
in de gekozen externe videospeler kan worden geopend. Let op: Invidious instellingen
beïnvloeden externe videospelers niet.'
DefaultCustomArgumentsTemplate: "(standaard: ‘{defaultCustomArguments}’)"
+ Distraction Free Settings:
+ Hide Channels: Voer een kanaalnaam of kanaal-ID in om alle video's, afspeellijsten
+ en het kanaal zelf te verbergen zodat ze niet worden weergegeven in zoeken,
+ trending, populairst en aanbevolen. De ingevoerde kanaalnaam moet volledig overeenkomen
+ en is hoofdlettergevoelig.
+ SponsorBlock Settings:
+ UseDeArrowTitles: Vervangt videotitels met door gebruikers ingediende titels van
+ DeArrow.
Playing Next Video Interval: Volgende video wordt afgespeeld. Klik om te onderbreken.
| Volgende video wordt afgespeeld in {nextVideoInterval} seconde. Klik om te onderbreken.
| Volgende video wordt afgespeeld in {nextVideoInterval} seconden. Klik om te onderbreken.
@@ -1013,6 +1036,8 @@ Screenshot Error: Schermafbeelding kon niet worden opgeslagen. {error}
Preferences: Voorkeuren
Hashtag:
Hashtag: Hashtag
+ This hashtag does not currently have any videos: Deze hashtag heeft momenteel geen
+ video's
Ok: Oké
Chapters:
Chapters: Hoofdstukken
@@ -1024,3 +1049,7 @@ Clipboard:
Cannot access clipboard without a secure connection: Geen toegang tot klembord zonder
een beveiligde verbinding
Copy failed: Kopiëren naar klembord mislukt
+Playlist will pause when current video is finished: Afspeellijst zal pauzeren wanneer
+ de huidige video is afgelopen
+Playlist will not pause when current video is finished: Afspeellijst zal niet pauzeren
+ wanneer de huidige video is afgelopen
From 36ca68b098cafc71c77be93771a29e22157a6186 Mon Sep 17 00:00:00 2001
From: mere
Date: Wed, 20 Sep 2023 10:05:25 +0000
Subject: [PATCH 124/176] Translated using Weblate (Romanian)
Currently translated at 98.1% (706 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
---
static/locales/ro.yaml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/static/locales/ro.yaml b/static/locales/ro.yaml
index e0828b810d3fc..ef9550035bd05 100644
--- a/static/locales/ro.yaml
+++ b/static/locales/ro.yaml
@@ -36,6 +36,11 @@ Global:
Shorts: Shorts
Live: Live
+ Counts:
+ Video Count: 1 videoclip | {count} videoclipuri
+ Subscriber Count: 1 abonat | {count} de abonați
+ View Count: 1 vizionare | {count} vizionări
+ Channel Count: 1 canal | {count} canale
Version {versionNumber} is now available! Click for more details: 'Versiunea {versionNumber}
este acum disponibilă! Click pentru mai multe detalii'
Download From Site: 'Descărcați de pe site'
@@ -175,7 +180,7 @@ Settings:
Current Invidious Instance: Instanța actuală Invidious
System Default: Prestabilită de sistem
Theme Settings:
- Theme Settings: 'Setările temei'
+ Theme Settings: 'Setări temei'
Match Top Bar with Main Color: 'Potriviți bara de sus cu culoarea principală'
Base Theme:
Base Theme: 'Temă de bază'
From 238a7caae0acf979c975224c716109c2f5a8cee5 Mon Sep 17 00:00:00 2001
From: mere
Date: Wed, 20 Sep 2023 16:57:46 +0000
Subject: [PATCH 125/176] Translated using Weblate (Romanian)
Currently translated at 100.0% (719 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ro/
---
static/locales/ro.yaml | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/static/locales/ro.yaml b/static/locales/ro.yaml
index ef9550035bd05..35fe926cdfd00 100644
--- a/static/locales/ro.yaml
+++ b/static/locales/ro.yaml
@@ -41,6 +41,7 @@ Global:
Subscriber Count: 1 abonat | {count} de abonați
View Count: 1 vizionare | {count} vizionări
Channel Count: 1 canal | {count} canale
+ Watching Count: 1 se uită | {count} se uită
Version {versionNumber} is now available! Click for more details: 'Versiunea {versionNumber}
este acum disponibilă! Click pentru mai multe detalii'
Download From Site: 'Descărcați de pe site'
@@ -48,7 +49,7 @@ A new blog is now available, {blogTitle}. Click to view more: 'Un nou blog este
disponibil, {blogTitle}. Click to view more'
# Search Bar
-Search / Go to URL: 'Căutare / Du-te la URL'
+Search / Go to URL: 'Căutare / Întrodu la URL'
# In Filter Button
Search Filters:
Search Filters: 'Filtre de căutare'
@@ -190,6 +191,8 @@ Settings:
Dracula: 'Dracula'
System Default: Setări implicite
Catppuccin Mocha: Catppuccin Mocha
+ Pastel Pink: Pastel Roz
+ Hot Pink: Hot Roz
Main Color Theme:
Main Color Theme: 'Culoarea principală a temei'
Red: 'Roşu'
@@ -420,6 +423,8 @@ Settings:
Hide Channels Placeholder: Numele canalului sau ID-ul
Hide Channel Playlists: Ascunde playlisturile canalului
Hide Upcoming Premieres: Ascundeți premierele viitoare
+ Blur Thumbnails: Estomparea miniaturilor
+ Hide Profile Pictures in Comments: Ascundeți imaginile de profil în comentarii
SponsorBlock Settings:
Notify when sponsor segment is skipped: Notificare atunci când segmentul sponsorului
este sărit
@@ -509,6 +514,7 @@ About:
Licensed under the AGPLv3: Licențiat sub AGPLv3
Source code: Codul sursă
Beta: Beta
+ Discussions: Discuții
Profile:
Profile Select: 'Selectare profil'
All Channels: 'Toate canalele'
@@ -599,6 +605,9 @@ Channel:
Community: Comunitate
This channel currently does not have any posts: Acest canal nu are momentan nicio
postare
+ Reveal Answers: Dezvăluie Răspunsuri
+ Hide Answers: Ascunde Răspunsurile
+ votes: '{votes} voturi'
This channel is age-restricted and currently cannot be viewed in FreeTube.: Acest
canal are restricții de vârstă și momentan nu poate fi vizionat în FreeTube.
This channel does not exist: Acest canal nu există
@@ -760,6 +769,7 @@ Video:
de persoana care a încărcat.
Premieres: Premiere
Show Super Chat Comment: Afișați comentariul Super Chat
+ Pause on Current Video: Pauză la videoclipul curent
Videos:
#& Sort By
Sort By:
@@ -836,6 +846,7 @@ Comments:
Member: Membru
Hearted: Inima
View {replyCount} replies: '{replyCount} răspunsuri'
+ Subscribed: Abonat
Up Next: 'În continuare'
# Toast Messages
@@ -996,3 +1007,7 @@ Hashtag:
This hashtag does not currently have any videos: Acest hashtag nu are momentan niciun
videoclip
Ok: OK
+Playlist will pause when current video is finished: Lista de redare se va întrerupe
+ când videoclipul curent este terminat
+Playlist will not pause when current video is finished: Lista de redare nu se va întrerupe
+ când videoclipul curent este terminat
From 529402638a91fd36392b0a313fa5f010d0cea2ad Mon Sep 17 00:00:00 2001
From: MaxMaxMaxCh <138196893+MaxMaxMaxCh@users.noreply.github.com>
Date: Wed, 20 Sep 2023 22:10:16 +0300
Subject: [PATCH 126/176] fix bug with tabbing into three dots menu #4022
(#4060)
---
src/renderer/components/ft-icon-button/ft-icon-button.vue | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/renderer/components/ft-icon-button/ft-icon-button.vue b/src/renderer/components/ft-icon-button/ft-icon-button.vue
index a91fc17317461..b1760e528e600 100644
--- a/src/renderer/components/ft-icon-button/ft-icon-button.vue
+++ b/src/renderer/components/ft-icon-button/ft-icon-button.vue
@@ -77,9 +77,9 @@
v-for="(option, index) in dropdownOptions"
:id="sanitizeForHtmlId(title + '-' + index)"
:key="index"
- role="option"
+ :role="option.type === 'divider' ? 'separator' : 'option'"
aria-selected="false"
- tabindex="-1"
+ :tabindex="option.type === 'divider' ? '-1' : '0'"
:class="option.type === 'divider' ? 'listItemDivider' : 'listItem'"
@click="handleDropdownClick({url: option.value, index: index}, $event)"
@keydown.enter="handleDropdownClick({url: option.value, index: index}, $event)"
From 9d80737907f5756e69b5bb7f99acca9454cb7a2e Mon Sep 17 00:00:00 2001
From: Jason <84899178+jasonhenriquez@users.noreply.github.com>
Date: Wed, 20 Sep 2023 19:14:34 +0000
Subject: [PATCH 127/176] Fix buttons intersecting on Subscribed Channels tab
(#4058)
* Fix buttons intersecting on Subscribed Channels tab in many languages
Note that this can still occur if one of the words in 'Unsubscribe' is pretty big on smaller screen sizes, e.g., Svenska at 515px. This is because we allow the Unsubscribe button to be wider than the element itself, which is hard to change here without completely reworking the structure using (due to limitations with minmax being unable to have fit-content in a grid definition).
* Update src/renderer/components/ft-subscribe-button/ft-subscribe-button.css
Co-authored-by: PikachuEXE
---------
Co-authored-by: PikachuEXE
---
.../components/ft-subscribe-button/ft-subscribe-button.css | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/renderer/components/ft-subscribe-button/ft-subscribe-button.css b/src/renderer/components/ft-subscribe-button/ft-subscribe-button.css
index 338ea7b3538c1..4d2871b3326e9 100644
--- a/src/renderer/components/ft-subscribe-button/ft-subscribe-button.css
+++ b/src/renderer/components/ft-subscribe-button/ft-subscribe-button.css
@@ -1,6 +1,8 @@
-.subscribeButton {
+/* Ensures style here overrides style of .btn */
+.subscribeButton.btn {
align-self: center;
block-size: 50%;
margin-block-end: 10px;
min-inline-size: 150px;
+ white-space: initial;
}
From 2b8f2afc010ee014755649e943446f2aecdfa0b0 Mon Sep 17 00:00:00 2001
From: Carlos Luiz
Date: Thu, 21 Sep 2023 02:43:35 +0000
Subject: [PATCH 128/176] Translated using Weblate (Portuguese)
Currently translated at 98.1% (706 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
---
static/locales/pt.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index 9ab072f7989d8..6ca1f2399fc08 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -36,6 +36,8 @@ Global:
Shorts: Curtas
Live: Em directo
+ Counts:
+ Channel Count: 1 canal | {count} canais
Version {versionNumber} is now available! Click for more details: 'A versão {versionNumber}
está disponível! Clique aqui para mais informações'
Download From Site: 'Descarregar do site'
From 6813788743814daf8db425b173b768dad2e00ca4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jiri=20Gr=C3=B6nroos?=
Date: Fri, 22 Sep 2023 08:52:50 +0000
Subject: [PATCH 129/176] Translated using Weblate (Finnish)
Currently translated at 98.7% (710 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
---
static/locales/fi.yaml | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/static/locales/fi.yaml b/static/locales/fi.yaml
index c6eeca66233ab..ddd7fc8abfb37 100644
--- a/static/locales/fi.yaml
+++ b/static/locales/fi.yaml
@@ -35,6 +35,12 @@ Global:
Live: Livenä
# Search Bar
+ Counts:
+ Video Count: 1 video | {count} videota
+ Subscriber Count: 1 tilaaja | {count} tilaajaa
+ View Count: 1 näyttökerta | {count} näyttökertaa
+ Watching Count: 1 katselee | {count} katselee
+ Channel Count: 1 kanava | {count} kanavaa
Search / Go to URL: 'Etsi / Mene osoitteeseen'
# In Filter Button
Search Filters:
@@ -142,6 +148,7 @@ Settings:
Beginning: 'Alku'
Middle: 'Puoliväli'
End: 'Loppu'
+ Hidden: Piilotettu
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious instanssi
(Oletus on https://invidious.snopyta.org)'
Region for Trending: 'Nousussa-sivun alue'
@@ -274,7 +281,7 @@ Settings:
numeroa. %S Sekunnit 2 numeroa. %T Millisekunnit 3 numeroa. %s Videosekunnit.
%t Videon Millisekunnit 3 numeroa. %i Videotunniste eli ID. Voit myös käyttää
"\" tai "/" luodaksesi alikansioita.
- Enter Fullscreen on Display Rotate: Siirry koko näytön kokoiseen näytön kiertoon
+ Enter Fullscreen on Display Rotate: Siirry koko näytön tilaan näyttöä kiertäessä
Skip by Scrolling Over Video Player: Ohita vierittämällä videosoittimen yli
Allow DASH AV1 formats: Salli DASH AV1 -formaatit
Comment Auto Load:
@@ -420,6 +427,8 @@ Settings:
Hide Channel Podcasts: Piilota kanavan podcastit
Hide Subscriptions Videos: Piilota tilausvideot
Hide Subscriptions Live: Piilota tilausten livet
+ Blur Thumbnails: Sumenna pikkukuvat
+ Hide Profile Pictures in Comments: Piilota profiilikuvat kommenteissa
The app needs to restart for changes to take effect. Restart and apply change?: Sovellus
on käynnistettävä uudelleen, jotta muutokset tulevat voimaan. Käynnistetäänkö
uudelleen?
@@ -544,6 +553,7 @@ About:
FreeTube Wiki: FreeTube Wiki
Donate: Lahjoita
Source code: Lähdekoodi
+ Discussions: Keskustelut
Channel:
Subscribe: 'Tilaa'
Unsubscribe: 'Peruuta tilaus'
@@ -589,6 +599,9 @@ Channel:
This channel currently does not have any posts: Tällä kanavalla ei ole tällä hetkellä
mitään
Community: Yhteisö
+ Reveal Answers: Näytä vastaukset
+ Hide Answers: Piilota vastaukset
+ votes: '{votes} ääntä'
Live:
Live: Livenä
This channel does not currently have any live streams: Tällä kanavalla ei ole
@@ -813,6 +826,7 @@ Comments:
Member: Jäsen
View {replyCount} replies: Näytä {replyCount} vastausta
Hearted: Tykätty
+ Subscribed: Tilattu
Up Next: 'Seuraavaksi'
# Toast Messages
From 324bdb608a23df24901233f72ed251cffd50880e Mon Sep 17 00:00:00 2001
From: Alexthegib
Date: Fri, 22 Sep 2023 11:46:44 +0000
Subject: [PATCH 130/176] Translated using Weblate (Portuguese)
Currently translated at 100.0% (719 of 719 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
---
static/locales/pt.yaml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index 6ca1f2399fc08..9dac090105a3e 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -38,6 +38,10 @@ Global:
Counts:
Channel Count: 1 canal | {count} canais
+ Video Count: 1 vídeo | {count} vídeos
+ Subscriber Count: 1 assinante | {count} assinantes
+ View Count: 1 visualização | {contagem} visualizações
+ Watching Count: 1 a assistir | {count} a assistir
Version {versionNumber} is now available! Click for more details: 'A versão {versionNumber}
está disponível! Clique aqui para mais informações'
Download From Site: 'Descarregar do site'
@@ -155,6 +159,7 @@ Settings:
Beginning: 'Início'
Middle: 'Centro'
End: 'Final'
+ Hidden: Oculto
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Instância Invidious
(Por omissão é https://invidious.snopyta.org)'
Region for Trending: 'Região para as tendências'
@@ -185,6 +190,8 @@ Settings:
Dracula: 'Drácula'
System Default: Definição do sistema
Catppuccin Mocha: Cappuccino mocha
+ Pastel Pink: Rosa pastel
+ Hot Pink: Rosa Choque
Main Color Theme:
Main Color Theme: 'Cor principal'
Red: 'Vermelho'
@@ -459,6 +466,7 @@ Settings:
Hide Subscriptions Shorts: Ocultar subscrições de vídeos curtos
Hide Subscriptions Live: Ocultar subscrições de vídeos em direto
Hide Profile Pictures in Comments: Ocultar imagens de perfil nos comentários
+ Blur Thumbnails: Desfocar miniaturas
External Player Settings:
Custom External Player Arguments: Argumentos do reprodutor externo personalizado
Custom External Player Executable: Executável de reprodutor externo personalizado
@@ -808,6 +816,7 @@ Video:
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': O
Chat ao vivo não está disponível para esta transmissão. Pode ter sido desativado
pelo remetente.
+ Pause on Current Video: Pausa no vídeo atual
Videos:
#& Sort By
Sort By:
@@ -884,6 +893,7 @@ Comments:
Member: Membro
Hearted: Marcado
View {replyCount} replies: Ver {replyCount} respostas
+ Subscribed: Subscrito
Up Next: 'Próximo'
# Toast Messages
@@ -1040,3 +1050,7 @@ Hashtag:
Hashtag: Marcador
This hashtag does not currently have any videos: Esta hashtag não tem atualmente
quaisquer vídeos
+Playlist will pause when current video is finished: A lista de reprodução será colocada
+ em pausa quando o vídeo atual terminar
+Playlist will not pause when current video is finished: A lista de reprodução não
+ será colocada em pausa quando o vídeo atual terminar
From 47ef3e57465c71e93b8e8b0501a4459bd6909e4c Mon Sep 17 00:00:00 2001
From: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
Date: Fri, 22 Sep 2023 20:19:50 -0400
Subject: [PATCH 131/176] Subscriptions: Add community tab (#3973)
* Add subscription community tab
* fix up community tab
* simplify if statement
* use global.community for all references to community
* dont show community when useRss is set
* check visibleTabs for showing the community tab
* fix caching, decrease datalimit for community, add missing translations
* L: Hide shared posts, IV: Don't show errors for empty community tab
* add links to related issues
---
.../distraction-settings.js | 4 +
.../distraction-settings.vue | 6 +
.../ft-community-post/ft-community-post.js | 12 +-
.../ft-community-post/ft-community-post.scss | 4 +
.../ft-community-post/ft-community-post.vue | 37 ++-
.../subscriptions-community.js | 221 ++++++++++++++++++
.../subscriptions-community.vue | 13 ++
.../subscriptions-tab-ui.js | 12 +-
.../subscriptions-tab-ui.vue | 5 +-
src/renderer/helpers/api/invidious.js | 8 +-
src/renderer/helpers/api/local.js | 52 ++++-
src/renderer/store/modules/settings.js | 1 +
src/renderer/store/modules/subscriptions.js | 25 +-
src/renderer/views/Channel/Channel.js | 6 +-
src/renderer/views/Channel/Channel.vue | 2 +-
.../views/Subscriptions/Subscriptions.js | 20 ++
.../views/Subscriptions/Subscriptions.vue | 21 ++
static/locales/ar.yaml | 2 +-
static/locales/bg.yaml | 2 +-
static/locales/cs.yaml | 2 +-
static/locales/de-DE.yaml | 2 +-
static/locales/el.yaml | 2 +-
static/locales/en-US.yaml | 5 +-
static/locales/en_GB.yaml | 2 +-
static/locales/eo.yaml | 5 +-
static/locales/es.yaml | 2 +-
static/locales/et.yaml | 2 +-
static/locales/fi.yaml | 5 +-
static/locales/fr-FR.yaml | 2 +-
static/locales/gl.yaml | 2 +-
static/locales/he.yaml | 2 +-
static/locales/hr.yaml | 2 +-
static/locales/hu.yaml | 2 +-
static/locales/is.yaml | 2 +-
static/locales/it.yaml | 2 +-
static/locales/ja.yaml | 2 +-
static/locales/nb_NO.yaml | 2 +-
static/locales/pl.yaml | 2 +-
static/locales/pt-BR.yaml | 2 +-
static/locales/pt-PT.yaml | 2 +-
static/locales/pt.yaml | 1 +
static/locales/ro.yaml | 2 +-
static/locales/ru.yaml | 2 +-
static/locales/sv.yaml | 2 +-
static/locales/tr.yaml | 2 +-
static/locales/uk.yaml | 2 +-
static/locales/zh-CN.yaml | 2 +-
static/locales/zh-TW.yaml | 2 +-
48 files changed, 465 insertions(+), 54 deletions(-)
create mode 100644 src/renderer/components/subscriptions-community/subscriptions-community.js
create mode 100644 src/renderer/components/subscriptions-community/subscriptions-community.vue
diff --git a/src/renderer/components/distraction-settings/distraction-settings.js b/src/renderer/components/distraction-settings/distraction-settings.js
index 659409d12f84c..7f5e3741fc962 100644
--- a/src/renderer/components/distraction-settings/distraction-settings.js
+++ b/src/renderer/components/distraction-settings/distraction-settings.js
@@ -92,6 +92,9 @@ export default defineComponent({
hideSubscriptionsLive: function () {
return this.$store.getters.getHideSubscriptionsLive
},
+ hideSubscriptionsCommunity: function() {
+ return this.$store.getters.getHideSubscriptionsCommunity
+ },
showDistractionFreeTitles: function () {
return this.$store.getters.getShowDistractionFreeTitles
},
@@ -155,6 +158,7 @@ export default defineComponent({
'updateHideSubscriptionsVideos',
'updateHideSubscriptionsShorts',
'updateHideSubscriptionsLive',
+ 'updateHideSubscriptionsCommunity',
'updateBlurThumbnails'
])
}
diff --git a/src/renderer/components/distraction-settings/distraction-settings.vue b/src/renderer/components/distraction-settings/distraction-settings.vue
index 4989782c0eda3..5b6f06db4a4a1 100644
--- a/src/renderer/components/distraction-settings/distraction-settings.vue
+++ b/src/renderer/components/distraction-settings/distraction-settings.vue
@@ -66,6 +66,12 @@
:tooltip="hideLiveStreams ? hideSubscriptionsLiveTooltip : ''"
v-on="!hideLiveStreams ? { change: updateHideSubscriptionsLive } : {}"
/>
+
response.json())
.then((json) => {
if (json.error !== undefined) {
- throw new Error(json.error)
+ // community is empty, no need to display error.
+ // This code can be removed when: https://github.com/iv-org/invidious/issues/3814 is reolved
+ if (json.error === 'This channel hasn\'t posted yet') {
+ resolve({ comments: [] })
+ } else {
+ throw new Error(json.error)
+ }
}
resolve(json)
})
diff --git a/src/renderer/helpers/api/local.js b/src/renderer/helpers/api/local.js
index f33d9a4813801..98115c2357a07 100644
--- a/src/renderer/helpers/api/local.js
+++ b/src/renderer/helpers/api/local.js
@@ -286,6 +286,36 @@ export async function getLocalChannelLiveStreams(id) {
}
}
+export async function getLocalChannelCommunity(id) {
+ const innertube = await createInnertube()
+
+ try {
+ const response = await innertube.actions.execute(Endpoints.BrowseEndpoint.PATH, Endpoints.BrowseEndpoint.build({
+ browse_id: id,
+ params: 'Egljb21tdW5pdHnyBgQKAkoA'
+ // protobuf for the community tab (this is the one that YouTube uses,
+ // it has some empty fields in the protobuf but it doesn't work if you remove them)
+ }))
+
+ const communityTab = new YT.Channel(null, response)
+
+ // if the channel doesn't have a community tab, YouTube returns the home tab instead
+ // so we need to check that we got the right tab
+ if (communityTab.current_tab?.endpoint.metadata.url?.endsWith('/community')) {
+ return parseLocalCommunityPosts(communityTab.posts)
+ } else {
+ return []
+ }
+ } catch (error) {
+ console.error(error)
+ if (error instanceof Utils.ChannelError) {
+ return null
+ } else {
+ throw error
+ }
+ }
+}
+
/**
* @param {import('youtubei.js').YTNodes.Video[]} videos
* @param {Misc.Author} author
@@ -879,9 +909,29 @@ export function parseLocalSubscriberCount(text) {
/**
* Parse community posts
+ * @param {import('youtubei.js').YTNodes.BackstagePost[] | import('youtubei.js').YTNodes.SharedPost[] | import('youtubei.js').YTNodes.Post[] } posts
+ */
+export function parseLocalCommunityPosts(posts) {
+ const foundIds = []
+ // `posts` includes the SharedPost's attached post for some reason so we need to filter that out.
+ // see: https://github.com/FreeTubeApp/FreeTube/issues/3252#issuecomment-1546675781
+ // we don't currently support SharedPost's so that is also filtered out
+ for (const post of posts) {
+ if (post.type === 'SharedPost') {
+ foundIds.push(post.original_post.id, post.id)
+ }
+ }
+
+ return posts.filter(post => {
+ return !foundIds.includes(post.id)
+ }).map(parseLocalCommunityPost)
+}
+
+/**
+ * Parse community post
* @param {import('youtubei.js').YTNodes.BackstagePost} post
*/
-export function parseLocalCommunityPost(post) {
+function parseLocalCommunityPost(post) {
let replyCount = post.action_buttons?.reply_button?.text ?? null
if (replyCount !== null) {
replyCount = parseLocalSubscriberCount(post?.action_buttons.reply_button.text)
diff --git a/src/renderer/store/modules/settings.js b/src/renderer/store/modules/settings.js
index 79bca7394b7f0..956daabc6afb5 100644
--- a/src/renderer/store/modules/settings.js
+++ b/src/renderer/store/modules/settings.js
@@ -216,6 +216,7 @@ const state = {
hideSubscriptionsVideos: false,
hideSubscriptionsShorts: false,
hideSubscriptionsLive: false,
+ hideSubscriptionsCommunity: false,
hideTrendingVideos: false,
hideUnsubscribeButton: false,
hideUpcomingPremieres: false,
diff --git a/src/renderer/store/modules/subscriptions.js b/src/renderer/store/modules/subscriptions.js
index 294ce4bed0efd..76f34bcb993cb 100644
--- a/src/renderer/store/modules/subscriptions.js
+++ b/src/renderer/store/modules/subscriptions.js
@@ -7,7 +7,8 @@ const defaultCacheEntryValueForForOneChannel = {
const state = {
videoCache: {},
liveCache: {},
- shortsCache: {}
+ shortsCache: {},
+ postsCache: {}
}
const getters = {
@@ -34,6 +35,14 @@ const getters = {
getLiveCacheByChannel: (state) => (channelId) => {
return state.liveCache[channelId]
},
+
+ getPostsCache: (state) => {
+ return state.postsCache
+ },
+
+ getPostsCacheByChannel: (state) => (channelId) => {
+ return state.postsCache[channelId]
+ },
}
const actions = {
@@ -49,10 +58,15 @@ const actions = {
commit('updateLiveCacheByChannel', payload)
},
+ updateSubscriptionPostsCacheByChannel: ({ commit }, payload) => {
+ commit('updatePostsCacheByChannel', payload)
+ },
+
clearSubscriptionsCache: ({ commit }, payload) => {
commit('clearVideoCache', payload)
commit('clearShortsCache', payload)
commit('clearLiveCache', payload)
+ commit('clearPostsCache', payload)
},
}
@@ -84,6 +98,15 @@ const mutations = {
clearLiveCache(state) {
state.liveCache = {}
},
+ updatePostsCacheByChannel(state, { channelId, posts }) {
+ const existingObject = state.postsCache[channelId]
+ const newObject = existingObject != null ? existingObject : deepCopy(defaultCacheEntryValueForForOneChannel)
+ if (posts != null) { newObject.posts = posts }
+ state.postsCache[channelId] = newObject
+ },
+ clearPostsCache(state) {
+ state.postsCache = {}
+ },
}
export default {
diff --git a/src/renderer/views/Channel/Channel.js b/src/renderer/views/Channel/Channel.js
index 0e494a2778892..93ad7b5695ab9 100644
--- a/src/renderer/views/Channel/Channel.js
+++ b/src/renderer/views/Channel/Channel.js
@@ -27,7 +27,7 @@ import {
getLocalChannelId,
parseLocalChannelShorts,
parseLocalChannelVideos,
- parseLocalCommunityPost,
+ parseLocalCommunityPosts,
parseLocalListPlaylist,
parseLocalListVideo,
parseLocalSubscriberCount
@@ -1576,7 +1576,7 @@ export default defineComponent({
posts = communityTab.posts
}
- this.latestCommunityPosts = posts.map(parseLocalCommunityPost)
+ this.latestCommunityPosts = parseLocalCommunityPosts(posts)
this.communityContinuationData = communityTab.has_continuation ? communityTab : null
} catch (err) {
console.error(err)
@@ -1608,7 +1608,7 @@ export default defineComponent({
posts = continuation.posts
}
- this.latestCommunityPosts = this.latestCommunityPosts.concat(posts.map(parseLocalCommunityPost))
+ this.latestCommunityPosts = this.latestCommunityPosts.concat(parseLocalCommunityPosts(posts))
this.communityContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
console.error(err)
diff --git a/src/renderer/views/Channel/Channel.vue b/src/renderer/views/Channel/Channel.vue
index e6f4615734310..f8cfb0b5c6ed8 100644
--- a/src/renderer/views/Channel/Channel.vue
+++ b/src/renderer/views/Channel/Channel.vue
@@ -186,7 +186,7 @@
@click="changeTab('community')"
@keydown.left.right.enter.space="changeTab('community', $event)"
>
- {{ $t("Channel.Community.Community").toUpperCase() }}
+ {{ $t("Global.Community").toUpperCase() }}
{{ $t("Global.Live").toUpperCase() }}
+
+
+ {{ $t("Global.Community").toUpperCase() }}
+
+
{{ $t("Subscriptions.All Subscription Tabs Hidden", {
subsection: $t('Settings.Distraction Free Settings.Sections.Subscriptions Page'),
diff --git a/static/locales/ar.yaml b/static/locales/ar.yaml
index 87f9ce2d77b27..d2442aa0c46ce 100644
--- a/static/locales/ar.yaml
+++ b/static/locales/ar.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'الفيديوهات'
Shorts: القصيرة
Live: مباشر
+ Community: المجتمع
# Search Bar
Counts:
@@ -640,7 +641,6 @@ Channel:
This channel is age-restricted and currently cannot be viewed in FreeTube.: هذه
القناة مصنفة حسب العمر ولا يمكن عرضها حاليا في FreeTube.
Community:
- Community: المجتمع
This channel currently does not have any posts: لا تحتوي هذه القناة حاليا على
أي مشاركات
Hide Answers: إخفاء الأجوبة
diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml
index 3d78f37d0ca02..59c60d8f51058 100644
--- a/static/locales/bg.yaml
+++ b/static/locales/bg.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'видеа'
Shorts: Кратки видеа
Live: На живо
+ Community: Общност
Counts:
Video Count: 1 видео | {count} видеа
@@ -652,7 +653,6 @@ Channel:
Joined: Присъединен на
Location: Местоположение
Community:
- Community: Общност
This channel currently does not have any posts: В момента този канал няма никакви
публикации
votes: '{votes} гласа'
diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml
index b3376ca193fee..a37c3a55d8205 100644
--- a/static/locales/cs.yaml
+++ b/static/locales/cs.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videa'
Shorts: Shorts
Live: Živě
+ Community: Komunita
Counts:
Video Count: 1 video | {count} videí
@@ -642,7 +643,6 @@ Channel:
This channel does not allow searching: Tento kanál neumožňuje vyhledávání
Channel Tabs: Karty kanálů
Community:
- Community: Komunita
This channel currently does not have any posts: Tento kanál v současné době nemá
žádné příspěvky
Hide Answers: Skrýt odpovědi
diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml
index d08a712dc8c6e..28d23b15e24ce 100644
--- a/static/locales/de-DE.yaml
+++ b/static/locales/de-DE.yaml
@@ -34,6 +34,7 @@ Global:
Videos: Videos
Shorts: Kurzvideos
Live: Live
+ Community: Gemeinschaft
# Search Bar
Counts:
@@ -631,7 +632,6 @@ Channel:
Community:
This channel currently does not have any posts: Dieser Kanal enthält derzeit keine
Beiträge
- Community: Gemeinschaft
votes: '{votes} Stimmen'
Reveal Answers: Antworten aufzeigen
Hide Answers: Antworten verbergen
diff --git a/static/locales/el.yaml b/static/locales/el.yaml
index 79452b0f43a1f..5fb36823a1189 100644
--- a/static/locales/el.yaml
+++ b/static/locales/el.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'Βίντεο'
Shorts: Shorts
Live: Ζωντανά
+ Community: Κοινότητα
# Search Bar
Counts:
@@ -671,7 +672,6 @@ Channel:
Channel Tabs: Καρτέλες Καναλιών
This channel does not exist: Αυτό το κανάλι δεν υπάρχει
Community:
- Community: Κοινότητα
This channel currently does not have any posts: Αυτό το κανάλι προς το παρόν δεν
έχει αναρτήσεις
Reveal Answers: Εμφάνιση Απαντήσεων
diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml
index 1cb1c7add76f3..b1b6a720a6e2f 100644
--- a/static/locales/en-US.yaml
+++ b/static/locales/en-US.yaml
@@ -45,6 +45,7 @@ Global:
Videos: Videos
Shorts: Shorts
Live: Live
+ Community: Community
Counts:
Video Count: 1 video | {count} videos
Channel Count: 1 channel | {count} channels
@@ -104,8 +105,10 @@ Subscriptions:
Disabled Automatic Fetching: You have disabled automatic subscription fetching. Refresh subscriptions to see them here.
Empty Channels: Your subscribed channels currently does not have any videos.
'Getting Subscriptions. Please wait.': Getting Subscriptions. Please wait.
+ Empty Posts: Your subscribed channels currently do not have any posts.
Refresh Subscriptions: Refresh Subscriptions
Load More Videos: Load More Videos
+ Load More Posts: Load More Posts
Subscriptions Tabs: Subscriptions Tabs
All Subscription Tabs Hidden: 'All subscription tabs are hidden. To see content here, please unhide some tabs in the "{subsection}" section in "{settingsSection}".'
More: More
@@ -371,6 +374,7 @@ Settings:
Hide Subscriptions Videos: Hide Subscriptions Videos
Hide Subscriptions Shorts: Hide Subscriptions Shorts
Hide Subscriptions Live: Hide Subscriptions Live
+ Hide Subscriptions Community: Hide Subscriptions Community
Data Settings:
Data Settings: Data Settings
Select Import Type: Select Import Type
@@ -597,7 +601,6 @@ Channel:
Location: Location
Featured Channels: Featured Channels
Community:
- Community: Community
This channel currently does not have any posts: This channel currently does not have any posts
votes: '{votes} votes'
Reveal Answers: Reveal Answers
diff --git a/static/locales/en_GB.yaml b/static/locales/en_GB.yaml
index a6ea4c0487c51..de2eb881e685a 100644
--- a/static/locales/en_GB.yaml
+++ b/static/locales/en_GB.yaml
@@ -35,6 +35,7 @@ Global:
Videos: Videos
Shorts: Shorts
Live: Live
+ Community: Community
Version {versionNumber} is now available! Click for more details: 'Version {versionNumber}
is now available! Click for more details'
@@ -620,7 +621,6 @@ Channel:
Community:
This channel currently does not have any posts: This channel currently does not
have any posts
- Community: Community
Live:
This channel does not currently have any live streams: This channel does not currently
have any live streams
diff --git a/static/locales/eo.yaml b/static/locales/eo.yaml
index 1da4af4595ddb..fea50e47c224a 100644
--- a/static/locales/eo.yaml
+++ b/static/locales/eo.yaml
@@ -21,6 +21,9 @@ Close: 'Fermi'
Back: 'Reen'
Forward: 'Antaŭen'
+Globals:
+ Community: Komunumo
+
Version {versionNumber} is now available! Click for more details: 'Versio {versionNumber}
disponeblas nun! Alklaki por pli informoj.'
Download From Site: 'Elŝuti el retejo'
@@ -105,8 +108,6 @@ About:
Channel:
About:
Details: Detaloj
- Community:
- Community: Komunumo
Video: {}
More: Pli
Search Bar:
diff --git a/static/locales/es.yaml b/static/locales/es.yaml
index 4e80e44366b7f..a76d41f81010b 100644
--- a/static/locales/es.yaml
+++ b/static/locales/es.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'Vídeos'
Shorts: Cortos
Live: En directo
+ Community: Comunidad
# Search Bar
Counts:
@@ -654,7 +655,6 @@ Channel:
Community:
This channel currently does not have any posts: Este canal no tiene actualmente
ningún mensaje
- Community: Comunidad
Reveal Answers: Revelar las respuestas
Hide Answers: Ocultar las respuestas
votes: '{votes} votos'
diff --git a/static/locales/et.yaml b/static/locales/et.yaml
index e6c56ab7a9c0c..89230e769bfba 100644
--- a/static/locales/et.yaml
+++ b/static/locales/et.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videod'
Shorts: Lühivideod
Live: Otseeeter
+ Community: Kogukond
Counts:
Video Count: 1 video | {count} videot
@@ -596,7 +597,6 @@ Channel:
This channel does not currently have any live streams: Sellel kanalil pole hetkel
ühtegi otseeetrit
Community:
- Community: Kogukond
This channel currently does not have any posts: Sellel kanalil pole hetkel postitusi
Reveal Answers: Näita vastuseid
Hide Answers: Peida vastused
diff --git a/static/locales/fi.yaml b/static/locales/fi.yaml
index ddd7fc8abfb37..696bdbd95fdcf 100644
--- a/static/locales/fi.yaml
+++ b/static/locales/fi.yaml
@@ -33,14 +33,14 @@ Global:
Videos: 'Videot'
Shorts: Lyhyet
Live: Livenä
-
-# Search Bar
+ Community: Yhteisö
Counts:
Video Count: 1 video | {count} videota
Subscriber Count: 1 tilaaja | {count} tilaajaa
View Count: 1 näyttökerta | {count} näyttökertaa
Watching Count: 1 katselee | {count} katselee
Channel Count: 1 kanava | {count} kanavaa
+# Search Bar
Search / Go to URL: 'Etsi / Mene osoitteeseen'
# In Filter Button
Search Filters:
@@ -598,7 +598,6 @@ Channel:
Community:
This channel currently does not have any posts: Tällä kanavalla ei ole tällä hetkellä
mitään
- Community: Yhteisö
Reveal Answers: Näytä vastaukset
Hide Answers: Piilota vastaukset
votes: '{votes} ääntä'
diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml
index 95f3b86372cbc..2c27815a85d5d 100644
--- a/static/locales/fr-FR.yaml
+++ b/static/locales/fr-FR.yaml
@@ -34,6 +34,7 @@ Global:
Videos: 'Vidéos'
Shorts: Shorts
Live: En direct
+ Community: Communauté
# Search Bar
Counts:
@@ -642,7 +643,6 @@ Channel:
chaîne est limitée par l'âge et ne peut actuellement pas être visionnée dans FreeTube.
Channel Tabs: Onglets des chaînes
Community:
- Community: Communauté
This channel currently does not have any posts: Cette chaîne n'a actuellement
aucune publication
votes: '{votes} votes'
diff --git a/static/locales/gl.yaml b/static/locales/gl.yaml
index c00bd4f3437ee..6138c6079e9a8 100644
--- a/static/locales/gl.yaml
+++ b/static/locales/gl.yaml
@@ -34,6 +34,7 @@ Forward: 'Adiante'
# Anything shared among components / views should be put here
Global:
Videos: 'Vídeos'
+ Community: Comunidade
Version {versionNumber} is now available! Click for more details: 'A versión {versionNumber}
está dispoñible! Fai clic para veres máis detalles'
@@ -619,7 +620,6 @@ Channel:
canle ten unha limitación de idade e actualmente non se pode ver en FreeTube.
Channel Tabs: Pestanas das canles
Community:
- Community: Comunidade
This channel currently does not have any posts: Esta canle actualmente non ten
publicacións
Video:
diff --git a/static/locales/he.yaml b/static/locales/he.yaml
index 4862ecc37c01f..e196e16a59be3 100644
--- a/static/locales/he.yaml
+++ b/static/locales/he.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'סרטונים'
Shorts: Shorts
Live: חי
+ Community: קהילה
Counts:
Video Count: סרטון אחד | {count} סרטונים
@@ -640,7 +641,6 @@ Channel:
מוגבל לפי גיל וכרגע אי אפשר לצפות בו ב־FreeTube.
Community:
This channel currently does not have any posts: אין רשומות בערוץ הזה כרגע
- Community: קהילה
votes: '{votes} הצבעות'
Reveal Answers: חשיפת התשובות
Hide Answers: הסתרת התשובות
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index 82a5f8827f68f..61aed5d7d8633 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videa'
Shorts: Kratka videa
Live: Uživo
+ Community: Zajednica
# Search Bar
Counts:
@@ -659,7 +660,6 @@ Channel:
prijenosa uživo
Community:
This channel currently does not have any posts: Ovaj kanal trenutačno nema objava
- Community: Zajednica
Reveal Answers: Prikaži odgovore
Hide Answers: Sakrij odgovore
votes: '{votes} glasanja'
diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml
index cd14c4c4bca02..2fbc5f91e6b38 100644
--- a/static/locales/hu.yaml
+++ b/static/locales/hu.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'Videók'
Shorts: Rövidfilmek
Live: Élő
+ Community: Közösség
Counts:
Video Count: 1 videó | {count} videó
@@ -665,7 +666,6 @@ Channel:
Community:
This channel currently does not have any posts: Ezen a csatornán jelenleg nincsenek
bejegyzések
- Community: Közösség
Reveal Answers: Válaszok feltárása
Hide Answers: Válaszok elrejtése
votes: '{votes} szavazat'
diff --git a/static/locales/is.yaml b/static/locales/is.yaml
index d45739ed778e5..cda01771876fd 100644
--- a/static/locales/is.yaml
+++ b/static/locales/is.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'Myndskeið'
Shorts: Stuttmyndir
Live: Í beinni
+ Community: Samfélag
Counts:
Video Count: 1 myndskeið | {count} myndskeið
@@ -599,7 +600,6 @@ Channel:
This channel does not currently have any live streams: Þessi rás er í augnablikinu
ekki með nein bein streymi
Community:
- Community: Samfélag
This channel currently does not have any posts: Þessi rás er ekki með neinar færslur
Reveal Answers: Birta svör
Hide Answers: Fela svör
diff --git a/static/locales/it.yaml b/static/locales/it.yaml
index 109dbc9c93689..562bf3783631d 100644
--- a/static/locales/it.yaml
+++ b/static/locales/it.yaml
@@ -36,6 +36,7 @@ Global:
Videos: 'Video'
Shorts: Video brevi
Live: Dal vivo
+ Community: Comunità
# Search Bar
Counts:
@@ -619,7 +620,6 @@ Channel:
Community:
This channel currently does not have any posts: Questo canale attualmente non
ha alcun post
- Community: Comunità
votes: '{votes} voti'
Reveal Answers: Rivela le risposte
Hide Answers: Nascondi le risposte
diff --git a/static/locales/ja.yaml b/static/locales/ja.yaml
index 7a9c72271eb46..0ce15c2505aca 100644
--- a/static/locales/ja.yaml
+++ b/static/locales/ja.yaml
@@ -33,6 +33,7 @@ Global:
Videos: '動画'
Shorts: ショート動画
Live: ライブ配信
+ Community: コミュニティ
# Search Bar
Counts:
@@ -555,7 +556,6 @@ Channel:
Removed subscription from {count} other channel(s): ほかの {count} チャンネルから登録を削除しました
Community:
This channel currently does not have any posts: このチャンネルには現在投稿がありません
- Community: コミュニティ
votes: '{votes} 投票'
Reveal Answers: 回答を表示
Hide Answers: 回答の非表示
diff --git a/static/locales/nb_NO.yaml b/static/locales/nb_NO.yaml
index 11aea29f5e5e6..06f3b86aa4417 100644
--- a/static/locales/nb_NO.yaml
+++ b/static/locales/nb_NO.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videoer'
Shorts: Kortvideoer
Live: Direkte
+ Community: Gemenskap
# Search Bar
Search / Go to URL: 'Søk/gå til nettadresse'
@@ -558,7 +559,6 @@ Channel:
kanalen er aldersbegrenset og kan derfor ikke vises i FreeTube.
Channel Tabs: Kanalfaner
Community:
- Community: Gemenskap
This channel currently does not have any posts: Denne kanalen har ingen oppføringer
Shorts:
This channel does not currently have any shorts: Denne kanalen har ingen kortvideoer
diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml
index a49b182a04c64..ddd80fba6c010 100644
--- a/static/locales/pl.yaml
+++ b/static/locales/pl.yaml
@@ -34,6 +34,7 @@ Global:
Videos: 'Filmy'
Shorts: Filmy Short
Live: Transmisje
+ Community: Społeczność
# Search Bar
Counts:
@@ -626,7 +627,6 @@ Channel:
Community:
This channel currently does not have any posts: Ten kanał nie ma obecnie żadnych
publikacji
- Community: Społeczność
votes: '{votes} głosów'
Reveal Answers: Pokaż odpowiedzi
Hide Answers: Schowaj odpowiedzi
diff --git a/static/locales/pt-BR.yaml b/static/locales/pt-BR.yaml
index 0c9734ed106aa..2c035bb5d81eb 100644
--- a/static/locales/pt-BR.yaml
+++ b/static/locales/pt-BR.yaml
@@ -34,6 +34,7 @@ Global:
Videos: 'Vídeos'
Shorts: Shorts
Live: Ao vivo
+ Community: Comunidade
# Search Bar
Counts:
@@ -612,7 +613,6 @@ Channel:
This channel is age-restricted and currently cannot be viewed in FreeTube.: Este
canal tem restrição de idade e atualmente não pode ser visualizado no FreeTube.
Community:
- Community: Comunidade
This channel currently does not have any posts: Neste momento, este canal não
tem publicações
votes: '{votes} Votos'
diff --git a/static/locales/pt-PT.yaml b/static/locales/pt-PT.yaml
index 1088aa4d77615..cbdedd6652243 100644
--- a/static/locales/pt-PT.yaml
+++ b/static/locales/pt-PT.yaml
@@ -36,6 +36,7 @@ Global:
Videos: Vídeos
Shorts: Curtas
Live: Em directo
+ Community: Comunidade
Version {versionNumber} is now available! Click for more details: A versão {versionNumber}
já está disponível! Clique para mais detalhes
@@ -594,7 +595,6 @@ Channel:
canal tem restrição de idade e atualmente não pode ser visualizado no Free Tube.
Channel Tabs: Separadores de canais
Community:
- Community: Comunidade
This channel currently does not have any posts: Neste momento, este canal não
tem publicações
Live:
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index 9dac090105a3e..7314b67d53168 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Vídeos'
Shorts: Curtas
Live: Em directo
+ Community: Comunidade
Counts:
Channel Count: 1 canal | {count} canais
diff --git a/static/locales/ro.yaml b/static/locales/ro.yaml
index 35fe926cdfd00..74fcdd752fb30 100644
--- a/static/locales/ro.yaml
+++ b/static/locales/ro.yaml
@@ -33,9 +33,9 @@ Forward: 'Înainte'
# Anything shared among components / views should be put here
Global:
Videos: 'Videoclipuri'
-
Shorts: Shorts
Live: Live
+ Community: Comunitate
Counts:
Video Count: 1 videoclip | {count} videoclipuri
Subscriber Count: 1 abonat | {count} de abonați
diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml
index 4afa622b383e6..5c2c9fbce0b9e 100644
--- a/static/locales/ru.yaml
+++ b/static/locales/ru.yaml
@@ -33,6 +33,7 @@ Global:
Videos: 'Видео'
Shorts: Короткие видео
Live: Трансляции
+ Community: Сообщество
# Search Bar
Search / Go to URL: 'Поиск / Перейти по адресу'
@@ -598,7 +599,6 @@ Channel:
This channel is age-restricted and currently cannot be viewed in FreeTube.: Этот
канал ограничен по возрасту и в настоящее время не может быть просмотрен во FreeTube.
Community:
- Community: Сообщество
This channel currently does not have any posts: На этом канале в настоящее время
нет никаких записей
votes: 'Голосов: {votes}'
diff --git a/static/locales/sv.yaml b/static/locales/sv.yaml
index 1a0c6f3191d97..4ede0fe71498e 100644
--- a/static/locales/sv.yaml
+++ b/static/locales/sv.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videor'
Shorts: Shorts
Live: Live
+ Community: Gemenskap
Version {versionNumber} is now available! Click for more details: 'Versionen {versionNumber}
är nu tillgänglig! Klicka för mer detaljer'
@@ -636,7 +637,6 @@ Channel:
kanalen är ålderbegränsad och kan inte ses i FreeTube.
Channel Tabs: Kanalflikar
Community:
- Community: Gemenskap
This channel currently does not have any posts: Denna kanal har för närvarande
inga inlägg
votes: '{votes} röster'
diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml
index 4faee2794a91a..92c6a80278fee 100644
--- a/static/locales/tr.yaml
+++ b/static/locales/tr.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Videolar'
Shorts: Kısa Videolar
Live: Canlı
+ Community: Topluluk
Counts:
Video Count: 1 video | {count} video
@@ -662,7 +663,6 @@ Channel:
This channel does not allow searching: Bu kanal aramaya izin vermiyor
This channel does not exist: Bu kanal mevcut değil
Community:
- Community: Topluluk
This channel currently does not have any posts: Bu kanalda şu anda herhangi bir
gönderi yok
votes: '{votes} oy'
diff --git a/static/locales/uk.yaml b/static/locales/uk.yaml
index e96a8fd541f1c..82e85b9d7c702 100644
--- a/static/locales/uk.yaml
+++ b/static/locales/uk.yaml
@@ -35,6 +35,7 @@ Global:
Videos: 'Відео'
Shorts: Shorts
Live: Наживо
+ Community: Спільнота
Counts:
Video Count: 1 відео | {count} відео
@@ -593,7 +594,6 @@ Channel:
канал має вікові обмеження і наразі не може бути переглянутий на FreeTube.
Channel Tabs: Вкладки каналів
Community:
- Community: Спільнота
This channel currently does not have any posts: Зараз на цьому каналі немає публікацій
votes: 'Голосів: {votes}'
Reveal Answers: Розгорнути відповіді
diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml
index 3961e4ebce5d7..8f2308c3035ab 100644
--- a/static/locales/zh-CN.yaml
+++ b/static/locales/zh-CN.yaml
@@ -33,6 +33,7 @@ Global:
Videos: '视频'
Shorts: 短视频
Live: 直播
+ Community: 社区
# Search Bar
Counts:
@@ -555,7 +556,6 @@ Channel:
This channel does not exist: 此频道不存在
This channel does not allow searching: 此频道不允许搜索
Community:
- Community: 社区
This channel currently does not have any posts: 此频道当前没有任何帖子
votes: '{votes} 票'
Reveal Answers: 揭晓答案
diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml
index ae1d40df2b800..a8400f83dd5fe 100644
--- a/static/locales/zh-TW.yaml
+++ b/static/locales/zh-TW.yaml
@@ -33,6 +33,7 @@ Global:
Videos: '影片'
Shorts: 短片
Live: 直播
+ Community: 社群
# Search Bar
Counts:
@@ -565,7 +566,6 @@ Channel:
This channel does not exist: 此頻道不存在
This channel does not allow searching: 此頻道不允許搜尋
Community:
- Community: 社群
This channel currently does not have any posts: 此頻道目前沒有任何貼文
votes: '{votes} 票'
Reveal Answers: 揭露答案
From dc05c278d5d6942b733444e080ae508c5d3f975e Mon Sep 17 00:00:00 2001
From: Eric
Date: Sat, 23 Sep 2023 00:37:31 +0000
Subject: [PATCH 132/176] Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
---
static/locales/zh-CN.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml
index 8f2308c3035ab..ae9aee5ed6db6 100644
--- a/static/locales/zh-CN.yaml
+++ b/static/locales/zh-CN.yaml
@@ -96,6 +96,8 @@ Subscriptions:
Subscriptions Tabs: 订阅标签页
All Subscription Tabs Hidden: 所有的订阅标签页均被隐藏。要在此查看内容,请在 "{subsection}" 部分取消隐藏某些标签页,此部分位于
"{settingsSection}"。
+ Load More Posts: 加载更多帖子
+ Empty Posts: 你已订阅的频道当前没有任何帖子。
Trending:
Trending: '热门'
Trending Tabs: 流行标签
@@ -401,6 +403,7 @@ Settings:
Hide Subscriptions Live: 隐藏订阅直播
Hide Profile Pictures in Comments: 在评论中隐藏个人资料图片
Blur Thumbnails: 模糊缩略图
+ Hide Subscriptions Community: 隐藏订阅社区
The app needs to restart for changes to take effect. Restart and apply change?: 应用需要重启让修改生效。重启以应用修改?
Proxy Settings:
Proxy Protocol: 代理协议
From f4ce21b9a668a3a264896c050339ec819e48d54b Mon Sep 17 00:00:00 2001
From: Massimo Pissarello
Date: Sat, 23 Sep 2023 02:34:17 +0000
Subject: [PATCH 133/176] Translated using Weblate (Italian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
---
static/locales/it.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/it.yaml b/static/locales/it.yaml
index 562bf3783631d..6bad50315caa8 100644
--- a/static/locales/it.yaml
+++ b/static/locales/it.yaml
@@ -103,6 +103,8 @@ Subscriptions:
Subscriptions Tabs: Schede iscrizioni
All Subscription Tabs Hidden: Tutte le schede di iscrizione sono nascoste. Per vedere
i contenuti qui, scopri le schede nella sezione "{subsection}" in "{settingsSection}".
+ Load More Posts: Carica più post
+ Empty Posts: I canali a cui sei iscritto attualmente non hanno post.
Trending:
Trending: 'Tendenze'
Music: Musica
@@ -444,6 +446,7 @@ Settings:
Hide Subscriptions Shorts: Nascondi le iscrizioni ai video brevi
Hide Profile Pictures in Comments: Nascondi le immagini del profilo nei commenti
Blur Thumbnails: Miniature sfocate
+ Hide Subscriptions Community: Nascondi comunità di iscritti
The app needs to restart for changes to take effect. Restart and apply change?: L'app
deve essere riavviata affinché le modifiche abbiano effetto. Riavviare e applicare
la modifica?
From 63ab86ed5c9ebdfcbf7c23366713fe709b19702e Mon Sep 17 00:00:00 2001
From: Rex_sa
Date: Sat, 23 Sep 2023 01:24:02 +0000
Subject: [PATCH 134/176] Translated using Weblate (Arabic)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ar/
---
static/locales/ar.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/ar.yaml b/static/locales/ar.yaml
index d2442aa0c46ce..b68238c1772f4 100644
--- a/static/locales/ar.yaml
+++ b/static/locales/ar.yaml
@@ -99,6 +99,8 @@ Subscriptions:
All Subscription Tabs Hidden: جميع علامات تبويب الاشتراك مخفية. لمشاهدة المحتوى
هنا ، يرجى إظهار بعض علامات التبويب في قسم "{subection}" في "{settingsSection}".
Subscriptions Tabs: تبويب الاشتراكات
+ Load More Posts: تحميل المزيد من المشاركات
+ Empty Posts: القنوات التي اشتركت بها حاليا لا تحتوي على أي مشاركات.
Trending:
Trending: 'المحتوى الرائج'
Trending Tabs: علامات التبويب الشائعة
@@ -430,6 +432,7 @@ Settings:
Hide Subscriptions Videos: إخفاء مقاطع فيديو الاشتراكات
Hide Profile Pictures in Comments: إخفاء صور الملف الشخصي في التعليقات
Blur Thumbnails: اخفاء الصور المصغرة
+ Hide Subscriptions Community: إخفاء مجتمع الاشتراكات
The app needs to restart for changes to take effect. Restart and apply change?: البرنامج
يحتاج لإعادة التشغيل كي يسري مفعول التغييرات. هل تريد إعادة التشغيل و تطبيق التغييرات؟
Proxy Settings:
From b21423803a87eef59511c4f180c4faa31094d7c2 Mon Sep 17 00:00:00 2001
From: ovari
Date: Sat, 23 Sep 2023 00:41:09 +0000
Subject: [PATCH 135/176] Translated using Weblate (Hungarian)
Currently translated at 99.8% (721 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
---
static/locales/hu.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml
index 2fbc5f91e6b38..27a417e0d3f77 100644
--- a/static/locales/hu.yaml
+++ b/static/locales/hu.yaml
@@ -110,6 +110,8 @@ Subscriptions:
tartalom megtekintéséhez, kérjük, jelenítse meg néhány lap elrejtését a(z) „{settingsSection}”
„{subsection}” szakaszában.
Subscriptions Tabs: Feliratkozások lapok
+ Load More Posts: További bejegyzések betöltése
+ Empty Posts: A feliratkozott csatornáidnak jelenleg nincsenek bejegyzései.
Trending:
Trending: 'Népszerű'
Trending Tabs: Népszerű lapok
@@ -445,6 +447,7 @@ Settings:
Hide Subscriptions Live: Élő feliratkozások elrejtése
Blur Thumbnails: Indexkép elhomályosítása
Hide Profile Pictures in Comments: Profilképek elrejtése a megjegyzésekben
+ Hide Subscriptions Community: Közösségi feliratkozások elrejtése
The app needs to restart for changes to take effect. Restart and apply change?: Az
alkalmazásnak újra kell indulnia, hogy a változtatások életbe lépjenek. Indítsa
újra és alkalmazza a módosítást?
From 2cefbdca098558eae9b2667f78a123f3205daed6 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Sat, 23 Sep 2023 04:44:49 +0000
Subject: [PATCH 136/176] Translated using Weblate (Hebrew)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/he/
---
static/locales/he.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/he.yaml b/static/locales/he.yaml
index e196e16a59be3..305c6b7a172e1 100644
--- a/static/locales/he.yaml
+++ b/static/locales/he.yaml
@@ -105,6 +105,8 @@ Subscriptions:
All Subscription Tabs Hidden: כל לשוניות המינויים מוסתרות. כדי לראות את התוכן כאן,
נא לבטל את הסתרתן של כמה מהלשוניות תחת הסעיף „{subsection}” שב„{settingsSection}”.
Subscriptions Tabs: לשוניות מינויים
+ Load More Posts: טעינת רשומות נוספות
+ Empty Posts: בערוצים אליהם נרשמת אין כרגע רשומות.
Trending:
Trending: 'הסרטונים החמים'
Trending Tabs: לשוניות מובילים
@@ -425,6 +427,7 @@ Settings:
Hide Subscriptions Videos: הסתרת סרטוני מינוי
Blur Thumbnails: טשטוש התמונות הממוזערות
Hide Profile Pictures in Comments: הסתרת תמונות הפרופיל בהערות
+ Hide Subscriptions Community: הסתרת קהילת המינויים
The app needs to restart for changes to take effect. Restart and apply change?: צריך
להפעיל את היישומון מחדש כדי שהשינויים ייכנסו לתוקף. להפעיל מחדש ולהחיל את השינוי?
Proxy Settings:
From b84a3c70c8ac5e148355a88cd3012a7b66a1d362 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuz=20Ersen?=
Date: Sat, 23 Sep 2023 09:50:26 +0000
Subject: [PATCH 137/176] Translated using Weblate (Turkish)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
---
static/locales/tr.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml
index 92c6a80278fee..cc915100fbf21 100644
--- a/static/locales/tr.yaml
+++ b/static/locales/tr.yaml
@@ -106,6 +106,8 @@ Subscriptions:
All Subscription Tabs Hidden: Tüm abonelik sekmeleri gizlidir. Buradaki içeriği
görmek için lütfen "{settingsSection}" içindeki "{subsection}" bölümündeki bazı
sekmelerin gizliliğini kaldırın.
+ Load More Posts: Daha Fazla Gönderi Yükle
+ Empty Posts: Abone olduğunuz kanallarda şu anda herhangi bir gönderi yok.
Trending:
Trending: 'Öne Çıkanlar'
Trending Tabs: Öne Çıkanlar Sekmeleri
@@ -439,6 +441,7 @@ Settings:
Hide Subscriptions Live: Abonelik Canlı Yayınlarını Gizle
Hide Profile Pictures in Comments: Yorumlardaki Profil Resimlerini Gizle
Blur Thumbnails: Küçük Resimleri Bulanıklaştır
+ Hide Subscriptions Community: Abonelik Topluluğunu Gizle
The app needs to restart for changes to take effect. Restart and apply change?: Değişikliklerin
etkili olması için uygulamanın yeniden başlatılması gerekiyor. Yeniden başlatılsın
ve değişiklikler uygulansın mı?
From 42fa2836d036a085ea3392b74c7717d38316e32c Mon Sep 17 00:00:00 2001
From: Fjuro
Date: Sat, 23 Sep 2023 08:07:10 +0000
Subject: [PATCH 138/176] Translated using Weblate (Czech)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
---
static/locales/cs.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml
index a37c3a55d8205..c51306503a815 100644
--- a/static/locales/cs.yaml
+++ b/static/locales/cs.yaml
@@ -107,6 +107,8 @@ Subscriptions:
All Subscription Tabs Hidden: Všechny karty předplatného jsou skryté. Chcete-li
zde zobrazit obsah, zrušte prosím skrytí některých záložek v sekci „{subsection}“
v „{settingsSection}“.
+ Load More Posts: Načíst další příspěvky
+ Empty Posts: Vaše odebírané kanály momentálně nemají žádné příspěvky.
Trending:
Trending: 'Trendy'
Trending Tabs: Tabulka trendů
@@ -363,6 +365,7 @@ Settings:
Hide Subscriptions Live: Skrýt živá vysílání odběrů
Hide Profile Pictures in Comments: Skrýt profilové obrázky v komentářích
Blur Thumbnails: Rozmazat náhledy
+ Hide Subscriptions Community: Skrýt komunitu odběratelů
Data Settings:
Data Settings: 'Nastavení dat'
Select Import Type: 'Vybrat typ importu'
From 74f5cd6b8d2019e1941b93134f8cb48c2c08a155 Mon Sep 17 00:00:00 2001
From: gallegonovato
Date: Sat, 23 Sep 2023 11:07:17 +0000
Subject: [PATCH 139/176] Translated using Weblate (Spanish)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
---
static/locales/es.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/es.yaml b/static/locales/es.yaml
index a76d41f81010b..78ae4298cdc2e 100644
--- a/static/locales/es.yaml
+++ b/static/locales/es.yaml
@@ -102,6 +102,8 @@ Subscriptions:
All Subscription Tabs Hidden: Todas las pestañas de las suscripciones están ocultas.
Para ver el contenido, por favor, desoculta algunas pestañas en la sección «{subsection}»
en «{settingsSection}».
+ Load More Posts: Cargar más mensajes
+ Empty Posts: Tus canales suscritos no tienen actualmente ninguna entrada.
Trending:
Trending: 'Tendencias'
Default: Predeterminado
@@ -437,6 +439,7 @@ Settings:
Hide Subscriptions Live: Ocultar las suscripciones de los directos
Hide Profile Pictures in Comments: Ocultar las fotos del perfil en los comentarios
Blur Thumbnails: Difuminar las miniaturas
+ Hide Subscriptions Community: Ocultar las suscripciones a la comunidad
The app needs to restart for changes to take effect. Restart and apply change?: ¿Quieres
reiniciar FreeTube ahora para aplicar los cambios?
Proxy Settings:
From ed297256a81f4f6a6011937a9d9e5f9e4c19a96f Mon Sep 17 00:00:00 2001
From: Ihor Hordiichuk
Date: Sat, 23 Sep 2023 13:03:57 +0000
Subject: [PATCH 140/176] Translated using Weblate (Ukrainian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/uk/
---
static/locales/uk.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/uk.yaml b/static/locales/uk.yaml
index 82e85b9d7c702..546aec789b11a 100644
--- a/static/locales/uk.yaml
+++ b/static/locales/uk.yaml
@@ -106,6 +106,8 @@ Subscriptions:
Subscriptions Tabs: Вкладки підписок
All Subscription Tabs Hidden: Усі вкладки підписки сховані. Щоб побачити вміст,
будь ласка, відкрийте деякі вкладки в розділі "{subsection}" в "{settingsSection}".
+ Load More Posts: Завантажити ще дописи
+ Empty Posts: На каналах, на які ви підписані, наразі немає дописів.
Trending:
Trending: 'Популярне'
Trending Tabs: Популярні вкладки
@@ -365,6 +367,7 @@ Settings:
Hide Subscriptions Live: Сховати трансляції з підписок
Hide Profile Pictures in Comments: Сховати зображення профілю в коментарях
Blur Thumbnails: Розмиті мініатюри
+ Hide Subscriptions Community: Сховати спільноту підписників
Data Settings:
Data Settings: 'Налаштування даних'
Select Import Type: 'Оберіть тип імпорту'
From 825aa4e3327106d15606daafe8e3f32946f6e812 Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Sun, 24 Sep 2023 03:11:17 +0800
Subject: [PATCH 141/176] ! Fix in sub view, restoring last tab is bugged when
visible tabs do not include tab to be restored (#4064)
---
src/renderer/views/Subscriptions/Subscriptions.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/renderer/views/Subscriptions/Subscriptions.js b/src/renderer/views/Subscriptions/Subscriptions.js
index 8c5749e90af4c..b6bb7244afb61 100644
--- a/src/renderer/views/Subscriptions/Subscriptions.js
+++ b/src/renderer/views/Subscriptions/Subscriptions.js
@@ -111,7 +111,8 @@ export default defineComponent({
if (this.visibleTabs.includes(tab)) {
this.currentTab = tab
} else {
- this.currentTab = null
+ // First visible tab or no tab
+ this.currentTab = this.visibleTabs.length > 0 ? this.visibleTabs[0] : null
}
},
From 2cf90c0ef76ac44b1fef6c6f84c42ce70554c091 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Grzegorz=20W=C3=B3jcicki?=
Date: Sun, 24 Sep 2023 00:49:18 +0000
Subject: [PATCH 142/176] Translated using Weblate (Polish)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pl/
---
static/locales/pl.yaml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml
index ddd80fba6c010..06ba869073bd0 100644
--- a/static/locales/pl.yaml
+++ b/static/locales/pl.yaml
@@ -101,6 +101,8 @@ Subscriptions:
All Subscription Tabs Hidden: Wszystkie karty subskrypcji są pochowane. Aby je zobaczyć,
proszę odznaczyć ich ukrycie w podgrupie „{subsection}” grupy „{settingsSection}”.
Subscriptions Tabs: Karty subskrypcji
+ Load More Posts: Załaduj więcej wpisów
+ Empty Posts: Zasubskrybowane przez Ciebie kanały nie mają żadnych wpisów.
Trending:
Trending: 'Na czasie'
Trending Tabs: Karty „Na czasie”
@@ -443,6 +445,7 @@ Settings:
Hide Subscriptions Live: Schowaj transmisje live z subskrypcji
Hide Profile Pictures in Comments: Nie pokazuj zdjęć profilowych w komentarzach
Blur Thumbnails: Rozmazuj miniaturki
+ Hide Subscriptions Community: Schowaj „Społeczność” kanałów
The app needs to restart for changes to take effect. Restart and apply change?: Aplikacja
musi zostać ponownie uruchomiona, aby zmiany zostały wprowadzone. Uruchomić ponownie
i zastosować zmiany?
@@ -626,7 +629,7 @@ Channel:
This channel does not allow searching: Ten kanał nie zezwala na przeszukiwanie
Community:
This channel currently does not have any posts: Ten kanał nie ma obecnie żadnych
- publikacji
+ wpisów
votes: '{votes} głosów'
Reveal Answers: Pokaż odpowiedzi
Hide Answers: Schowaj odpowiedzi
From b8d1a43886a23d3876a29b526f67da9e687ade2c Mon Sep 17 00:00:00 2001
From: Carlos Luiz
Date: Sun, 24 Sep 2023 01:22:23 +0000
Subject: [PATCH 143/176] Translated using Weblate (Portuguese)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt/
---
static/locales/pt.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index 7314b67d53168..60c869708f0e5 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -107,6 +107,8 @@ Subscriptions:
All Subscription Tabs Hidden: Todos os separadores de subscrição estão ocultos.
Para ver o conteúdo aqui, desoculte alguns separadores na secção "{subsection}"
em "{settingsSection}".
+ Load More Posts: Carregar mais posts
+ Empty Posts: Os canais inscritos atualmente não tem nenhum post.
Trending:
Trending: 'Tendências'
Trending Tabs: Separador de tendências
@@ -468,6 +470,7 @@ Settings:
Hide Subscriptions Live: Ocultar subscrições de vídeos em direto
Hide Profile Pictures in Comments: Ocultar imagens de perfil nos comentários
Blur Thumbnails: Desfocar miniaturas
+ Hide Subscriptions Community: Ocultar comunidade inscritas
External Player Settings:
Custom External Player Arguments: Argumentos do reprodutor externo personalizado
Custom External Player Executable: Executável de reprodutor externo personalizado
From 4afb2301363b3e0df77732799d6dcd166c8cdbf7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?=
Date: Sun, 24 Sep 2023 10:41:48 +0000
Subject: [PATCH 144/176] Translated using Weblate (Icelandic)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/is/
---
static/locales/is.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/static/locales/is.yaml b/static/locales/is.yaml
index cda01771876fd..db3a6bbfadcdb 100644
--- a/static/locales/is.yaml
+++ b/static/locales/is.yaml
@@ -41,6 +41,9 @@ Global:
Counts:
Video Count: 1 myndskeið | {count} myndskeið
Channel Count: 1 rás | {count} rásir
+ Subscriber Count: 1 áskrifandi | {count} áskrifendur
+ View Count: 1 áhorf | {count} áhorf
+ Watching Count: 1 að horfa | {count} að horfa
Version {versionNumber} is now available! Click for more details: 'Útgáfa {versionNumber}
er tiltæk! Smelltu til að skoða nánar'
Download From Site: 'Sækja af vefsvæði'
@@ -106,6 +109,8 @@ Subscriptions:
Subscriptions Tabs: Áskriftaflipar
All Subscription Tabs Hidden: Allir áskriftaflipar eru faldir. Til að sjá efni hér,
skaltu gera einhverja flipa sýnilega í "{subsection}" hlutanum í "{settingsSection}".
+ Load More Posts: Hlaða inn fleiri færslum
+ Empty Posts: Rásirnar sem þú ert áskrifandi að eru ekki með neinar færslur.
More: 'Meira'
Trending:
Trending: 'Í umræðunni'
@@ -364,6 +369,7 @@ Settings:
Hide Subscriptions Videos: Fela myndskeið áskrifta
Blur Thumbnails: Móska smámyndir
Hide Profile Pictures in Comments: Fela auðkennismyndir í athugasemdum
+ Hide Subscriptions Community: Fela samfélag áskrifenda
Data Settings:
Data Settings: 'Stillingar gagna'
Select Import Type: 'Veldu tegund innflutnings'
From 41e96fa3e733fb2660ff0834f031303b4dc1c6cb Mon Sep 17 00:00:00 2001
From: The Cats
Date: Sun, 24 Sep 2023 15:28:04 +0000
Subject: [PATCH 145/176] Translated using Weblate (French)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fr/
---
static/locales/fr-FR.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml
index 2c27815a85d5d..8e296e0887da6 100644
--- a/static/locales/fr-FR.yaml
+++ b/static/locales/fr-FR.yaml
@@ -105,6 +105,8 @@ Subscriptions:
All Subscription Tabs Hidden: Tous les onglets d'abonnement sont cachés. Pour voir
le contenu ici, veuillez désactiver certains onglets dans la section « {subsection} »
dans « {settingsSection} ».
+ Load More Posts: Charger plus de billets
+ Empty Posts: Les chaînes abonnées ne contiennent actuellement aucun billet.
Trending:
Trending: 'Tendance'
Trending Tabs: Onglets des Tendances
@@ -456,6 +458,7 @@ Settings:
Hide Subscriptions Live: Masquer les diffusions en direct des abonnements
Blur Thumbnails: Flouter les miniatures
Hide Profile Pictures in Comments: Cacher les photos de profil dans les commentaires
+ Hide Subscriptions Community: Occulter les communautés abonnées
The app needs to restart for changes to take effect. Restart and apply change?: L'application
doit être redémarrée pour que les changements prennent effet. Redémarrer et appliquer
les changements ?
From 3e229ddbcc10e980c46d4f0207b3ff5b11557662 Mon Sep 17 00:00:00 2001
From: The Cats
Date: Sun, 24 Sep 2023 15:25:33 +0000
Subject: [PATCH 146/176] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
---
static/locales/pt-BR.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/pt-BR.yaml b/static/locales/pt-BR.yaml
index 2c035bb5d81eb..6e17bb6e2c618 100644
--- a/static/locales/pt-BR.yaml
+++ b/static/locales/pt-BR.yaml
@@ -100,6 +100,8 @@ Subscriptions:
Subscriptions Tabs: Abas de inscrição
All Subscription Tabs Hidden: Todos as abas de inscrição estão ocultas. Para ver
o conteúdo aqui, exiba algumas abas na seção "{subsection}" em "{settingsSection}".
+ Load More Posts: Carregar mais posts
+ Empty Posts: No momento, seus canais inscritos não têm nenhum post.
Trending:
Trending: 'Em alta'
Trending Tabs: Abas de Tendências
@@ -442,6 +444,7 @@ Settings:
Hide Subscriptions Live: Ocultar inscrições de transmissões ao vivo
Hide Profile Pictures in Comments: Esconder imagens do perfil nos comentários
Blur Thumbnails: Desfocar Miniaturas
+ Hide Subscriptions Community: Ocultar comunidade inscritas
The app needs to restart for changes to take effect. Restart and apply change?: O
aplicativo necessita reiniciar para as mudanças fazerem efeito. Reiniciar e aplicar
mudança?
From 96615c7005f452b8ea29de34413676f13fd76f0b Mon Sep 17 00:00:00 2001
From: Ettore Atalan
Date: Sun, 24 Sep 2023 18:56:42 +0000
Subject: [PATCH 147/176] Translated using Weblate (German)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/de/
---
static/locales/de-DE.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml
index 28d23b15e24ce..9360faf605e4e 100644
--- a/static/locales/de-DE.yaml
+++ b/static/locales/de-DE.yaml
@@ -103,6 +103,8 @@ Subscriptions:
All Subscription Tabs Hidden: Alle Registerkarten für Abonnements sind ausgeblendet.
Um den Inhalt hier zu sehen, blenden Sie bitte einige Registerkarten im Abschnitt
„{subsection}“ in „{settingsSection}“ ein.
+ Load More Posts: Mehr Beiträge laden
+ Empty Posts: Deine abonnierten Kanäle haben derzeit keine Beiträge.
Trending:
Trending: Trends
Trending Tabs: Trendtabs
@@ -445,6 +447,7 @@ Settings:
Hide Subscriptions Live: Live der Abonnements ausblenden
Blur Thumbnails: Vorschaubilder unscharf machen
Hide Profile Pictures in Comments: Profilbilder in den Kommentaren verbergen
+ Hide Subscriptions Community: Abonnementsgemeinschaft ausblenden
The app needs to restart for changes to take effect. Restart and apply change?: Um
die Änderungen anzuwenden muss die Anwendung neustarten. Jetzt neustarten und
Änderungen aktivieren?
From a41597c43c096b0e67d82cd46dddec9fc6a6b8f1 Mon Sep 17 00:00:00 2001
From: Retrial
Date: Sun, 24 Sep 2023 22:17:14 +0000
Subject: [PATCH 148/176] Translated using Weblate (Greek)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/el/
---
static/locales/el.yaml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/static/locales/el.yaml b/static/locales/el.yaml
index 5fb36823a1189..7601f02a4fee8 100644
--- a/static/locales/el.yaml
+++ b/static/locales/el.yaml
@@ -42,6 +42,9 @@ Global:
Counts:
Video Count: 1 βίντεο | {count} βίντεο
Channel Count: 1 κανάλι | {count} κανάλια
+ Subscriber Count: 1 συνδρομητής | {count} συνδρομητές
+ View Count: 1 προβολή | {count} προβολές
+ Watching Count: 1 παρακολούθηση | {count} παρακολουθούν
Search / Go to URL: 'Αναζήτηση/Μετάβαση σε URL'
# In Filter Button
Search Filters:
@@ -101,6 +104,8 @@ Subscriptions:
All Subscription Tabs Hidden: Όλες οι καρτέλες Συνδρομών είναι κρυμμένες. Για να
δείτε περιεχόμενο εδώ, εμφανίστε ορισμένες καρτέλες στην ενότητα "{subsection}"
στο "{settingsSection}".
+ Load More Posts: Φόρτωση Περισσότερων Αναρτήσεων
+ Empty Posts: Τα εγγεγραμμένα κανάλια σας προς το παρόν δεν έχουν αναρτήσεις.
Trending:
Trending: 'Τάσεις'
Gaming: Παιχνίδια
@@ -444,6 +449,7 @@ Settings:
Hide Subscriptions Live: Απόκρυψη Live Συνδρομών
Blur Thumbnails: Θάμπωμα Μικρογραφιών
Hide Profile Pictures in Comments: Απόκρυψη Εικόνων Προφίλ στα Σχόλια
+ Hide Subscriptions Community: Απόκρυψη Συνδρομών Κοινότητας
The app needs to restart for changes to take effect. Restart and apply change?: Η
εφαρμογή πρέπει να κάνει επανεκκίνηση για να εφαρμοστούν οι αλλαγές. Επανεκκίνηση
και εφαρμογή αλλαγών;
@@ -912,6 +918,7 @@ Comments:
Member: Μέλος
Hearted: Αγαπημένο
View {replyCount} replies: Προβολή {replyCount} απαντήσεων
+ Subscribed: Εγγεγραμμένος
Up Next: 'Επόμενο'
# Toast Messages
From ea28cc747d63ec2c139a85c71a80d4127d1298e4 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Mon, 25 Sep 2023 01:52:24 +0000
Subject: [PATCH 149/176] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/
---
static/locales/zh-TW.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml
index a8400f83dd5fe..392403a2b4ae4 100644
--- a/static/locales/zh-TW.yaml
+++ b/static/locales/zh-TW.yaml
@@ -95,6 +95,8 @@ Subscriptions:
Empty Channels: 您訂閱的頻道目前沒有任何影片。
Subscriptions Tabs: 訂閱分頁
All Subscription Tabs Hidden: 所有訂閱分頁均已隱藏。要檢視此處的內容,請取消隱藏「{settingsSection}」中「{subsection}」區塊中的一些分頁。
+ Load More Posts: 載入更多影片
+ Empty Posts: 您訂閱的頻道目前沒有任何影片。
Trending:
Trending: '發燒影片'
Trending Tabs: 熱門分頁
@@ -402,6 +404,7 @@ Settings:
Hide Subscriptions Live: 隱藏訂閱直播
Hide Profile Pictures in Comments: 在留言中隱藏個人檔案圖片
Blur Thumbnails: 模糊縮圖
+ Hide Subscriptions Community: 隱藏訂閱社群
The app needs to restart for changes to take effect. Restart and apply change?: 此變更需要重啟讓修改生效。重啟並且套用變更?
Proxy Settings:
Error getting network information. Is your proxy configured properly?: 取得網路資訊時發生錯誤。您的代理伺服器設定正確嗎?
From 6bbc6325cab3f8f2e8af61080773f0c11f2a1853 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:04:46 +0000
Subject: [PATCH 150/176] Bump lefthook from 1.4.11 to 1.5.0 (#4074)
Bumps [lefthook](https://github.com/evilmartians/lefthook) from 1.4.11 to 1.5.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.4.11...v1.5.0)
---
updated-dependencies:
- dependency-name: lefthook
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 104 +++++++++++++++++++++++++--------------------------
2 files changed, 53 insertions(+), 53 deletions(-)
diff --git a/package.json b/package.json
index ea888cee9fbe6..027f589c3c1b2 100644
--- a/package.json
+++ b/package.json
@@ -107,7 +107,7 @@
"html-webpack-plugin": "^5.5.3",
"js-yaml": "^4.1.0",
"json-minimizer-webpack-plugin": "^4.0.0",
- "lefthook": "^1.4.11",
+ "lefthook": "^1.5.0",
"mini-css-extract-plugin": "^2.7.6",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.29",
diff --git a/yarn.lock b/yarn.lock
index b4af209990383..e7a3e62692b05 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5506,59 +5506,59 @@ lazy-val@^1.0.4, lazy-val@^1.0.5:
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
-lefthook-darwin-arm64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.4.11.tgz#977615927f03846d8fe908d16703efbeea653410"
- integrity sha512-XyF532yTp+UoqN22QNHk1TxnbUaGPBkIlQ1N4GlYRl3GJiBeiCVEoGzmibXcWnR0OIN+nAhRjoNkaj3JocPvYQ==
-
-lefthook-darwin-x64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.4.11.tgz#968fee35d94a0a48c05a9188c6b7f06efdd034bd"
- integrity sha512-OGyCwRqCLsy14/eSNIC3QiZvy+q9UdwsJUn/iVXYegFwYIhTMpUeyLspoXNrYoPZmDs4OB6Nd5n5JHcrSuOVvQ==
-
-lefthook-freebsd-arm64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.4.11.tgz#fee0a62e498c48c50d4357ddf69eb83c50fd23b5"
- integrity sha512-3JGAyuf8PmGWkNUL8z1G5PQKrLaiJGOeXXeCgCIJG7AevITyrEljYhP2qxaRSTyoBnwavBPeNYQXt+AG4Smthw==
-
-lefthook-freebsd-x64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.4.11.tgz#f00819590941baca1e1c0f3876dad3396550b46a"
- integrity sha512-8J7lZOwbxarFk3mivQTh5kXf0FhQSydCiB8KUFy/j2RAIYtpZdGOHEBtLw6aGAFzzhBfo0zPkVZ2ouhisLNelw==
-
-lefthook-linux-arm64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.4.11.tgz#766b322729fa3e4265fce428380bec573c96a677"
- integrity sha512-H1ArFa3K54V3lQ0xV2cZKiNAjmzJA/xi2kuD8ERV96gwYq4vpGzY4x/wJL77UVKdw7Ofqy/FS8kEn3uCT2JvOA==
-
-lefthook-linux-x64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.4.11.tgz#1a3eec39576846076c110dc21110c1f3e78b12a3"
- integrity sha512-KtDmtnsg6kjNufx97N47BdP2ZFgHBHQb+rWwR2RagzNY3exYQM9iH+d0BeY0RuIUL+QwUCkpkVeEYgTrMcN3+A==
-
-lefthook-windows-arm64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.4.11.tgz#44d0866c18e5d631176d68fd3c9544bccf2d1dd3"
- integrity sha512-9GbPflx7F70jqHy8bEVxthmlmUUb+2NnzPU/Kk10DpWuZLXLOXWK7yGqIQogAnqwhlo4bSrWaWGfRULtAsQ2DQ==
-
-lefthook-windows-x64@1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.4.11.tgz#8c252d96e0e6c922704112f21e34306b1228fb52"
- integrity sha512-UI3EiY4OXplWx3WTddOyakazs5uD8QD5XIawRxNamZ4iJe/paLzBWbWZ6Xix9kpE06tmE2z9DfLT3A/08l23Gg==
-
-lefthook@^1.4.11:
- version "1.4.11"
- resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.4.11.tgz#3f6a6fbb2e2b8182ab2e58de51cae551e1e4ba2b"
- integrity sha512-pz1578a2zoiUHZRt3x3fANgx8W9nRex37Xt96NqU4YPXNvwNAZucsEchSjYzkxZqV/UK/IAU6R+IQGBeuFx7Dg==
+lefthook-darwin-arm64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.5.0.tgz#f439bc8539993fdf188f3768d854205cb5b8c376"
+ integrity sha512-URLZLiaIbwCuN9RD9r99udSvLPbsbGpQ4lFEVuWTkdI5f9pKFBv7Kw5wsCRiQk2vYQFP/vINMXQKO4g2NmToSw==
+
+lefthook-darwin-x64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.5.0.tgz#e6aac95c1625038c5bc117f40e4ed2d4fe564a23"
+ integrity sha512-IrpnZ7Gw4DGNQhE2tWim2v8XFBO5+8CtaOsI+dvXnDyE8OSN2iyojByuqoA4vsLfrYjoG7AykFzoWp6FZZsRng==
+
+lefthook-freebsd-arm64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.5.0.tgz#e92fb10de53869ae781352e7b924fb4353bc00c7"
+ integrity sha512-sVVABorbSa+KWqT/8Sb3PlIlzeO8BQJxBcECRPwjCNd2o34ocVpeZCmRFs5jn3aF+QzUqCSAFyH6XOTvw+G74A==
+
+lefthook-freebsd-x64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.5.0.tgz#418b37b38a6b05e84008057f6067a2fc2f5118d6"
+ integrity sha512-cHnpP67BWYDTnx6o4eq52JWYuV4dbpGRJeKH3FItnSpiwbmWJlnXgOI5PVfD9uxB8B6KQ4iaaff8zh2pdUaSPA==
+
+lefthook-linux-arm64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.5.0.tgz#276bd2e1f4e50a1dec1347c2f5ba98f201a7f0b5"
+ integrity sha512-gPB+Tta9xt3dDcB539uSHvKAE3bcxmWbkkQpW3NGlKJOoSLbtHEFd9ZJlNXTJryNxf3zR0uPZj3z4YvfsQUeug==
+
+lefthook-linux-x64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.5.0.tgz#ec648225a3466db2741d467484aba69be57af0d4"
+ integrity sha512-Y3GiUC+8inZpA1bKI0LT9huk0ZGB1VCItdltys5Xe9FCFtkYYgBt981jTjiy2uxDy18DpWnDBlVwjhpyS6kYGw==
+
+lefthook-windows-arm64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.5.0.tgz#5a824f334f4771b647fdb15b352cb073ec1cb36c"
+ integrity sha512-A/sLFrVy1Ivzz61Exv+ymM1T21d/7sraR9+SjpvJ5rz01GhZHbs0Y+T2R/cO0vJfN56gGW+lRrLDEk6UkbURCQ==
+
+lefthook-windows-x64@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.5.0.tgz#3f89ddc5dcb25790ddea8be43bbdab844e2ce4a5"
+ integrity sha512-FBAEhsAXaPMj0dN9a7/GFxaY1N9i1NRbr9TnEDId4lsdNvN3+Al1jNYoTuDRkH5Z5UipruR3j7KhiHX4T+K8cw==
+
+lefthook@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.5.0.tgz#1e714f8b3ca9cd440fb45bdec5730f6f0c8dbb58"
+ integrity sha512-XDmHDgtWD3wydwdtkZc7Kw7QPp3z+QLIXJeFO+hlZjSUDnezUetKRDByY6YenzEU9Ij4ckKlc4iP7m+fnlwW8A==
optionalDependencies:
- lefthook-darwin-arm64 "1.4.11"
- lefthook-darwin-x64 "1.4.11"
- lefthook-freebsd-arm64 "1.4.11"
- lefthook-freebsd-x64 "1.4.11"
- lefthook-linux-arm64 "1.4.11"
- lefthook-linux-x64 "1.4.11"
- lefthook-windows-arm64 "1.4.11"
- lefthook-windows-x64 "1.4.11"
+ lefthook-darwin-arm64 "1.5.0"
+ lefthook-darwin-x64 "1.5.0"
+ lefthook-freebsd-arm64 "1.5.0"
+ lefthook-freebsd-x64 "1.5.0"
+ lefthook-linux-arm64 "1.5.0"
+ lefthook-linux-x64 "1.5.0"
+ lefthook-windows-arm64 "1.5.0"
+ lefthook-windows-x64 "1.5.0"
levn@^0.4.1:
version "0.4.1"
From 6406ce141f7b662dc91313608a51190c780a1ccc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:05:11 +0000
Subject: [PATCH 151/176] Bump marked from 9.0.2 to 9.0.3 (#4073)
Bumps [marked](https://github.com/markedjs/marked) from 9.0.2 to 9.0.3.
- [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/v9.0.2...v9.0.3)
---
updated-dependencies:
- dependency-name: marked
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 027f589c3c1b2..f7f367487985b 100644
--- a/package.json
+++ b/package.json
@@ -62,7 +62,7 @@
"autolinker": "^4.0.0",
"electron-context-menu": "^3.6.1",
"lodash.debounce": "^4.0.8",
- "marked": "^9.0.2",
+ "marked": "^9.0.3",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"stylelint-use-logical-spec": "^5.0.0",
diff --git a/yarn.lock b/yarn.lock
index e7a3e62692b05..2813770f8e39f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5725,10 +5725,10 @@ map-obj@^4.1.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-marked@^9.0.2:
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/marked/-/marked-9.0.2.tgz#e12365ecbd8e487c2405dd8b99bbf8194c7ad3e5"
- integrity sha512-VRTR4AamWVw+wNl0PfT9zJpCHWIQZ4QLyiXVmpgrempuXeue883HH/97oVuY6uk7SSOJE6F73i62JrAIBAdc0Q==
+marked@^9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-9.0.3.tgz#95be5e8cba93f2c2ca1d6503794c4f02d81c97d9"
+ integrity sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ==
matcher@^3.0.0:
version "3.0.0"
From 19952ae799b287fd0a13189dcebfcf7fe3b9e720 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:05:28 +0000
Subject: [PATCH 152/176] Bump sass from 1.67.0 to 1.68.0 (#4072)
Bumps [sass](https://github.com/sass/dart-sass) from 1.67.0 to 1.68.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.67.0...1.68.0)
---
updated-dependencies:
- dependency-name: sass
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index f7f367487985b..e4c338e6c2b05 100644
--- a/package.json
+++ b/package.json
@@ -114,7 +114,7 @@
"postcss-scss": "^4.0.8",
"prettier": "^2.8.8",
"rimraf": "^5.0.1",
- "sass": "^1.67.0",
+ "sass": "^1.68.0",
"sass-loader": "^13.3.2",
"stylelint": "^15.10.3",
"stylelint-config-sass-guidelines": "^10.0.0",
diff --git a/yarn.lock b/yarn.lock
index 2813770f8e39f..2016b1909c313 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7332,10 +7332,10 @@ sass-loader@^13.3.2:
dependencies:
neo-async "^2.6.2"
-sass@^1.67.0:
- version "1.67.0"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.67.0.tgz#fed84d74b9cd708db603b1380d6dc1f71bb24f6f"
- integrity sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==
+sass@^1.68.0:
+ version "1.68.0"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.68.0.tgz#0034b0cc9a50248b7d1702ac166fd25990023669"
+ integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
From 275ce3508ba09918fec74bd0bab62b5482c2c423 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:06:16 +0000
Subject: [PATCH 153/176] Bump the eslint group with 1 update (#4070)
Bumps the eslint group with 1 update: [eslint](https://github.com/eslint/eslint).
- [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/v8.49.0...v8.50.0)
---
updated-dependencies:
- dependency-name: eslint
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: eslint
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 18 +++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/package.json b/package.json
index e4c338e6c2b05..149834a1beed8 100644
--- a/package.json
+++ b/package.json
@@ -92,7 +92,7 @@
"css-minimizer-webpack-plugin": "^5.0.1",
"electron": "^22.3.24",
"electron-builder": "^24.6.4",
- "eslint": "^8.49.0",
+ "eslint": "^8.50.0",
"eslint-config-prettier": "^9.0.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.28.1",
diff --git a/yarn.lock b/yarn.lock
index 2016b1909c313..9355c77246af9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1231,10 +1231,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.49.0":
- version "8.49.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333"
- integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==
+"@eslint/js@8.50.0":
+ version "8.50.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484"
+ integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==
"@fortawesome/fontawesome-common-types@6.4.2":
version "6.4.2"
@@ -3899,15 +3899,15 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@^8.49.0:
- version "8.49.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42"
- integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==
+eslint@^8.50.0:
+ version "8.50.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2"
+ integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.2"
- "@eslint/js" "8.49.0"
+ "@eslint/js" "8.50.0"
"@humanwhocodes/config-array" "^0.11.11"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
From 581b5ade25c9cda2f309960c15dd99dd65ad4d4d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:06:55 +0000
Subject: [PATCH 154/176] Bump the babel group with 1 update (#4069)
Bumps the babel group with 1 update: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core).
- [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.23.0/packages/babel-core)
---
updated-dependencies:
- dependency-name: "@babel/core"
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: babel
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 106 +++++++++++++++++++++++++++------------------------
2 files changed, 57 insertions(+), 51 deletions(-)
diff --git a/package.json b/package.json
index 149834a1beed8..2e08d5b02eea8 100644
--- a/package.json
+++ b/package.json
@@ -81,7 +81,7 @@
"youtubei.js": "^6.4.0"
},
"devDependencies": {
- "@babel/core": "^7.22.20",
+ "@babel/core": "^7.23.0",
"@babel/eslint-parser": "^7.22.15",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/preset-env": "^7.22.20",
diff --git a/yarn.lock b/yarn.lock
index 9355c77246af9..deb36e4018c80 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -33,22 +33,22 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0"
integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==
-"@babel/core@^7.22.20":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7"
- integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==
+"@babel/core@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83"
+ integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.22.15"
+ "@babel/generator" "^7.23.0"
"@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-module-transforms" "^7.22.20"
- "@babel/helpers" "^7.22.15"
- "@babel/parser" "^7.22.16"
+ "@babel/helper-module-transforms" "^7.23.0"
+ "@babel/helpers" "^7.23.0"
+ "@babel/parser" "^7.23.0"
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.22.20"
- "@babel/types" "^7.22.19"
- convert-source-map "^1.7.0"
+ "@babel/traverse" "^7.23.0"
+ "@babel/types" "^7.23.0"
+ convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
@@ -63,12 +63,12 @@
eslint-visitor-keys "^2.1.0"
semver "^6.3.1"
-"@babel/generator@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339"
- integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==
+"@babel/generator@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
+ integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
dependencies:
- "@babel/types" "^7.22.15"
+ "@babel/types" "^7.23.0"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
@@ -207,6 +207,14 @@
"@babel/template" "^7.22.5"
"@babel/types" "^7.22.5"
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
"@babel/helper-hoist-variables@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
@@ -242,10 +250,10 @@
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e"
- integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==
+"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9", "@babel/helper-module-transforms@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
+ integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
@@ -363,7 +371,7 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
-"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20":
+"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
@@ -397,14 +405,14 @@
"@babel/template" "^7.22.5"
"@babel/types" "^7.22.10"
-"@babel/helpers@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1"
- integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==
+"@babel/helpers@^7.23.0":
+ version "7.23.1"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15"
+ integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==
dependencies:
"@babel/template" "^7.22.15"
- "@babel/traverse" "^7.22.15"
- "@babel/types" "^7.22.15"
+ "@babel/traverse" "^7.23.0"
+ "@babel/types" "^7.23.0"
"@babel/highlight@^7.22.13":
version "7.22.13"
@@ -415,10 +423,10 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16":
- version "7.22.16"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95"
- integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==
+"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
+ integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15":
version "7.22.15"
@@ -1080,29 +1088,29 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
-"@babel/traverse@^7.18.9", "@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20", "@babel/traverse@^7.22.5":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9"
- integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.22.5", "@babel/traverse@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53"
+ integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==
dependencies:
"@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.22.15"
+ "@babel/generator" "^7.23.0"
"@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-function-name" "^7.22.5"
+ "@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.22.16"
- "@babel/types" "^7.22.19"
+ "@babel/parser" "^7.23.0"
+ "@babel/types" "^7.23.0"
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.4.4":
- version "7.22.19"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684"
- integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==
+"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+ integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
dependencies:
"@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.19"
+ "@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
"@csstools/css-parser-algorithms@^2.3.1":
@@ -2834,12 +2842,10 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-convert-source-map@^1.7.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
- integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
- dependencies:
- safe-buffer "~5.1.1"
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
cookie-signature@1.0.6:
version "1.0.6"
From 48feae813669a79499cd880c3e6f3a7b86731323 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 25 Sep 2023 12:21:56 +0000
Subject: [PATCH 155/176] Bump the stylelint group with 1 update (#4071)
Bumps the stylelint group with 1 update: [postcss](https://github.com/postcss/postcss).
- [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.4.29...8.4.30)
---
updated-dependencies:
- dependency-name: postcss
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: stylelint
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 2e08d5b02eea8..48f8e92492e42 100644
--- a/package.json
+++ b/package.json
@@ -110,7 +110,7 @@
"lefthook": "^1.5.0",
"mini-css-extract-plugin": "^2.7.6",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.29",
+ "postcss": "^8.4.30",
"postcss-scss": "^4.0.8",
"prettier": "^2.8.8",
"rimraf": "^5.0.1",
diff --git a/yarn.lock b/yarn.lock
index deb36e4018c80..64d0a71109b01 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6775,10 +6775,10 @@ postcss@^7.0.36:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.27, postcss@^8.4.29:
- version "8.4.29"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd"
- integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==
+postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.27, postcss@^8.4.30:
+ version "8.4.30"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7"
+ integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
From 112a76e0208956fd9e9c5dc19f22d6b18e9848f6 Mon Sep 17 00:00:00 2001
From: Jason <84899178+jasonhenriquez@users.noreply.github.com>
Date: Mon, 25 Sep 2023 14:23:31 +0000
Subject: [PATCH 156/176] Normalize ft-list-item grid height (#4043)
* Normalize ft-list-item grid height
* Update src/renderer/scss-partials/_ft-list-item.scss
Co-authored-by: PikachuEXE
---------
Co-authored-by: PikachuEXE
---
src/renderer/scss-partials/_ft-list-item.scss | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/renderer/scss-partials/_ft-list-item.scss b/src/renderer/scss-partials/_ft-list-item.scss
index c377d343f1091..15ca9f4042d95 100644
--- a/src/renderer/scss-partials/_ft-list-item.scss
+++ b/src/renderer/scss-partials/_ft-list-item.scss
@@ -283,6 +283,8 @@ $watched-transition-duration: 0.5s;
flex-direction: column;
min-block-size: 230px;
padding-block-end: 20px;
+ box-sizing: border-box;
+ block-size: 100%;
.videoThumbnail,
.channelThumbnail {
From d91f82f9771ce0b4cb90933a114ea3b299fc7663 Mon Sep 17 00:00:00 2001
From: absidue <48293849+absidue@users.noreply.github.com>
Date: Mon, 25 Sep 2023 16:55:47 +0200
Subject: [PATCH 157/176] Support multiple audio tracks and AV1 for Invidious
by using the local API DASH manifest generator (#3942)
* Support multiple audio tracks and AV1 for Invidious by using the local API DASH manifest generator
* Upgrade YouTube.js to 6.2.0 to fix default track selection
* Fix audio formats
* Use Intl.DisplayNames to get the language names
* Simplify returns
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
---------
Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
---
.../ft-video-player/ft-video-player.js | 2 +-
src/renderer/helpers/api/invidious.js | 90 +++++-
src/renderer/views/Watch/Watch.js | 260 +++++++++++++-----
3 files changed, 276 insertions(+), 76 deletions(-)
diff --git a/src/renderer/components/ft-video-player/ft-video-player.js b/src/renderer/components/ft-video-player/ft-video-player.js
index 338d244500d28..d56a7789eb6a4 100644
--- a/src/renderer/components/ft-video-player/ft-video-player.js
+++ b/src/renderer/components/ft-video-player/ft-video-player.js
@@ -36,7 +36,7 @@ const EXPECTED_PLAY_RELATED_ERROR_MESSAGES = [
// videojs-http-streaming calls this hook everytime it makes a request,
// so we can use it to convert the Range header into the range query parameter for the streaming URLs
videojs.Vhs.xhr.beforeRequest = (options) => {
- if (store.getters.getProxyVideos) {
+ if (store.getters.getProxyVideos && !options.uri.startsWith('data:application/dash+xml')) {
const { uri } = options
options.uri = getProxyUrl(uri)
}
diff --git a/src/renderer/helpers/api/invidious.js b/src/renderer/helpers/api/invidious.js
index c8e4883bc5fa5..daea27629cc47 100644
--- a/src/renderer/helpers/api/invidious.js
+++ b/src/renderer/helpers/api/invidious.js
@@ -2,6 +2,7 @@ import store from '../../store/index'
import { stripHTML, toLocalePublicationString } from '../utils'
import { isNullOrEmpty } from '../strings'
import autolinker from 'autolinker'
+import { FormatUtils, Misc, Player } from 'youtubei.js'
function getCurrentInstance() {
return store.getters.getCurrentInvidiousInstance
@@ -318,11 +319,13 @@ export function filterInvidiousFormats(formats, allowAv1 = false) {
// Which is caused by Invidious API limitation on AV1 formats (see related issues)
// Commented code to be restored after Invidious issue fixed
//
- // if (allowAv1 && av1Formats.length > 0) {
- // return [...audioFormats, ...av1Formats]
- // } else {
- // return [...audioFormats, ...h264Formats]
- // }
+ // As we generate our own DASH manifest (using YouTube.js) for multiple audio track support in Electron,
+ // we can allow AV1 in that situation. If we aren't in electron,
+ // we still can't use them until Invidious fixes the issue on their side
+ if (process.env.IS_ELECTRON && allowAv1 && av1Formats.length > 0) {
+ return [...audioFormats, ...av1Formats]
+ }
+
return [...audioFormats, ...h264Formats]
}
@@ -337,3 +340,80 @@ export async function getHashtagInvidious(hashtag, page) {
const response = await invidiousAPICall(payload)
return response.results
}
+
+/**
+ * Generates a DASH manifest locally from Invidious' adaptive formats and manifest,
+ * doing so allows us to support multiple audio tracks, which Invidious doesn't support yet
+ * @param {import('youtubei.js').Misc.Format[]} formats
+ * @param {string=} invidiousInstance the formats will be proxied through the specified instance, when one is provided
+ */
+export async function generateInvidiousDashManifestLocally(formats, invidiousInstance) {
+ // create a dummy player, as deciphering requires making requests to YouTube,
+ // which we want to avoid when Invidious is selected as the backend
+ const player = new Player()
+ player.decipher = (url) => url
+
+ let urlTransformer
+
+ if (invidiousInstance) {
+ /**
+ * @param {URL} url
+ */
+ urlTransformer = (url) => {
+ return new URL(url.toString().replace(url.origin, invidiousInstance))
+ }
+ }
+
+ return await FormatUtils.toDash({
+ adaptive_formats: formats
+ }, urlTransformer, undefined, undefined, player)
+}
+
+export function convertInvidiousToLocalFormat(format) {
+ const [initStart, initEnd] = format.init.split('-')
+ const [indexStart, indexEnd] = format.index.split('-')
+
+ const duration = parseInt(parseFloat(new URL(format.url).searchParams.get('dur')) * 1000)
+
+ // only converts the properties that are needed to generate a DASH manifest with YouTube.js
+ // audioQuality and qualityLabel don't go inside the DASH manifest, but are used by YouTube.js
+ // to determine whether a format is an audio or video stream respectively.
+
+ /** @type {import('./local').LocalFormat} */
+ const localFormat = new Misc.Format({
+ itag: format.itag,
+ mimeType: format.type,
+ bitrate: format.bitrate,
+ width: format.width,
+ height: format.height,
+ initRange: {
+ start: initStart,
+ end: initEnd
+ },
+ indexRange: {
+ start: indexStart,
+ end: indexEnd
+ },
+ // lastModified: format.lmt,
+ // contentLength: format.clen,
+ url: format.url,
+ approxDurationMs: duration,
+ ...(format.type.startsWith('audio/')
+ ? {
+ audioQuality: format.audioQuality,
+ audioSampleRate: format.audioSampleRate,
+ audioChannels: format.audioChannels
+ }
+ : {
+ fps: format.fps,
+ qualityLabel: format.qualityLabel,
+ colorInfo: format.colorInfo
+ })
+ })
+
+ // Adding freeTubeUrl allows us to reuse the code,
+ // to generate the audio tracks for audio only mode, that we use for the local API
+ localFormat.freeTubeUrl = format.url
+
+ return localFormat
+}
diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js
index eae5ca44cf508..4799f5188f97e 100644
--- a/src/renderer/views/Watch/Watch.js
+++ b/src/renderer/views/Watch/Watch.js
@@ -29,7 +29,13 @@ import {
parseLocalTextRuns,
parseLocalWatchNextVideo
} from '../../helpers/api/local'
-import { filterInvidiousFormats, invidiousGetVideoInformation, youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
+import {
+ convertInvidiousToLocalFormat,
+ filterInvidiousFormats,
+ generateInvidiousDashManifestLocally,
+ invidiousGetVideoInformation,
+ youtubeImageUrlToInvidious
+} from '../../helpers/api/invidious'
/**
* @typedef {object} AudioSource
@@ -594,63 +600,11 @@ export default defineComponent({
const hasMultipleAudioTracks = audioFormats.some(format => format.audio_track)
if (hasMultipleAudioTracks) {
- /** @type {string[]} */
- const ids = []
-
- /** @type {AudioTrack[]} */
- const audioTracks = []
-
- /** @type {import('youtubei.js').Misc.Format[][]} */
- const sourceLists = []
-
- for (const format of audioFormats) {
- // Some videos with multiple audio tracks, have a broken one, that doesn't have any audio track information
- // It seems to be the same as default audio track but broken
- // At the time of writing, this video has a broken audio track: https://youtu.be/UJeSWbR6W04
- if (!format.audio_track) {
- continue
- }
-
- const index = ids.indexOf(format.audio_track.id)
- if (index === -1) {
- ids.push(format.audio_track.id)
-
- let kind
-
- if (format.audio_track.audio_is_default) {
- kind = 'main'
- } else if (format.is_dubbed) {
- kind = 'translation'
- } else if (format.is_descriptive) {
- kind = 'descriptions'
- } else {
- kind = 'alternative'
- }
-
- audioTracks.push({
- id: format.audio_track.id,
- kind,
- label: format.audio_track.display_name,
- language: format.language,
- isDefault: format.audio_track.audio_is_default,
- sourceList: []
- })
-
- sourceLists.push([
- format
- ])
- } else {
- sourceLists[index].push(format)
- }
- }
-
- for (let i = 0; i < audioTracks.length; i++) {
- audioTracks[i].sourceList = this.createLocalAudioSourceList(sourceLists[i])
- }
+ const audioTracks = this.createAudioTracksFromLocalFormats(audioFormats)
this.audioTracks = audioTracks
- this.audioSourceList = this.audioTracks.find(track => track.isDefault).sourceList
+ this.audioSourceList = audioTracks.find(track => track.isDefault).sourceList
} else {
this.audioTracks = []
@@ -713,7 +667,6 @@ export default defineComponent({
this.isLoading = true
}
- this.dashSrc = this.createInvidiousDashManifest()
this.videoStoryboardSrc = `${this.currentInvidiousInstance}/api/v1/storyboards/${this.videoId}?height=90`
invidiousGetVideoInformation(this.videoId)
@@ -853,18 +806,28 @@ export default defineComponent({
return object
}))
- this.audioSourceList = result.adaptiveFormats.filter((format) => {
- return format.type.includes('audio')
- }).map((format) => {
- return {
- url: format.url,
- type: format.type,
- label: 'Audio',
- qualityLabel: parseInt(format.bitrate)
- }
- }).sort((a, b) => {
- return a.qualityLabel - b.qualityLabel
- })
+ this.audioTracks = []
+ this.dashSrc = await this.createInvidiousDashManifest()
+
+ if (process.env.IS_ELECTRON && this.audioTracks.length > 0) {
+ // when we are in Electron and the video has multiple audio tracks,
+ // we populate the list inside createInvidiousDashManifest
+ // as we need to work out the different audio tracks for the DASH manifest anyway
+ this.audioSourceList = this.audioTracks.find(track => track.isDefault).sourceList
+ } else {
+ this.audioSourceList = result.adaptiveFormats.filter((format) => {
+ return format.type.includes('audio')
+ }).map((format) => {
+ return {
+ url: format.url,
+ type: format.type,
+ label: 'Audio',
+ qualityLabel: parseInt(format.bitrate)
+ }
+ }).sort((a, b) => {
+ return a.qualityLabel - b.qualityLabel
+ })
+ }
if (this.activeFormat === 'audio') {
this.activeSourceList = this.audioSourceList
@@ -953,6 +916,68 @@ export default defineComponent({
}
},
+ /**
+ * @param {import('../../helpers/api/local').LocalFormat[]} audioFormats
+ * @returns {AudioTrack[]}
+ */
+ createAudioTracksFromLocalFormats: function (audioFormats) {
+ /** @type {string[]} */
+ const ids = []
+
+ /** @type {AudioTrack[]} */
+ const audioTracks = []
+
+ /** @type {import('youtubei.js').Misc.Format[][]} */
+ const sourceLists = []
+
+ for (const format of audioFormats) {
+ // Some videos with multiple audio tracks, have a broken one, that doesn't have any audio track information
+ // It seems to be the same as default audio track but broken
+ // At the time of writing, this video has a broken audio track: https://youtu.be/UJeSWbR6W04
+ if (!format.audio_track) {
+ continue
+ }
+
+ const index = ids.indexOf(format.audio_track.id)
+ if (index === -1) {
+ ids.push(format.audio_track.id)
+
+ let kind
+
+ if (format.audio_track.audio_is_default) {
+ kind = 'main'
+ } else if (format.is_dubbed) {
+ kind = 'translation'
+ } else if (format.is_descriptive) {
+ kind = 'descriptions'
+ } else {
+ kind = 'alternative'
+ }
+
+ audioTracks.push({
+ id: format.audio_track.id,
+ kind,
+ label: format.audio_track.display_name,
+ language: format.language,
+ isDefault: format.audio_track.audio_is_default,
+ sourceList: []
+ })
+
+ sourceLists.push([
+ format
+ ])
+ } else {
+ sourceLists[index].push(format)
+ }
+ }
+
+ for (let i = 0; i < audioTracks.length; i++) {
+ audioTracks[i].sourceList = this.createLocalAudioSourceList(sourceLists[i])
+ }
+
+ return audioTracks
+ },
+
/**
* @param {import('../../helpers/api/local').LocalFormat[]} audioFormats
* @returns {AudioSource[]}
@@ -1383,10 +1408,72 @@ export default defineComponent({
]
},
- createInvidiousDashManifest: function () {
+ createInvidiousDashManifest: async function () {
let url = `${this.currentInvidiousInstance}/api/manifest/dash/id/${this.videoId}`
- if (!process.env.IS_ELECTRON || this.proxyVideos) {
+ // If we are in Electron,
+ // we can use YouTube.js' DASH manifest generator to generate the manifest.
+ // Using YouTube.js' gives us support for multiple audio tracks (currently not supported by Invidious)
+ if (process.env.IS_ELECTRON) {
+ // Invidious' API response doesn't include the height and width (and fps and qualityLabel for AV1) of video streams
+ // so we need to extract them from Invidious' manifest
+ const response = await fetch(url)
+ const originalText = await response.text()
+
+ const parsedManifest = new DOMParser().parseFromString(originalText, 'application/xml')
+
+ /** @type {import('youtubei.js').Misc.Format[]} */
+ const formats = []
+
+ /** @type {import('youtubei.js').Misc.Format[]} */
+ const audioFormats = []
+
+ let hasMultipleAudioTracks = false
+
+ for (const format of this.adaptiveFormats) {
+ if (format.type.startsWith('video/')) {
+ const representation = parsedManifest.querySelector(`Representation[id="${format.itag}"][bandwidth="${format.bitrate}"]`)
+
+ format.height = parseInt(representation.getAttribute('height'))
+ format.width = parseInt(representation.getAttribute('width'))
+ format.fps = parseInt(representation.getAttribute('frameRate'))
+
+ // the quality label is missing for AV1 formats
+ if (!format.qualityLabel) {
+ format.qualityLabel = format.width > format.height ? `${format.height}p` : `${format.width}p`
+ }
+ }
+
+ const localFormat = convertInvidiousToLocalFormat(format)
+
+ if (localFormat.has_audio) {
+ audioFormats.push(localFormat)
+
+ if (localFormat.is_dubbed || localFormat.is_descriptive) {
+ hasMultipleAudioTracks = true
+ }
+ }
+
+ formats.push(localFormat)
+ }
+
+ if (hasMultipleAudioTracks) {
+ // match YouTube's local API response with English
+ const languageNames = new Intl.DisplayNames('en-US', { type: 'language' })
+ for (const format of audioFormats) {
+ this.generateAudioTrackFieldInvidious(format, languageNames)
+ }
+
+ this.audioTracks = this.createAudioTracksFromLocalFormats(audioFormats)
+ }
+
+ const manifest = await generateInvidiousDashManifestLocally(
+ formats,
+ this.proxyVideos ? this.currentInvidiousInstance : undefined
+ )
+
+ url = `data:application/dash+xml;charset=UTF-8,${encodeURIComponent(manifest)}`
+ } else if (this.proxyVideos) {
url += '?local=true'
}
@@ -1400,6 +1487,39 @@ export default defineComponent({
]
},
+ /**
+ * @param {import('youtubei.js').Misc.Format} format
+ * @param {Intl.DisplayNames} languageNames
+ */
+ generateAudioTrackFieldInvidious: function (format, languageNames) {
+ let type = ''
+
+ // use the same id numbers as YouTube (except -1, when we aren't sure what it is)
+ let idNumber = ''
+
+ if (format.is_descriptive) {
+ type = ' descriptive'
+ idNumber = 2
+ } else if (format.is_dubbed) {
+ type = ''
+ idNumber = 3
+ } else if (format.is_original) {
+ type = ' original'
+ idNumber = 4
+ } else {
+ type = ' alternative'
+ idNumber = -1
+ }
+
+ const languageName = languageNames.of(format.language)
+
+ format.audio_track = {
+ audio_is_default: !!format.is_original,
+ id: `${format.language}.${idNumber}`,
+ display_name: `${languageName}${type}`
+ }
+ },
+
getAdaptiveFormatsInvidious: async function (existingInfoResult = null) {
let result
if (existingInfoResult) {
From bff3a2f824b6b7d3f3deba9d8b3fa4467e7d569c Mon Sep 17 00:00:00 2001
From: Jason <84899178+jasonhenriquez@users.noreply.github.com>
Date: Mon, 25 Sep 2023 14:56:30 +0000
Subject: [PATCH 158/176] Mobile/tablet channel page & share button visual
improvements (#4061)
* Implement fix to elements escaping container on Channel page at small widths
* Show all Channel tabs on smaller viewport widths & reduce bulky gap
* Update Channel page to not break at even lower sizes
* Re-introduce channel button clipping fix
* Implement updated share button styling
* Fix issue with prompt box shrinking on small enough viewport sizes / overflow
* Update share button to work at all sizes'
* Fix pre-existing issue of Channel tabs overflowing on desktop view in some locales
---
.../components/ft-prompt/ft-prompt.css | 8 +++-
.../ft-share-button/ft-share-button.scss | 29 +++++++++++++-
src/renderer/views/Channel/Channel.css | 40 ++++++++++++++++++-
3 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/src/renderer/components/ft-prompt/ft-prompt.css b/src/renderer/components/ft-prompt/ft-prompt.css
index 2d59ded02dd70..e17beffab8e6d 100644
--- a/src/renderer/components/ft-prompt/ft-prompt.css
+++ b/src/renderer/components/ft-prompt/ft-prompt.css
@@ -2,8 +2,8 @@
position: fixed;
inset-block-start: 0px;
inset-inline-start: 0px;
- inline-size: 100vw;
- block-size: 100vh;
+ inline-size: 100%;
+ block-size: 100%;
background-color: rgba(0, 0, 0, 0.7);
z-index: 10;
padding: 15px;
@@ -13,6 +13,10 @@
justify-content: center;
}
+.promptCard {
+ overflow-y: scroll;
+}
+
.promptCard.autosize {
box-sizing: border-box;
margin-block: 0;
diff --git a/src/renderer/components/ft-share-button/ft-share-button.scss b/src/renderer/components/ft-share-button/ft-share-button.scss
index be150d7dbdf8b..cfccc6a6bf3e1 100644
--- a/src/renderer/components/ft-share-button/ft-share-button.scss
+++ b/src/renderer/components/ft-share-button/ft-share-button.scss
@@ -11,14 +11,19 @@
font-weight: bold;
margin-block: 4px 8px;
margin-inline: 0;
+ display: flex;
+ justify-content: center;
}
.buttons {
display: flex;
flex-direction: column;
+ max-inline-size: min-content;
+ min-inline-size: 150px;
.action {
padding: 6px;
+ white-space: initial;
}
}
@@ -55,8 +60,6 @@
}
.invidious {
- display: flex;
- justify-content: center;
letter-spacing: -0.4px;
.invidiousLogo {
@@ -85,3 +88,25 @@
}
}
}
+
+@media only screen and (max-width: 450px) {
+ .shareLinks {
+ grid-auto-flow: row;
+ margin-inline: auto;
+ justify-items: center;
+ max-inline-size: max-content;
+
+ .header.invidious {
+ margin-block-start: 20px;
+ }
+
+ .buttons {
+ max-inline-size: min-content;
+ min-inline-size: 180px;
+ }
+
+ .divider {
+ display: none;
+ }
+ }
+}
diff --git a/src/renderer/views/Channel/Channel.css b/src/renderer/views/Channel/Channel.css
index 64b02e3efde66..0c7ef0adfbf0d 100644
--- a/src/renderer/views/Channel/Channel.css
+++ b/src/renderer/views/Channel/Channel.css
@@ -71,6 +71,10 @@
justify-content: space-between;
}
+.subscribeButton {
+ block-size: fit-content;
+}
+
.shareIcon {
align-self: center;
}
@@ -94,11 +98,14 @@
gap: 32px;
padding-block: .3em;
padding-inline: 0;
+ flex-direction: column;
+ flex-wrap: nowrap;
}
.tabs {
display: flex;
flex: 0 1 33%;
+ flex-wrap: wrap;
}
.tab {
@@ -187,6 +194,7 @@
.channelInfoTabs {
block-size: auto;
flex-flow: column-reverse;
+ gap: 0;
}
.channelSearch {
@@ -195,9 +203,39 @@
}
.tabs {
- overflow-x: scroll;
+ flex: 1 1 0;
+ flex-wrap: wrap;
}
+
#communityPanel {
margin-block-start: 1rem;
}
}
+
+@media only screen and (max-width: 400px) {
+ .channelInfo {
+ justify-content: center;
+ gap: 10px;
+ }
+
+ .channelInfoActionsContainer {
+ flex-direction: column-reverse;
+ }
+
+ .thumbnailContainer {
+ flex-direction: column;
+ }
+
+ .thumbnailContainer, .channelInfoActionsContainer {
+ flex-wrap: wrap;
+ align-items: center;
+ text-align: center;
+ gap: 10px;
+ }
+}
+
+@media only screen and (max-width: 260px) {
+ .channelDetails {
+ max-inline-size: none;
+ }
+}
From d2ee82ada6137dcd91363fd568ad62f90551c468 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jiri=20Gr=C3=B6nroos?=
Date: Mon, 25 Sep 2023 15:47:50 +0000
Subject: [PATCH 159/176] Translated using Weblate (Finnish)
Currently translated at 98.7% (713 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/fi/
---
static/locales/fi.yaml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/static/locales/fi.yaml b/static/locales/fi.yaml
index 696bdbd95fdcf..fee27bd8f3119 100644
--- a/static/locales/fi.yaml
+++ b/static/locales/fi.yaml
@@ -754,6 +754,7 @@ Video:
Upcoming: Tuleva
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live-chat
ei ole käytettävissä tässä suoratoistossa. Lataaja on saattanut poistaa sen käytöstä.
+ Pause on Current Video: Keskeytä nykyiseen videoon
Videos:
#& Sort By
Sort By:
@@ -1020,3 +1021,7 @@ Hashtag:
Hashtag: Avainsana
This hashtag does not currently have any videos: Tällä avainsanalla ei ole tällä
hetkellä yhtään videota
+Playlist will pause when current video is finished: Soittolista keskeytetään, kun
+ nykyinen video päättyy
+Playlist will not pause when current video is finished: Soittolistaa ei keskeytetä,
+ kun nykyinen video päättyy
From 6e9636f4dd897713a01c255686dd4a429c52783c Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Tue, 26 Sep 2023 08:52:00 +0800
Subject: [PATCH 160/176] ! Fix external player handling for video in local
playlist
---
src/renderer/components/ft-list-video/ft-list-video.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js
index b3047b7247121..8edf7eafdd577 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.js
+++ b/src/renderer/components/ft-list-video/ft-list-video.js
@@ -144,7 +144,7 @@ export default defineComponent({
},
inUserPlaylist: function () {
- return this.playlistTypeFinal === 'user'
+ return this.playlistTypeFinal === 'user' || this.selectedUserPlaylist != null
},
selectedUserPlaylist: function () {
@@ -157,7 +157,7 @@ export default defineComponent({
playlistSharable() {
// `playlistId` can be undefined
// User playlist ID should not be shared
- return this.playlistIdFinal && this.playlistIdFinal.length !== 0 && this.selectedUserPlaylist == null
+ return this.playlistIdFinal && this.playlistIdFinal.length !== 0 && !this.inUserPlaylist
},
invidiousUrl: function () {
@@ -447,7 +447,7 @@ export default defineComponent({
playlistLoop: this.playlistLoop,
}
// Only play video in non playlist mode when user playlist detected
- if (!this.inUserPlaylist) {
+ if (this.inUserPlaylist) {
Object.assign(payload, {
playlistId: null,
playlistIndex: null,
From 63df75520a24b122af65da0b961c257e5a840a0f Mon Sep 17 00:00:00 2001
From: Milo Ivir
Date: Tue, 26 Sep 2023 10:00:06 +0000
Subject: [PATCH 161/176] Translated using Weblate (Croatian)
Currently translated at 99.8% (721 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
---
static/locales/hr.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index 61aed5d7d8633..3f1b04b1a5332 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -101,6 +101,7 @@ Subscriptions:
Subscriptions Tabs: Kartica pretplata
All Subscription Tabs Hidden: Sve kartice pretplate su skrivene. Za prikaz sadržaja
na ovom mjestu, sakrij neke kartice u odjeljku „{subsection}” u „{settingsSection}”.
+ Empty Posts: Kanali na koje si pretplaćen/a trenutačno nemaju objave.
Trending:
Trending: 'U trendu'
Trending Tabs: Kartice „U trendu”
From 1d0607648cf3c91a2da63ffe78126c2bc152e4c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?=
Date: Tue, 26 Sep 2023 08:31:18 +0000
Subject: [PATCH 162/176] Translated using Weblate (Estonian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/et/
---
static/locales/et.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/et.yaml b/static/locales/et.yaml
index 89230e769bfba..43280b059a021 100644
--- a/static/locales/et.yaml
+++ b/static/locales/et.yaml
@@ -106,6 +106,8 @@ Subscriptions:
Subscriptions Tabs: Tellimuste vahekaardid
All Subscription Tabs Hidden: Kõik tellimuse vahekaardid on peidetud. Siinse sisu
nägemiseks palun eemalda kaartide peitmine jaotises „{subsection}“ / „{settingsSection}“.
+ Load More Posts: Lisa järgmised postitused
+ Empty Posts: Sinu tellitud kanalites hetkel pole ühtegi postitust.
Trending:
Trending: 'Populaarsust koguvad videod'
Trending Tabs: Populaarsust koguvad kaardid
@@ -408,6 +410,7 @@ Settings:
Hide Subscriptions Live: Peida tellimuste otse-eetrid
Hide Profile Pictures in Comments: Peida kommentaaride profiilipildid
Blur Thumbnails: Hägusta pisipildid
+ Hide Subscriptions Community: Peida tellijate loend
Proxy Settings:
Error getting network information. Is your proxy configured properly?: Võrguteavet
ei õnnestu leida. Kas sa oled puhverserveri ikka korralikult seadistanud?
From d0b37d9ce7fea365f8bf4d1a55cf9c7b3691dde5 Mon Sep 17 00:00:00 2001
From: Milo Ivir
Date: Tue, 26 Sep 2023 10:00:32 +0000
Subject: [PATCH 163/176] Translated using Weblate (Croatian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hr/
---
static/locales/hr.yaml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index 3f1b04b1a5332..e38947daf943a 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -102,6 +102,7 @@ Subscriptions:
All Subscription Tabs Hidden: Sve kartice pretplate su skrivene. Za prikaz sadržaja
na ovom mjestu, sakrij neke kartice u odjeljku „{subsection}” u „{settingsSection}”.
Empty Posts: Kanali na koje si pretplaćen/a trenutačno nemaju objave.
+ Load More Posts: Učitaj još objava
Trending:
Trending: 'U trendu'
Trending Tabs: Kartice „U trendu”
@@ -432,11 +433,12 @@ Settings:
Subscriptions Page: Stranica pretplata
Hide Channel Podcasts: Sakrij kanal podcastova
Hide Channel Releases: Sakrij kanal izdanja
- Hide Subscriptions Shorts: Sakrij kratka videa pretplate
- Hide Subscriptions Live: Sakrij videa uživo pretplate
- Hide Subscriptions Videos: Sakrij videa pretplate
+ Hide Subscriptions Shorts: Sakrij pretplate kratkih videa
+ Hide Subscriptions Live: Sakrij pretplate videa uživo
+ Hide Subscriptions Videos: Sakrij pretplate videa
Blur Thumbnails: Zamuti minijature
Hide Profile Pictures in Comments: Sakrij slike profila u komentarima
+ Hide Subscriptions Community: Sakrij pretplate zajednice
The app needs to restart for changes to take effect. Restart and apply change?: Promjene
će se primijeniti nakon ponovnog pokeretanja programa. Ponovo pokrenuti program?
Proxy Settings:
From 1c0149f57793c3ee1bac13d944cb87aae68c54f9 Mon Sep 17 00:00:00 2001
From: Kyotaro Iijima
Date: Tue, 26 Sep 2023 15:03:05 +0000
Subject: [PATCH 164/176] Translated using Weblate (Japanese)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ja/
---
static/locales/ja.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/ja.yaml b/static/locales/ja.yaml
index 0ce15c2505aca..bfd3cd8de68b0 100644
--- a/static/locales/ja.yaml
+++ b/static/locales/ja.yaml
@@ -96,6 +96,8 @@ Subscriptions:
Subscriptions Tabs: 登録チャンネル タブ
All Subscription Tabs Hidden: 全ての登録チャンネル タブが非表示になっています。こちらのコンテンツをご覧いただくには、"{settingsSection}"
内の "{subsection}" 項目でいくつかのタブの非表示を解除してください。
+ Load More Posts: もっと見る
+ Empty Posts: 現在、登録しているチャンネルには動画はありません。
Trending:
Trending: '急上昇'
Trending Tabs: 急上昇のタブ
@@ -404,6 +406,7 @@ Settings:
Hide Channel Releases: チャンネルの新着情報の非表示
Hide Profile Pictures in Comments: コメントでプロフィール写真を隠す
Blur Thumbnails: サムネイルをぼかす
+ Hide Subscriptions Community: チャンネルの購読者リストの非公開
The app needs to restart for changes to take effect. Restart and apply change?: 変更の反映には、アプリの再起動が必要です。再起動して変更を適用しますか?
Proxy Settings:
Error getting network information. Is your proxy configured properly?: ネットワーク情報の取得中にエラーが発生しました。プロキシーを正しく設定してますか?
From 277944964f7456ce29eb175ef2656f8472ae01e4 Mon Sep 17 00:00:00 2001
From: EditaNEmilis
Date: Wed, 27 Sep 2023 12:38:14 +0000
Subject: [PATCH 165/176] Translated using Weblate (Lithuanian)
Currently translated at 90.7% (655 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/lt/
---
static/locales/lt.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/static/locales/lt.yaml b/static/locales/lt.yaml
index e7a5c315c57c4..ab3fab325f73b 100644
--- a/static/locales/lt.yaml
+++ b/static/locales/lt.yaml
@@ -37,6 +37,7 @@ Global:
Live: Tiesiogiai
Shorts: Šortai
+ Community: Bendruomenė
Version {versionNumber} is now available! Click for more details: 'Versija {versionNumber}
jau prieinama! Spustelėkite, jei norite gauti daugiau informacijos'
Download From Site: 'Atsisiųsti iš svetainės'
From 3dcf53584159c2882584ed379d69e38cf236ef50 Mon Sep 17 00:00:00 2001
From: Philip Goto
Date: Thu, 28 Sep 2023 11:53:24 +0000
Subject: [PATCH 166/176] Translated using Weblate (Dutch)
Currently translated at 99.5% (719 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/nl/
---
static/locales/nl.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/static/locales/nl.yaml b/static/locales/nl.yaml
index 32806e874599d..4aaf1a19e607a 100644
--- a/static/locales/nl.yaml
+++ b/static/locales/nl.yaml
@@ -44,6 +44,7 @@ Global:
View Count: 1 weergave | {count} weergaven
Watching Count: 1 aan het kijken | {count} aan het kijken
Channel Count: 1 kanaal | {count} kanalen
+ Community: Gemeenschap
Search / Go to URL: 'Zoeken / Ga naar URL'
# In Filter Button
Search Filters:
@@ -102,6 +103,8 @@ Subscriptions:
All Subscription Tabs Hidden: Alle abonnementstabbladen zijn verborgen. Om de inhoud
hier te zien moet u enkele tabbladen zichtbaar maken in de sectie ‘{subsection}’
onder ‘{settingsSection}’.
+ Load More Posts: Meer berichten laden
+ Empty Posts: De kanalen waarop u geabonneerd bent hebben momenteel geen berichten.
Trending:
Trending: 'Trending'
Trending Tabs: Tending-tabbladen
@@ -435,6 +438,7 @@ Settings:
Hide Channel Shorts: Kanaal-Shorts verbergen
Hide Subscriptions Shorts: Abonnement-Shorts verbergen
Hide Profile Pictures in Comments: Profielfoto's in opmerkingen verbergen
+ Hide Subscriptions Community: Abonnementgemeenschappen verbergen
The app needs to restart for changes to take effect. Restart and apply change?: De
app moet opnieuw worden gestart om veranderingen aan te brengen. Wilt u de app
opnieuw starten en veranderingen toepassen?
From 25c75ce7fb211e1c24bf01ad6cd383abff0f1521 Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Fri, 29 Sep 2023 08:55:05 +0800
Subject: [PATCH 167/176] ! Fix ft-video having different URLs in links
---
src/renderer/components/ft-list-video/ft-list-video.js | 7 +++++++
.../components/ft-list-video/ft-list-video.vue | 10 ++--------
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js
index 8edf7eafdd577..4f05dfdafcc16 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.js
+++ b/src/renderer/components/ft-list-video/ft-list-video.js
@@ -375,6 +375,13 @@ export default defineComponent({
return this.playlistIdTypePairFinal?.uniqueId
},
+ watchPageLinkTo() {
+ // For `router-link` attribute `to`
+ return {
+ path: `/watch/${this.id}`,
+ query: this.watchPageLinkQuery,
+ }
+ },
watchPageLinkQuery() {
const query = {}
if (this.playlistIdFinal) { query.playlistId = this.playlistIdFinal }
diff --git a/src/renderer/components/ft-list-video/ft-list-video.vue b/src/renderer/components/ft-list-video/ft-list-video.vue
index 0a59c2e5708a2..a31a65547b3c8 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.vue
+++ b/src/renderer/components/ft-list-video/ft-list-video.vue
@@ -14,10 +14,7 @@
{{ displayTitle }}
From c936a0ea5e7df1409e9f28c51122d349bdf87762 Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Sat, 30 Sep 2023 01:16:00 +0800
Subject: [PATCH 168/176] Update FT history import to accept key
lastViewedPlaylistId (#4038)
* * Update FT history import to accept key `lastViewedPlaylistId`
Also update the strange required key check logic
Which was last changed by 58882b3e169f5865497a8c97f42900d2c4f0477c
* * Remove unused video property `paid`
---
.../components/data-settings/data-settings.js | 30 ++++++++++++-------
.../components/ft-list-video/ft-list-video.js | 4 +--
.../watch-video-info/watch-video-info.js | 3 +-
src/renderer/views/Watch/Watch.js | 3 +-
4 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/src/renderer/components/data-settings/data-settings.js b/src/renderer/components/data-settings/data-settings.js
index a46d54afa87ab..51ebde0359d80 100644
--- a/src/renderer/components/data-settings/data-settings.js
+++ b/src/renderer/components/data-settings/data-settings.js
@@ -698,20 +698,28 @@ export default defineComponent({
textDecode.pop()
const requiredKeys = [
- '_id',
'author',
'authorId',
'description',
'isLive',
'lengthSeconds',
- 'paid',
'published',
'timeWatched',
'title',
'type',
'videoId',
'viewCount',
- 'watchProgress'
+ 'watchProgress',
+ ]
+
+ const optionalKeys = [
+ // `_id` absent if marked as watched manually
+ '_id',
+ 'lastViewedPlaylistId',
+ ]
+
+ const ignoredKeys = [
+ 'paid',
]
textDecode.forEach((history) => {
@@ -723,15 +731,19 @@ export default defineComponent({
const historyObject = {}
Object.keys(historyData).forEach((key) => {
- if (!requiredKeys.includes(key)) {
- showToast(`Unknown data key: ${key}`)
- } else {
+ if (requiredKeys.includes(key) || optionalKeys.includes(key)) {
historyObject[key] = historyData[key]
+ } else if (!ignoredKeys.includes(key)) {
+ showToast(`Unknown data key: ${key}`)
}
+ // Else do not import the key
})
- if (Object.keys(historyObject).length < (requiredKeys.length - 2)) {
+ const historyObjectKeysSet = new Set(Object.keys(historyObject))
+ const missingKeys = requiredKeys.filter(x => !historyObjectKeysSet.has(x))
+ if (missingKeys.length > 0) {
showToast(this.$t('Settings.Data Settings.History object has insufficient data, skipping item'))
+ console.error('Missing Keys: ', missingKeys, historyData)
} else {
this.updateHistory(historyObject)
}
@@ -815,7 +827,6 @@ export default defineComponent({
historyObject.lengthSeconds = null
historyObject.watchProgress = 1
historyObject.isLive = false
- historyObject.paid = false
this.updateHistory(historyObject)
}
@@ -889,8 +900,7 @@ export default defineComponent({
'lengthSeconds',
'timeAdded',
'isLive',
- 'paid',
- 'type'
+ 'type',
]
playlists.forEach(async (playlistData) => {
diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js
index 96c8f247b0c34..9c5e399afe299 100644
--- a/src/renderer/components/ft-list-video/ft-list-video.js
+++ b/src/renderer/components/ft-list-video/ft-list-video.js
@@ -568,7 +568,6 @@ export default defineComponent({
watchProgress: 0,
timeWatched: new Date().getTime(),
isLive: false,
- paid: false,
type: 'video'
}
this.updateHistory(videoData)
@@ -598,8 +597,7 @@ export default defineComponent({
lengthSeconds: this.data.lengthSeconds,
timeAdded: new Date().getTime(),
isLive: false,
- paid: false,
- type: 'video'
+ type: 'video',
}
const payload = {
diff --git a/src/renderer/components/watch-video-info/watch-video-info.js b/src/renderer/components/watch-video-info/watch-video-info.js
index 75f2e448d8d43..1798fb01c4ec4 100644
--- a/src/renderer/components/watch-video-info/watch-video-info.js
+++ b/src/renderer/components/watch-video-info/watch-video-info.js
@@ -318,8 +318,7 @@ export default defineComponent({
lengthSeconds: this.lengthSeconds,
timeAdded: new Date().getTime(),
isLive: false,
- paid: false,
- type: 'video'
+ type: 'video',
}
const payload = {
diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js
index 4799f5188f97e..a07f748bf58b8 100644
--- a/src/renderer/views/Watch/Watch.js
+++ b/src/renderer/views/Watch/Watch.js
@@ -1027,8 +1027,7 @@ export default defineComponent({
watchProgress: watchProgress,
timeWatched: new Date().getTime(),
isLive: false,
- paid: false,
- type: 'video'
+ type: 'video',
}
this.updateHistory(videoData)
From 7fdaae303baf907e2f8d1dc7ee3195113ca9ac10 Mon Sep 17 00:00:00 2001
From: Rusi Dimitrov
Date: Sun, 1 Oct 2023 10:16:44 +0000
Subject: [PATCH 169/176] Translated using Weblate (Bulgarian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/bg/
---
static/locales/bg.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml
index 59c60d8f51058..b056eb0d2a185 100644
--- a/static/locales/bg.yaml
+++ b/static/locales/bg.yaml
@@ -108,6 +108,8 @@ Subscriptions:
All Subscription Tabs Hidden: Всички раздели на абонамента са скрити. За да виждате
съдържанието тук, моля, премахнете скриването на някои раздели в секция "{subsection}"
на "{settingsSection}".
+ Load More Posts: Зареждане на още публикации
+ Empty Posts: В момента в абонираните от вас канали няма публикации.
Trending:
Trending: 'Набиращи популярност'
Trending Tabs: Раздели за набиращи популярност
@@ -441,6 +443,7 @@ Settings:
Hide Channel Podcasts: Скриване на подкастите на канала
Blur Thumbnails: Размазване на миниатюрите
Hide Profile Pictures in Comments: Скриване на профилните снимки в коментарите
+ Hide Subscriptions Community: Скриване на абонаментите Общност
The app needs to restart for changes to take effect. Restart and apply change?: Приложението
трябва да се рестартира за да се приложат промените. Рестартиране?
Proxy Settings:
From 3024f95c66d61095f4783271b647e345a9406973 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Oct 2023 08:52:45 -0400
Subject: [PATCH 170/176] Bump electron from 22.3.24 to 22.3.25 (#4089)
Bumps [electron](https://github.com/electron/electron) from 22.3.24 to 22.3.25.
- [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/v22.3.24...v22.3.25)
---
updated-dependencies:
- dependency-name: electron
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 48f8e92492e42..c53c9839a954f 100644
--- a/package.json
+++ b/package.json
@@ -90,7 +90,7 @@
"copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.8.1",
"css-minimizer-webpack-plugin": "^5.0.1",
- "electron": "^22.3.24",
+ "electron": "^22.3.25",
"electron-builder": "^24.6.4",
"eslint": "^8.50.0",
"eslint-config-prettier": "^9.0.0",
diff --git a/yarn.lock b/yarn.lock
index 64d0a71109b01..02d22d9ed1113 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3448,10 +3448,10 @@ electron-to-chromium@^1.4.431:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz#774dc7cb5e58576d0125939ec34a4182f3ccc87d"
integrity sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==
-electron@^22.3.24:
- version "22.3.24"
- resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.24.tgz#14479cf11cf4709f78d324015429fa82492c2150"
- integrity sha512-wnGsShoRVk1Jmgr7h/jZK9bI5UwMF88sdQ5c8z2j2N8B9elhF/jKDFjwDXUrY1Y0xzAskOP0tYIDE+UbUM4byQ==
+electron@^22.3.25:
+ version "22.3.25"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.25.tgz#a9a70b63a6712c658cd7fab343129b2a78450f80"
+ integrity sha512-AjrP7bebMs/IPsgmyowptbA7jycTkrJC7jLZTb5JoH30PkBC6pZx/7XQ0aDok82SsmSiF4UJDOg+HoLrEBiqmg==
dependencies:
"@electron/get" "^2.0.0"
"@types/node" "^16.11.26"
From bb0e26f2c34bfbcb0e30a811521201ac1d92d8da Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Oct 2023 08:54:13 -0400
Subject: [PATCH 171/176] Bump the stylelint group with 2 updates (#4088)
Bumps the stylelint group with 2 updates: [postcss](https://github.com/postcss/postcss) and [postcss-scss](https://github.com/postcss/postcss-scss).
Updates `postcss` from 8.4.30 to 8.4.31
- [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.4.30...8.4.31)
Updates `postcss-scss` from 4.0.8 to 4.0.9
- [Changelog](https://github.com/postcss/postcss-scss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss-scss/compare/4.0.8...4.0.9)
---
updated-dependencies:
- dependency-name: postcss
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: stylelint
- dependency-name: postcss-scss
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: stylelint
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 4 ++--
yarn.lock | 16 ++++++++--------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/package.json b/package.json
index c53c9839a954f..471402d66a2f6 100644
--- a/package.json
+++ b/package.json
@@ -110,8 +110,8 @@
"lefthook": "^1.5.0",
"mini-css-extract-plugin": "^2.7.6",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.30",
- "postcss-scss": "^4.0.8",
+ "postcss": "^8.4.31",
+ "postcss-scss": "^4.0.9",
"prettier": "^2.8.8",
"rimraf": "^5.0.1",
"sass": "^1.68.0",
diff --git a/yarn.lock b/yarn.lock
index 02d22d9ed1113..707d9e33e00a4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6734,10 +6734,10 @@ postcss-safe-parser@^6.0.0:
resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1"
integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
-postcss-scss@^4.0.6, postcss-scss@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.8.tgz#12a4991a902a782d4e9b86b1f217d5181c6c4f32"
- integrity sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==
+postcss-scss@^4.0.6, postcss-scss@^4.0.9:
+ version "4.0.9"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685"
+ integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==
postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5:
version "6.0.13"
@@ -6775,10 +6775,10 @@ postcss@^7.0.36:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.27, postcss@^8.4.30:
- version "8.4.30"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7"
- integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==
+postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.27, postcss@^8.4.31:
+ version "8.4.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
From 52f87b47ee1166c512c728ac0048b9180fbcb5f4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Oct 2023 13:16:21 -0400
Subject: [PATCH 172/176] Bump rimraf from 5.0.1 to 5.0.5 (#4091)
Bumps [rimraf](https://github.com/isaacs/rimraf) from 5.0.1 to 5.0.5.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v5.0.1...v5.0.5)
---
updated-dependencies:
- dependency-name: rimraf
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 60 ++++++++++++++++++++++++++--------------------------
2 files changed, 31 insertions(+), 31 deletions(-)
diff --git a/package.json b/package.json
index 471402d66a2f6..8c58477aefd0e 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
"postcss": "^8.4.31",
"postcss-scss": "^4.0.9",
"prettier": "^2.8.8",
- "rimraf": "^5.0.1",
+ "rimraf": "^5.0.5",
"sass": "^1.68.0",
"sass-loader": "^13.3.2",
"stylelint": "^15.10.3",
diff --git a/yarn.lock b/yarn.lock
index 707d9e33e00a4..55bc657b51f0d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4459,16 +4459,16 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@^10.2.5:
- version "10.2.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.6.tgz#1e27edbb3bbac055cb97113e27a066c100a4e5e1"
- integrity sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==
+glob@^10.3.7:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
dependencies:
foreground-child "^3.1.0"
- jackspeak "^2.0.3"
+ jackspeak "^2.3.5"
minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2"
- path-scurry "^1.7.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
glob@^7.1.3, glob@^7.1.6:
version "7.2.3"
@@ -5293,10 +5293,10 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-jackspeak@^2.0.3:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
- integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
dependencies:
"@isaacs/cliui" "^8.0.2"
optionalDependencies:
@@ -5707,10 +5707,10 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-lru-cache@^9.1.1:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1"
- integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a"
+ integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
m3u8-parser@4.8.0:
version "4.8.0"
@@ -5941,10 +5941,10 @@ minipass@^5.0.0:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-"minipass@^5.0.0 || ^6.0.2":
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81"
- integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
minizlib@^2.1.1:
version "2.1.2"
@@ -6407,13 +6407,13 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.7.0:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.9.2.tgz#90f9d296ac5e37e608028e28a447b11d385b3f63"
- integrity sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
dependencies:
- lru-cache "^9.1.1"
- minipass "^5.0.0 || ^6.0.2"
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-to-regexp@0.1.7:
version "0.1.7"
@@ -7243,12 +7243,12 @@ rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-rimraf@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0"
- integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==
+rimraf@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
+ integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
dependencies:
- glob "^10.2.5"
+ glob "^10.3.7"
roarr@^2.15.3:
version "2.15.4"
From 4398530ec93d3bb85134243fdad4f5744de88cbf Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 2 Oct 2023 20:50:56 +0200
Subject: [PATCH 173/176] Bump youtubei.js from 6.4.0 to 6.4.1 (#4090)
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 6.4.0 to 6.4.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/v6.4.0...v6.4.1)
---
updated-dependencies:
- dependency-name: youtubei.js
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 8c58477aefd0e..c663badcc6e6a 100644
--- a/package.json
+++ b/package.json
@@ -78,7 +78,7 @@
"vue-router": "^3.6.5",
"vue-tiny-slider": "^0.1.39",
"vuex": "^3.6.2",
- "youtubei.js": "^6.4.0"
+ "youtubei.js": "^6.4.1"
},
"devDependencies": {
"@babel/core": "^7.23.0",
diff --git a/yarn.lock b/yarn.lock
index 55bc657b51f0d..f82875a64374f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8918,10 +8918,10 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
-youtubei.js@^6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/youtubei.js/-/youtubei.js-6.4.0.tgz#8e18f8a87f5315391cf1722e15510d0a3a6b4b0b"
- integrity sha512-c3Hj+9JmMchVWusVOubHDNrvKybzai1vWzZsVIZ9oxt74W0zaP78S0pPW21i/RnVBx29rAA2+ojs56b/REP/1A==
+youtubei.js@^6.4.1:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/youtubei.js/-/youtubei.js-6.4.1.tgz#d7a7c83cd7ddf8fedbaf3d2ab8a36840e233adf4"
+ integrity sha512-GVrDkJmF5t378SeDiZPEAoegZ1pxjbEzNyXTuiQnL5LzPSZKA3IoJwL8lBNlRMKyksI5RbieoHzULsEt4AIbFw==
dependencies:
jintr "^1.1.0"
tslib "^2.5.0"
From 560dcf6f683056f2d699066ac98e780f62f16471 Mon Sep 17 00:00:00 2001
From: NEXI
Date: Tue, 3 Oct 2023 22:52:30 +0000
Subject: [PATCH 174/176] Translated using Weblate (Serbian)
Currently translated at 100.0% (722 of 722 strings)
Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/sr/
---
static/locales/sr.yaml | 1024 ++++++++++++++++++++++++++++++----------
1 file changed, 778 insertions(+), 246 deletions(-)
diff --git a/static/locales/sr.yaml b/static/locales/sr.yaml
index 97e6bc3be2f45..8fd14adb17afa 100644
--- a/static/locales/sr.yaml
+++ b/static/locales/sr.yaml
@@ -6,25 +6,25 @@ FreeTube: 'FreeTube'
Овај део апликације још није спреман. Вратите се касније када буде постигнут напредак.
# Webkit Menu Bar
-File: 'Датотека'
-Quit: 'Затвори'
-Edit: 'Промени'
+File: 'Фајл'
+Quit: 'Напусти'
+Edit: 'Измени'
Undo: 'Поништи'
Redo: 'Обнови'
Cut: 'Исеци'
Copy: 'Копирај'
-Paste: 'Прилепи'
+Paste: 'Налепи'
Delete: 'Избриши'
-Select all: 'Све одабрати'
+Select all: 'Изабери све'
Reload: 'Освежи'
-Force Reload: 'Натерај освежавање'
-Toggle Developer Tools: 'Укључите/искључите алате за програмере'
-Actual size: 'Тренутна величина'
-Zoom in: 'Повећај'
-Zoom out: 'Смањи'
-Toggle fullscreen: 'Цео екран'
+Force Reload: 'Присилно освежи'
+Toggle Developer Tools: 'Укључи алатке за програмере'
+Actual size: 'Стварна величина'
+Zoom in: 'Увећај'
+Zoom out: 'Умањи'
+Toggle fullscreen: 'Укључи цео екран'
Window: 'Прозор'
-Minimize: 'Минимизуј'
+Minimize: 'Минимизирај'
Close: 'Затвори'
Back: 'Назад'
Forward: 'Напред'
@@ -32,174 +32,241 @@ Forward: 'Напред'
# Global
# Anything shared among components / views should be put here
Global:
- Videos: 'Видео'
+ Videos: 'Видео снимци'
+ Counts:
+ Video Count: 1 видео снимак | {count} видео снимака
+ Subscriber Count: 1 пратилац | {count} пратилаца
+ View Count: 1 преглед | {count} прегледа
+ Watching Count: 1 гледање | {count} гледања
+ Channel Count: 1 канал | {count} канала
+ Live: Уживо
+ Community: Заједница
+ Shorts: Shorts
Version {versionNumber} is now available! Click for more details: 'Верзија {versionNumber}
је сада достуна! Кликните за више детаља'
Download From Site: 'Преузми са сајта'
A new blog is now available, {blogTitle}. Click to view more: 'Нови блог је сада доступан,
- {blogTitle}. Кликни за приказ више'
+ {blogTitle}. Кликните да бисте видели више'
# Search Bar
-Search / Go to URL: 'Претражи / иди на УРЛ'
+Search / Go to URL: 'Претрага / Иди на URL'
# In Filter Button
Search Filters:
Search Filters: 'Филтери претраге'
Sort By:
- Sort By: 'Среди по'
+ Sort By: 'Сортирање по'
Most Relevant: 'Најрелевантније'
Rating: 'Оцена'
Upload Date: 'Датум отпремања'
View Count: 'Број прегледа'
Time:
- Time: 'Датум'
- Any Time: 'Све'
+ Time: 'Време'
+ Any Time: 'Било које време'
Last Hour: 'Последњи сат'
Today: 'Данас'
This Week: 'Ове недеље'
- This Month: 'Овај месец'
- This Year: 'Ова година'
+ This Month: 'Овог месеца'
+ This Year: 'Ове године'
Type:
- Type: 'Тип'
- All Types: 'Сва'
- Videos: 'Видео'
+ Type: 'Врста'
+ All Types: 'Све врсте'
+ Videos: 'Видео снимци'
Channels: 'Канали'
#& Playlists
+ Movies: Филмови
Duration:
Duration: 'Трајање'
- All Durations: 'Све'
+ All Durations: 'Сва трајања'
Short (< 4 minutes): 'Кратко (< 4 минута)'
- Long (> 20 minutes): 'Дугачко (> 20 минута)'
+ Long (> 20 minutes): 'Дуго (> 20 минута)'
# On Search Page
+ Medium (4 - 20 minutes): Средње (4 - 20 минута)
Search Results: 'Резултати претраге'
- Fetching results. Please wait: 'Примање резултата. Сачекајте'
- Fetch more results: 'Покажи још резултата'
+ Fetching results. Please wait: 'Прикупљање резултата. Сачекајте'
+ Fetch more results: 'Прикупити више резултата'
There are no more results for this search: 'Нема више резултата за ову претрагу'
# Sidebar
Subscriptions:
# On Subscriptions Page
Subscriptions: 'Праћења'
- Latest Subscriptions: 'Задња праћења'
+ Latest Subscriptions: 'Најновија праћења'
This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 'Овај
- профил има велики број праћења. Присиљавање RSS-а да се избегне ограничење'
+ профил има велики број праћења. Присиљавање RSS-а да се избегне ограничавање
+ брзине'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Ваша
- листа прећења је тренутно празна. Почните да додајете прећење да бисте их видели
+ листа праћења је тренутно празна. Почните да додајете праћења да бисте их видели
овде.'
- 'Getting Subscriptions. Please wait.': 'Примање праћења. Сачекајте.'
+ 'Getting Subscriptions. Please wait.': 'Набављање праћења. Сачекајте.'
Refresh Subscriptions: 'Освежи праћења'
- Load More Videos: 'Учитај више видео записа'
-More: 'Још'
+ Load More Videos: 'Учитај више видео снимака'
+ Load More Posts: Учитај више објава
+ Empty Channels: Канали које пратите тренутно немају ниједан видео снимак.
+ Subscriptions Tabs: Картице праћења
+ Empty Posts: Канали које пратите тренутно немају ниједну објаву.
+ All Subscription Tabs Hidden: Све картице праћења су скривене. Да бисте видели садржај
+ овде, откријте неке картице у одељку „{subsection}“ у „{settingsSection}“.
+ Disabled Automatic Fetching: Онемогућили сте аутоматско прикупљање праћења. Освежите
+ праћења да бисте их видели овде.
+ Error Channels: Канали са грешкама
+More: 'Више'
Trending:
- Trending: 'Тренда'
-Most Popular: 'Нај популарније'
+ Trending: 'У тренду'
+ Gaming: Видео игре
+ Default: Подразумевано
+ Music: Музика
+ Movies: Филмови
+ Trending Tabs: Картице у тренду
+Most Popular: 'Најпопуларније'
Playlists: 'Плејлисте'
User Playlists:
Your Playlists: 'Ваше плејлисте'
- Playlist Message: 'Ова страница се не одражава у потпуности радне плејлисте. Она
- само приказује видео записе које сте сачували или фаворизирали. Када је посао
- завршио, сви видео записи одавде ће се преместити на плејлисту "Омиљени".'
- Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 'Нисте
- сачували ни један видео. Кликни на дугме Сачувај на углу видео записа да бисте
- је овде навели'
+ Playlist Message: 'Ова страница не одражава потпуно функционалне плејлисте. Наводи
+ само видео снимке које сте сачували или означили као фаворите. Када се посао заврши,
+ сви видео снимци који су тренутно овде биће пребачени на плејлисту „Омиљено“.'
+ Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 'Немате
+ сачуване видео снимке. Кликните на дугме за чување у углу видео снимка да бисте
+ га додали на ову листу'
+ Empty Search Message: На овој плејлисти нема видео снимака који одговарају вашој
+ претрази
+ Search bar placeholder: Претрага у плејлисти
History:
# On History Page
History: 'Историја'
- Watch History: 'Види историју'
- Your history list is currently empty.: 'Ваша историја је празна.'
+ Watch History: 'Историја гледања'
+ Your history list is currently empty.: 'Ваша историја је тренутно празна.'
+ Search bar placeholder: Претрага у историји
+ Empty Search Message: У вашој историји нема видео снимака који одговарају вашој
+ претрази
Settings:
# On Settings Page
Settings: 'Подешавања'
The app needs to restart for changes to take effect. Restart and apply change?: 'Апликација
- треба да се поново покрене како би промене ступиле на снагу. Поново покрените
- и примените промене?'
+ се мора рестартовати да би се примениле промене. Рестартовати и применити промене?'
General Settings:
General Settings: 'Општа подешавања'
- Check for Updates: 'Провери ажурирања'
- Check for Latest Blog Posts: 'Провери најновије поруке блога'
- Fallback to Non-Preferred Backend on Failure: 'Повратак на неомиљени Backend на
- неуспех'
- Enable Search Suggestions: 'Покажи предлоге за претрагу'
+ Check for Updates: 'Провера ажурирања'
+ Check for Latest Blog Posts: 'Провера најновијих објава на блогу'
+ Fallback to Non-Preferred Backend on Failure: 'Повратак на непреферирани бек-енд
+ у случају неуспеха'
+ Enable Search Suggestions: 'Омогући предлоге за претрагу'
Default Landing Page: 'Подразумевана почетна страница'
Locale Preference: 'Локална преференција'
Preferred API Backend:
- Preferred API Backend: 'Омиљени API Backend'
+ Preferred API Backend: 'Преферирани API бек-енд'
Local API: 'Локални API'
- Invidious API: 'Инвидиус АПИ'
+ Invidious API: 'Invidious API'
Video View Type:
- Video View Type: 'Тип приказа видеа'
- Grid: 'Решетка'
+ Video View Type: 'Врста приказа видео снимка'
+ Grid: 'Мрежа'
List: 'Листа'
Thumbnail Preference:
- Thumbnail Preference: 'Преференције сличице'
+ Thumbnail Preference: 'Преференција сличице'
Default: 'Подразумевано'
Beginning: 'Почетак'
Middle: 'Средина'
End: 'Крај'
+ Hidden: Скривено
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious инстанца
(Подразумевано је https://invidious.snopyta.org)'
- View all Invidious instance information: 'Погледајте информације свих Invidious
- инстанце'
- Region for Trending: 'Регион за тренд'
+ View all Invidious instance information: 'Погледај све информације о Invidious
+ инстанци'
+ Region for Trending: 'Регион за „У тренду“'
#! List countries
+ External Link Handling:
+ Open Link: Отвори линк
+ External Link Handling: Руковање спољним линковима
+ No Action: Нема радње
+ Ask Before Opening Link: Питај пре отварања линка
+ No default instance has been set: Није подешена ниједна подразумевана инстанца
+ System Default: Системски подразумевано
+ Set Current Instance as Default: Подеси тренутну инстанцу као подразумевану
+ Current instance will be randomized on startup: Тренутна инстанца ће бити насумично
+ изабрана при покретању
+ Clear Default Instance: Очисти подразумеване инстанце
+ The currently set default instance is {instance}: Тренутно подешена подразумевана
+ инстанца је {instance}
+ Current Invidious Instance: Тренутна Invidious инстанца
Theme Settings:
Theme Settings: 'Подешавања теме'
Match Top Bar with Main Color: 'Усклади горњу траку са главном бојом'
Expand Side Bar by Default: 'Подразумевано прошири бочну траку'
- Disable Smooth Scrolling: 'Онемогући глатко померање'
- UI Scale: 'UI скала'
+ Disable Smooth Scrolling: 'Онемогући глатко прелажење'
+ UI Scale: 'Скала корисничког интерфејса'
Base Theme:
Base Theme: 'Основна тема'
Black: 'Црна'
Dark: 'Тамна'
Light: 'Светла'
Dracula: 'Дракула'
+ Pastel Pink: Пастелно розе
+ Hot Pink: Врућа розе
+ Catppuccin Mocha: Catppuccin Mocha
+ System Default: Системски подразумевано
Main Color Theme:
- Main Color Theme: 'Главна боја теме'
- Red: 'Црвено'
+ Main Color Theme: 'Главна тема боја'
+ Red: 'Црвена'
Pink: 'Розе'
- Purple: 'Љубичасто'
- Deep Purple: 'Тамно љубичасто'
+ Purple: 'Љубичаста'
+ Deep Purple: 'Тамнољубичаста'
Indigo: 'Индиго'
- Blue: 'Плаво'
- Light Blue: 'Светло плаво'
+ Blue: 'Плава'
+ Light Blue: 'Светлоплава'
Cyan: 'Цијан'
- Teal: 'Modrozelena'
- Green: 'Зелено'
- Light Green: 'Светло зелено'
- Lime: 'Лимун зелено'
- Yellow: 'Жуто'
+ Teal: 'Тиркизна'
+ Green: 'Зелена'
+ Light Green: 'Светлозелена'
+ Lime: 'Лимета'
+ Yellow: 'Жута'
Amber: 'Амбер'
- Orange: 'Наранђасто'
- Deep Orange: 'Тамно нарађасто'
- Dracula Cyan: 'Дракула Цијан'
- Dracula Green: 'Дракула Зелено'
- Dracula Orange: 'Дракула Наранђасто'
- Dracula Pink: 'Дракула Розе'
- Dracula Purple: 'Дракула Љубичасто'
- Dracula Red: 'Дракула Црвено'
- Dracula Yellow: 'Дракула Жуто'
- Secondary Color Theme: 'Секундарна боја теме'
+ Orange: 'Наранџаста'
+ Deep Orange: 'Тамнонаранџаста'
+ Dracula Cyan: 'Дракула цијан'
+ Dracula Green: 'Дракула зелена'
+ Dracula Orange: 'Дракула наранџаста'
+ Dracula Pink: 'Дракула розе'
+ Dracula Purple: 'Дракула љубичаста'
+ Dracula Red: 'Дракула црвена'
+ Dracula Yellow: 'Дракула жута'
+ Catppuccin Mocha Red: Catppuccin Mocha црвена
+ Catppuccin Mocha Maroon: Catppuccin Mocha бордо
+ Catppuccin Mocha Sky: Catppuccin Mocha небо
+ Catppuccin Mocha Sapphire: Catppuccin Mocha сафирна
+ Catppuccin Mocha Teal: Catppuccin Mocha тиркизна
+ Catppuccin Mocha Yellow: Catppuccin Mocha жута
+ Catppuccin Mocha Rosewater: Catppuccin Mocha светлорозе-румена
+ Catppuccin Mocha Peach: Catppuccin Mocha бресква
+ Catppuccin Mocha Flamingo: Catppuccin Mocha фламингос
+ Catppuccin Mocha Mauve: Catppuccin Mocha мауве
+ Catppuccin Mocha Pink: Catppuccin Mocha розе
+ Catppuccin Mocha Lavender: Catppuccin Mocha лаванда
+ Catppuccin Mocha Blue: Catppuccin Mocha плава
+ Catppuccin Mocha Green: Catppuccin Mocha зелена
+ Secondary Color Theme: 'Секундарна тема боје'
#* Main Color Theme
+ Hide FreeTube Header Logo: Сакриј FreeTube логотип у заглављу
+ Hide Side Bar Labels: Сакриј ознаке бочне траке
Player Settings:
Player Settings: 'Подешавања плејера'
- Force Local Backend for Legacy Formats: 'форсирај локални Backend за Legacy формате'
- Play Next Video: 'Пусти следећи видео'
- Turn on Subtitles by Default: 'Подразумевано упали титлове'
- Autoplay Videos: 'Ауто-пусти видео'
- Proxy Videos Through Invidious: 'Прокси видео преко Invidious'
- Autoplay Playlists: 'Ауто-пусти плејлисте'
- Enable Theatre Mode by Default: 'Подразумевано активирај театар мод'
+ Force Local Backend for Legacy Formats: 'Присили локални бек-енд за застареле
+ формате'
+ Play Next Video: 'Пусти следећи видео снимак'
+ Turn on Subtitles by Default: 'Подразумевано укључи титлове'
+ Autoplay Videos: 'Аутоматски пусти видео снимак'
+ Proxy Videos Through Invidious: 'Прокси видео снимци преко Invidious-а'
+ Autoplay Playlists: 'Аутоматски пусти плејлисте'
+ Enable Theatre Mode by Default: 'Подразумевано омогући биоскопски режим'
Playlist Next Video Interval: 'Интервал следећег видеа из плејлисте'
- Default Volume: 'Подразумевана јачина'
+ Default Volume: 'Подразумевана јачина звука'
Default Playback Rate: 'Подразумевана брзина репродукције'
Default Video Format:
- Default Video Format: 'Подразумеван формат видеа'
+ Default Video Format: 'Подразумевани формат видео снимка'
Dash Formats: 'DASH формати'
- Legacy Formats: 'Legacy формати'
+ Legacy Formats: 'Застарели формати'
Audio Formats: 'Аудио формати'
Default Quality:
- Default Quality: 'Подразумеван квалитет'
- Auto: 'Ауто'
+ Default Quality: 'Подразумевани квалитет'
+ Auto: 'Аутоматски'
144p: '144p'
240p: '240p'
360p: '360p'
@@ -209,237 +276,702 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Screenshot:
+ Folder Label: Фолдер за снимке екрана
+ Error:
+ Empty File Name: Празан назив фајла
+ Forbidden Characters: Забрањени знакови
+ Folder Button: Избор фолдера
+ Format Label: Формат снимка екрана
+ Enable: Омогући снимак екрана
+ Ask Path: Питај за фолдер за чување
+ Quality Label: Квалитет снимка екрана
+ File Name Tooltip: Можете да користите променљиве испод. %Y Година 4 цифре.
+ %M Месец 2 цифре. %D Дан 2 цифре. %H Сат 2 цифре. %N Минут 2 цифре. %S Секунда
+ 2 цифре. %T Милисекунда 3 цифре. %s Секунда видео снимка. %t Милисекунда видео
+ снимка 3 цифре. %i ID видео снимка. Такође, можете да користите „\“ или „/“
+ да бисте направили потфолдере.
+ File Name Label: Образац назива фајла
+ Scroll Volume Over Video Player: Превуци за јачину звука преко плејера видео снимка
+ Skip by Scrolling Over Video Player: Прескочи превлачењем преко плејера видео
+ снимка
+ Allow DASH AV1 formats: Дозволи DASH AV1 формате
+ Scroll Playback Rate Over Video Player: Превуци за брзину репродукције преко плејера
+ видео снимка
+ Fast-Forward / Rewind Interval: Интервал брзог премотавања унапред/уназад
+ Comment Auto Load:
+ Comment Auto Load: Аутоматско учитавање коментара
+ Video Playback Rate Interval: Интервал брзине репродукције видео снимка
+ Max Video Playback Rate: Максимална брзина репродукције видео снимка
+ Enter Fullscreen on Display Rotate: Уђи у цео екран при окретању екрана
+ Next Video Interval: Интервал следећег видео снимка
+ Display Play Button In Video Player: Прикажи дугме за пуштање у плејеру видео
+ снимка
Privacy Settings:
Privacy Settings: 'Подешавања приватности'
Remember History: 'Запамти историју'
- Save Watched Progress: 'Сачувај напредак видеа'
- Clear Search Cache: 'Испразни кеш претраге'
- Are you sure you want to clear out your search cache?: 'Јесте ли сигурни да желите
- да очистите кеш претраге?'
- Search cache has been cleared: 'Кеш претраживања је обрисано'
- Remove Watch History: 'Избриши историју гледања'
- Are you sure you want to remove your entire watch history?: 'Сигурно желите да
- избришете целу историју гледања?'
- Watch history has been cleared: 'Историја је избрисана'
- Remove All Subscriptions / Profiles: 'Обриши сва праћења/профили'
- Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Да
- ли сте сигурни да желите уклонити сва праћења и профиле? Ово се не може поништити.'
+ Save Watched Progress: 'Сачувај напредак одгледаног'
+ Clear Search Cache: 'Очисти кеш претраге'
+ Are you sure you want to clear out your search cache?: 'Желите ли заиста да очистите
+ кеш претраге?'
+ Search cache has been cleared: 'Кеш претраге је очишћен'
+ Remove Watch History: 'Очисти историју гледања'
+ Are you sure you want to remove your entire watch history?: 'Желите ли заиста
+ да очистите целу историју гледања?'
+ Watch history has been cleared: 'Историја гледања је очишћена'
+ Remove All Subscriptions / Profiles: 'Уклони сва праћења/профиле'
+ Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Желите
+ ли заиста да уклоните сва праћења и профиле? Ово се не може поништити.'
+ Automatically Remove Video Meta Files: Аутоматски уклони мета фајлове за видео
+ снимак
+ Save Watched Videos With Last Viewed Playlist: Сачувај одгледане видео снимке
+ са последње гледане плејлисте
Subscription Settings:
Subscription Settings: 'Подешавања праћења'
- Hide Videos on Watch: 'Сакриј одгледани видео записи'
- Fetch Feeds from RSS: 'Дохват RSS-а'
- Manage Subscriptions: 'Управљај ста пратиш'
+ Hide Videos on Watch: 'Сакриј видео снимке на гледању'
+ Fetch Feeds from RSS: 'Прикупи фидове из RSS-а'
+ Manage Subscriptions: 'Управљање праћењима'
+ Fetch Automatically: Аутоматски прикупи фид
Distraction Free Settings:
- Distraction Free Settings: 'Подешавања дистракције'
- Hide Video Views: 'Сакриј број приказа видеа'
- Hide Video Likes And Dislikes: 'Сакриј видео лајкове'
- Hide Channel Subscribers: 'Сакриј број праћења канала'
- Hide Comment Likes: 'Сакриј лајковање из коментара'
- Hide Recommended Videos: 'Сакриј препоручене видее'
- Hide Trending Videos: 'Сакриј видее у тренду'
- Hide Popular Videos: 'Сакриј популарне видее'
+ Distraction Free Settings: 'Подешавања „Без ометања“'
+ Hide Video Views: 'Сакриј прегледе видео снимка'
+ Hide Video Likes And Dislikes: 'Сакриј свиђања и несвиђања видео снимка'
+ Hide Channel Subscribers: 'Сакриј праћења канала'
+ Hide Comment Likes: 'Сакриј свиђања коментара'
+ Hide Recommended Videos: 'Сакриј препоручене видео снимке'
+ Hide Trending Videos: 'Сакриј видео снимке у тренду'
+ Hide Popular Videos: 'Сакриј популарне видео снимке'
Hide Playlists: 'Сакриј плејлисте'
- Hide Live Chat: 'Сакриј уживо ћаскање'
+ Hide Live Chat: 'Сакриј ћаскање уживо'
Hide Active Subscriptions: 'Сакриј активна праћења'
+ Blur Thumbnails: Замагли сличице
+ Hide Channels Placeholder: Назив канала или ID канала
+ Hide Video Description: Сакриј опис видео снимка
+ Hide Chapters: Сакриј поглавља
+ Sections:
+ Watch Page: Страница гледања
+ Side Bar: Бочна трака
+ Channel Page: Страница канала
+ Subscriptions Page: Страница праћења
+ General: Опште
+ Hide Channel Community: Сакриј заједницу канала
+ Hide Subscriptions Videos: Сакриј видео снимке канала које пратите
+ Hide Comments: Сакриј коментаре
+ Hide Channel Shorts: Сакриј Shorts снимке канала
+ Hide Sharing Actions: Сакриј радње дељења
+ Hide Channel Podcasts: Сакриј подкасте канала
+ Hide Live Streams: Сакриј стримове уживо
+ Hide Channel Playlists: Сакриј плејлисте канала
+ Hide Subscriptions Community: Сакриј заједницу канала које пратите
+ Hide Channels: Сакриј видео снимке са канала
+ Hide Subscriptions Live: Сакриј стримове уживо канала које пратите
+ Hide Subscriptions Shorts: Сакриј Shorts снимке канала које пратите
+ Display Titles Without Excessive Capitalisation: Прикажи наслове без претераног
+ коришћења великих слова
+ Hide Featured Channels: Сакриј истакнуте канале
+ Hide Profile Pictures in Comments: Сакриј слике профила у коментарима
+ Hide Upcoming Premieres: Сакриј предстојеће премијере
+ Hide Channel Releases: Сакриј издања канала
Data Settings:
Data Settings: 'Подешавања података'
- Select Import Type: 'Одабери тип увоза'
- Select Export Type: 'Одабери тип извоза'
+ Select Import Type: 'Избор врсте увоза'
+ Select Export Type: 'Избор врсте извоза'
Import Subscriptions: 'Увоз праћења'
Import FreeTube: 'Увоз FreeTube'
Import YouTube: 'Увоз YouTube'
Import NewPipe: 'Увоз NewPipe'
- Check for Legacy Subscriptions: 'Провери да ли постоје стара праћања'
- Export Subscriptions: 'Извоз праћања'
- Export FreeTube: 'Извоз FreeTube'
- Export YouTube: 'Извоз YouTube'
- Export NewPipe: 'Извоз NewPipe'
+ Check for Legacy Subscriptions: 'Провера застарелих праћења'
+ Export Subscriptions: 'Извоз праћења'
+ Export FreeTube: 'Извоз FreeTube-а'
+ Export YouTube: 'Извоз YouTube-а'
+ Export NewPipe: 'Извоз NewPipe-а'
Import History: 'Увоз историје'
Export History: 'Извоз историје'
- Profile object has insufficient data, skipping item: 'Објект профила нема довољно
- података, прескакање'
- All subscriptions and profiles have been successfully imported: 'Сва праћања и
+ Profile object has insufficient data, skipping item: 'Објекат профила нема довољно
+ података, прескакање предмета'
+ All subscriptions and profiles have been successfully imported: 'Сва праћења и
профили су успешно увезени'
- All subscriptions have been successfully imported: 'Сва праћања су успешно увезене'
- One or more subscriptions were unable to be imported: 'Увоз једне или више праћења
- није успео'
- Invalid subscriptions file: 'Датотека праћења није добра'
- This might take a while, please wait: 'Ово би могло потрајати неко време, молим
- вас причекајте'
- Invalid history file: 'Неважећа датотека историје'
- Subscriptions have been successfully exported: 'Праћења су успешно извезени'
- History object has insufficient data, skipping item: 'Објект историје нема довољно
- података, прескакање'
+ All subscriptions have been successfully imported: 'Сва праћења су успешно увезена'
+ One or more subscriptions were unable to be imported: 'Није могуће увести једно
+ или више праћења'
+ Invalid subscriptions file: 'Неважећи фајл праћења'
+ This might take a while, please wait: 'Ово може потрајати, сачекајте'
+ Invalid history file: 'Неважећи фајл историје'
+ Subscriptions have been successfully exported: 'Праћења су успешно извезена'
+ History object has insufficient data, skipping item: 'Објекат историје нема довољно
+ података, прескакање предмета'
All watched history has been successfully imported: 'Цела историја гледања је
успешно увезена'
All watched history has been successfully exported: 'Цела историја гледања је
успешно извезена'
- Unable to read file: 'Није могуће читати датотеку'
- Unable to write file: 'Није могуће писати датотеку'
- Unknown data key: 'Непознат кључ података'
- How do I import my subscriptions?: 'Како унети моја праћања?'
- Manage Subscriptions: 'Управљај праћањима'
+ Unable to read file: 'Није могуће прочитати фајл'
+ Unable to write file: 'Није могуће написати фајл'
+ Unknown data key: 'Непознати кључ података'
+ How do I import my subscriptions?: 'Како да увезем своја праћења?'
+ Manage Subscriptions: 'Управљање праћењима'
+ All playlists has been successfully exported: Све плејлисте су успешно извезене
+ Playlist File: Фајл плејлисте
+ Subscription File: Фајл праћења
+ History File: Фајл историје
+ Export Playlists: Извор плејлиста
+ Import Playlists: Увоз плејлиста
+ All playlists has been successfully imported: Све плејлисте су успешно увезене
+ Playlist insufficient data: Нема довољно података за плејлисту „{playlist}“, прескакање
+ предмета
Proxy Settings:
Proxy Settings: 'Подешавања проксија'
- Enable Tor / Proxy: 'Активирај Tor/Прокси'
+ Enable Tor / Proxy: 'Омогући Tor / Прокси'
Proxy Protocol: 'Протокол проксија'
Proxy Host: 'Хост проксија'
- Proxy Port Number: 'Порт за прокси'
- Clicking on Test Proxy will send a request to: 'Клик на „Пробај Прокси“ послаће
+ Proxy Port Number: 'Број порта проксија'
+ Clicking on Test Proxy will send a request to: 'Клик на „Тестирај прокси“ послаће
захтев на'
- Test Proxy: 'Пробај Прокси'
+ Test Proxy: 'Тестирај прокси'
Your Info: 'Ваше информације'
Ip: 'IP'
- Country: 'Земља'
+ Country: 'Држава'
Region: 'Регион'
City: 'Град'
Error getting network information. Is your proxy configured properly?: 'Грешка
- у добијању информација о мрежи. Да ли је ваш проки правилно подешен?'
+ при набављању информација о мрежи. Да ли је ваш прокси исправно конфигурисан?'
+ Experimental Settings:
+ Replace HTTP Cache: Замени HTTP кеш
+ Experimental Settings: Експериментална подешавања
+ Warning: Ова подешавања су експериментална, могу да доведу до отказивања док су
+ омогућена. Прављење резервних копија је веома препоручљиво. Користите на властиту
+ одговорност!
+ SponsorBlock Settings:
+ Notify when sponsor segment is skipped: Обавештење када се спонзор сегмент прескочи
+ 'SponsorBlock API Url (Default is https://sponsor.ajay.app)': URL API-ја SponsorBlock-а
+ (Подразумевано је https://sponsor.ajay.app)
+ Skip Options:
+ Skip Option: Опција прескакања
+ Do Nothing: Не ради ништа
+ Prompt To Skip: Упит за прескакање
+ Auto Skip: Аутоматско прескакање
+ Show In Seek Bar: Приказ у траци за прескакање
+ UseDeArrowTitles: Користи DeArrow наслове видео снимака
+ Enable SponsorBlock: Омогући SponsorBlock
+ SponsorBlock Settings: Подешавања SponsorBlock-а
+ Category Color: Боја категорије
+ External Player Settings:
+ External Player: Спољни плејер
+ External Player Settings: Подешавања спољног плејера
+ Custom External Player Executable: Прилагођени извршни спољни плејер
+ Ignore Unsupported Action Warnings: Игнориши упозорења о неподржаним радњама
+ Custom External Player Arguments: Прилагођени аргументи спољног плејера
+ Players:
+ None:
+ Name: Ниједно
+ Download Settings:
+ Choose Path: Избор путање
+ Open in web browser: Отвори у прегледачу
+ Ask Download Path: Питај за путању за преузимање
+ Download Behavior: Понашање преузимања
+ Download in app: Преузми у апликацији
+ Download Settings: Подешавања преузимања
+ Password Settings:
+ Remove Password: Уклони лозинку
+ Set Password To Prevent Access: Подеси лозинку да спречиш приступ подешавањима
+ Password Settings: Подешавања лозинке
+ Set Password: Подеси лозинку
+ Parental Control Settings:
+ Show Family Friendly Only: Прикажи само погодно за породицу
+ Hide Unsubscribe Button: Сакриј дугме „Прекини праћење“
+ Hide Search Bar: Сакриј траку за претрагу
+ Parental Control Settings: Подешавања родитељске контроле
+ Password Dialog:
+ Password Incorrect: Лозинка нетачна
+ Password: Лозинка
+ Enter Password To Unlock: Унесите лозинку да бисте откључали подешавања
+ Unlock: Откључај
About:
#On About page
- About: 'О програму'
+ About: 'О апликацији'
Beta: 'Бета'
- Source code: 'Изворни код'
- Licensed under the AGPLv3: 'Лиценциран под AGPLv3'
- View License: 'Види лиценцу'
- Downloads / Changelog: 'Преузимања/Листа промена'
- GitHub releases: 'Доступна издања на GitHub'
+ Source code: 'Изворни кôд'
+ Licensed under the AGPLv3: 'Лиценцирано под AGPLv3'
+ View License: 'Погледај лиценцу'
+ Downloads / Changelog: 'Преузимања / Евиденција промена'
+ GitHub releases: 'GitHub издања'
Help: 'Помоћ'
- FreeTube Wiki: 'Wiki од FreeTube-а'
- FAQ: 'FAQ'
- Report a problem: 'Пријави проблем'
- GitHub issues: 'Проблеми које је заједничка идентификовала на GitHub'
- Please check for duplicates before posting: 'Молимо проверите дупликате пре објављивања'
- Website: 'Вебсајт'
+ FreeTube Wiki: 'FreeTube Wiki'
+ FAQ: 'ЧПП'
+ Report a problem: 'Пријава проблема'
+ GitHub issues: 'Пријава проблема на GitHub-у'
+ Please check for duplicates before posting: 'Проверите да ли има дупликата пре објављивања'
+ Website: 'Веб-сајт'
Blog: 'Блог'
- Email: 'Е-пошта'
+ Email: 'Имејл'
Mastodon: 'Mastodon'
- Chat on Matrix: 'Ћаскање на Matrix'
+ Chat on Matrix: 'Ћаскање на Matrix-у'
Please read the: 'Прочитајте'
room rules: 'правила собе'
- Translate: 'Превод'
- Credits: 'Призњања'
- FreeTube is made possible by: 'FreeTube је омогућено од'
+ Translate: 'Преведи'
+ Credits: 'Кредити'
+ FreeTube is made possible by: 'FreeTube су омогућили'
these people and projects: 'ови људи и пројекти'
Donate: 'Донација'
+ Discussions: Дискусије
Profile:
- Profile Select: 'Одабир профила'
+ Profile Select: 'Избор профила'
Profile Filter: 'Филтер профила'
All Channels: 'Сви канали'
- Profile Manager: 'Менаџер профила'
- Create New Profile: 'Креирај нови профил'
- Edit Profile: 'Уреди профил'
- Color Picker: 'Селектор боја'
+ Profile Manager: 'Управљање профилом'
+ Create New Profile: 'Направи нови профил'
+ Edit Profile: 'Измени профил'
+ Color Picker: 'Бирач боје'
Custom Color: 'Прилагођена боја'
Profile Preview: 'Преглед профила'
- Create Profile: 'Креирај профил'
+ Create Profile: 'Направи профил'
Update Profile: 'Ажурирај профил'
- Make Default Profile: 'Креирај подразумевани профил'
+ Make Default Profile: 'Направи подразумевани профил'
Delete Profile: 'Избриши профил'
- Are you sure you want to delete this profile?: 'Сигурно желите да избришете овај
+ Are you sure you want to delete this profile?: 'Желите ли заиста да избришете овај
профил?'
- All subscriptions will also be deleted.: 'Сва праћања ће такође бити избрисани.'
- Profile could not be found: 'Профил не може да се нађе'
- Your profile name cannot be empty: 'Име профила не може да буде празно'
- Profile has been created: 'Профил је креиран'
+ All subscriptions will also be deleted.: 'Сва праћења ће такође бити избрисана.'
+ Profile could not be found: 'Није могуће пронаћи профил'
+ Your profile name cannot be empty: 'Име профила не може бити празно'
+ Profile has been created: 'Профил је направљен'
Profile has been updated: 'Профил је ажуриран'
- Your default profile has been set to {profile}: 'Ваш подразумеван профил је постављен
+ Your default profile has been set to {profile}: 'Ваш подразумевани профил је постављен
на {profile}'
- Removed {profile} from your profiles: 'Уклоњено {profile} од ваших профила'
+ Removed {profile} from your profiles: 'Уклоњен {profile} из ваших профила'
Your default profile has been changed to your primary profile: 'Ваш подразумевани
профил је промењен на ваш примарни профил'
'{profile} is now the active profile': '{profile} је сада активан профил'
- Subscription List: 'Листа праћања'
+ Subscription List: 'Листа праћења'
Other Channels: 'Остали канали'
- '{number} selected': '{number} одабрано'
- Select All: 'Све одабрати'
- Select None: 'Скини одабирање'
- Delete Selected: 'Избриши одабрано'
- Add Selected To Profile: 'Додај одабрано на профил'
- No channel(s) have been selected: 'Ни један канал није одабран'
+ '{number} selected': 'Изабрано: {number}'
+ Select All: 'Изабери све'
+ Select None: 'Ниједан'
+ Delete Selected: 'Избриши изабрано'
+ Add Selected To Profile: 'Додај изабрано на профил'
+ No channel(s) have been selected: 'Није изабран ниједан канал'
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
- : 'Ово је ваш примарни профил. Јесте ли сигурни да желите да избришете одабране
- канале? Исти канали биће избрисани у било којем профилу у којем се налазе.'
- Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Јесте
- ли сигурни да желите да избришете одабране канале? Ово неће избрисати канал из
- било којег другог профила.'
+ : 'Ово је ваш примарни профил. Желите ли заиста да избришете изабране канале? Исти
+ канали ће бити избрисани у било ком профилу на којем се налазе.'
+ Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Желите
+ ли заиста да избришете изабране канале? Ово неће избрисати канал из било ког
+ другог профила.'
#On Channel Page
+ Profile Settings: Подешавања профила
+ Toggle Profile List: Укључи листу профила
Channel:
Subscriber: 'Пратилац'
Subscribers: 'Пратиоци'
- Subscribe: 'Прати'
- Unsubscribe: 'Не прати више'
- Channel has been removed from your subscriptions: 'Канал је уклоњен из праћања'
- Removed subscription from {count} other channel(s): 'Праћење уклоњен из {count}
- остала канала'
- Added channel to your subscriptions: 'Канал додат у прећења'
- Search Channel: 'Тражи канал'
- Your search results have returned 0 results: 'Резултати претраге вратили су 0 резултата'
- Sort By: 'Среди по'
+ Subscribe: 'Запрати'
+ Unsubscribe: 'Прекини праћење'
+ Channel has been removed from your subscriptions: 'Канал је уклоњен из ваших праћења'
+ Removed subscription from {count} other channel(s): 'Уклоњено праћење са {count}
+ других канала'
+ Added channel to your subscriptions: 'Канал је додат у ваша праћења'
+ Search Channel: 'Претрага канала'
+ Your search results have returned 0 results: 'Резултати претраге су дали 0 резултата'
+ Sort By: 'Сортирање по'
Videos:
- Videos: 'Видео'
- This channel does not currently have any videos: 'Овај канал тренутно нема видео'
+ Videos: 'Видео снимци'
+ This channel does not currently have any videos: 'Овај канал тренутно нема ниједан
+ видео снимак'
Sort Types:
Newest: 'Најновије'
- Oldest: 'Нај старије'
- Most Popular: 'Нај популарније'
+ Oldest: 'Најстарије'
+ Most Popular: 'Најпопуларније'
Playlists:
- Playlists: 'Плејлиста'
+ Playlists: 'Плејлисте'
This channel does not currently have any playlists: 'Овај канал тренутно нема
- ни једну плејлисту'
+ ниједну плејлисту'
Sort Types:
- Last Video Added: 'Задњи додат видео'
- Newest: 'Нај новије'
- Oldest: 'Нај старије'
+ Last Video Added: 'Последњи додат видео снимак'
+ Newest: 'Најновије'
+ Oldest: 'Најстарије'
About:
- About: 'О...'
+ About: 'О каналу'
Channel Description: 'Опис канала'
Featured Channels: 'Истакнути канали'
+ Joined: Придружено
+ Tags:
+ Search for: Претрага „{tag}“
+ Tags: Ознаке
+ Details: Детаљи
+ Location: Локација
+ Community:
+ This channel currently does not have any posts: Овај канал тренутно нема ниједну
+ објаву
+ Reveal Answers: Откриј одговоре
+ Hide Answers: Сакриј одговоре
+ votes: 'Гласова: {votes}'
+ Live:
+ Live: Уживо
+ This channel does not currently have any live streams: Овај канал тренутно нема
+ ниједан стрим уживо
+ Releases:
+ Releases: Издања
+ This channel does not currently have any releases: Овај канал тренутно нема ниједно
+ издање
+ This channel does not allow searching: Овај канал не дозвољава претрагу
+ Shorts:
+ This channel does not currently have any shorts: Овај канал тренутно нема Shorts
+ снимке
+ Podcasts:
+ This channel does not currently have any podcasts: Овај канал тренутно нема ниједан
+ подкаст
+ Podcasts: Подкасти
+ Channel Tabs: Картице канала
+ This channel is age-restricted and currently cannot be viewed in FreeTube.: Овај
+ канал је старосно ограничен и тренутно се не може гледати на FreeTube-у.
+ This channel does not exist: Овај канал не постоји
Video:
- Mark As Watched: 'Означи као погледано'
+ Mark As Watched: 'Означи као одгледано'
Remove From History: 'Уклони из историје'
- Video has been marked as watched: 'Видео је постављен као гледан'
- Video has been removed from your history: 'Видео је уклоњеј из историје'
- Save Video: 'Сачувај видео'
- Video has been saved: 'Видео је сачуван'
- Video has been removed from your saved list: 'Видео је уклоњен из сачуване листе'
- Open in YouTube: 'Отвори у YouTube'
- Copy YouTube Link: 'Копирај YouTube везу'
- Open YouTube Embedded Player: 'Отвори у Youtube-NoCookie'
- Copy YouTube Embedded Player Link: 'Копирај Youtube-NoCookie везу'
- Open in Invidious: 'Отвори у Invidious'
- Copy Invidious Link: 'Копирај Invidious везу'
- Open Channel in YouTube: 'Отвори канал у YouTube'
- Copy YouTube Channel Link: 'Копирај везу YouTube канала'
- Open Channel in Invidious: 'Отвори канал у Invidious'
- Copy Invidious Channel Link: 'Копирај везу Invidious канала'
+ Video has been marked as watched: 'Видео снимак је означен као одгледан'
+ Video has been removed from your history: 'Видео снимак је уклоњен из ваше историје'
+ Save Video: 'Сачувај видео снимак'
+ Video has been saved: 'Видео снимак је сачуван'
+ Video has been removed from your saved list: 'Видео снимак је уклоњен из ваше листе
+ сачуваног'
+ Open in YouTube: 'Отвори у YouTube-у'
+ Copy YouTube Link: 'Копирај YouTube линк'
+ Open YouTube Embedded Player: 'Отвори YouTube уграђени плејер'
+ Copy YouTube Embedded Player Link: 'Копирај линк YouTube уграђеног плејера'
+ Open in Invidious: 'Отвори у Invidious-у'
+ Copy Invidious Link: 'Копирај Invidious линк'
+ Open Channel in YouTube: 'Отвори канал у YouTube-у'
+ Copy YouTube Channel Link: 'Копирај линк YouTube канала'
+ Open Channel in Invidious: 'Отвори канал у Invidious-у'
+ Copy Invidious Channel Link: 'Копирај линк Invidious канала'
Views: 'Прегледа'
- Loop Playlist: 'Безкрајна плејлиста'
- Shuffle Playlist: 'Промешај плејлисту'
- Reverse Playlist: 'Обрни плејлисту'
- Play Next Video: 'Пусти следећи видео'
- Play Previous Video: 'Пусти претходни видео'
+ Loop Playlist: 'Понављај плејлисту'
+ Shuffle Playlist: 'Мешање плејлисте'
+ Reverse Playlist: 'Обрнута плејлиста'
+ Play Next Video: 'Пусти следећи видео снимак'
+ Play Previous Video: 'Пусти претходни видео снимак'
Watched: 'Одгледано'
- Autoplay: 'Аутоматско покретање'
- Starting soon, please refresh the page to check again: 'Ускоро почиње, освежите
+ Autoplay: 'Аутоматско пуштање'
+ Starting soon, please refresh the page to check again: 'Почиње ускоро, освежите
страницу да бисте поново проверили'
# As in a Live Video
- Live: 'Директно'
- Live Now: 'Директно сада'
- Live Chat: 'Директно ћаскање'
- Enable Live Chat: 'Упали директно ћаскање'
- Live Chat is currently not supported in this build.: 'Директно ћаскање тренутно
- није подржан у овој изградњи.'
- 'Chat is disabled or the Live Stream has ended.': 'Ћаскање је угашено или директан
- пренос је завршен.'
+ Live: 'Уживо'
+ Live Now: 'Уживо сада'
+ Live Chat: 'Ћаскање уживо'
+ Enable Live Chat: 'Омогући ћаскање уживо'
+ Live Chat is currently not supported in this build.: 'Ћаскање уживо тренутно није
+ подржано у овом издању.'
+ 'Chat is disabled or the Live Stream has ended.': 'Ћаскање је онемогућено или је
+ стрим уживо завршен.'
+ Published:
+ Month: Месец
+ Sep: Сеп.
+ Seconds: Секунди
+ In less than a minute: За мање од једног минута
+ Week: Недеља
+ Upcoming: Премијера за
+ Dec: Дец.
+ Jan: Јан.
+ Weeks: Недеља
+ Days: Дана
+ Years: Године
+ May: Мај
+ Mar: Мар.
+ Hours: Сати
+ Oct: Окт.
+ Months: Месеци
+ Apr: Апр.
+ Feb: Феб.
+ Jul: Јул
+ Minutes: Минути
+ Minute: Минут
+ Day: Дан
+ Hour: Сат
+ Jun: Јун
+ Second: Секунда
+ Year: Година
+ Nov: Нов.
+ Ago: Пре
+ Aug: Авг.
+ Upcoming: Предстојеће
+ Stats:
+ Video statistics are not available for legacy videos: Статистика видео снимака
+ није доступна за застареле видео снимке
+ Buffered: Баферовано
+ Bitrate: Брзина кадра
+ Volume: Волумен (партиција)
+ Mimetype: Mimetype
+ Resolution: Резолуција
+ Dropped / Total Frames: Испуштено / Укупно кадрова
+ Bandwidth: Проток
+ Player Dimensions: Димензије плејера
+ Video ID: ID видео снимка
+ Sponsor Block category:
+ interaction: Интеракција
+ filler: Попуњавање
+ music offtopic: Сегмент без музике
+ outro: Завршна анимација
+ self-promotion: Самопромоција
+ sponsor: Спонзор
+ recap: Рекапитулација
+ intro: Уводна анимација
+ translated from English: преведено са енглеског
+ External Player:
+ Unsupported Actions:
+ opening playlists: отварање плејлиста
+ shuffling playlists: мешање плејлиста
+ setting a playback rate: подешавање брзине репродукције
+ looping playlists: понављање плејлиста
+ reversing playlists: обртање плејлиста
+ opening specific video in a playlist (falling back to opening the video): отварање
+ одређеног видео снимка на плејлисти (повратак на отварање видео снимка)
+ starting video at offset: почињање видео снимка у офсету
+ OpeningTemplate: Отварање {videoOrPlaylist} у {externalPlayer}...
+ OpenInTemplate: Отвори у {externalPlayer}
+ video: видео снимак
+ UnsupportedActionTemplate: '{externalPlayer} не подржава: {action}'
+ playlist: плејлиста
+ Live chat is enabled. Chat messages will appear here once sent.: Ћаскање уживо је
+ омогућено. Поруке ћаскања ће се појавити овде када буду послате.
+ Streamed on: Стримовано
+ Audio:
+ Medium: Средње
+ High: Високо
+ Best: Најбоље
+ Low: Ниско
+ video only: само видео снимак
+ Skipped segment: Прескочен сегмент
+ Pause on Current Video: Паузирај на тренутном видео снимку
+ Premieres on: Премијера на
+ audio only: само аудио снимак (звук)
+ Show Super Chat Comment: Прикажи Super Chat коментар
+ Scroll to Bottom: Превуци до дна
+ Started streaming on: Започето стримовање
+ Publicationtemplate: пре {number} {unit}
+ Premieres: Премијера
+ Download Video: Преузми видео снимак
+ Published on: Објављено
+ 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': Ћаскање
+ уживо тренутно није подржано са Invidious API-јем. Потребна је директна веза са
+ YouTube-ом.
+ 'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Ћаскање
+ уживо није доступно за овај стрим. Можда га је онемогућио аутор.
Tooltips:
Subscription Settings:
- Fetch Feeds from RSS: 'Када је омогућено, FreeTube ће користити РСС уместо свог
- подразумеваног метода за прикупљање вашег праћења. РСС је бржи и спречава блокирање
- ИП-а, али не пружа одређене информације попут трајања видеа или статуса уживо'
+ Fetch Feeds from RSS: 'Када је омогућено, FreeTube ће користити RSS уместо свог
+ подразумеваног метода за прикупљање вашег фида праћења. RSS је бржи и спречава
+ блокирање IP адресе, али не пружа одређене информације као што су трајање видео
+ снимка или статус уживо'
# Toast Messages
-Subscriptions have not yet been implemented: 'Праћења још увек нису примењени'
-Open New Window: Отбори нов прозор
+ Fetch Automatically: Када је омогућено, FreeTube ће аутоматски прикупити ваш фид
+ праћења када се отвори нови прозор и када промените профил.
+ General Settings:
+ External Link Handling: "Изаберите подразумевано понашање када се кликне на линк
+ који се не може отворити у FreeTube-у.\nПодразумевано, FreeTube ће отворити
+ линк на који сте кликнули у вашем подразумеваном прегледачу.\n"
+ Fallback to Non-Preferred Backend on Failure: Када ваш преферирани API има проблем,
+ FreeTube ће аутоматски покушати да користи ваш непреферирани API као резервни
+ метод, када је омогућено.
+ Preferred API Backend: Изаберите бек-енд коју FreeTube користи за добијање података.
+ Локални API је уграђени екстрактор. Invidious API захтева Invidious сервер за
+ повезивање.
+ Thumbnail Preference: Све сличице широм FreeTube-а ће бити замењене кадром видео
+ снимка уместо подразумеване сличице.
+ Region for Trending: Регион трендова вам омогућава да изаберете државу за видео
+ снимке у тренду коју желите да се приказује.
+ Invidious Instance: Invidious инстанца на коју ће се FreeTube повезати за API
+ позиве.
+ External Player Settings:
+ Custom External Player Arguments: Сви прилагођени аргументи командне линије, раздвојени
+ тачком и зарезом („;“), желите да буду прослеђени спољном плејеру.
+ External Player: Избором спољног плејера ће приказати иконицу, за отварање видео
+ снимка (плејлисте, ако је подржана) у спољном плејеру, на сличици. Упозорење,
+ подешавања Invidious-а не утичу на спољне плејере.
+ DefaultCustomArgumentsTemplate: (Подразумевано:„{defaultCustomArguments}“)
+ Custom External Player Executable: Подразумевано, FreeTube ће претпоставити да
+ се изабрани спољни плејер може пронаћи преко PATH променљиве окружења. Ако је
+ потребно, овде се може подесити прилагођена путања.
+ Ignore Warnings: Поништи упозорења када тренутни спољни плејер не подржава тренутну
+ радњу (нпр. обртање плејлиста итд.).
+ Distraction Free Settings:
+ Hide Channels: Унесите назив канала или ID канала да бисте сакрили све видео снимке,
+ плејлисте и сам канал, да се не појављују у претрази, у тренду, најпопуларнијима
+ и препорученима. Назив канала који сте унели мора се потпуно подударати и разликовати
+ велика и мала слова.
+ Hide Subscriptions Live: Ово подешавање је замењено подешавањем за целу апликацију
+ „{appWideSetting}“ у одељку „{subsection}“ у „{settingsSection}“
+ Privacy Settings:
+ Remove Video Meta Files: Када је омогућено, FreeTube аутоматски брише мета фајлове
+ направљене током репродукције видео снимка, када се страница гледања затвори.
+ Player Settings:
+ Allow DASH AV1 formats: DASH AV1 формати могу изгледати боље од DASH H.264 формата.
+ DASH AV1 формати захтевају више снаге за репродукцију! Они нису доступни на
+ свим видео снимцима, у тим случајевима плејер ће уместо њих користити DASH H.264
+ формате.
+ Default Video Format: Подесите формате који се користе када се видео снимак пушта.
+ DASH формати могу да пуштају виши квалитет. Застарели формати су ограничени
+ на максимално 720p, али користе мање протока. Аудио формати су само звучни снимци.
+ Proxy Videos Through Invidious: Повезаће се сa Invidious-ом ради приказивања видео
+ снимака уместо директног повезивања са YouTube-ом. Замењује подешавања API-ја.
+ Scroll Playback Rate Over Video Player: Док је курсор изнад видео снимка, притисните
+ и држите тастер „Control“ (тастер „Command“ на Mac-у) и померајте точкић миша
+ унапред или уназад да бисте контролисали брзину репродукције. Притисните и држите
+ тастер „Control“ (тастер „Command„ на Mac-у) и кликните левим тастером миша
+ да бисте се брзо вратили на подразумевану брзину репродукције (1x, осим ако
+ није промењено у подешавањима).
+ Force Local Backend for Legacy Formats: Ради само када је Invidious API подразумевани.
+ Када је омогућено, локални API ће се покренути и користити застареле формате
+ које је вратио, уместо оних које је вратио Invidious. Помаже када се видео снимци
+ које је вратио Invidious не пуштају због ограничења у држави.
+ Skip by Scrolling Over Video Player: Користите точкић миша да бисте прескакали
+ кроз видео снимак, MPV стил.
+ Experimental Settings:
+ Replace HTTP Cache: Онемогућава HTTP кеш заснован на Electron-овом диску и омогућава
+ прилагођени кеш слике у меморији. То ће довести до повећане употребе RAM-а.
+ SponsorBlock Settings:
+ UseDeArrowTitles: Замена наслова видео снимака насловима које су послали корисници
+ DeArrow-a.
+Subscriptions have not yet been implemented: 'Праћења још увек нису имплементирана'
+Open New Window: Отвори нови прозор
+Shuffle is now disabled: Мешање је сада онемогућено
+Age Restricted:
+ Type:
+ Video: Видео снимак
+ Channel: Канал
+ This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} је старосно ограничен(а)'
+New Window: Нови прозор
+Clipboard:
+ Copy failed: Копирање у привремену меморију није успело
+ Cannot access clipboard without a secure connection: Није могуће приступити привременој
+ меморији без безбедне везе
+Playlist:
+ View Full Playlist: Погледај целу плејлисту
+ Last Updated On: Последњи пут ажурирано
+ Videos: Видео снимци
+ View: Преглед
+ Playlist: Плејлиста
+ Views: Прегледа
+Falling back to Invidious API: Повратак на Invidious API
+Change Format:
+ Dash formats are not available for this video: DASH формати нису доступни за овај
+ видео снимак
+ Audio formats are not available for this video: Аудио формати нису доступни за овај
+ видео снимак
+ Use Audio Formats: Користи аудио формате
+ Change Media Formats: Промени формате медија
+ Use Dash Formats: Користи DASH формате
+ Use Legacy Formats: Користи застареле формате
+Comments:
+ Comments: Коментари
+ Sort by: Сортирање по
+ Show Comments: Прикажи коментаре
+ View: Погледај
+ Click to View Comments: Кликни да видиш коментаре
+ From {channelName}: од {channelName}
+ Top comments: Топ коментари
+ Subscribed: Пратите
+ Getting comment replies, please wait: Набављање одговора на коментаре, сачекајте
+ Load More Comments: Учитај више коментара
+ Hide Comments: Сакриј коментаре
+ Show More Replies: Прикажи више одговора
+ Pinned by: Закачио
+ No more comments available: Нема више доступних коментара
+ Hearted: Са срцем
+ There are no comments available for this video: Нема доступних коментара за овај
+ видео снимак
+ Replies: Одговори
+ Reply: Одговори
+ View {replyCount} replies: Погледај {replyCount} одговор(а)
+ Member: Члан
+ Hide: Сакриј
+ There are no more comments for this video: Нема више коментара за овај видео снимак
+ And others: и осталих
+ Newest first: Најновије прво
+Hashtags have not yet been implemented, try again later: Хеш-ознаке још увек нису
+ имплементиране, покушајте поново касније
+Share:
+ Invidious Embed URL copied to clipboard: Invidious уграђени URL је копиран у привремену
+ меморију
+ Share Channel: Дели канал
+ Open Embed: Отвори уграђено
+ Invidious Channel URL copied to clipboard: Invidious URL канала је копиран у привремену
+ меморију
+ YouTube URL copied to clipboard: YouTube URL је копиран у привремену меморију
+ Share Playlist: Дели плејлисту
+ Copy Embed: Копирај уграђено
+ Copy Link: Копирај линк
+ Open Link: Отвори линк
+ Share Video: Дели видео снимак
+ Include Timestamp: Укључи временску ознаку
+ Invidious URL copied to clipboard: Invidious URL је копиран у привремену меморију
+ YouTube Channel URL copied to clipboard: YouTube URL канала је копиран у привремену
+ меморију
+ YouTube Embed URL copied to clipboard: YouTube уграђени URL је копиран у привремену
+ меморију
+Falling back to the local API: Повратак на локални API
+Unknown YouTube url type, cannot be opened in app: Непозната врста YouTube URL-а,
+ не може се отворити у апликацији
+Search Bar:
+ Clear Input: Очисти унос
+Up Next: Следеће
+Loop is now disabled: Понављање је сада онемогућено
+Playing Next Video: Пуштање следећег видео снимка
+The playlist has been reversed: Плејлиста је обрнута
+Videos:
+ Sort By:
+ Oldest: Најстарије
+ Newest: Најновије
+Playlist will pause when current video is finished: Плејлиста ће се паузирати када
+ се тренутни видео снимак заврши
+Local API Error (Click to copy): Грешка локалног API-ја (Кликнути за копирање)
+Channels:
+ Search bar placeholder: Претрага канала
+ Unsubscribe Prompt: Желите ли заиста да прекинете праћење „{channelName}“?
+ Channels: Канали
+ Title: Листа канала
+ Empty: Ваша листа канала је тренутно празна.
+ Unsubscribe: Прекини праћење
+ Count: 'Пронађено канала: {number}.'
+ Unsubscribed: '{channelName} је уклоњен из ваших праћења'
+External link opening has been disabled in the general settings: Отварање спољног
+ линка је онемогућено у општим подешавањима
+Screenshot Success: Снимак екрана је сачуван као „{filePath}“
+Canceled next video autoplay: Отказано аутоматско пуштање следећег видео снимка
+Playing Next Video Interval: Пуштање следећег видео снимка убрзо. Кликнути за отказивање.
+ | Пушта се следећи видео снимак за {nextVideoInterval} секунду. Кликнути за отказивање.
+ | Пушта се следећи видео за {nextVideoInterval} секунди. Кликнути за отказивање.
+No: Не
+Playlist will not pause when current video is finished: Плејлиста се неће паузирати
+ када се тренутни видео снимак заврши
+Yes: Да
+Chapters:
+ 'Chapters list visible, current chapter: {chapterName}': 'Листа поглавља је видљива,
+ тренутно поглавље: {chapterName}'
+ Chapters: Поглавља
+ 'Chapters list hidden, current chapter: {chapterName}': 'Листа поглавља је скривена,
+ тренутно поглавље: {chapterName}'
+Hashtag:
+ This hashtag does not currently have any videos: Ова хеш-ознака тренутно нема ниједан
+ видео снимак
+ Hashtag: Хеш-ознака
+Playing Previous Video: Пуштање претходног видео снимка
+Ok: У реду
+Invidious API Error (Click to copy): Грешка Invidious API-ја (Кликнути за копирање)
+Starting download: Почиње преузимање „{videoTitle}“
+Preferences: Преференце
+Default Invidious instance has been cleared: Подразумевана инстанца Invidious-а је
+ избрисана
+Mini Player: Мини плејер
+Toggle Theatre Mode: Укључи биоскопски режим
+'The playlist has ended. Enable loop to continue playing': Плејлиста је завршена.
+ Омогућите понављање да бисте наставили пуштање
+Shuffle is now enabled: Мешање је сада омогућено
+Default Invidious instance has been set to {instance}: Подразумевана инстанца Invidious-а
+ је подешена на {instance}
+Are you sure you want to open this link?: Желите ли заиста да отворите овај линк?
+This video is unavailable because of missing formats. This can happen due to country unavailability.: Овај
+ видео снимак је недоступан, јер недостају формати. То се може догодити због недоступности
+ државе.
+Screenshot Error: Снимак екрана није успео. {error}
+Downloading has completed: „{videoTitle}“ је завршио преузимање
+Loop is now enabled: Понављање је сада омогућено
+Downloading failed: Дошло је до проблема при преузимању „{videoTitle}“
From 0c92b63b992fead8398749f678b5dc9b62accf5a Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Sun, 8 Oct 2023 05:15:51 +0800
Subject: [PATCH 175/176] ! Fix watch page video published time parsing (#4105)
---
src/renderer/views/Watch/Watch.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js
index a07f748bf58b8..7a8412793d1a6 100644
--- a/src/renderer/views/Watch/Watch.js
+++ b/src/renderer/views/Watch/Watch.js
@@ -322,7 +322,8 @@ export default defineComponent({
channelId: this.channelId
})
- this.videoPublished = new Date(result.page[0].microformat.publish_date.replace('-', '/')).getTime()
+ // `result.page[0].microformat.publish_date` example value: `2023-08-12T08:59:59-07:00`
+ this.videoPublished = new Date(result.page[0].microformat.publish_date).getTime()
if (result.secondary_info?.description.runs) {
try {
From 5c8d49bf51dde8ffd8c8d291dce3e5ff27b0d9fb Mon Sep 17 00:00:00 2001
From: PikachuEXE
Date: Sun, 8 Oct 2023 06:14:16 +0800
Subject: [PATCH 176/176] ! Fix playlist item fetching for local API (#4102)
---
.../watch-video-playlist.js | 39 +++++++-----------
src/renderer/helpers/api/local.js | 41 +++++++++++++++++++
src/renderer/views/Playlist/Playlist.js | 20 ++++++---
3 files changed, 70 insertions(+), 30 deletions(-)
diff --git a/src/renderer/components/watch-video-playlist/watch-video-playlist.js b/src/renderer/components/watch-video-playlist/watch-video-playlist.js
index 6a854541b9e28..4195cd7075e5d 100644
--- a/src/renderer/components/watch-video-playlist/watch-video-playlist.js
+++ b/src/renderer/components/watch-video-playlist/watch-video-playlist.js
@@ -4,7 +4,11 @@ import FtLoader from '../ft-loader/ft-loader.vue'
import FtCard from '../ft-card/ft-card.vue'
import FtListVideoLazy from '../ft-list-video-lazy/ft-list-video-lazy.vue'
import { copyToClipboard, showToast } from '../../helpers/utils'
-import { getLocalPlaylist, parseLocalPlaylistVideo } from '../../helpers/api/local'
+import {
+ getLocalPlaylist,
+ parseLocalPlaylistVideo,
+ untilEndOfLocalPlayList,
+} from '../../helpers/api/local'
import { invidiousGetPlaylistInfo } from '../../helpers/api/invidious'
export default defineComponent({
@@ -327,21 +331,12 @@ export default defineComponent({
if (!process.env.IS_ELECTRON || this.backendPreference === 'invidious' || cachedPlaylist.continuationData === null) {
this.playlistItems = cachedPlaylist.items
} else {
- const items = cachedPlaylist.items
- let playlist = cachedPlaylist.continuationData
+ const videos = cachedPlaylist.items
+ await untilEndOfLocalPlayList(cachedPlaylist.continuationData, (p) => {
+ videos.push(...p.items.map(parseLocalPlaylistVideo))
+ }, { runCallbackOnceFirst: false })
- do {
- playlist = await playlist.getContinuation()
-
- const parsedVideos = playlist.items.map(parseLocalPlaylistVideo)
- items.push(...parsedVideos)
-
- if (!playlist.has_continuation) {
- playlist = null
- }
- } while (playlist !== null)
-
- this.playlistItems = items
+ this.playlistItems = videos
}
this.isLoading = false
@@ -351,7 +346,7 @@ export default defineComponent({
this.isLoading = true
try {
- let playlist = await getLocalPlaylist(this.playlistId)
+ const playlist = await getLocalPlaylist(this.playlistId)
let channelName
@@ -368,14 +363,10 @@ export default defineComponent({
this.channelName = channelName
this.channelId = playlist.info.author?.id
- const videos = playlist.items.map(parseLocalPlaylistVideo)
-
- while (playlist.has_continuation) {
- playlist = await playlist.getContinuation()
-
- const parsedVideos = playlist.items.map(parseLocalPlaylistVideo)
- videos.push(...parsedVideos)
- }
+ const videos = []
+ await untilEndOfLocalPlayList(playlist, (p) => {
+ videos.push(...p.items.map(parseLocalPlaylistVideo))
+ })
this.playlistItems = videos
diff --git a/src/renderer/helpers/api/local.js b/src/renderer/helpers/api/local.js
index 98115c2357a07..f95bca91ef4c7 100644
--- a/src/renderer/helpers/api/local.js
+++ b/src/renderer/helpers/api/local.js
@@ -75,6 +75,47 @@ export async function getLocalPlaylist(id) {
return await innertube.getPlaylist(id)
}
+/**
+ * @param {Playlist} playlist
+ * @returns {Playlist|null} null when no valid playlist can be found (e.g. `empty continuation response`)
+ */
+export async function getLocalPlaylistContinuation(playlist) {
+ try {
+ return await playlist.getContinuation()
+ } catch (error) {
+ // Youtube can provide useless continuation data
+ if (!error.message.includes('Got empty continuation response.')) {
+ // Re-throw unhandled error
+ throw error
+ }
+
+ return null
+ }
+}
+
+/**
+ * Callback for adding two numbers.
+ *
+ * @callback untilEndOfLocalPlayListCallback
+ * @param {Playlist} playlist
+ */
+
+/**
+ * @param {Playlist} playlist
+ * @param {untilEndOfLocalPlayListCallback} callback
+ * @param {object} options
+ * @param {boolean} options.runCallbackOnceFirst
+ */
+export async function untilEndOfLocalPlayList(playlist, callback, options = { runCallbackOnceFirst: true }) {
+ if (options.runCallbackOnceFirst) { callback(playlist) }
+
+ while (playlist != null && playlist.has_continuation) {
+ playlist = await getLocalPlaylistContinuation(playlist)
+
+ if (playlist != null) { callback(playlist) }
+ }
+}
+
/**
* @param {string} location
* @param {'default'|'music'|'gaming'|'movies'} tab
diff --git a/src/renderer/views/Playlist/Playlist.js b/src/renderer/views/Playlist/Playlist.js
index 05bfb29290196..0c668d2b683c6 100644
--- a/src/renderer/views/Playlist/Playlist.js
+++ b/src/renderer/views/Playlist/Playlist.js
@@ -6,7 +6,11 @@ import PlaylistInfo from '../../components/playlist-info/playlist-info.vue'
import FtListVideoLazy from '../../components/ft-list-video-lazy/ft-list-video-lazy.vue'
import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
import FtButton from '../../components/ft-button/ft-button.vue'
-import { getLocalPlaylist, parseLocalPlaylistVideo } from '../../helpers/api/local'
+import {
+ getLocalPlaylist,
+ getLocalPlaylistContinuation,
+ parseLocalPlaylistVideo,
+} from '../../helpers/api/local'
import { extractNumberFromString } from '../../helpers/utils'
import { invidiousGetPlaylistInfo, youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
@@ -188,12 +192,16 @@ export default defineComponent({
getNextPageLocal: function () {
this.isLoadingMore = true
- this.continuationData.getContinuation().then((result) => {
- const parsedVideos = result.items.map(parseLocalPlaylistVideo)
- this.playlistItems = this.playlistItems.concat(parsedVideos)
+ getLocalPlaylistContinuation(this.continuationData).then((result) => {
+ if (result) {
+ const parsedVideos = result.items.map(parseLocalPlaylistVideo)
+ this.playlistItems = this.playlistItems.concat(parsedVideos)
- if (result.has_continuation) {
- this.continuationData = result
+ if (result.has_continuation) {
+ this.continuationData = result
+ } else {
+ this.continuationData = null
+ }
} else {
this.continuationData = null
}