Piped/src/components/PreferencesPage.vue

719 lines
32 KiB
Vue
Raw Normal View History

2020-11-17 05:15:35 +00:00
<template>
<div class="flex">
<button @click="$router.go(-1) || $router.push('/')">
<font-awesome-icon icon="chevron-left" /><span class="ml-1.5" v-t="'actions.back'" />
</button>
</div>
<h1 v-t="'titles.preferences'" class="font-bold text-center" />
2020-11-22 04:34:27 +00:00
<hr />
2022-08-11 17:12:08 +00:00
<label for="ddlTheme" class="pref">
<strong v-t="'actions.theme'" />
<select id="ddlTheme" v-model="selectedTheme" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.auto'" value="auto" />
<option v-t="'actions.dark'" value="dark" />
2022-08-11 17:23:18 +00:00
<option v-t="'actions.light'" value="light" />
</select>
</label>
<label class="pref" for="ddlLanguageSelection">
<strong v-t="'actions.language_selection'" />
<select id="ddlLanguageSelection" v-model="selectedLanguage" class="select w-auto" @change="onChange($event)">
<option v-for="language in languages" :key="language.code" :value="language.code" v-text="language.name" />
</select>
</label>
<label class="pref" for="ddlCountrySelection">
<strong v-t="'actions.country_selection'" />
2022-08-13 08:35:54 +00:00
<select id="ddlCountrySelection" v-model="countrySelected" class="select w-50" @change="onChange($event)">
2022-08-11 17:23:18 +00:00
<option v-for="country in countryMap" :key="country.code" :value="country.code" v-text="country.name" />
</select>
</label>
<label class="pref" for="ddlDefaultHomepage">
<strong v-t="'actions.default_homepage'" />
<select id="ddlDefaultHomepage" v-model="defaultHomepage" class="select w-auto" @change="onChange($event)">
<option v-t="'titles.trending'" value="trending" />
<option v-t="'titles.feed'" value="feed" />
</select>
</label>
2022-08-14 18:31:09 +00:00
<h2 class="text-center" v-t="'titles.player'" />
2022-08-11 17:12:08 +00:00
<label class="pref" for="chkAutoPlayVideo">
<strong v-t="'actions.autoplay_video'" />
<input
id="chkAutoPlayVideo"
v-model="autoPlayVideo"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<label class="pref" for="chkAudioOnly">
<strong v-t="'actions.audio_only'" />
<input id="chkAudioOnly" v-model="listen" class="checkbox" type="checkbox" @change="onChange($event)" />
</label>
<label class="pref" for="ddlDefaultQuality">
<strong v-t="'actions.default_quality'" />
<select id="ddlDefaultQuality" v-model="defaultQuality" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.auto'" value="0" />
<option v-for="resolution in resolutions" :key="resolution" :value="resolution" v-text="`${resolution}p`" />
</select>
</label>
<label class="pref" for="txtBufferingGoal">
<strong v-t="'actions.buffering_goal'" />
<input
id="txtBufferingGoal"
v-model="bufferingGoal"
2022-08-13 08:35:54 +00:00
class="input w-24"
2022-08-11 17:12:08 +00:00
type="text"
@change="onChange($event)"
/>
</label>
<label class="pref" for="chkMinimizeComments">
<strong v-t="'actions.minimize_comments_default'" />
2022-08-11 17:12:08 +00:00
<input
id="chkMinimizeComments"
v-model="minimizeComments"
2022-08-11 17:12:08 +00:00
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<label class="pref" for="chkMinimizeDescription">
<strong v-t="'actions.minimize_description_default'" />
<input
id="chkMinimizeDescription"
v-model="minimizeDescription"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<label class="pref" for="chkMinimizeRecommendations">
<strong v-t="'actions.minimize_recommendations_default'" />
<input
id="chkMinimizeRecommendations"
v-model="minimizeRecommendations"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<label class="pref" for="chkMinimizeChapters">
<strong v-t="'actions.minimize_chapters_default'" />
<input
id="chkMinimizeChapters"
v-model="minimizeChapters"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
2022-11-02 16:10:27 +00:00
<label class="pref" for="chkShowWatchOnYouTube">
<strong v-t="'actions.show_watch_on_youtube'" />
<input
id="chkShowWatchOnYouTube"
v-model="showWatchOnYouTube"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
2022-09-11 18:01:58 +00:00
<label class="pref" for="chkStoreSearchHistory">
<strong v-t="'actions.store_search_history'" />
<input
id="chkStoreSearchHistory"
v-model="searchHistory"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
2022-08-11 17:12:08 +00:00
<label class="pref" for="chkStoreWatchHistory">
<strong v-t="'actions.store_watch_history'" />
<input
id="chkStoreWatchHistory"
v-model="watchHistory"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
2022-09-10 17:08:50 +00:00
<label v-if="watchHistory" class="pref" for="chkHideWatched">
<strong v-t="'actions.hide_watched'" />
<input id="chkHideWatched" v-model="hideWatched" class="checkbox" type="checkbox" @change="onChange($event)" />
</label>
2022-08-11 17:12:08 +00:00
<label class="pref" for="ddlEnabledCodecs">
<strong v-t="'actions.enabled_codecs'" />
<select
id="ddlEnabledCodecs"
v-model="enabledCodecs"
class="select w-auto h-auto"
multiple
@change="onChange($event)"
>
<option value="av1">AV1</option>
<option value="vp9">VP9</option>
<option value="avc">AVC (h.264)</option>
</select>
</label>
<label class="pref" for="chkDisableLBRY">
<strong v-t="'actions.disable_lbry'" />
<input id="chkDisableLBRY" v-model="disableLBRY" class="checkbox" type="checkbox" @change="onChange($event)" />
</label>
<label class="pref" for="chkEnableLBRYProxy">
<strong v-t="'actions.enable_lbry_proxy'" />
<input
id="chkEnableLBRYProxy"
v-model="proxyLBRY"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<h2 class="text-center">SponsorBlock</h2>
<p class="text-center">
<span v-t="'actions.uses_api_from'" /><a class="link" href="https://sponsor.ajay.app/">sponsor.ajay.app</a>
</p>
<label class="pref" for="chkEnableSponsorblock">
<strong v-t="'actions.enable_sponsorblock'" />
<input
id="chkEnableSponsorblock"
v-model="sponsorBlock"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<div v-if="sponsorBlock">
<label class="pref" for="ddlSkipSponsors">
<strong v-t="'actions.skip_sponsors'" />
<select id="ddlSkipSponsors" v-model="skipSponsor" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipIntro">
<strong v-t="'actions.skip_intro'" />
<select id="ddlSkipIntro" v-model="skipIntro" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipOutro">
<strong v-t="'actions.skip_outro'" />
<select id="ddlSkipOutro" v-model="skipOutro" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipPreview">
<strong v-t="'actions.skip_preview'" />
<select id="ddlSkipPreview" v-model="skipPreview" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipInteraction">
<strong v-t="'actions.skip_interaction'" />
<select id="ddlSkipInteraction" v-model="skipInteraction" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipSelfPromo">
<strong v-t="'actions.skip_self_promo'" />
<select id="ddlSkipSelfPromo" v-model="skipSelfPromo" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipNonMusic">
<strong v-t="'actions.skip_non_music'" />
<select id="ddlSkipNonMusic" v-model="skipMusicOffTopic" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipHighlight">
<strong v-t="'actions.skip_highlight'" />
<select id="ddlSkipHighlight" v-model="skipHighlight" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="ddlSkipFiller">
<strong v-t="'actions.skip_filler_tangent'" />
<select id="ddlSkipFiller" v-model="skipFiller" class="select w-auto" @change="onChange($event)">
<option v-t="'actions.no'" value="no" />
<option v-t="'actions.skip_button_only'" value="button" />
<option v-t="'actions.skip_automatically'" value="auto" />
</select>
</label>
<label class="pref" for="chkShowMarkers">
<strong v-t="'actions.show_markers'" />
<input
id="chkShowMarkers"
v-model="showMarkers"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<label class="pref" for="txtMinSegmentLength">
<strong v-t="'actions.min_segment_length'" />
<input
id="txtMinSegmentLength"
v-model="minSegmentLength"
class="input w-24"
type="text"
@change="onChange($event)"
/>
</label>
</div>
2022-08-14 18:31:09 +00:00
<h2 class="text-center" v-t="'titles.instance'" />
2022-08-11 17:12:08 +00:00
<label class="pref" for="ddlInstanceSelection">
<strong v-text="`${$t('actions.instance_selection')}:`" />
<select id="ddlInstanceSelection" v-model="selectedInstance" class="select w-auto" @change="onChange($event)">
<option
v-for="instance in instances"
:key="instance.name"
:value="instance.api_url"
v-text="instance.name"
/>
</select>
</label>
<label class="pref" for="chkAuthInstance">
<strong v-text="`${$t('actions.different_auth_instance')}:`" />
<input
id="chkAuthInstance"
v-model="authInstance"
class="checkbox"
type="checkbox"
@change="onChange($event)"
/>
</label>
<template v-if="authInstance">
<label class="pref" for="ddlAuthInstanceSelection">
<strong v-text="`${$t('actions.instance_auth_selection')}:`" />
<select
id="ddlAuthInstanceSelection"
v-model="selectedAuthInstance"
class="select w-auto"
@change="onChange($event)"
>
<option
v-for="instance in instances"
:key="instance.name"
:value="instance.api_url"
v-text="instance.name"
/>
</select>
</label>
</template>
<br />
2022-08-11 17:12:08 +00:00
<!-- options that are visible only when logged in -->
<div v-if="this.authenticated">
2022-08-14 18:31:09 +00:00
<h2 class="text-center" v-t="'titles.account'"></h2>
2022-08-11 17:12:08 +00:00
<label class="pref" for="txtDeleteAccountPassword">
<strong v-t="'actions.delete_account'" />
<div class="flex items-center">
<input
id="txtDeleteAccountPassword"
ref="txtDeleteAccountPassword"
v-model="password"
v-on:keyup.enter="deleteAccount"
:placeholder="$t('login.password')"
:aria-label="$t('login.password')"
2022-08-11 17:23:18 +00:00
class="input w-auto mr-2"
2022-08-11 17:12:08 +00:00
type="password"
/>
<a class="btn w-auto" @click="deleteAccount" v-t="'actions.delete_account'" />
</div>
</label>
<div class="pref">
<a class="btn w-auto" @click="logout" v-t="'actions.logout'" />
<a
class="btn w-auto"
style="margin-left: 0.5em"
@click="invalidateSession"
v-t="'actions.invalidate_session'"
/>
</div>
<br />
</div>
<h2 id="instancesList" v-t="'actions.instances_list'" />
<table class="table">
2020-11-17 05:15:35 +00:00
<thead>
<tr>
<th v-t="'preferences.instance_name'" />
<th v-t="'preferences.instance_locations'" />
<th v-t="'preferences.has_cdn'" />
<th v-t="'preferences.registered_users'" />
2022-08-17 13:34:57 +00:00
<th class="lt-md:hidden" v-t="'preferences.version'" />
<th v-t="'preferences.up_to_date'" />
<th v-t="'preferences.ssl_score'" />
2020-11-17 05:15:35 +00:00
</tr>
</thead>
<tbody v-for="instance in instances" :key="instance.name">
2020-11-17 05:15:35 +00:00
<tr>
2021-12-27 16:29:25 +00:00
<td v-text="instance.name" />
<td v-text="instance.locations" />
2022-08-13 11:42:35 +00:00
<td v-text="`${instance.cdn ? '&#9989;' : '&#10060;'}`" />
<td v-text="instance.registered" />
2022-08-17 13:34:57 +00:00
<td class="lt-md:hidden" v-text="instance.version" />
2022-08-13 11:42:35 +00:00
<td v-text="`${instance.up_to_date ? '&#9989;' : '&#10060;'}`" />
2020-11-30 06:39:40 +00:00
<td>
<a :href="sslScore(instance.api_url)" target="_blank" v-t="'actions.view_ssl_score'" />
2020-11-30 06:39:40 +00:00
</td>
2020-11-17 05:15:35 +00:00
</tr>
</tbody>
</table>
2022-08-11 17:34:35 +00:00
<br />
2022-08-22 11:51:44 +00:00
<p v-t="'info.preferences_note'" />
2022-08-11 17:34:35 +00:00
<br />
2022-08-13 11:42:35 +00:00
<button class="btn" v-t="'actions.reset_preferences'" @click="resetPreferences()" />
<button class="btn mx-4" v-t="'actions.backup_preferences'" @click="backupPreferences()" />
2022-08-14 18:31:09 +00:00
<label for="fileSelector" class="btn" v-t="'actions.restore_preferences'" @click="restorePreferences()" />
2022-08-13 09:29:31 +00:00
<input class="hidden" id="fileSelector" ref="fileSelector" type="file" @change="restorePreferences()" />
2020-11-17 05:15:35 +00:00
</template>
<script>
import CountryMap from "@/utils/CountryMaps/en.json";
2020-11-17 05:15:35 +00:00
export default {
data() {
return {
selectedInstance: null,
authInstance: false,
selectedAuthInstance: null,
2021-02-25 14:40:40 +00:00
instances: [],
2021-02-25 15:18:59 +00:00
sponsorBlock: true,
skipSponsor: "auto",
skipIntro: "no",
skipOutro: "no",
skipPreview: "no",
skipInteraction: "auto",
skipSelfPromo: "auto",
skipMusicOffTopic: "auto",
skipHighlight: "no",
skipFiller: "no",
showMarkers: true,
minSegmentLength: 0,
selectedTheme: "dark",
autoPlayVideo: true,
listen: false,
resolutions: [144, 240, 360, 480, 720, 1080, 1440, 2160, 4320],
2021-06-21 20:03:11 +00:00
defaultQuality: 0,
2021-06-22 10:54:20 +00:00
bufferingGoal: 10,
countryMap: CountryMap,
countrySelected: "US",
defaultHomepage: "trending",
minimizeComments: false,
minimizeDescription: false,
minimizeRecommendations: false,
minimizeChapters: false,
2022-11-02 16:10:27 +00:00
showWatchOnYouTube: false,
watchHistory: false,
2022-09-11 18:01:58 +00:00
searchHistory: false,
2022-09-10 17:08:50 +00:00
hideWatched: false,
selectedLanguage: "en",
languages: [
2022-06-16 14:55:08 +00:00
{ code: "ar", name: "Arabic" },
{ code: "az", name: "Azərbaycan" },
2021-09-06 07:08:15 +00:00
{ code: "bn", name: "বাংলা" },
2022-04-09 00:08:54 +00:00
{ code: "bs", name: "Bosanski" },
2022-02-15 10:57:37 +00:00
{ code: "ca", name: "Català" },
{ code: "cs", name: "Čeština" },
2022-03-20 18:36:05 +00:00
{ code: "da", name: "Dansk" },
2021-09-06 07:08:15 +00:00
{ code: "de", name: "Deutsch" },
{ code: "el", name: "Ελληνικά" },
{ code: "es", name: "Español" },
{ code: "en", name: "English" },
2022-02-15 10:57:37 +00:00
{ code: "eo", name: "Esperanto" },
{ code: "et", name: "Eesti" },
{ code: "fa", name: "فارسی" },
Translations update from Weblate (#475) * Added translation using Weblate (Chinese (Simplified)) * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Added translation using Weblate (Basque) * Translated using Weblate (Basque) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Added translation using Weblate (Finnish) * Translated using Weblate (French) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fr/ * Translated using Weblate (German) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/it/ * Translated using Weblate (Spanish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Finnish) Currently translated at 74.2% (52 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fi/ * Translated using Weblate (Lithuanian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/lt/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Translated using Weblate (Turkish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Croatian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hr/ * Translated using Weblate (Basque) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Add support for Finnish and Chinese Simplified. Co-authored-by: Xie Yanbo <xieyanbo@gmail.com> Co-authored-by: Sergio Varela <sergitroll9@gmail.com> Co-authored-by: J. Lavoie <j.lavoie@net-c.ca> Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: Milo Ivir <mail@milotype.de> Co-authored-by: FireMasterK <20838718+FireMasterK@users.noreply.github.com>
2021-09-23 22:37:40 +00:00
{ code: "fi", name: "Suomi" },
{ code: "fr", name: "Français" },
2022-09-11 07:37:14 +00:00
{ code: "he", name: "עברית" },
Translations update from Hosted Weblate (#735) * Added translation using Weblate (Hindi) * Added translation using Weblate (Tamil) * Translated using Weblate (Hindi) Currently translated at 25.6% (20 of 78 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 10.2% (8 of 78 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Hindi) Currently translated at 77.2% (61 of 79 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 45.5% (36 of 79 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Norwegian Bokmål) Currently translated at 92.5% (75 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/nb_NO/ * Translated using Weblate (Turkish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Hindi) Currently translated at 76.5% (62 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 43.2% (35 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Turkish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Swedish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/sv/ Co-authored-by: Kavin <kavin@kavin.rocks> Co-authored-by: Allan Nordhøy <epost@anotheragency.no> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net> Co-authored-by: Shjosan <shjosan@kakmix.co>
2022-01-16 08:42:01 +00:00
{ code: "hi", name: "हिंदी" },
{ code: "id", name: "Indonesia" },
{ code: "is", name: "Íslenska" },
2022-11-25 15:54:33 +00:00
{ code: "kab", name: "Taqbaylit" },
2021-09-16 18:29:48 +00:00
{ code: "hr", name: "Hrvatski" },
{ code: "it", name: "Italiano" },
{ code: "ja", name: "日本語" },
{ code: "ko", name: "한국어" },
{ code: "lt", name: "Lietuvių kalba" },
2021-09-06 07:08:15 +00:00
{ code: "ml", name: "മലയാളം" },
Translations update from Weblate (#384) * Added translation using Weblate (German) * Added translation using Weblate (Norwegian Bokmål) * Added translation using Weblate (Chinese (Traditional)) * Translated using Weblate (Norwegian Bokmål) Currently translated at 82.5% (33 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/nb_NO/ * Added translation using Weblate (Malayalam) * Translated using Weblate (French) Currently translated at 100.0% (40 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fr/ * Translated using Weblate (French) Currently translated at 100.0% (40 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fr/ * Translated using Weblate (German) Currently translated at 100.0% (40 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/de/ * Translated using Weblate (Chinese (Traditional)) Currently translated at 42.5% (17 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hant/ * Translated using Weblate (Malayalam) Currently translated at 90.0% (36 of 40 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ml/ * Add support for 4 new languages. Co-authored-by: J. Lavoie <j.lavoie@net-c.ca> Co-authored-by: Allan Nordhøy <epost@anotheragency.no> Co-authored-by: Jamugha <hackdown@necord.com> Co-authored-by: vachan-maker <vachan2014carmel@gmail.com> Co-authored-by: FireMasterK <20838718+FireMasterK@users.noreply.github.com>
2021-08-26 11:48:23 +00:00
{ code: "nb_NO", name: "Norwegian Bokmål" },
2022-04-09 00:08:54 +00:00
{ code: "nl", name: "Nederlands" },
2023-01-15 17:37:53 +00:00
{ code: "oc", name: "Occitan" },
2022-11-07 01:33:58 +00:00
{ code: "or", name: "ଓଡ଼ିଆ" },
{ code: "pl", name: "Polski" },
{ code: "pt", name: "Português" },
2022-03-14 15:01:01 +00:00
{ code: "pt_PT", name: "Português (Portugal)" },
2022-06-16 14:55:08 +00:00
{ code: "pt_BR", name: "Português (Brasil)" },
2022-11-11 15:52:25 +00:00
{ code: "ro", name: "Română" },
{ code: "ru", name: "Русский" },
2023-01-15 17:37:53 +00:00
{ code: "si", name: "සිංහල" },
2021-11-24 19:31:39 +00:00
{ code: "sr", name: "Српски" },
{ code: "sv", name: "Svenska" },
Translations update from Hosted Weblate (#735) * Added translation using Weblate (Hindi) * Added translation using Weblate (Tamil) * Translated using Weblate (Hindi) Currently translated at 25.6% (20 of 78 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 10.2% (8 of 78 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Hindi) Currently translated at 77.2% (61 of 79 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 45.5% (36 of 79 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Norwegian Bokmål) Currently translated at 92.5% (75 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/nb_NO/ * Translated using Weblate (Turkish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Hindi) Currently translated at 76.5% (62 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hi/ * Translated using Weblate (Tamil) Currently translated at 43.2% (35 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ta/ * Translated using Weblate (Turkish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Spanish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Swedish) Currently translated at 100.0% (81 of 81 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/sv/ Co-authored-by: Kavin <kavin@kavin.rocks> Co-authored-by: Allan Nordhøy <epost@anotheragency.no> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: Jorge Maldonado Ventura <jorgesumle@freakspot.net> Co-authored-by: Shjosan <shjosan@kakmix.co>
2022-01-16 08:42:01 +00:00
{ code: "ta", name: "தமிழ்" },
{ code: "th", name: "ไทย" },
2021-09-06 07:08:15 +00:00
{ code: "tr", name: "Türkçe" },
{ code: "uk", name: "Українська" },
2022-04-07 02:34:48 +00:00
{ code: "vi", name: "Tiếng Việt" },
2021-09-16 18:29:48 +00:00
{ code: "zh_Hant", name: "繁體中文" },
Translations update from Weblate (#475) * Added translation using Weblate (Chinese (Simplified)) * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Added translation using Weblate (Basque) * Translated using Weblate (Basque) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Added translation using Weblate (Finnish) * Translated using Weblate (French) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fr/ * Translated using Weblate (German) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/it/ * Translated using Weblate (Spanish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Finnish) Currently translated at 74.2% (52 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fi/ * Translated using Weblate (Lithuanian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/lt/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Translated using Weblate (Turkish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Croatian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hr/ * Translated using Weblate (Basque) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Add support for Finnish and Chinese Simplified. Co-authored-by: Xie Yanbo <xieyanbo@gmail.com> Co-authored-by: Sergio Varela <sergitroll9@gmail.com> Co-authored-by: J. Lavoie <j.lavoie@net-c.ca> Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: Milo Ivir <mail@milotype.de> Co-authored-by: FireMasterK <20838718+FireMasterK@users.noreply.github.com>
2021-09-23 22:37:40 +00:00
{ code: "zh_Hans", name: "简体中文" },
],
2022-06-06 04:55:01 +00:00
enabledCodecs: ["vp9", "avc"],
disableLBRY: false,
proxyLBRY: false,
2022-07-20 14:15:27 +00:00
password: null,
2020-11-17 05:15:35 +00:00
};
},
activated() {
document.title = this.$t("titles.preferences") + " - Piped";
},
async mounted() {
if (Object.keys(this.$route.query).length > 0) this.$router.replace({ query: {} });
this.fetchJson("https://piped-instances.kavin.rocks/").then(resp => {
this.instances = resp;
if (this.instances.filter(instance => instance.api_url == this.apiUrl()).length == 0)
this.instances.push({
name: "Custom Instance",
api_url: this.apiUrl(),
locations: "Unknown",
cdn: false,
2020-11-17 05:15:35 +00:00
});
});
2020-11-17 05:15:35 +00:00
if (this.testLocalStorage) {
this.selectedInstance = this.getPreferenceString("instance", "https://pipedapi.kavin.rocks");
this.authInstance = this.getPreferenceBoolean("authInstance", false);
this.selectedAuthInstance = this.getPreferenceString("auth_instance_url", this.selectedInstance);
2021-02-25 14:40:40 +00:00
this.sponsorBlock = this.getPreferenceBoolean("sponsorblock", true);
var skipOptions, skipList;
if ((skipOptions = this.getPreferenceJSON("skipOptions")) !== null) {
if (skipOptions.sponsor !== undefined) this.skipSponsor = skipOptions.sponsor;
if (skipOptions.intro !== undefined) this.skipIntro = skipOptions.intro;
if (skipOptions.outro !== undefined) this.skipOutro = skipOptions.outro;
if (skipOptions.preview !== undefined) this.skipPreview = skipOptions.preview;
if (skipOptions.interaction !== undefined) this.skipInteraction = skipOptions.interaction;
if (skipOptions.selfpromo !== undefined) this.skipSelfPromo = skipOptions.selfpromo;
if (skipOptions.music_offtopic !== undefined) this.skipMusicOffTopic = skipOptions.music_offtopic;
if (skipOptions.poi_highlight !== undefined) this.skipHighlight = skipOptions.poi_highlight;
if (skipOptions.filler !== undefined) this.skipFiller = skipOptions.filler;
} else if ((skipList = this.getPreferenceString("selectedSkip")) !== null) {
skipList = skipList.split(",");
this.skipSponsor =
this.skipIntro =
this.skipOutro =
this.skipPreview =
this.skipInteraction =
this.skipSelfPromo =
this.skipMusicOffTopic =
this.skipHighlight =
this.skipFiller =
"no";
2021-02-25 15:18:59 +00:00
skipList.forEach(skip => {
switch (skip) {
case "sponsor":
this.skipSponsor = "auto";
2021-02-25 15:18:59 +00:00
break;
case "intro":
this.skipIntro = "auto";
2021-02-25 15:18:59 +00:00
break;
case "outro":
this.skipOutro = "auto";
2021-02-25 15:18:59 +00:00
break;
case "preview":
this.skipPreview = "auto";
break;
2021-02-25 15:18:59 +00:00
case "interaction":
this.skipInteraction = "auto";
2021-02-25 15:18:59 +00:00
break;
case "selfpromo":
this.skipSelfPromo = "auto";
2021-02-25 15:18:59 +00:00
break;
case "music_offtopic":
this.skipMusicOffTopic = "auto";
2021-02-25 15:18:59 +00:00
break;
case "poi_highlight":
this.skipHighlight = "auto";
break;
case "filler":
this.skipFiller = "auto";
break;
2021-02-25 15:18:59 +00:00
default:
console.log("Unknown sponsor type: " + skip);
break;
}
});
}
this.showMarkers = this.getPreferenceBoolean("showMarkers", true);
this.minSegmentLength = Math.max(this.getPreferenceNumber("minSegmentLength", 0), 0);
this.selectedTheme = this.getPreferenceString("theme", "dark");
this.autoPlayVideo = this.getPreferenceBoolean("playerAutoPlay", true);
this.listen = this.getPreferenceBoolean("listen", false);
2021-06-21 20:03:11 +00:00
this.defaultQuality = Number(localStorage.getItem("quality"));
2021-06-22 10:54:20 +00:00
this.bufferingGoal = Math.max(Number(localStorage.getItem("bufferGoal")), 10);
this.countrySelected = this.getPreferenceString("region", "US");
this.defaultHomepage = this.getPreferenceString("homepage", "trending");
2022-10-24 09:49:29 +00:00
this.minimizeComments = this.getPreferenceBoolean("minimizeComments", false);
this.minimizeDescription = this.getPreferenceBoolean("minimizeDescription", false);
this.minimizeRecommendations = this.getPreferenceBoolean("minimizeRecommendations", false);
this.minimizeChapters = this.getPreferenceBoolean("minimizeChapters", false);
2022-11-02 16:10:27 +00:00
this.showWatchOnYouTube = this.getPreferenceBoolean("showWatchOnYouTube", false);
this.watchHistory = this.getPreferenceBoolean("watchHistory", false);
2022-09-11 18:01:58 +00:00
this.searchHistory = this.getPreferenceBoolean("searchHistory", false);
this.selectedLanguage = this.getPreferenceString("hl", await this.defaultLanguage);
2022-06-06 04:55:01 +00:00
this.enabledCodecs = this.getPreferenceString("enabledCodecs", "vp9,avc").split(",");
this.disableLBRY = this.getPreferenceBoolean("disableLBRY", false);
this.proxyLBRY = this.getPreferenceBoolean("proxyLBRY", false);
2022-09-10 17:08:50 +00:00
this.hideWatched = this.getPreferenceBoolean("hideWatched", false);
if (this.selectedLanguage != "en") {
try {
2021-12-28 14:39:20 +00:00
this.CountryMap = await import(`../utils/CountryMaps/${this.selectedLanguage}.json`).then(
val => val.default,
Translations update from Weblate (#475) * Added translation using Weblate (Chinese (Simplified)) * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Added translation using Weblate (Basque) * Translated using Weblate (Basque) Currently translated at 100.0% (64 of 64 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Added translation using Weblate (Finnish) * Translated using Weblate (French) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fr/ * Translated using Weblate (German) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/it/ * Translated using Weblate (Spanish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/es/ * Translated using Weblate (Finnish) Currently translated at 74.2% (52 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/fi/ * Translated using Weblate (Lithuanian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/lt/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/zh_Hans/ * Translated using Weblate (Turkish) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/ * Translated using Weblate (Croatian) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hr/ * Translated using Weblate (Basque) Currently translated at 100.0% (70 of 70 strings) Translation: Piped/Frontend Translate-URL: https://hosted.weblate.org/projects/piped/frontend/eu/ * Add support for Finnish and Chinese Simplified. Co-authored-by: Xie Yanbo <xieyanbo@gmail.com> Co-authored-by: Sergio Varela <sergitroll9@gmail.com> Co-authored-by: J. Lavoie <j.lavoie@net-c.ca> Co-authored-by: Gediminas Murauskas <muziejusinfo@gmail.com> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: Milo Ivir <mail@milotype.de> Co-authored-by: FireMasterK <20838718+FireMasterK@users.noreply.github.com>
2021-09-23 22:37:40 +00:00
);
} catch (e) {
console.error("Countries not translated into " + this.selectedLanguage);
}
}
2021-02-25 14:40:40 +00:00
}
2020-11-17 05:15:35 +00:00
},
methods: {
async onChange() {
if (this.testLocalStorage) {
var shouldReload = false;
if (
this.getPreferenceString("theme", "dark") !== this.selectedTheme ||
this.getPreferenceBoolean("watchHistory", false) != this.watchHistory ||
this.getPreferenceString("hl", await this.defaultLanguage) !== this.selectedLanguage ||
2022-11-06 00:44:27 +00:00
this.getPreferenceString("enabledCodecs", "vp9,avc") !== this.enabledCodecs.join(",")
)
shouldReload = true;
2020-11-17 05:15:35 +00:00
localStorage.setItem("instance", this.selectedInstance);
localStorage.setItem("authInstance", this.authInstance);
localStorage.setItem("auth_instance_url", this.selectedAuthInstance);
2021-02-25 14:40:40 +00:00
localStorage.setItem("sponsorblock", this.sponsorBlock);
2021-02-25 15:18:59 +00:00
const skipOptions = {
sponsor: this.skipSponsor,
intro: this.skipIntro,
outro: this.skipOutro,
preview: this.skipPreview,
interaction: this.skipInteraction,
selfpromo: this.skipSelfPromo,
music_offtopic: this.skipMusicOffTopic,
poi_highlight: this.skipHighlight,
filler: this.skipFiller,
};
localStorage.setItem("skipOptions", JSON.stringify(skipOptions));
localStorage.setItem("showMarkers", this.showMarkers);
localStorage.setItem("minSegmentLength", this.minSegmentLength);
localStorage.setItem("theme", this.selectedTheme);
localStorage.setItem("playerAutoPlay", this.autoPlayVideo);
localStorage.setItem("listen", this.listen);
2021-06-21 20:03:11 +00:00
localStorage.setItem("quality", this.defaultQuality);
2021-06-22 10:54:20 +00:00
localStorage.setItem("bufferGoal", this.bufferingGoal);
localStorage.setItem("region", this.countrySelected);
localStorage.setItem("homepage", this.defaultHomepage);
localStorage.setItem("minimizeComments", this.minimizeComments);
localStorage.setItem("minimizeDescription", this.minimizeDescription);
localStorage.setItem("minimizeRecommendations", this.minimizeRecommendations);
localStorage.setItem("minimizeChapters", this.minimizeChapters);
2022-11-02 16:10:27 +00:00
localStorage.setItem("showWatchOnYouTube", this.showWatchOnYouTube);
localStorage.setItem("watchHistory", this.watchHistory);
2022-09-11 18:01:58 +00:00
localStorage.setItem("searchHistory", this.searchHistory);
if (!this.searchHistory) localStorage.removeItem("search_history");
localStorage.setItem("hl", this.selectedLanguage);
localStorage.setItem("enabledCodecs", this.enabledCodecs.join(","));
localStorage.setItem("disableLBRY", this.disableLBRY);
localStorage.setItem("proxyLBRY", this.proxyLBRY);
2022-09-10 17:08:50 +00:00
localStorage.setItem("hideWatched", this.hideWatched);
if (shouldReload) window.location.reload();
2021-02-25 14:40:40 +00:00
}
2020-11-30 06:39:40 +00:00
},
sslScore(url) {
return "https://www.ssllabs.com/ssltest/analyze.html?d=" + new URL(url).host + "&latest";
},
2022-07-20 14:15:27 +00:00
async deleteAccount() {
this.fetchJson(this.authApiUrl() + "/user/delete", null, {
2022-07-20 14:15:27 +00:00
method: "POST",
headers: {
Authorization: this.getAuthToken(),
},
body: JSON.stringify({
password: this.password,
}),
}).then(resp => {
if (!resp.error) {
this.logout();
} else alert(resp.error);
});
},
logout() {
// reset the auth token
localStorage.removeItem("authToken" + this.hashCode(this.authApiUrl()));
2022-07-20 14:15:27 +00:00
// redirect to trending page
window.location = "/";
},
2022-08-11 17:41:07 +00:00
resetPreferences() {
2022-08-14 18:31:09 +00:00
if (!confirm(this.$t("actions.confirm_reset_preferences"))) return;
2022-08-11 17:41:07 +00:00
// clear the local storage
localStorage.clear();
// redirect to the home page
window.location = "/";
},
2022-07-20 16:21:11 +00:00
async invalidateSession() {
this.fetchJson(this.authApiUrl() + "/logout", null, {
2022-07-20 16:21:11 +00:00
method: "POST",
headers: {
Authorization: this.getAuthToken(),
},
}).then(resp => {
if (!resp.error) {
this.logout();
} else alert(resp.error);
});
},
2022-08-13 09:29:31 +00:00
backupPreferences() {
const data = JSON.stringify(localStorage);
this.download(data, "preferences.json", "application/json");
},
restorePreferences() {
var file = this.$refs.fileSelector.files[0];
file.text().then(text => {
const data = JSON.parse(text);
Object.keys(data).forEach(function (key) {
localStorage.setItem(key, data[key]);
});
window.location.reload();
});
},
},
2020-11-17 05:15:35 +00:00
};
</script>
2022-08-11 17:12:08 +00:00
<style>
.pref {
2022-08-17 13:34:57 +00:00
@apply flex justify-between items-center my-2 mx-[15vw] lt-md:mx-[2vw];
2022-08-11 17:12:08 +00:00
}
</style>