From 42c0d93397dd1acfa728bab2f31350217e815622 Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Mon, 13 Jun 2022 04:14:31 +0000 Subject: [PATCH 001/191] Translated using Weblate (Basque) Currently translated at 8.9% (52 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 9535587db..1d248c88c 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -44,26 +44,26 @@ Search Filters: Sort By: 'Ordenatze irizpidea' Most Relevant: 'Egokitasuna' Rating: 'Balorazioa' - Upload Date: '' - View Count: '' + Upload Date: 'Igoera data' + View Count: 'Kontua ikusi' Time: Time: 'Denbora' Any Time: 'Edozein unetan' - Last Hour: '' - Today: '' - This Week: '' - This Month: '' - This Year: '' + Last Hour: 'Azken ordua' + Today: 'Gaur' + This Week: 'Aste honetan' + This Month: 'Hilabete honetan' + This Year: 'Aurten' Type: - Type: '' - All Types: '' - Videos: '' - Channels: '' + Type: 'Mota' + All Types: 'Mota guztietakoak' + Videos: 'Bideoak' + Channels: 'Kanalak' #& Playlists Duration: - Duration: '' - All Durations: '' - Short (< 4 minutes): '' + Duration: 'Iraupena' + All Durations: 'Edozein iraupen' + Short (< 4 minutes): 'Laburra (<4 minutu)' Long (> 20 minutes): '' # On Search Page Search Results: '' From 7adbdb7a53343a3845499c756634a9774a3776a1 Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Mon, 13 Jun 2022 04:22:01 +0000 Subject: [PATCH 002/191] Translated using Weblate (Basque) Currently translated at 32.1% (187 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 246 +++++++++++++++++++++++++---------------- 1 file changed, 150 insertions(+), 96 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 1d248c88c..9b25b8772 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -64,126 +64,180 @@ Search Filters: Duration: 'Iraupena' All Durations: 'Edozein iraupen' Short (< 4 minutes): 'Laburra (<4 minutu)' - Long (> 20 minutes): '' + Long (> 20 minutes): 'Luzea (> 20 minutu)' # On Search Page - Search Results: '' - Fetching results. Please wait: '' - Fetch more results: '' - There are no more results for this search: '' + Search Results: 'Emaitzak bilatu' + Fetching results. Please wait: 'Emaitzak ekartzen. Itxaron faborez' + Fetch more results: 'Emaitza gehiago ekarri' + There are no more results for this search: 'Ez da emaitza gehiagorik bilaketa honentzat' # Sidebar Subscriptions: # On Subscriptions Page - Subscriptions: '' - Latest Subscriptions: '' - This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: '' - 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': '' - 'Getting Subscriptions. Please wait.': '' - Refresh Subscriptions: '' - Load More Videos: '' -More: '' + Subscriptions: 'Harpidetzak' + Latest Subscriptions: 'Azken harpidetzak' + This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: 'Honako + profilak harpidetza anitz ditu. RSS behartu abiadura muga saihesteko' + 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Zure + harpidetzen zerrenda hutsik da. Has zaitez harpidetzak gehitzen hemen ikusteko' + 'Getting Subscriptions. Please wait.': 'Harpidetzak eskuratzen. Itxaron mesedez.' + Refresh Subscriptions: 'Harpidetzak freskatu' + Load More Videos: 'Bideo gehiago kargatu' + Error Channels: Akatsak dituzten kateak +More: 'Gehiago' Trending: - Trending: '' -Most Popular: '' -Playlists: '' + Trending: 'Joerak' + Default: Lehenetsia + Music: Musika + Gaming: Bideo jokoak + Movies: Filmak + Trending Tabs: Lehenetsitako erlaitzak +Most Popular: 'Ikusienak' +Playlists: 'Erreprodukzio zerrendak' 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: '' + Your Playlists: 'Zure erreprodukzio zerrendak' + Playlist Message: 'Orrialde honek ez ditu guztiz funtzionatzen duten erreprodukzio-zerrendak + islatzen. Gorde dituzun edo gogoko dituzun bideoak bakarrik zerrendatzen ditu. + Lana amaitzen denean, hemen dauden bideo guztiak "Gogokoak" erreprodukzio-zerrenda + batera migratuko dira.' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 'Gordetako + bideoak hutsik daude. Egin klik bideoaren izkinan den "gorde" botoian hemen zerrendatzeko' + Search bar placeholder: Bilatu Erreprodukzio-zerrendan + Empty Search Message: Erreprodukzio-zerrenda honetan ez dago zure bilaketarekin + bat datorren bideorik History: # On History Page - History: '' - Watch History: '' - Your history list is currently empty.: '' + History: 'Historikoa' + Watch History: 'Historikoa ikusi' + Your history list is currently empty.: 'Zure historia-zerrenda hutsik dago une honetan.' + Empty Search Message: Ez dago historikoan zure bilaketarekin bat datorren bideorik + Search bar placeholder: Bilatu historikoan Settings: # On Settings Page - Settings: '' - The app needs to restart for changes to take effect. Restart and apply change?: '' + Settings: 'Ezarpenak' + The app needs to restart for changes to take effect. Restart and apply change?: 'Aplikazioa + berrabiarazi behar da aldaketek eragina izan dezaten. Berrabiarazi eta aldaketa + aplikatu?' General Settings: - General Settings: '' - Check for Updates: '' - Check for Latest Blog Posts: '' - Fallback to Non-Preferred Backend on Failure: '' - Enable Search Suggestions: '' - Default Landing Page: '' - Locale Preference: '' + General Settings: 'Ezarpen orokorrak' + Check for Updates: 'Eguneraketak bilatu' + Check for Latest Blog Posts: 'Egiaztatu blogeko azken argitalpenak' + Fallback to Non-Preferred Backend on Failure: 'Hutsegitean, hobetsi gabeko backend-era + itzuli' + Enable Search Suggestions: 'Gaitu bilaketa-iradokizunak' + Default Landing Page: 'Lehenetsitako hasierako orria' + Locale Preference: 'Tokiko hobespena' Preferred API Backend: - Preferred API Backend: '' - Local API: '' - Invidious API: '' + Preferred API Backend: 'API Backend hobetsia' + Local API: 'Tokiko API' + Invidious API: 'Invidious API' Video View Type: - Video View Type: '' - Grid: '' - List: '' + Video View Type: 'Bideo-ikuspegi mota' + Grid: 'Lauki-sarea' + List: 'Zerrenda' Thumbnail Preference: - Thumbnail Preference: '' - Default: '' - Beginning: '' - Middle: '' - End: '' + Thumbnail Preference: 'Miniatura-hobespena' + Default: 'Lehenetsia' + Beginning: 'Hasiera' + Middle: 'Erdian' + End: 'Bukaera' 'Invidious Instance (Default is https://invidious.snopyta.org)': '' - View all Invidious instance information: '' - Region for Trending: '' + View all Invidious instance information: 'Invidious instantzia guztien informazioa + ikusi' + Region for Trending: 'Joeren eskualdea' #! List countries + The currently set default instance is $: Une honetan ezarritako instantzia lehenetsia + $ da + Current Invidious Instance: Oraingo Invidious instantzia + External Link Handling: + External Link Handling: Kanpo esteken kudeaketa + Open Link: Ireki esteka + Ask Before Opening Link: Esteka ireki aurretik galdetu + No Action: Ekintzarik ez + Set Current Instance as Default: Ezarri Uneko Instantzia lehenetsi gisa + System Default: Sistemak lehenetsitakoa + No default instance has been set: Ez da instantzia lehenetsirik ezarri + Current instance will be randomized on startup: Uneko instantzia ausaz banatuko + da abiaraztean + Clear Default Instance: Garbitu lehenetsitako instantzia Theme Settings: - Theme Settings: '' - Match Top Bar with Main Color: '' - Expand Side Bar by Default: '' - Disable Smooth Scrolling: '' - UI Scale: '' + Theme Settings: 'Gaien ezarpenak' + Match Top Bar with Main Color: 'Lotu goiko barra kolore nagusiarekin' + Expand Side Bar by Default: 'Zabaldu alboko barra lehenespenez' + Disable Smooth Scrolling: 'Desgaitu korritze leuna' + UI Scale: 'Erabiltzaile interfazearen eskala' Base Theme: - Base Theme: '' - Black: '' - Dark: '' - Light: '' + Base Theme: 'Oinarrizko Gaia' + Black: 'Beltza' + Dark: 'Iluna' + Light: 'Argia' + Dracula: Drakula + System Default: Sistemak lehenetsia Main Color Theme: - Main Color Theme: '' - Red: '' - Pink: '' - Purple: '' - Deep Purple: '' - Indigo: '' - Blue: '' - Light Blue: '' - Cyan: '' - Teal: '' - Green: '' - Light Green: '' - Lime: '' - Yellow: '' - Amber: '' - Orange: '' - Deep Orange: '' - Secondary Color Theme: '' + Main Color Theme: 'Oinarrizko koloreen gaia' + Red: 'Gorria' + Pink: 'Larrosa' + Purple: 'Ubela' + Deep Purple: 'Ubel bizia' + Indigo: 'Indigo kolorea' + Blue: 'Urdina' + Light Blue: 'Urdin argia' + Cyan: 'Zian' + Teal: 'Berde-urdina' + Green: 'Berdea' + Light Green: 'Berde argia' + Lime: 'Lima' + Yellow: 'Horia' + Amber: 'Anbar-kolorekoa' + Orange: 'Laranja' + Deep Orange: 'Laranja bizia' + Dracula Pink: Drakula larrosa + Dracula Cyan: Drakula zian + Dracula Orange: Drakula laranja + Dracula Purple: Drakula ubela + Dracula Red: Drakula gorria + Dracula Green: Drakula berdea + Dracula Yellow: Drakula horia + Secondary Color Theme: 'Gaiaren bigarren mailako kolorea' #* Main Color Theme + Hide Side Bar Labels: Ezkutatu alboko barraren etiketak Player Settings: - Player Settings: '' - Force Local Backend for Legacy Formats: '' - Play Next Video: '' - Turn on Subtitles by Default: '' - Autoplay Videos: '' - Proxy Videos Through Invidious: '' - Autoplay Playlists: '' - Enable Theatre Mode by Default: '' + Player Settings: 'Erreprodukzioaren ezarpenak' + Force Local Backend for Legacy Formats: 'Behartu backend lokala Legacy formatuentzat' + Play Next Video: 'Hurrengo bideoa erreproduzitu' + Turn on Subtitles by Default: 'Aktibatu Azpitituluak lehenespenez' + Autoplay Videos: 'Bideoen erreprodukzio automatikoa' + Proxy Videos Through Invidious: 'Invidious bitarteko Proxy bideoak' + Autoplay Playlists: 'Erreprodukzio automatikoan diren erreprodukzio zerrendak' + Enable Theatre Mode by Default: 'Gaitu Antzerki modua lehenespenez' Playlist Next Video Interval: '' - Default Volume: '' - Default Playback Rate: '' + Default Volume: 'Lehenetsitako bolumena' + Default Playback Rate: 'Lehenetsitako erreprodukzio tasa' Default Video Format: - Default Video Format: '' - Dash Formats: '' - Legacy Formats: '' - Audio Formats: '' + Default Video Format: 'Lehenetsitako bideo formatua' + Dash Formats: 'DASH formatuak' + Legacy Formats: 'Legacy formatuak' + Audio Formats: 'Audio formatuak' Default Quality: - Default Quality: '' - Auto: '' - 144p: '' - 240p: '' - 360p: '' - 480p: '' - 720p: '' - 1080p: '' - 1440p: '' - 4k: '' - 8k: '' + Default Quality: 'Lehenetsitako kalitatea' + Auto: 'Automatikoa' + 144p: '144p' + 240p: '240p' + 360p: '360p' + 480p: '480p' + 720p: '720p' + 1080p: '1080p' + 1440p: '1440p' + 4k: '4k' + 8k: '8k' + Fast-Forward / Rewind Interval: Aurrera / atzera egiteko tartea + Scroll Volume Over Video Player: Aldatu bolumena bideo erreproduzitzailean + Next Video Interval: Hurrengo bideo tartea + Screenshot: + Enable: Bidea eman pantaila argazkiei + Scroll Playback Rate Over Video Player: Aldatu Erreprodukzio-tasa Bideo Erreproduzitzailean + Display Play Button In Video Player: Bistaratu Erreproduzitzeko botoia bideo erreproduzitzailean + Max Video Playback Rate: Gehienezko bideoen erreprodukzio-tasa + Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea Privacy Settings: Privacy Settings: '' Remember History: '' From 3440ee507c69f34e1fb5b4cd77232291b6a538ba Mon Sep 17 00:00:00 2001 From: luzpaz Date: Mon, 13 Jun 2022 09:31:32 -0400 Subject: [PATCH 003/191] Fix misc. typos (#2311) Found via `codespell -q 3 -S ./yarn.lock,./static/geolocations,./static/locales -L te` --- src/renderer/main.js | 2 +- src/renderer/views/Watch/Watch.js | 2 +- static/pwabuilder-sw.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/main.js b/src/renderer/main.js index e1d185ab0..8c2db5dbc 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -31,7 +31,7 @@ new Vue({ render: h => h(App) }) -// to avoid accesing electron api from web app build +// to avoid accessing electron api from web app build if (window && window.process && window.process.type === 'renderer') { const { ipcRenderer } = require('electron') diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js index c3210f151..6e897d4fe 100644 --- a/src/renderer/views/Watch/Watch.js +++ b/src/renderer/views/Watch/Watch.js @@ -1119,7 +1119,7 @@ export default Vue.extend({ interval: Number(interval) // How long one image is used }) }) - // TODO: MAKE A VARIABLE WHICH CAN CHOOSE BETWEEN STROYBOARD ARRAY ELEMENTS + // TODO: MAKE A VARIABLE WHICH CAN CHOOSE BETWEEN STORYBOARD ARRAY ELEMENTS this.buildVTTFileLocally(storyboardArray[1]).then(async (results) => { const userData = await this.getUserDataPath() let fileLocation diff --git a/static/pwabuilder-sw.js b/static/pwabuilder-sw.js index 5850fa90c..ff5c3c7ec 100644 --- a/static/pwabuilder-sw.js +++ b/static/pwabuilder-sw.js @@ -83,7 +83,7 @@ function cacheFirstFetch(event) { event.respondWith( fromCache(event.request).then( function (response) { - // The response was found in the cache so we responde with it and update the entry + // The response was found in the cache so we respond with it and update the entry // This is where we call the server to get the newest version of the // file to use the next time we show view From 5ab2cfedaf44a0b17d876967fc788402430c7a71 Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Mon, 13 Jun 2022 12:47:12 +0000 Subject: [PATCH 004/191] Translated using Weblate (Basque) Currently translated at 51.0% (297 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 212 ++++++++++++++++++++++++++--------------- 1 file changed, 136 insertions(+), 76 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 9b25b8772..315ee1e02 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -234,93 +234,153 @@ Settings: Next Video Interval: Hurrengo bideo tartea Screenshot: Enable: Bidea eman pantaila argazkiei + Error: + Empty File Name: Fitxategi izena hutsik + Forbidden Characters: Debekatutako karaktereak + Format Label: Pantaila-argazkiaren formatua + Quality Label: Pantaila-argazkiaren kalitatea + Ask Path: Eskatu Gordetzeko karpeta + Folder Label: Pantaila-argazkien karpeta + Folder Button: Hautatu karpeta + File Name Label: Fitxategi-izenen eredua Scroll Playback Rate Over Video Player: Aldatu Erreprodukzio-tasa Bideo Erreproduzitzailean Display Play Button In Video Player: Bistaratu Erreproduzitzeko botoia bideo erreproduzitzailean Max Video Playback Rate: Gehienezko bideoen erreprodukzio-tasa Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea Privacy Settings: - Privacy Settings: '' - Remember History: '' - Save Watched Progress: '' - Automatically Remove Video Meta Files: '' - 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.: '' + Privacy Settings: 'Pribatutasunari buruzko ezarpenak' + Remember History: 'Historikoa oroitu' + Save Watched Progress: 'Ikusitakoaren progresioa gorde' + Automatically Remove Video Meta Files: 'Bideo metafitxategiak ezabatu automatikoki' + Clear Search Cache: 'Bilaketen cachea ezabatu' + Are you sure you want to clear out your search cache?: 'Ziur al zaude bilaketa-cachea + garbitu nahi duzula?' + Search cache has been cleared: 'Bilaketa cachea ezabatu berri da' + Remove Watch History: 'Historikoa ikusteko aukera ezabatu' + Are you sure you want to remove your entire watch history?: 'Ziur al zaude ikusitakoaren + historiko osoa ezabatu nahi duzula?' + Watch history has been cleared: 'Ikusitakoaren historikoa ezabatu berri da' + Remove All Subscriptions / Profiles: 'Harpidetza / Profil guztiak ezabatu' + Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ziur + al zaude zure profil eta harpidetza guztiak ezabatu nahi dituzula? Ezingo duzu + atzera egin.' Subscription Settings: - Subscription Settings: '' - Hide Videos on Watch: '' - Fetch Feeds from RSS: '' - Manage Subscriptions: '' + Subscription Settings: 'Harpidetzen ezarpenak' + Hide Videos on Watch: 'Ikusten ari zaren bideoa ezkutatu' + Fetch Feeds from RSS: 'RSS jarioak eskuratu' + Manage Subscriptions: 'Harpidetzak kudeatu' 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: '' - Hide Playlists: '' - Hide Live Chat: '' - Hide Active Subscriptions: '' + Distraction Free Settings: 'Oharkabetasunak ekiditeko ezarpenak' + Hide Video Views: 'Bideoen ikustaldi kopurua ezkutatu' + Hide Video Likes And Dislikes: 'Bideoen atsegiteak eta desatsegiteak ezkutatu' + Hide Channel Subscribers: 'Kanalaren harpidedun kopurua ezkutatu' + Hide Comment Likes: 'Iruzkinen atsegiteak ezkutatu' + Hide Recommended Videos: 'Gomendatutako bideoak ezkutatu' + Hide Trending Videos: 'Bideo ikusienak ezkutatu' + Hide Popular Videos: 'Bideo ospetsuak ezkutatu' + Hide Playlists: 'Erreprodukzio zerrendak ezkutatu' + Hide Live Chat: 'Zuzeneko txata ezkutatu' + Hide Active Subscriptions: 'Harpidetza aktiboak ezkutatu' Data Settings: - Data Settings: '' - Select Import Type: '' - Select Export Type: '' - Import Subscriptions: '' - Import FreeTube: '' - Import YouTube: '' - Import NewPipe: '' - Check for Legacy Subscriptions: '' - Export Subscriptions: '' - Export FreeTube: '' - Export YouTube: '' - Export NewPipe: '' - Import History: '' - Export History: '' - 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 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: '' + Data Settings: 'Datuen ezarpenak' + Select Import Type: 'Hautatu Inportazio mota' + Select Export Type: 'Hautatu esportazio mota' + Import Subscriptions: 'Harpidetzak inportatu' + Import FreeTube: 'Freetube inportatu' + Import YouTube: 'Youtubetik inportatu' + Import NewPipe: 'Newpipetik inportatu' + Check for Legacy Subscriptions: 'Legacy harpidetzak bilatu' + Export Subscriptions: 'Harpidetzak esportatu' + Export FreeTube: 'Freetubera esportatu' + Export YouTube: 'Youtubera esportatu' + Export NewPipe: 'Newpipera esportatu' + Import History: 'Historikoa inportatu' + Export History: 'Historikoa esportatu' + Profile object has insufficient data, skipping item: 'Profileko objektuak ez du + datu nahikorik, elementutik ateratzen' + All subscriptions and profiles have been successfully imported: 'Profil eta harpidetza + guztiak ongi inportatu dira' + All subscriptions have been successfully imported: 'Harpidetza guztiak ongi inportatu + dira' + One or more subscriptions were unable to be imported: 'Zenbait harpidetza ezin + izan dira inportatu' + Invalid subscriptions file: 'Harpidetza fitxategi baliogabea' + This might take a while, please wait: 'Baliteke denbora pixka bat behar izatea, + itxaron mesedez' + Invalid history file: 'Historia fitxategi baliogabea' + Subscriptions have been successfully exported: 'Harpidetzak ongi esportatu dira' + History object has insufficient data, skipping item: 'Historiako objektuak ez + du datu nahikorik, elementutik ateratzen' + All watched history has been successfully imported: 'Ikusitakoaren historikoa + ongi inportatu da' + All watched history has been successfully exported: 'Ikusitakoaren historikoa + ongi esportatu da' + Unable to read file: 'Ezin da fitxategia irakurri' + Unable to write file: 'Ezin da fitxategia idatzi' + Unknown data key: 'Datu-gako ezezaguna' + How do I import my subscriptions?: 'Nola inporta ditzaket nire harpidetzak?' + Manage Subscriptions: 'Harpidetzak kudeatu' + Import Playlists: Erreprodukzio zerrendak inportatu + Export Playlists: Erreprodukzio zerrendak esportatu + All playlists has been successfully imported: Erreprodukzio zerrenda guztiak ongi + inportatu dira + All playlists has been successfully exported: Erreprodukzio zerrenda guztiak ongi + esportatu dira + Playlist insufficient data: Ez da datu nahikorik "$" erreprodukzio zerrendarentzat, + elementutik ateratzen Proxy Settings: - Proxy Settings: '' - Enable Tor / Proxy: '' - Proxy Protocol: '' - Proxy Host: '' - Proxy Port Number: '' - Clicking on Test Proxy will send a request to: '' - Test Proxy: '' - Your Info: '' - Ip: '' - Country: '' - Region: '' - City: '' - Error getting network information. Is your proxy configured properly?: '' + Proxy Settings: 'Proxy-aren ezarpenak' + Enable Tor / Proxy: 'Tor / Proxy ahalbidetu' + Proxy Protocol: 'Proxy protokoloa' + Proxy Host: 'Proxy ostalaria' + Proxy Port Number: 'Proxy portu zenbakia' + Clicking on Test Proxy will send a request to: 'Test Proxy-n klik eginez gero, + eskaera bat bidaliko da' + Test Proxy: 'Proxy-a frogatu' + Your Info: 'Zure informazioa' + Ip: 'Ip' + Country: 'Herrialdea' + Region: 'Eskualdea' + City: 'Hiria' + Error getting network information. Is your proxy configured properly?: 'Errore + bat gertatu da sareko informazioa eskuratzean. Zure proxya behar bezala konfiguratuta + al dago?' + External Player Settings: + Ignore Unsupported Action Warnings: Onartu gabeko ekintzen oharrei ez ikusiarena + egin + External Player Settings: Kanpoko erreproduzitzailearen ezarpenak + External Player: Kanpoko erreproduzitzailea + Custom External Player Executable: Lehenetsitako kanpo erreproduzitzailea exekutagarria + Custom External Player Arguments: Lehenetsitako kanpo erreproduzitzailea argudioak + Download Settings: + Download Settings: Deskargen ezarpenak + Ask Download Path: Deskargaren ibilbidea galdetu + Choose Path: Ibilbidea hautatu + Download Behavior: Deskargen portaera + Open in web browser: Nabigatzailean ireki + Download in app: Aplikazioetan deskargatu + SponsorBlock Settings: + Skip Options: + Prompt To Skip: Saltatzeko abisua + Show In Seek Bar: Erakutsi Bilaketen barran + Do Nothing: Ez egin ezer + Skip Option: Aukera saltatu + Auto Skip: Saltatze automatikoa + Category Color: Kolore kategoria + Notify when sponsor segment is skipped: Jakinarazi babesleen segmentua saltatzen + denean + Enable SponsorBlock: Babesleak blokeatzea ahalbidetu + 'SponsorBlock API Url (Default is https://sponsor.ajay.app)': Babesleak blokeatzeko + API Url (lehenetsia https://sponsor.ajay.app da) + SponsorBlock Settings: Babesleak blokeatzeko ezarpenak About: #On About page - About: '' - Beta: '' - Source code: '' - Licensed under the AGPLv3: '' - View License: '' - Downloads / Changelog: '' + About: 'Honi buruz' + Beta: 'Beta' + Source code: 'Kode iturria' + Licensed under the AGPLv3: 'AGPLv3 lizentziapean' + View License: 'Lizentzia ikusi' + Downloads / Changelog: 'Deskargak / Aldaketen erregistroa' GitHub releases: '' Help: '' FreeTube Wiki: '' From 262b0def4863a62d317a1b5998ce251632a2e483 Mon Sep 17 00:00:00 2001 From: mapi68 Date: Mon, 13 Jun 2022 23:47:15 +0000 Subject: [PATCH 005/191] Translated using Weblate (Italian) Currently translated at 100.0% (582 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/ --- static/locales/it.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/static/locales/it.yaml b/static/locales/it.yaml index 049fa2f29..9707a2c46 100644 --- a/static/locales/it.yaml +++ b/static/locales/it.yaml @@ -512,9 +512,9 @@ Video: Video has been removed from your history: 'Il video è stato rimosso dalla cronologia' Open in YouTube: 'Apri con YouTube' Copy YouTube Link: 'Copia collegamento YouTube' - Open YouTube Embedded Player: 'Apri lettore YouTube incorporato' + Open YouTube Embedded Player: 'Apri con lettore YouTube incorporato' Copy YouTube Embedded Player Link: 'Copia collegamento del lettore YouTube incorporato' - Open in Invidious: 'Apri in Invidious' + Open in Invidious: 'Apri con Invidious' Copy Invidious Link: 'Copia collegamento Invidious' View: 'Vista' Views: 'Visualizzazioni' @@ -585,9 +585,9 @@ Video: video only: solo video Download Video: Scarica il video Copy Invidious Channel Link: Copia collegamento del canale Invidious - Open Channel in Invidious: Apri il canale su Invidious + Open Channel in Invidious: Apri il canale con Invidious Copy YouTube Channel Link: Copia collegamento del canale YouTube - Open Channel in YouTube: Apri il canale in YouTube + Open Channel in YouTube: Apri il canale con YouTube Started streaming on: Stream iniziato il Streamed on: Streaming il Video has been removed from your saved list: Il video è stato rimosso dalla tua @@ -660,7 +660,7 @@ Playlist: Copy YouTube Link: 'Copia collegamento YouTube' Open in YouTube: 'Apri con YouTube' Copy Invidious Link: 'Copia collegamento Invidious' - Open in Invidious: 'Apri in Invidious' + Open in Invidious: 'Apri con Invidious' # On Video Watch Page #* Published @@ -680,8 +680,8 @@ Share: Share Video: 'Condividi video' Copy Link: 'Copia collegamento' Open Link: 'Apri collegamento' - Copy Embed: 'Copia codice da Incorporare' - Open Embed: 'Apri codice da Incorporare' + Copy Embed: 'Copia codice da incorporare' + Open Embed: 'Apri codice da incorporare' # On Click Invidious URL copied to clipboard: 'Collegamento a Invidious copiato negli appunti' Invidious Embed URL copied to clipboard: 'Collegamento a Invidious da incorporare From 6715751a58be3c7a0391965df66ed30e84d2bcc4 Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Tue, 14 Jun 2022 05:34:53 +0000 Subject: [PATCH 006/191] Translated using Weblate (Basque) Currently translated at 64.2% (374 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 163 ++++++++++++++++++++++------------------- 1 file changed, 87 insertions(+), 76 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 315ee1e02..84c35a1a0 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -381,94 +381,105 @@ About: Licensed under the AGPLv3: 'AGPLv3 lizentziapean' View License: 'Lizentzia ikusi' Downloads / Changelog: 'Deskargak / Aldaketen erregistroa' - GitHub releases: '' - Help: '' - FreeTube Wiki: '' - FAQ: '' - Report a problem: '' - GitHub issues: '' - Please check for duplicates before posting: '' - Website: '' - Blog: '' - Email: '' - Mastodon: '' - Chat on Matrix: '' - Please read the: '' - room rules: '' - Translate: '' - Credits: '' - FreeTube is made possible by: '' - these people and projects: '' - Donate: '' + GitHub releases: 'Github argitalpenak' + Help: 'Laguntza' + FreeTube Wiki: 'Freetuberen wikia' + FAQ: 'Ohiko galderak' + Report a problem: 'Arazo baten berri eman' + GitHub issues: 'Github-en gaiak' + Please check for duplicates before posting: 'Mesedez, egiaztatu bikoiztutakoak ote + dauden argitaratu aurretik' + Website: 'Webgunea' + Blog: 'Blog-a' + Email: 'Helbide elektronikoa' + Mastodon: 'Mastodon' + Chat on Matrix: 'Matrix-en txata' + Please read the: 'Irakur ezazu mesedez' + room rules: 'Gelaren arauak' + Translate: 'Itzuli' + Credits: 'Kredituak' + FreeTube is made possible by: 'Freetube honakoei esker sortu da' + these people and projects: 'Hurrengo pertsonak eta proiektuak' + Donate: 'Donazioa egin' Profile: - Profile Select: '' - Profile Filter: '' - All Channels: '' - Profile Manager: '' - Create New Profile: '' - Edit Profile: '' - Color Picker: '' - Custom Color: '' - Profile Preview: '' - Create Profile: '' - Update Profile: '' - Make Default Profile: '' - Delete 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: '' - Profile has been updated: '' - Your default profile has been set to $: '' - Removed $ from your profiles: '' - Your default profile has been changed to your primary profile: '' - $ is now the active profile: '' - Subscription List: '' - Other Channels: '' - $ selected: '' - Select All: '' - Select None: '' - Delete Selected: '' - Add Selected To Profile: '' - No channel(s) have been selected: '' + Profile Select: 'Hautatu profila' + Profile Filter: 'Profilaren iragazkiak' + All Channels: 'Kanal guztiak' + Profile Manager: 'Profilaren kudeatzailea' + Create New Profile: 'Profil berria sortu' + Edit Profile: 'Profila editatu' + Color Picker: 'Kolore hautatzailea' + Custom Color: 'Kolore lehenetsia' + Profile Preview: 'Profilaren aurreikuspena' + Create Profile: 'Profila sortu' + Update Profile: 'Profila eguneratu' + Make Default Profile: 'Lehenetsitako profil gisa hautatu' + Delete Profile: 'Profila ezabatu' + Are you sure you want to delete this profile?: 'Ziur al zaude profil hau ezabatu + nahi duzula?' + All subscriptions will also be deleted.: 'Harpidetza guztiak ere ezabatuko dira.' + Profile could not be found: 'Ezin izan da profila aurkitu' + Your profile name cannot be empty: 'Zure profilaren izena ezin da hutsik egon' + Profile has been created: 'Profila ongi eratu da' + Profile has been updated: 'Profila ongi eguneratu da' + Your default profile has been set to $: 'Zure lehenetsitako profila $ gisa ezarri + da' + Removed $ from your profiles: '$ ezabatu berri da zure profiletatik' + Your default profile has been changed to your primary profile: 'Profil lehenetsia + zure profil nagusi gisa ezarri da' + $ is now the active profile: '$ da profil aktibo berria' + Subscription List: 'Harpidetzen zerrenda' + Other Channels: 'Beste kanalak' + $ selected: '$ ezarria' + Select All: 'Denak hautatu' + Select None: 'Bat ere ez hautatu' + Delete Selected: 'hautatutakoa ezabatu' + Add Selected To Profile: 'Hautatutakoa profilera gehitu' + No channel(s) have been selected: 'Kanal bat ere ez da hautatu' ? 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.: '' + : 'Hau da zure profil nagusia. Ziur al zaude hautatutako kanalak ezabatu nahi dituzula? + Kanal hauek ageri diren profil guztietan ezabatuko dira.' + Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: 'Ziur + al zaude hautatutako kanalak ezabatu nahi dituzula? Honek ez du kanala beste profil + batetik ezabatuko.' #On Channel Page + Profile Settings: Profilaren ezarpenak Channel: - Subscriber: '' - Subscribers: '' - Subscribe: '' - Unsubscribe: '' - Channel has been removed from your subscriptions: '' - Removed subscription from $ other channel(s): '' - Added channel to your subscriptions: '' - Search Channel: '' - Your search results have returned 0 results: '' - Sort By: '' + Subscriber: 'Harpideduna' + Subscribers: 'Harpidedunak' + Subscribe: 'Harpidetu' + Unsubscribe: 'Harpidetza kendu' + Channel has been removed from your subscriptions: 'kanala zure harpidetzetatik kendu + da' + Removed subscription from $ other channel(s): 'Harpidetza beste $ kanaletatik ezabatu + da' + Added channel to your subscriptions: 'Kanala zure harpidetzetara gehitu da' + Search Channel: 'Kanala bilatu' + Your search results have returned 0 results: 'Zure bilaketak 0 emaitza lortu ditu' + Sort By: 'Ordenatu honen arabera' Videos: - Videos: '' - This channel does not currently have any videos: '' + Videos: 'Bideoak' + This channel does not currently have any videos: 'Kanal honek ez du bideorik' Sort Types: - Newest: '' - Oldest: '' - Most Popular: '' + Newest: 'Berrienak' + Oldest: 'Zaharrenak' + Most Popular: 'Jarraituenak' Playlists: - Playlists: '' - This channel does not currently have any playlists: '' + Playlists: 'Erreprodukzio zerrendak' + This channel does not currently have any playlists: 'Kanal honek ez du erreprodukzio + zerrendarik' Sort Types: - Last Video Added: '' - Newest: '' - Oldest: '' + Last Video Added: 'Gehitutako azken bideoak' + Newest: 'Berrienak' + Oldest: 'Zaharrenak' About: - About: '' - Channel Description: '' - Featured Channels: '' + About: 'Honi buruz' + Channel Description: 'Kanalaren deskribapena' + Featured Channels: 'Nabarmendutako kanalak' Video: - Mark As Watched: '' + Mark As Watched: 'Ikusitako gisa jarri' Remove From History: '' Video has been marked as watched: '' Video has been removed from your history: '' From 686f95e4d08bd82e5cfa9f78359b9c7183f6641c Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Tue, 14 Jun 2022 12:06:48 +0000 Subject: [PATCH 007/191] Translated using Weblate (Basque) Currently translated at 82.6% (481 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 199 +++++++++++++++++++++++++---------------- 1 file changed, 123 insertions(+), 76 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 84c35a1a0..3510ea1be 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -129,7 +129,7 @@ Settings: Preferred API Backend: Preferred API Backend: 'API Backend hobetsia' Local API: 'Tokiko API' - Invidious API: 'Invidious API' + Invidious API: 'Invidious API-a' Video View Type: Video View Type: 'Bideo-ikuspegi mota' Grid: 'Lauki-sarea' @@ -480,87 +480,134 @@ Channel: Featured Channels: 'Nabarmendutako kanalak' Video: Mark As Watched: 'Ikusitako gisa jarri' - 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: '' - Copy YouTube Link: '' - Open YouTube Embedded Player: '' - Copy YouTube Embedded Player Link: '' - Open in Invidious: '' - Copy Invidious Link: '' - Open Channel in YouTube: '' - Copy YouTube Channel Link: '' - Open Channel in Invidious: '' - Copy Invidious Channel Link: '' - View: '' - Views: '' - Loop Playlist: '' - Shuffle Playlist: '' - Reverse Playlist: '' - Play Next Video: '' - Play Previous Video: '' + Remove From History: 'Historikotik ezabatu' + Video has been marked as watched: 'Bideoa ikusia gisa ezarri da' + Video has been removed from your history: 'Bideoa zure historikotik ezabatu egin + da' + Save Video: 'Gorde bideoa' + Video has been saved: 'Bideoa ongi gorde da' + Video has been removed from your saved list: 'Bideoa gordetakoen zerrendatik kendu + da' + Open in YouTube: 'Youtuben ireki' + Copy YouTube Link: 'Youtube-ren esteka kopiatu' + Open YouTube Embedded Player: 'Youtuberen erreproduzitzaile integratua ireki' + Copy YouTube Embedded Player Link: 'Youtuberen erreproduzitzaile integratuaren esteka + kopiatu' + Open in Invidious: 'Invidious-en ireki' + Copy Invidious Link: 'Invidious-en esteka kopiatu' + Open Channel in YouTube: 'Kanala Youtube-n ireki' + Copy YouTube Channel Link: 'Youtubeko kanalaren esteka kopiatu' + Open Channel in Invidious: 'Kanala Invidious-en ireki' + Copy Invidious Channel Link: 'Invidious-eko kanalaren esteka kopiatu' + View: 'Ikusi' + Views: 'Ikustaldiak' + Loop Playlist: 'etengabeko erreprodukzio zerrenda' + Shuffle Playlist: 'Nahasketa erreprodukzio zerrenda' + Reverse Playlist: 'Alderantzizko erreprodukzio zerrenda' + Play Next Video: 'Hurrengo bideoa ikusi' + Play Previous Video: 'Aurreko bideoa ikusi' # Context is "X People Watching" - Watching: '' - Watched: '' - Autoplay: '' - Starting soon, please refresh the page to check again: '' + Watching: 'Ikusten' + Watched: 'Ikusitakoak' + Autoplay: 'Automatikoki ikusi' + Starting soon, please refresh the page to check again: 'Laster hasiko da, mesedez, + freskatu orria berriro egiaztatzeko' # 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 chat is enabled. Chat messages will appear here once sent.: '' - 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': '' - Download Video: '' - video only: '' - audio only: '' + Live: 'Zuzenekoak' + Live Now: 'Uneko zuzenekoak' + Live Chat: 'Zuzenekoaren txata' + Enable Live Chat: 'Zuzeneko txata aktibatu' + Live Chat is currently not supported in this build.: 'Zuzeneko txata ez da oraindik + onartzen konpilazio honetan.' + 'Chat is disabled or the Live Stream has ended.': 'Txata desgaituta dago edo zuzeneko + igorpena amaitu da.' + Live chat is enabled. Chat messages will appear here once sent.: 'Zuzeneko txata + gaituta dago. Txat-mezuak bidalitakoan hemen agertuko dira.' + 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Zuzeneko + txata ez da onartzen Invidious APIarekin. Beharrezkoa da YouTube-ra zuzenean + konektatzea.' + Download Video: 'Bideoa deskargatu' + video only: 'Bideoa soilik' + audio only: 'Audioa soilik' Audio: - Low: '' - Medium: '' - High: '' - Best: '' + Low: 'Eskasa' + Medium: 'Erdi-mailakoa' + High: 'Altua' + Best: 'Onena' Published: - Jan: '' - Feb: '' - Mar: '' - Apr: '' - May: '' - Jun: '' - Jul: '' - Aug: '' - Sep: '' - Oct: '' - Nov: '' - Dec: '' - Second: '' - Seconds: '' - Minute: '' - Minutes: '' - Hour: '' - Hours: '' - Day: '' - Days: '' - Week: '' - Weeks: '' - Month: '' - Months: '' - Year: '' - Years: '' - Ago: '' - Upcoming: '' - Published on: '' - Streamed on: '' - Started streaming on: '' - translated from English: '' + Jan: 'Urtarrila' + Feb: 'Otsaila' + Mar: 'Martxoa' + Apr: 'Apirila' + May: 'Maiatza' + Jun: 'Ekaina' + Jul: 'Uztaila' + Aug: 'Abuztua' + Sep: 'Iraila' + Oct: 'Urria' + Nov: 'Azaroa' + Dec: 'Abendua' + Second: 'Segundua' + Seconds: 'Segundoak' + Minute: 'Minutua' + Minutes: 'Minutuak' + Hour: 'Ordua' + Hours: 'Orduak' + Day: 'Eguna' + Days: 'Egunak' + Week: 'Astea' + Weeks: 'Asteak' + Month: 'Hilabetea' + Months: 'Hilabeteak' + Year: 'Urtea' + Years: 'Urteak' + Ago: 'Duela' + Upcoming: 'Estreinaldiak' + Published on: 'Noiz argitaratua' + Streamed on: 'Noiz zuzenean emana' + Started streaming on: 'Noiz hasi zen zuzenekoa' + translated from English: 'Ingelesetik itzulia' # $ is replaced with the number and % with the unit (days, hours, minutes...) - Publicationtemplate: '' + Publicationtemplate: 'Duela $ %' #& Videos + External Player: + Unsupported Actions: + opening playlists: erreprodukzio zerrendak irekitzen + shuffling playlists: erreprodukzio zerrendak nahasten + setting a playback rate: erreprodukzio tasa ezarri + reversing playlists: erreprodukzio zerrendak alderantzizkatzen + starting video at offset: hasierako bideoa offset moduan + opening specific video in a playlist (falling back to opening the video): erreprodukzio + zerrenda batean bideoa irekitzen (bideoa berriz ere irekitzen) + looping playlists: erreprodukzio zerrendak etengabe erreproduzitzen + OpenInTemplate: $-an irekia + video: bideoa + OpeningTemplate: $ irekitzen %-an... + UnsupportedActionTemplate: '$-k ez du onartzen: %' + playlist: erreprodukzio zerrenda + Stats: + Video ID: Bideoaren identifikatzailea + Bitrate: biten tasa + Volume: Bolumena + Bandwidth: Banda zabalera + Buffered: Bufferera igota + Video statistics are not available for legacy videos: Bideoen estatistikak ez + daude eskuragarri legacy bideoentzat + Resolution: Bereizmena + Player Dimensions: Erreproduzitzailearen neurriak + Dropped / Total Frames: Bidalitako / Guztira Frame-ak + Mimetype: MIME mota + Sponsor Block category: + music offtopic: Gaiaz kanpoko musika + interaction: Elkarrekintza + sponsor: Babeslea + outro: Bukaera + self-promotion: Autosustapena + recap: Laburpen + filler: Betegarria + intro: Sarrera + Skipped segment: Saltatu egin da segmentua + Premieres on: Estreinaldiak Videos: #& Sort By Sort By: From 470e9ceba517f0f98af86054cc15d905a59d8a2d Mon Sep 17 00:00:00 2001 From: Eder ETXEBARRIA Date: Wed, 15 Jun 2022 07:02:20 +0000 Subject: [PATCH 008/191] Translated using Weblate (Basque) Currently translated at 100.0% (582 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/eu/ --- static/locales/eu.yaml | 237 ++++++++++++++++++++++++++++------------- 1 file changed, 160 insertions(+), 77 deletions(-) diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml index 3510ea1be..9233b0821 100644 --- a/static/locales/eu.yaml +++ b/static/locales/eu.yaml @@ -243,6 +243,11 @@ Settings: Folder Label: Pantaila-argazkien karpeta Folder Button: Hautatu karpeta File Name Label: Fitxategi-izenen eredua + File Name Tooltip: Hurrengo aldagaiak balia ditzakezu. %U Urtea 4 digitu. %H + Hilabetea 2 digitu. %E Eguna 2 digitu. %O Ordua 2 digitu. %M Minutu 2 digitu. + %S segundo 2 digitu. %T milisegundo 3 digitu. %s Bideoaren segundoa. %t Bideoaren + milisegundoa 3 digitu. %i Bideoaren Identifikatzailea. "\" edo "/" baliatu + ahal dituzu azpikarpetak sortzeko. Scroll Playback Rate Over Video Player: Aldatu Erreprodukzio-tasa Bideo Erreproduzitzailean Display Play Button In Video Player: Bistaratu Erreproduzitzeko botoia bideo erreproduzitzailean Max Video Playback Rate: Gehienezko bideoen erreprodukzio-tasa @@ -611,109 +616,187 @@ Video: Videos: #& Sort By Sort By: - Newest: '' - Oldest: '' + Newest: 'Berriena' + Oldest: 'Zaharrena' #& Most Popular #& Playlists Playlist: #& About - View Full Playlist: '' - Videos: '' - View: '' - Views: '' - Last Updated On: '' + View Full Playlist: 'Ikusi erreprodukzio-zerrenda osoa' + Videos: 'Bideoak' + View: 'Ikusi' + Views: 'Ikustaldiak' + Last Updated On: 'Azkenengoz eguneratua' Share Playlist: - Share Playlist: '' - Copy YouTube Link: '' - Open in YouTube: '' - Copy Invidious Link: '' - Open in Invidious: '' + Share Playlist: 'Erreprodukzio-zerrenda partekatu' + Copy YouTube Link: 'Youtube-ko esteka kopiatu' + Open in YouTube: 'Youtube-n ireki' + Copy Invidious Link: 'Invidious-eko esteka kopiatu' + Open in Invidious: 'Invidious-en ireki' # On Video Watch Page #* Published #& Views -Toggle Theatre Mode: '' + Playlist: Erreprodukzio-zerrenda +Toggle Theatre Mode: 'Aldatu Antzerki modura' Change Format: - Change Video Formats: '' - Use Dash Formats: '' - Use Legacy Formats: '' - Use Audio Formats: '' - Dash formats are not available for this video: '' - Audio formats are not available for this video: '' + Change Video Formats: 'Bideoen formatuak aldatu' + Use Dash Formats: 'DASH formatuak erabili' + Use Legacy Formats: 'Legacy formatuak erabili' + Use Audio Formats: 'Audio formatuak erabili' + Dash formats are not available for this video: 'DASH formatuak ez dira eskuragarri + bideo honentzat' + Audio formats are not available for this video: 'Audio formatuak ez dira eskuragarri + bideo honentzat' Share: - Share Video: '' - Include Timestamp: '' - Copy Link: '' - Open Link: '' - Copy Embed: '' - Open Embed: '' + Share Video: 'Bideoa partekatu' + Include Timestamp: 'Timestamp erantsi' + Copy Link: 'Esteka kopiatu' + Open Link: 'Esteka ireki' + Copy Embed: 'Kopiatu integratuta' + Open Embed: 'Integratuta ireki' # On Click - Invidious URL copied to clipboard: '' - Invidious Embed URL copied to clipboard: '' - Invidious Channel URL copied to clipboard: '' - YouTube URL copied to clipboard: '' - YouTube Embed URL copied to clipboard: '' - YouTube Channel URL copied to clipboard: '' + Invidious URL copied to clipboard: 'Invidious-eko URL-a arbelean itsatsi da' + Invidious Embed URL copied to clipboard: 'Invidious-eko URL integratua arbelera + itsatsi da' + Invidious Channel URL copied to clipboard: 'Invidious-eko kanalaren URL-a arbelera + itsatsi da' + YouTube URL copied to clipboard: 'Youtube-ko URL-a arbelean itsatsi da' + YouTube Embed URL copied to clipboard: 'Youtube-ko URL integratua arbelean itsatsi + da' + YouTube Channel URL copied to clipboard: 'Youtube-ko kanalaren URL-a arbelean itsatsi + da' -Mini Player: '' +Mini Player: 'Erreproduzitzaile txikia' Comments: - Comments: '' - Click to View Comments: '' - Getting comment replies, please wait: '' - There are no more comments for this video: '' - Show Comments: '' - Hide Comments: '' - Sort by: '' - Top comments: '' - Newest first: '' + Comments: 'Iruzkinak' + Click to View Comments: 'Klikatu iruzkinak ikustearren' + Getting comment replies, please wait: 'Iruzkinen erantzunak eskuratzen. Itxaron + mesedez' + There are no more comments for this video: 'Ez dago iruzkin gehiagorik bideo honentzat' + Show Comments: 'Iruzkinak erakutsi' + Hide Comments: 'Iruzkinak ezkutatu' + Sort by: 'Honen arabera sailkatuta' + Top comments: 'Iruzkin nagusiak' + Newest first: 'Berrienak lehenik' # Context: View 10 Replies, View 1 Reply - View: '' - Hide: '' - Replies: '' - Reply: '' - There are no comments available for this video: '' - Load More Comments: '' - No more comments available: '' -Up Next: '' + View: 'Ikusi' + Hide: 'Ezkutatu' + Replies: 'Erantzunak' + Reply: 'Erantzun' + There are no comments available for this video: 'Ez da iruzkin eskuragarririk bideo + honentzat' + Load More Comments: 'Iruzkin gehiago kargatu' + No more comments available: 'Iruzkin eskuragarri gehiagorik ez' + Member: Kide + Show More Replies: Erantzun gehiago erakutsi + From $channelName: $kanalIzenetik + And others: eta bestelakoak + Pinned by: Honengatik ainguratuta +Up Next: 'Hurrengoa' #Tooltips Tooltips: General Settings: - Preferred API Backend: '' - Fallback to Non-Preferred Backend on Failure: '' - Thumbnail Preference: '' - Invidious Instance: '' - Region for Trending: '' + Preferred API Backend: 'Aukeratu FreeTubek datuak lortzeko erabiltzen duen backend-a. + Tokiko APIa integratutako erauzgailua da. Invidious APIak Invidious zerbitzari + bat behar du konektatzeko.' + Fallback to Non-Preferred Backend on Failure: 'Zure hobetsitako APIak arazoren + bat duenean, FreeTube automatikoki saiatuko da hobetsi ez den APIa erabiltzen + ordezko metodo gisa, posible denean.' + Thumbnail Preference: 'FreeTube-ko miniatura guztiak bideoaren fotograma batengatik + ordezkatuko dira lehenetsitako irudi txikiarekin ordez.' + Invidious Instance: 'API deientzat Individious-eko instantzia, zeinetara Freetube + konektatuko den.' + Region for Trending: 'Joeren eskualdeak aukera ematen dizu bistaratu nahi dituzun + herrialdeko joerako bideoak hautatzeko. Youtube-k ez ditu onartzen bistaratzen + diren herrialde guztiak.' + External Link Handling: "Lehenetsitako portaera hautatu, Freetube-n ireki ezin\ + \ den esteka bat klikatua izan denean.\nLehentasunez, Freetube-k lehenetsitako\ + \ nabigatazailean irekiko du klikatutako esteka.\n" Player Settings: - Force Local Backend for Legacy Formats: '' - Proxy Videos Through Invidious: '' - Default Video Format: '' + Force Local Backend for Legacy Formats: 'Soilik funtzionatzen du Individious-en + APIa zure lehenetsitakoa denean. Aukera dagoenean, tokiko APIa eta azken honek + bidalitako legacy formatuak ibiliko dira, Individious-ek bidalitakoak baino. + Lagungarria da herrialdeek ezarritako mugen ondorioz Individious-eko bideoak + ezin direnean ikusi.' + Proxy Videos Through Invidious: 'Bideoak hornitzeko Invidious-era konektatuko + da, YouTube-ra zuzeneko konexioa egin beharrean. APIaren hobespena gainidazten + du.' + Default Video Format: 'Erabiliko diren formatuak ezarri bideo bat erreproduzitzerakoan. + DASH formatuek kalitate handiagoak onartzen dituzte. Bestalde, Legacy formatuak + 720 puntutara mugatuta badaude ere banda zabalera gutxiago kontsumitzen dute. + Audio formatuak audio fluxuak baino ez dira.' + Scroll Playback Rate Over Video Player: Kursorea bideoaren gainean denean, kontrol + tekla sakatu eta mantendu (Komando tekla MAC-etan) eta saguaren gurpila aurrera + eta atzera mugiarazi erreprodukzio tasa kontrolatzeko. Kontrol tekla sakatu + eta mantendu (Komando tekla MAC-etan) eta ondoren saguaren ezkerreko botoia + sakatu, lehenetsitako erreprodukzio tasara itzultzeko (1x baldin eta ezarpenetan + aldaketarik egin ez bada). Subscription Settings: - Fetch Feeds from RSS: '' + Fetch Feeds from RSS: 'Posible denean, Freetube-k bere lehenetsitako metodoa erabili + beharrean RSS-ak baliatuko ditu zure harpidetzen jariora konektatzeko. RSS arinagoa + izateaz gain, IP-en blokeoak saihesten ditu. Aldiz, zuzenekoaren egoeraren edo + bideoaren iraupenaren informaziorik ez du ematen, besteak beste' Privacy Settings: - Remove Video Meta Files: '' + Remove Video Meta Files: 'Gaituta dagoenean, FreeTube-k automatikoki ezabatzen + ditu bideoen erreprodukzioan sortutako metafitxategiak, bistaratze orria ixten + denean.' # Toast Messages -Local API Error (Click to copy): '' -Invidious API Error (Click to copy): '' -Falling back to Invidious API: '' -Falling back to the local API: '' -This video is unavailable because of missing formats. This can happen due to country unavailability.: '' -Subscriptions have not yet been implemented: '' -Loop is now disabled: '' -Loop is now enabled: '' -Shuffle is now disabled: '' -Shuffle is now enabled: '' -The playlist has been reversed: '' -Playing Next Video: '' -Playing Previous Video: '' -Playing Next Video Interval: '' -Canceled next video autoplay: '' -'The playlist has ended. Enable loop to continue playing': '' + External Player Settings: + Custom External Player Executable: Lehentasunez, Freetube-k uste izango du hautatutako + kanpo erreproduzitzailea aurkitu dezakeela PATH ingurune aldagaiari esker. Beharrezkoa + balitz, ohiko PATH-a ezarri ahalko litzateke. + DefaultCustomArgumentsTemplate: "(Lehenetsia: '$')" + Ignore Warnings: Jakinarazpenak kendu, uneko kanpo erreproduzitzaileak uneko ekintza + onartzen ez duenean (esaterako, alderantzizko erreprodukzio zerrendak, etab.). + External Player: Kanpo erreproduzitzaile bat hautatuz gero, bideoa edo erreproduzkio + zerrenda (posible bada) irekitzerakoan, ikono bat agertuko da miniaturan. + Custom External Player Arguments: Komando-lerroko argumentu pertsonalizatuak, + puntu eta komaz bereizita (';'), kanpoko erreproduzitzailera pasatzea nahi duzu. +Local API Error (Click to copy): 'Tokiko API-ak huts egin du (klikatu kopiatzeko)' +Invidious API Error (Click to copy): 'Individious-eko APIak huts egin du (klikatu + kopiatzeko)' +Falling back to Invidious API: 'Individious-eko APIra itzultzen' +Falling back to the local API: 'Tokiko APIra itzultzen' +This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Bideo + hau ez dago erabilgarri, zenbait formatu eskas baitira. Honakoa zure herrialdean + erabilgarri ez dagoelako gerta daiteke.' +Subscriptions have not yet been implemented: 'Harpidetzak ez dira oraindik aktibatu' +Loop is now disabled: 'Etengabeko erreprodukzioa desaktibatu egin da' +Loop is now enabled: 'Etengabeko ereprodukzioa aktibatu egin da' +Shuffle is now disabled: 'Erreprodukzioen nahasketak desaktibatu egin dira' +Shuffle is now enabled: 'Erreprodukzioen nahasketak aktibatu egin dira' +The playlist has been reversed: 'Erreprodukzio zerrenda alderantzizkatua izan da' +Playing Next Video: 'Hurrengo bideoa erreproduzitzen' +Playing Previous Video: 'Aurreko bideoa erreproduzitzen' +Playing Next Video Interval: 'Denbora gutxi barru hurrengo bideoa erreproduzituko + da. Klikatu deuseztatzeko. | Hurrengo bideoa {nextVideoInterval} segundu barru erreproduzitzen. + Klikatu deuseztatzeko. | Hurrengo bideoa {nextVideoInterval} segundu barru erreproduzitzen. + Klikatu deuseztatzeko.' +Canceled next video autoplay: 'Hurrengo bideoa automatikoki erreproduzituko da' +'The playlist has ended. Enable loop to continue playing': 'Erreprodukzio zerrenda + bukatu da. Etengabeko erreprodukzioa aktibatu erreproduzitzen jarraitzeko' -Yes: '' -No: '' +Yes: 'Bai' +No: 'Ez' Search Bar: Clear Input: Sarrera garbitu Are you sure you want to open this link?: Ziur al zaude ataka hau ireki nahi duzula? Open New Window: Leiho berria ireki +Default Invidious instance has been set to $: Lehenetsitako Individious-eko instantzia + $ gisa ezarri da +Default Invidious instance has been cleared: Lehenetsitako Individious-eko instantzia + ezabatu egin da +External link opening has been disabled in the general settings: Kanpo estekak irekitzea + desaktibatu egin da ezarpen orokorretan +Downloading has completed: '"$" deskargatu egin da' +Unknown YouTube url type, cannot be opened in app: Youtube-ko URL mota ezezaguna, + ezin da aplikazioan ireki +Hashtags have not yet been implemented, try again later: Etiketak ez dira oraindik + aktibatu, berriz ere saiatu zaitez beranduago +Downloading failed: Akats bat gertatu da "$" deskargatzerakoan +Screenshot Success: Pantaila-argazkia gode da "$" gisa +Screenshot Error: Pantaila-argazkiak huts egin du. $ +Starting download: '"$"-ren deskarga abiatzen' From e2c7fa35a3f6e00a3bda6d0c7df8353c4fb98063 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Thu, 16 Jun 2022 00:40:46 +0200 Subject: [PATCH 009/191] Fix the YouTube GDPR cookie not being sent along with requests (#2315) --- src/main/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/index.js b/src/main/index.js index dbf6378eb..6a1582ab5 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -147,7 +147,8 @@ function runApp() { session.defaultSession.cookies.set({ url: url, name: 'CONSENT', - value: 'YES+' + value: 'YES+', + sameSite: 'no_restriction' }) }) From 330086e87c1f2eb074d8e92d8d3d5f7f6b372358 Mon Sep 17 00:00:00 2001 From: bob1520 <80553357+hockerschwan@users.noreply.github.com> Date: Wed, 15 Jun 2022 22:41:38 +0000 Subject: [PATCH 010/191] add ? and * (#2319) --- src/renderer/store/modules/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js index a0884a858..a8bdb99e2 100644 --- a/src/renderer/store/modules/utils.js +++ b/src/renderer/store/modules/utils.js @@ -326,7 +326,7 @@ const actions = { if (platform === 'win32') { // https://www.boost.org/doc/libs/1_78_0/libs/filesystem/doc/portability_guide.htm // https://stackoverflow.com/questions/1976007/ - const noForbiddenChars = ['<', '>', ':', '"', '/', '|'].every(char => { + const noForbiddenChars = ['<', '>', ':', '"', '/', '|', '?', '*'].every(char => { return parsedString.indexOf(char) === -1 }) if (!noForbiddenChars) { From 829eaa078e0cbd997f259012d59c8764a8a3d4a3 Mon Sep 17 00:00:00 2001 From: Sedative Date: Sun, 19 Jun 2022 11:15:26 +0000 Subject: [PATCH 011/191] Translated using Weblate (Russian) Currently translated at 100.0% (582 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/ --- static/locales/ru.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml index cf771d24a..a88077b8e 100644 --- a/static/locales/ru.yaml +++ b/static/locales/ru.yaml @@ -438,7 +438,7 @@ Channel: Subscribers: 'Подписчиков' Subscribe: 'Подписаться' Unsubscribe: 'Отписаться' - Search Channel: 'Поиск канала' + Search Channel: 'Поиск на канале' Your search results have returned 0 results: 'По вашему запросу найдено 0 результатов' Sort By: 'Сортировать по' Videos: From f6abd74878faac63fd61e94e6871e9b5937cec11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=95=D1=80=D0=BC=D0=B0=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Sun, 19 Jun 2022 11:12:33 +0000 Subject: [PATCH 012/191] Translated using Weblate (Russian) Currently translated at 100.0% (582 of 582 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/ru/ --- static/locales/ru.yaml | 43 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml index a88077b8e..84dbe554e 100644 --- a/static/locales/ru.yaml +++ b/static/locales/ru.yaml @@ -230,6 +230,22 @@ Settings: видеоплеера Max Video Playback Rate: Максимальная скорость воспроизведения Video Playback Rate Interval: Интервал скорости воспроизведения видео + Screenshot: + Ask Path: Спрашивать, куда сохранять + Error: + Forbidden Characters: Запрещенные символы + Empty File Name: Пустое имя файла + Format Label: Формат снимков экрана + Folder Label: Папка снимков экрана + Folder Button: Выбрать папку + Enable: Включить снимки экрана + Quality Label: Качество снимков экрана + File Name Label: Шаблон имени файла + File Name Tooltip: Вы можете использовать эти переменные. %Y Год 4 цифры. %M + Месяц 2 цифры. %D День 2 цифры. %H Час 2 цифры. %N Минуты 2 цифры. %S Секунды + 2 цифры. %T Миллисекунды 3 цифры. %s Секунды видео. %t Миллисекунды видео + 3 цифры. %i Идентификатор видео. Вы также можете использовать "\" или "/" + для создания подпапок. Subscription Settings: Subscription Settings: 'Подписки' Hide Videos on Watch: 'Скрывать видео после просмотра' @@ -365,6 +381,13 @@ Settings: API (По умолчанию https://sponsor.ajay.app) Enable SponsorBlock: Включить SponsorBlock Settings: SponsorBlock + Skip Options: + Skip Option: Опция пропуска + Prompt To Skip: Предлагать пропустить + Auto Skip: Автопропуск + Show In Seek Bar: Показать на панели + Do Nothing: Ничего не делать + Category Color: Цвет категории External Player Settings: Custom External Player Arguments: Аргументы внешнего проигрывателя Custom External Player Executable: Исполняемый файл внешнего проигрывателя @@ -376,6 +399,9 @@ Settings: Download Settings: Скачивание Ask Download Path: Запрашивать путь при скачивании Choose Path: Выберите путь + Download in app: Загрузить в приложении + Download Behavior: Поведение при загрузке + Open in web browser: Открыть в браузере About: #On About page About: 'О FreeTube' @@ -555,12 +581,14 @@ Video: Save Video: Добавить видео в сохраненные translated from English: переведен с Английского Sponsor Block category: - music offtopic: сегмент без музыки - interaction: напоминание о подписке (взаимодействие) - self-promotion: самореклама - outro: концовка - intro: вступление - sponsor: спонсор + music offtopic: Сегмент без музыки + interaction: Напоминание о подписке (взаимодействие) + self-promotion: Самореклама + outro: Концовка + intro: Вступление + sponsor: Спонсор + recap: Краткое содержание + filler: Филлер Skipped segment: Пропущенный сегмент External Player: Unsupported Actions: @@ -674,6 +702,7 @@ Comments: From $channelName: от $channelName And others: и других Pinned by: Закреплено + Member: Участник Up Next: 'Следующий' # Toast Messages @@ -821,3 +850,5 @@ Are you sure you want to open this link?: Вы действительно хот Starting download: Запуск загрузки "$" Downloading has completed: '"$" закончил загрузку' Downloading failed: Возникла проблема с загрузкой "$" +Screenshot Success: Снимок экрана сохранён как "$" +Screenshot Error: Снимок экрана не удался. $ From b1183fe0c0ee5af5bee08a4880f9025259c769fd Mon Sep 17 00:00:00 2001 From: Svallinn <41585298+Svallinn@users.noreply.github.com> Date: Sun, 19 Jun 2022 19:02:57 +0100 Subject: [PATCH 013/191] Utils+Everywhere: Add a start offset tolerance for the external player (#2325) If a current video is practically over or the value in the history's watch progress is almost the same as the length of the video, it's safe to deduce that if the external player button is clicked, the user is most likely just rewatching the video, making no sense to pass a start offset to it --- src/renderer/components/ft-list-video/ft-list-video.js | 1 + src/renderer/components/watch-video-info/watch-video-info.js | 1 + src/renderer/store/modules/utils.js | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) 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 682ecef11..5f31a7ff0 100644 --- a/src/renderer/components/ft-list-video/ft-list-video.js +++ b/src/renderer/components/ft-list-video/ft-list-video.js @@ -252,6 +252,7 @@ export default Vue.extend({ watchProgress: this.watchProgress, playbackRate: this.defaultPlayback, videoId: this.id, + videoLength: this.data.lengthSeconds, playlistId: this.playlistId, playlistIndex: this.playlistIndex, playlistReverse: this.playlistReverse, 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 8f2518fe9..0d218f2ba 100644 --- a/src/renderer/components/watch-video-info/watch-video-info.js +++ b/src/renderer/components/watch-video-info/watch-video-info.js @@ -303,6 +303,7 @@ export default Vue.extend({ watchProgress: this.getTimestamp(), playbackRate: this.defaultPlayback, videoId: this.id, + videoLength: this.lengthSeconds, playlistId: this.playlistId, playlistIndex: this.getPlaylistIndex(), playlistReverse: this.getPlaylistReverse(), diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js index a8bdb99e2..d0d2be5e7 100644 --- a/src/renderer/store/modules/utils.js +++ b/src/renderer/store/modules/utils.js @@ -895,7 +895,7 @@ const actions = { args.push(...defaultCustomArguments) } - if (payload.watchProgress > 0) { + if (payload.watchProgress > 0 && payload.watchProgress < payload.videoLength - 10) { if (typeof cmdArgs.startOffset === 'string') { args.push(`${cmdArgs.startOffset}${payload.watchProgress}`) } else { From 7057633906c8d656762ccdb903baf69e32ac47ee Mon Sep 17 00:00:00 2001 From: bob1520 <80553357+hockerschwan@users.noreply.github.com> Date: Sun, 19 Jun 2022 18:39:29 +0000 Subject: [PATCH 014/191] loop button color (#2321) --- src/renderer/components/ft-video-player/ft-video-player.js | 4 ++-- 1 file changed, 2 insertions(+), 2 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 fcdab490a..2152a343f 100644 --- a/src/renderer/components/ft-video-player/ft-video-player.js +++ b/src/renderer/components/ft-video-player/ft-video-player.js @@ -1167,8 +1167,8 @@ export default Vue.extend({ toggleVideoLoop: async function () { if (!this.player.loop()) { - const currentTheme = localStorage.getItem('mainColor') - const colorNames = this.$store.state.utils.colorClasses + const currentTheme = this.$store.state.settings.mainColor + const colorNames = this.$store.state.utils.colorNames const colorValues = this.$store.state.utils.colorValues const nameIndex = colorNames.findIndex((color) => { From f4aff3964bf0032dd4296b8dfd876c9eba44b7be Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Sun, 19 Jun 2022 22:44:24 +0200 Subject: [PATCH 015/191] Fix emojis displaying incorrectly (#2327) --- src/renderer/App.css | 2 +- .../watch-video-description/watch-video-description.css | 2 +- src/renderer/videoJS.css | 2 +- src/renderer/views/Channel/Channel.css | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/renderer/App.css b/src/renderer/App.css index dc7b3a870..70b98ebb2 100644 --- a/src/renderer/App.css +++ b/src/renderer/App.css @@ -6,7 +6,7 @@ #app { display: flex; flex-wrap: wrap; - font-family: 'Roboto', sans-serif; + font-family: 'Roboto', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; } .routerView { diff --git a/src/renderer/components/watch-video-description/watch-video-description.css b/src/renderer/components/watch-video-description/watch-video-description.css index ef3c71c26..dc1d33c7d 100644 --- a/src/renderer/components/watch-video-description/watch-video-description.css +++ b/src/renderer/components/watch-video-description/watch-video-description.css @@ -4,7 +4,7 @@ } .description { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; font-size: 17px; white-space: pre-wrap; } diff --git a/src/renderer/videoJS.css b/src/renderer/videoJS.css index 8a3f4831c..7d56c1e27 100644 --- a/src/renderer/videoJS.css +++ b/src/renderer/videoJS.css @@ -350,7 +350,7 @@ line-height: 1; font-weight: normal; font-style: normal; - font-family: Arial, Helvetica, sans-serif; + font-family: Arial, Helvetica, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; word-break: initial; } .video-js:-moz-full-screen { diff --git a/src/renderer/views/Channel/Channel.css b/src/renderer/views/Channel/Channel.css index 1c7109bcf..c11748510 100644 --- a/src/renderer/views/Channel/Channel.css +++ b/src/renderer/views/Channel/Channel.css @@ -108,7 +108,7 @@ } .aboutInfo { - font-family: 'Roboto', sans-serif; + font-family: 'Roboto', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; font-size: 17px; white-space: pre-wrap; } From 809274182cc6b030ab2660a50a4840d7dd4a42f8 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Sun, 19 Jun 2022 23:19:52 +0200 Subject: [PATCH 016/191] Fix the theming of the share menu logos for the system, black and dracula themes (#2329) --- .../ft-share-button/ft-share-button.sass | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/renderer/components/ft-share-button/ft-share-button.sass b/src/renderer/components/ft-share-button/ft-share-button.sass index 212399727..f5a7e1158 100644 --- a/src/renderer/components/ft-share-button/ft-share-button.sass +++ b/src/renderer/components/ft-share-button/ft-share-button.sass @@ -29,10 +29,15 @@ width: auto @at-root - .dark & + .dark &, .system[data-system-theme*='dark'] & filter: brightness(0.868) - .light & + .black & + filter: brightness(0.933) + + /* no changes for the dracula theme */ + + .light &, .system[data-system-theme*='light'] & filter: invert(0.87) .invidious @@ -48,8 +53,11 @@ margin-right: 2px @at-root - .dark & + .dark &, + .black &, + .dracula &, + .system[data-system-theme*='dark'] & background-image: url(~../../assets/img/invidious-logo-dark.svg) - .light & + .light &, .system[data-system-theme*='light'] & background-image: url(~../../assets/img/invidious-logo-light.svg) From 6d64b3a2b1d9e3969cb26c8220c9cb373284972f Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Mon, 20 Jun 2022 03:58:27 +0200 Subject: [PATCH 017/191] ^ Update marked (#2335) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a63a0b8e4..f0896c32f 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "js-yaml": "^4.1.0", "lodash.debounce": "^4.0.8", "lodash.isequal": "^4.5.0", - "marked": "^4.0.15", + "marked": "^4.0.17", "nedb-promises": "^5.0.1", "opml-to-json": "^1.0.1", "rss-parser": "^3.12.0", diff --git a/yarn.lock b/yarn.lock index cc1ae7ace..7027d3b21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4864,10 +4864,10 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -marked@^4.0.15: - version "4.0.15" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.15.tgz#0216b7c9d5fcf6ac5042343c41d81a8b1b5e1b4a" - integrity sha512-esX5lPdTfG4p8LDkv+obbRCyOKzB+820ZZyMOXJZygZBHrH9b3xXR64X4kT3sPe9Nx8qQXbmcz6kFSMt4Nfk6Q== +marked@^4.0.17: + version "4.0.17" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.17.tgz#1186193d85bb7882159cdcfc57d1dfccaffb3fe9" + integrity sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA== matcher@^3.0.0: version "3.0.0" From 72b4e17cd40de99c0029b78094fc4ba36be6e146 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Mon, 20 Jun 2022 03:59:17 +0200 Subject: [PATCH 018/191] Remove the unneeded fast-glob and node-abi dev dependencies (#2334) --- package.json | 2 -- yarn.lock | 9 +-------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/package.json b/package.json index f0896c32f..8d880d17f 100644 --- a/package.json +++ b/package.json @@ -104,11 +104,9 @@ "eslint-plugin-promise": "^5.1.0", "eslint-plugin-standard": "^5.0.0", "eslint-plugin-vue": "^7.17.0", - "fast-glob": "^3.2.7", "file-loader": "^6.2.0", "html-webpack-plugin": "^5.3.2", "mini-css-extract-plugin": "^2.2.2", - "node-abi": "^2.30.1", "node-loader": "^2.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.3.2", diff --git a/yarn.lock b/yarn.lock index 7027d3b21..2e01bd643 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5113,13 +5113,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^2.30.1: - version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== - dependencies: - semver "^5.4.1" - node-addon-api@^1.6.3: version "1.7.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" @@ -6101,7 +6094,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== From 6a07d558b7474d7b406bd0e6fadf2cd7e3fa7d57 Mon Sep 17 00:00:00 2001 From: vallode <18506096+vallode@users.noreply.github.com> Date: Mon, 20 Jun 2022 13:57:25 +0200 Subject: [PATCH 019/191] Fix confusing zoomin shortcut (#2289) * Add hidden ctrl plus shortcut for zoomin * Add numpad codes to zoom shortcuts --- src/main/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/index.js b/src/main/index.js index 6a1582ab5..ccac63ae1 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -802,8 +802,12 @@ function runApp() { { role: 'toggledevtools' }, { type: 'separator' }, { role: 'resetzoom' }, - { role: 'zoomin' }, + { role: 'resetzoom', accelerator: 'CmdOrCtrl+num0', visible: false }, + { role: 'zoomin', accelerator: 'CmdOrCtrl+Plus' }, + { role: 'zoomin', accelerator: 'CmdOrCtrl+=', visible: false }, + { role: 'zoomin', accelerator: 'CmdOrCtrl+numadd', visible: false }, { role: 'zoomout' }, + { role: 'zoomout', accelerator: 'CmdOrCtrl+numsub', visible: false }, { type: 'separator' }, { role: 'togglefullscreen' } ] From c2ddac724d820ac5d881cde187768c0277ced71f Mon Sep 17 00:00:00 2001 From: bob1520 <80553357+hockerschwan@users.noreply.github.com> Date: Tue, 21 Jun 2022 01:43:45 +0000 Subject: [PATCH 020/191] Fix download filename problems (#2320) * fix "illegal" filename and EISDIR * check download folder exists --- src/renderer/store/modules/utils.js | 49 ++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js index d0d2be5e7..911385c81 100644 --- a/src/renderer/store/modules/utils.js +++ b/src/renderer/store/modules/utils.js @@ -1,6 +1,7 @@ import IsEqual from 'lodash.isequal' import FtToastEvents from '../../components/ft-toast/ft-toast-events' import fs from 'fs' +import path from 'path' import i18n from '../../i18n/index' import { IpcChannels } from '../../../constants' @@ -180,8 +181,41 @@ const actions = { } }, + replaceFilenameForbiddenChars(_, filenameOriginal) { + let filenameNew = filenameOriginal + let forbiddenChars = {} + switch (process.platform) { + case 'win32': + forbiddenChars = { + '<': '<', // U+FF1C + '>': '>', // U+FF1E + ':': ':', // U+FF1A + '"': '"', // U+FF02 + '/': '/', // U+FF0F + '\\': '\', // U+FF3C + '|': '|', // U+FF5C + '?': '?', // U+FF1F + '*': '*' // U+FF0A + } + break + case 'darwin': + forbiddenChars = { '/': '/', ':': ':' } + break + case 'linux': + forbiddenChars = { '/': '/' } + break + default: + break + } + + for (const forbiddenChar in forbiddenChars) { + filenameNew = filenameNew.replaceAll(forbiddenChar, forbiddenChars[forbiddenChar]) + } + return filenameNew + }, + async downloadMedia({ rootState, dispatch }, { url, title, extension, fallingBackPath }) { - const fileName = `${title}.${extension}` + const fileName = `${await dispatch('replaceFilenameForbiddenChars', title)}.${extension}` const usingElectron = rootState.settings.usingElectron const locale = i18n._vm.locale const translations = i18n._vm.messages[locale] @@ -213,6 +247,19 @@ const actions = { } folderPath = response.filePath + } else { + if (!fs.existsSync(folderPath)) { + try { + fs.mkdirSync(folderPath, { recursive: true }) + } catch (err) { + console.error(err) + this.showToast({ + message: err + }) + return + } + } + folderPath = path.join(folderPath, fileName) } dispatch('showToast', { From 8d816ed2fe3aed9d73f95547d742c65e09a84f78 Mon Sep 17 00:00:00 2001 From: vallode <18506096+vallode@users.noreply.github.com> Date: Tue, 21 Jun 2022 03:49:45 +0200 Subject: [PATCH 021/191] Fix channel names being cut off (#2292) --- .../ft-channel-bubble/ft-channel-bubble.css | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css b/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css index fc4e51d77..940f3a266 100644 --- a/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css +++ b/src/renderer/components/ft-channel-bubble/ft-channel-bubble.css @@ -1,9 +1,14 @@ .bubblePadding { position: relative; width: 100px; - height: 115px; + height: 100px; padding: 10px; cursor: pointer; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + overflow: hidden; -webkit-transition: background 0.2s ease-out; -moz-transition: background 0.2s ease-out; -o-transition: background 0.2s ease-out; @@ -20,10 +25,8 @@ .bubble { width: 50px; height: 50px; - margin-bottom: 5px; - margin-left: 25px; - border-radius: 200px 200px 200px 200px; - -webkit-border-radius: 200px 200px 200px 200px; + border-radius: 100%; + -webkit-border-radius: 100%; } .selected { @@ -41,8 +44,10 @@ } .channelName { + display: block; font-size: 13px; - height: 60px; overflow: hidden; text-align: center; + text-overflow: ellipsis; + width: 100%; } From 564341913176c0208e00c8f1afe6116865411aa9 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Tue, 21 Jun 2022 04:29:39 +0200 Subject: [PATCH 022/191] Fix the redundant navigation error (#2286) * Fix the redundant navigation error * Fix the redundant navigation error for the profile selector settings button * Wrap router push in function that prevents redundant navigation * Improve duplicate route detection Co-authored-by: PikachuEXE * Remove unused function Co-authored-by: PikachuEXE --- src/renderer/router/index.js | 38 +++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/renderer/router/index.js b/src/renderer/router/index.js index 8c9029c92..1d53907e1 100644 --- a/src/renderer/router/index.js +++ b/src/renderer/router/index.js @@ -14,9 +14,41 @@ import Playlist from '../views/Playlist/Playlist.vue' import Channel from '../views/Channel/Channel.vue' import Watch from '../views/Watch/Watch.vue' -Vue.use(Router) +class CustomRouter extends Router { + push(location) { + // only navigates if the location is not identical to the current location -const router = new Router({ + const currentQueryUSP = new URLSearchParams(router.currentRoute.query) + let newPath = '' + let newQueryUSP = new URLSearchParams() + + if (typeof location === 'string') { + if (location.includes('?')) { + const urlParts = location.split('?') + newPath = urlParts[0] + newQueryUSP = new URLSearchParams(urlParts[1]) + } else { + newPath = location + // newQueryUSP already empty + } + } else { + newPath = location.path + newQueryUSP = new URLSearchParams(location.query) + } + + const pathsAreDiff = router.currentRoute.path !== newPath + // Comparing `URLSearchParams` objects directly will always be different + const queriesAreDiff = newQueryUSP.toString() !== currentQueryUSP.toString() + + if (pathsAreDiff || queriesAreDiff) { + return super.push(location) + } + } +} + +Vue.use(CustomRouter) + +const router = new CustomRouter({ routes: [ { path: '/', @@ -142,7 +174,7 @@ const router = new Router({ component: Watch } ], - scrollBehavior (to, from, savedPosition) { + scrollBehavior(to, from, savedPosition) { return new Promise((resolve, reject) => { setTimeout(() => { if (savedPosition !== null) { From 6e25d354593921e03ca8239f138b60de78d59cbc Mon Sep 17 00:00:00 2001 From: PikachuEXE Date: Tue, 21 Jun 2022 10:31:09 +0800 Subject: [PATCH 023/191] Update electron-builder version to ^23.0.2 (#2305) Fixes build task on MacOS 12.3+ --- package.json | 2 +- yarn.lock | 137 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 122 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 8d880d17f..63e793ade 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "copy-webpack-plugin": "^9.0.1", "css-loader": "5.2.6", "electron": "^16.2.7", - "electron-builder": "^22.11.7", + "electron-builder": "^23.0.3", "electron-builder-squirrel-windows": "^22.13.1", "electron-debug": "^3.2.0", "eslint": "^7.32.0", diff --git a/yarn.lock b/yarn.lock index 2e01bd643..42ae3b71b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -940,6 +940,19 @@ dir-compare "^2.4.0" fs-extra "^9.0.1" +"@electron/universal@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.0.tgz#518cac72bccd79c00bf41345119e6fdbabdb871d" + integrity sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + asar "^3.1.0" + debug "^4.3.1" + dir-compare "^2.4.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1689,6 +1702,11 @@ app-builder-bin@3.7.1: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.7.1.tgz#cb0825c5e12efc85b196ac3ed9c89f076c61040e" integrity sha512-ql93vEUq6WsstGXD+SBLSIQw6SNnhbDEM0swzgugytMxLp3rT24Ag/jcC80ZHxiPRTdew1niuR7P3/FCrDqIjw== +app-builder-bin@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" + integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== + app-builder-lib@22.14.13: version "22.14.13" resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.14.13.tgz#c1f5b6afc86596357598bb90b69eef06c7c2eeb3" @@ -1720,6 +1738,37 @@ app-builder-lib@22.14.13: semver "^7.3.5" temp-file "^3.4.0" +app-builder-lib@23.0.3: + version "23.0.3" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-23.0.3.tgz#44c90237abdc4ad9b34a24658bee022828ad6205" + integrity sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w== + dependencies: + "7zip-bin" "~5.1.1" + "@develar/schema-utils" "~2.6.5" + "@electron/universal" "1.2.0" + "@malept/flatpak-bundler" "^0.4.0" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.9" + builder-util "23.0.2" + builder-util-runtime "9.0.0" + chromium-pickle-js "^0.2.0" + debug "^4.3.2" + ejs "^3.1.6" + electron-osx-sign "^0.6.0" + electron-publish "23.0.2" + form-data "^4.0.0" + fs-extra "^10.0.0" + hosted-git-info "^4.0.2" + is-ci "^3.0.0" + isbinaryfile "^4.0.8" + js-yaml "^4.1.0" + lazy-val "^1.0.5" + minimatch "^3.0.4" + read-config-file "6.2.0" + sanitize-filename "^1.6.3" + semver "^7.3.5" + temp-file "^3.4.0" + archiver-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" @@ -1797,7 +1846,7 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -asar@^3.0.3: +asar@^3.0.3, asar@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/asar/-/asar-3.1.0.tgz#70b0509449fe3daccc63beb4d3c7d2e24d3c6473" integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ== @@ -2122,6 +2171,14 @@ builder-util-runtime@8.9.2: debug "^4.3.2" sax "^1.2.4" +builder-util-runtime@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz#3a40ba7382712ccdb24471567f91d7c167e00830" + integrity sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA== + dependencies: + debug "^4.3.2" + sax "^1.2.4" + builder-util@22.14.13: version "22.14.13" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.14.13.tgz#41b5b7b4ee53aff4e09cc007fb144522598f3ce6" @@ -2145,6 +2202,29 @@ builder-util@22.14.13: stat-mode "^1.0.0" temp-file "^3.4.0" +builder-util@23.0.2: + version "23.0.2" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.0.2.tgz#da84a971076397e3a671726f4bb96f0c2214fea7" + integrity sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg== + dependencies: + "7zip-bin" "~5.1.1" + "@types/debug" "^4.1.6" + "@types/fs-extra" "^9.0.11" + app-builder-bin "4.0.0" + bluebird-lst "^1.0.9" + builder-util-runtime "9.0.0" + chalk "^4.1.1" + cross-spawn "^7.0.3" + debug "^4.3.2" + fs-extra "^10.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-ci "^3.0.0" + js-yaml "^4.1.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.4.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2719,14 +2799,14 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dmg-builder@22.14.13: - version "22.14.13" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.14.13.tgz#cc613f3c18e889b8777d525991fd52f50a564f8c" - integrity sha512-xNOugB6AbIRETeU2uID15sUfjdZZcKdxK8xkFnwIggsM00PJ12JxpLNPTjcRoUnfwj3WrPjilrO64vRMwNItQg== +dmg-builder@23.0.3: + version "23.0.3" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-23.0.3.tgz#ea94bc76fcd94612641580f3c6ae42c3f07f3fee" + integrity sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA== dependencies: - app-builder-lib "22.14.13" - builder-util "22.14.13" - builder-util-runtime "8.9.2" + app-builder-lib "23.0.3" + builder-util "23.0.2" + builder-util-runtime "9.0.0" fs-extra "^10.0.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -2877,17 +2957,17 @@ electron-builder-squirrel-windows@^22.13.1: optionalDependencies: "7zip-bin" "~5.1.1" -electron-builder@^22.11.7: - version "22.14.13" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.14.13.tgz#fd40564685cf5422a8f8d667940af3d3776f4fb8" - integrity sha512-3fgLxqF2TXVKiUPeg74O4V3l0l3j7ERLazo8sUbRkApw0+4iVAf2BJkHsHMaXiigsgCoEzK/F4/rB5rne/VAnw== +electron-builder@^23.0.3: + version "23.0.3" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-23.0.3.tgz#16264a0d8e3d40da1467bcc8ef7917538b54a3bc" + integrity sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ== dependencies: "@types/yargs" "^17.0.1" - app-builder-lib "22.14.13" - builder-util "22.14.13" - builder-util-runtime "8.9.2" + app-builder-lib "23.0.3" + builder-util "23.0.2" + builder-util-runtime "9.0.0" chalk "^4.1.1" - dmg-builder "22.14.13" + dmg-builder "23.0.3" fs-extra "^10.0.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -2958,6 +3038,18 @@ electron-osx-sign@^0.5.0: minimist "^1.2.0" plist "^3.0.1" +electron-osx-sign@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz#9b69c191d471d9458ef5b1e4fdd52baa059f1bb8" + integrity sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg== + dependencies: + bluebird "^3.5.0" + compare-version "^0.1.2" + debug "^2.6.8" + isbinaryfile "^3.0.2" + minimist "^1.2.0" + plist "^3.0.1" + electron-publish@22.14.13: version "22.14.13" resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.14.13.tgz#8b71e6975af8cc6ac5b21f293ade23f8704047c7" @@ -2971,6 +3063,19 @@ electron-publish@22.14.13: lazy-val "^1.0.5" mime "^2.5.2" +electron-publish@23.0.2: + version "23.0.2" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.0.2.tgz#aa11419ae57b847df4beb63b95e2b2a43161957c" + integrity sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg== + dependencies: + "@types/fs-extra" "^9.0.11" + builder-util "23.0.2" + builder-util-runtime "9.0.0" + chalk "^4.1.1" + fs-extra "^10.0.0" + lazy-val "^1.0.5" + mime "^2.5.2" + electron-to-chromium@^1.4.118: version "1.4.137" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz#186180a45617283f1c012284458510cd99d6787f" From 10f0af1efa606c12951d1806a90477cbc3e22aa6 Mon Sep 17 00:00:00 2001 From: PikachuEXE Date: Tue, 21 Jun 2022 10:31:47 +0800 Subject: [PATCH 024/191] * Update app menu to add item for new window (#2306) with keyboard shortcut --- src/main/index.js | 16 +++++++++++++++- static/locales/en-US.yaml | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/index.js b/src/main/index.js index ccac63ae1..394a7c16e 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -770,7 +770,21 @@ function runApp() { const template = [ { label: 'File', - submenu: [{ role: 'quit' }] + submenu: [ + { + label: 'New Window', + accelerator: 'CmdOrCtrl+N', + click: (_menuItem, _browserWindow, _event) => { + createWindow({ + replaceMainWindow: false, + showWindowNow: true + }) + }, + type: 'normal' + }, + { type: 'separator' }, + { role: 'quit' } + ] }, { label: 'Edit', diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml index f47df3ad1..e5eac17d8 100644 --- a/static/locales/en-US.yaml +++ b/static/locales/en-US.yaml @@ -7,6 +7,7 @@ FreeTube: FreeTube # Webkit Menu Bar File: File +New Window: New Window Quit: Quit Edit: Edit Undo: Undo From 35dcdbac10ef30b6e83587695f9cc31fbf972b1e Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Tue, 21 Jun 2022 04:33:42 +0200 Subject: [PATCH 025/191] Fix removing the meta files when navigating to a new video (#2344) --- src/renderer/views/Watch/Watch.js | 41 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js index 6e897d4fe..436751ee7 100644 --- a/src/renderer/views/Watch/Watch.js +++ b/src/renderer/views/Watch/Watch.js @@ -29,11 +29,11 @@ export default Vue.extend({ 'watch-video-recommendations': WatchVideoRecommendations }, beforeRouteLeave: function (to, from, next) { - this.handleRouteChange() + this.handleRouteChange(this.videoId) window.removeEventListener('beforeunload', this.handleWatchProgress) next() }, - data: function() { + data: function () { return { isLoading: false, firstLoad: true, @@ -144,13 +144,13 @@ export default Vue.extend({ hideVideoLikesAndDislikes: function () { return this.$store.getters.getHideVideoLikesAndDislikes }, - theatrePossible: function() { + theatrePossible: function () { return !this.hideRecommendedVideos || (!this.hideLiveChat && this.isLive) || this.watchingPlaylist } }, watch: { $route() { - this.handleRouteChange() + this.handleRouteChange(this.videoId) // react to route changes... this.videoId = this.$route.params.id @@ -220,14 +220,14 @@ export default Vue.extend({ window.addEventListener('beforeunload', this.handleWatchProgress) }, methods: { - changeTimestamp: function(timestamp) { + changeTimestamp: function (timestamp) { this.$refs.videoPlayer.player.currentTime(timestamp) }, - toggleTheatreMode: function() { + toggleTheatreMode: function () { this.useTheatreMode = !this.useTheatreMode }, - getVideoInformationLocal: function() { + getVideoInformationLocal: function () { if (this.firstLoad) { this.isLoading = true } @@ -535,7 +535,7 @@ export default Vue.extend({ }) }, - getVideoInformationInvidious: function() { + getVideoInformationInvidious: function () { if (this.firstLoad) { this.isLoading = true } @@ -967,7 +967,11 @@ export default Vue.extend({ this.playNextCountDownIntervalId = setInterval(showCountDownMessage, 1000) }, - handleRouteChange: async function () { + handleRouteChange: async function (videoId) { + // if the user navigates to another video, the ipc call for the userdata path + // takes long enough for the video id to have already changed to the new one + // receiving it as an arg instead of accessing it ourselves means we always have the right one + clearTimeout(this.playNextTimeout) clearInterval(this.playNextCountDownIntervalId) @@ -977,14 +981,13 @@ export default Vue.extend({ const player = this.$refs.videoPlayer.player if (player !== null && !player.paused() && player.isInPictureInPicture()) { - const playerId = this.videoId setTimeout(() => { player.play() player.on('leavepictureinpicture', (event) => { const watchTime = player.currentTime() if (this.$route.fullPath.includes('/watch')) { const routeId = this.$route.params.id - if (routeId === playerId) { + if (routeId === videoId) { const activePlayer = $('.ftVideoPlayer video').get(0) activePlayer.currentTime = watchTime } @@ -1000,23 +1003,23 @@ export default Vue.extend({ if (this.removeVideoMetaFiles) { const userData = await this.getUserDataPath() if (this.isDev) { - const dashFileLocation = `static/dashFiles/${this.videoId}.xml` - const vttFileLocation = `static/storyboards/${this.videoId}.vtt` + const dashFileLocation = `static/dashFiles/${videoId}.xml` + const vttFileLocation = `static/storyboards/${videoId}.vtt` // only delete the file it actually exists - if (fs.existsSync('static/dashFiles/') && fs.existsSync(dashFileLocation)) { + if (fs.existsSync(dashFileLocation)) { fs.rmSync(dashFileLocation) } - if (fs.existsSync('static/storyboards/') && fs.existsSync(vttFileLocation)) { + if (fs.existsSync(vttFileLocation)) { fs.rmSync(vttFileLocation) } } else { - const dashFileLocation = `${userData}/dashFiles/${this.videoId}.xml` - const vttFileLocation = `${userData}/storyboards/${this.videoId}.vtt` + const dashFileLocation = `${userData}/dashFiles/${videoId}.xml` + const vttFileLocation = `${userData}/storyboards/${videoId}.vtt` - if (fs.existsSync(`${userData}/dashFiles/`) && fs.existsSync(dashFileLocation)) { + if (fs.existsSync(dashFileLocation)) { fs.rmSync(dashFileLocation) } - if (fs.existsSync(`${userData}/storyboards/`) && fs.existsSync(vttFileLocation)) { + if (fs.existsSync(vttFileLocation)) { fs.rmSync(vttFileLocation) } } From fe84889242150ce842c9009bdaf51cc2690b7d26 Mon Sep 17 00:00:00 2001 From: efb4f5ff-1298-471a-8973-3d47447115dc <73130443+efb4f5ff-1298-471a-8973-3d47447115dc@users.noreply.github.com> Date: Tue, 21 Jun 2022 02:34:21 +0000 Subject: [PATCH 026/191] Make installation method and API method mandatory in bug issue template (#2342) * Update bug_report.yaml * move API position --- .github/ISSUE_TEMPLATE/bug_report.yaml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 2857ad4f5..692afe133 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -75,24 +75,24 @@ body: required: true - type: dropdown attributes: - label: 'Installation Method (If applicable)' + label: Installation Method options: + - .apk - .AppImage + - AUR + - Chocolatey - .deb - .dmg - .exe - Flathub + - .pacman - Portable - .rpm + - winget - .zip - other validations: - required: false - - type: input - attributes: - label: 'Last Known Working FreeTube Version (If Any)' - description: What is the last version of FreeTube this worked in, if applicable? - placeholder: v0.14.0 + required: true - type: dropdown attributes: label: Primary API used @@ -102,7 +102,12 @@ body: - Local API - Invidious API validations: - required: false + required: true + - type: input + attributes: + label: 'Last Known Working FreeTube Version (If Any)' + description: What is the last version of FreeTube this worked in, if applicable? + placeholder: v0.14.0 - type: textarea attributes: label: Additional Information From 2b36c946356711efcc8d7f9a8a057646e0c9ac48 Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 21 Jun 2022 02:36:57 +0000 Subject: [PATCH 027/191] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (583 of 583 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/ --- static/locales/zh-CN.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml index 8078fa605..6652108b0 100644 --- a/static/locales/zh-CN.yaml +++ b/static/locales/zh-CN.yaml @@ -754,3 +754,4 @@ Downloading canceled: 用户取消了下载 Download folder does not exist: 下载目录“$”不存在,退回到 “询问文件夹”模式。 Screenshot Error: 截屏失败。$ Screenshot Success: 另存截屏为 “$” +New Window: 新窗口 From ca2799e999275d8b2d61a92bc06f5e65017ca42f Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 21 Jun 2022 02:42:24 +0000 Subject: [PATCH 028/191] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (583 of 583 strings) Translation: FreeTube/Translations Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hant/ --- static/locales/zh-TW.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml index f2b26f9f5..bb786caa8 100644 --- a/static/locales/zh-TW.yaml +++ b/static/locales/zh-TW.yaml @@ -763,3 +763,4 @@ Downloading has completed: 「$」已下載結束 Starting download: 正在開始下載「$」 Screenshot Success: 已儲存螢幕截圖為 "$" Screenshot Error: 螢幕截圖失敗。 $ +New Window: 新視窗 From 3321fa91e42154d804650e67cd150c851b4ec0a0 Mon Sep 17 00:00:00 2001 From: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> Date: Tue, 21 Jun 2022 02:14:15 -0400 Subject: [PATCH 029/191] Add Parental Controls (#1456) * start to implement some parental controls * Hide share + Hide Unsubscribe * Hide live streams * fix hide live streams * Add "parental-control-settings" * Implement Hide Live Streams & Hide "Age Restricted" * Hide live streams from Subscriptions + fix hide live streams from search * enable safe search on showFamilyFriendlyOnly * Move some settings from parental control to distraction free * fix channel loading * make parental control settings collapsible * fix lint * dont show age restricted on videos that are loading * improve hide live videos * code refactor * grammar * nvm im dumb * use named placeholder for age restricted message * improve readability * change Hide Description to Hide Video Description * update translated strings * fix age restricted component Co-authored-by: Preston Co-authored-by: peepopoggers <72892531+peepopoggers@users.noreply.github.com> --- .../distraction-settings.js | 18 ++- .../distraction-settings.vue | 24 ++++ .../ft-age-restricted/ft-age-restricted.js | 22 ++++ .../ft-age-restricted/ft-age-restricted.sass | 14 +++ .../ft-age-restricted/ft-age-restricted.vue | 15 +++ .../ft-list-lazy-wrapper.js | 5 + .../ft-list-lazy-wrapper.vue | 1 + .../components/ft-list-video/ft-list-video.js | 118 ++++++++++-------- .../parental-control-settings.js | 36 ++++++ .../parental-control-settings.sass | 1 + .../parental-control-settings.vue | 37 ++++++ .../components/playlist-info/playlist-info.js | 4 + .../playlist-info/playlist-info.vue | 1 + src/renderer/components/top-nav/top-nav.js | 4 + src/renderer/components/top-nav/top-nav.vue | 4 + .../watch-video-info/watch-video-info.js | 8 ++ .../watch-video-info/watch-video-info.vue | 2 + src/renderer/store/modules/settings.js | 7 ++ src/renderer/views/Channel/Channel.js | 15 ++- src/renderer/views/Channel/Channel.vue | 10 +- src/renderer/views/Search/Search.js | 10 ++ src/renderer/views/Settings/Settings.js | 4 +- src/renderer/views/Settings/Settings.vue | 2 + .../views/Subscriptions/Subscriptions.js | 10 +- src/renderer/views/Watch/Watch.js | 16 ++- src/renderer/views/Watch/Watch.sass | 6 + src/renderer/views/Watch/Watch.vue | 24 +++- static/locales/en-US.yaml | 15 +++ 28 files changed, 368 insertions(+), 65 deletions(-) create mode 100644 src/renderer/components/ft-age-restricted/ft-age-restricted.js create mode 100644 src/renderer/components/ft-age-restricted/ft-age-restricted.sass create mode 100644 src/renderer/components/ft-age-restricted/ft-age-restricted.vue create mode 100644 src/renderer/components/parental-control-settings/parental-control-settings.js create mode 100644 src/renderer/components/parental-control-settings/parental-control-settings.sass create mode 100644 src/renderer/components/parental-control-settings/parental-control-settings.vue diff --git a/src/renderer/components/distraction-settings/distraction-settings.js b/src/renderer/components/distraction-settings/distraction-settings.js index 790368b43..891cf7021 100644 --- a/src/renderer/components/distraction-settings/distraction-settings.js +++ b/src/renderer/components/distraction-settings/distraction-settings.js @@ -45,6 +45,18 @@ export default Vue.extend({ }, hideActiveSubscriptions: function () { return this.$store.getters.getHideActiveSubscriptions + }, + hideVideoDescription: function () { + return this.$store.getters.getHideVideoDescription + }, + hideComments: function () { + return this.$store.getters.getHideComments + }, + hideLiveStreams: function() { + return this.$store.getters.getHideLiveStreams + }, + hideSharingActions: function() { + return this.$store.getters.getHideSharingActions } }, methods: { @@ -68,7 +80,11 @@ export default Vue.extend({ 'updateHideLiveChat', 'updateHideActiveSubscriptions', 'updatePlayNextVideo', - 'updateDefaultTheatreMode' + 'updateDefaultTheatreMode', + 'updateHideVideoDescription', + 'updateHideComments', + 'updateHideLiveStreams', + 'updateHideSharingActions' ]) } }) diff --git a/src/renderer/components/distraction-settings/distraction-settings.vue b/src/renderer/components/distraction-settings/distraction-settings.vue index aef21062d..4c59582d6 100644 --- a/src/renderer/components/distraction-settings/distraction-settings.vue +++ b/src/renderer/components/distraction-settings/distraction-settings.vue @@ -38,6 +38,18 @@ :default-value="hideActiveSubscriptions" @change="updateHideActiveSubscriptions" /> + +
+ +

diff --git a/src/renderer/components/ft-age-restricted/ft-age-restricted.js b/src/renderer/components/ft-age-restricted/ft-age-restricted.js new file mode 100644 index 000000000..5769012b5 --- /dev/null +++ b/src/renderer/components/ft-age-restricted/ft-age-restricted.js @@ -0,0 +1,22 @@ +import Vue from 'vue' + +export default Vue.extend({ + name: 'FtAgeRestricted', + props: { + contentTypeString: { + type: String, + required: true + } + }, + computed: { + emoji: function () { + const emojis = ['😵', '😦', '🙁', '☹️', '😦', '🤫', '😕'] + return emojis[Math.floor(Math.random() * emojis.length)] + }, + + restrictedMessage: function () { + const contentType = this.$t('Age Restricted.Type.' + this.contentTypeString) + return this.$t('Age Restricted.This $contentType is age restricted').replace('$contentType', contentType) + } + } +}) diff --git a/src/renderer/components/ft-age-restricted/ft-age-restricted.sass b/src/renderer/components/ft-age-restricted/ft-age-restricted.sass new file mode 100644 index 000000000..58d441074 --- /dev/null +++ b/src/renderer/components/ft-age-restricted/ft-age-restricted.sass @@ -0,0 +1,14 @@ +.ft-age-restricted + color: var(--primary-text-color) + h2 + width: 100% + text-align: center + background-color: var(--card-bg-color) + padding: 10px 0 + .frown + width: 100% + text-align: center + background-color: var(--card-bg-color) + font-size: 10em + padding: 20px 0 + height: 100% diff --git a/src/renderer/components/ft-age-restricted/ft-age-restricted.vue b/src/renderer/components/ft-age-restricted/ft-age-restricted.vue new file mode 100644 index 000000000..abc2eac85 --- /dev/null +++ b/src/renderer/components/ft-age-restricted/ft-age-restricted.vue @@ -0,0 +1,15 @@ + + +