+13
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DeviceTable">
|
||||
<option name="columnSorters">
|
||||
<list>
|
||||
<ColumnSorterState>
|
||||
<option name="column" value="Name" />
|
||||
<option name="order" value="ASCENDING" />
|
||||
</ColumnSorterState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@@ -7,8 +7,8 @@ android {
|
||||
applicationId "us.materialio.app"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 145
|
||||
versionName "1.10.4"
|
||||
versionCode 146
|
||||
versionName "1.10.5"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
||||
@@ -62,7 +62,11 @@
|
||||
|
||||
|
||||
|
||||
<release version="1.10.4" date="2025-8-19">
|
||||
|
||||
<release version="1.10.5" date="2025-9-05">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.10.5</url>
|
||||
</release>
|
||||
<release version="1.10.4" date="2025-8-19">
|
||||
<url>https://github.com/Materialious/Materialious/releases/tag/1.10.4</url>
|
||||
</release>
|
||||
<release version="1.10.3" date="2025-8-11">
|
||||
|
||||
Generated
+10
-10
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.10.4",
|
||||
"version": "1.10.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "Materialious",
|
||||
"version": "1.10.4",
|
||||
"version": "1.10.5",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@capacitor-community/electron": "^5.0.0",
|
||||
@@ -19,10 +19,10 @@
|
||||
"electron-updater": "^6.3.4",
|
||||
"electron-window-state": "^5.0.3",
|
||||
"jsdom": "^26.1.0",
|
||||
"jsonfile": "^6.1.0"
|
||||
"jsonfile": "^6.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^37.2.6",
|
||||
"electron": "^37.3.1",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron-rebuild": "^3.2.9",
|
||||
"typescript": "^5.9.2"
|
||||
@@ -2492,9 +2492,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/electron": {
|
||||
"version": "37.2.6",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-37.2.6.tgz",
|
||||
"integrity": "sha512-Ns6xyxE+hIK5UlujtRlw7w4e2Ju/ImCWXf1Q/PoOhc0N3/6SN6YW7+ujCarsHbxWnolbW+1RlkHtdklUJpjbPA==",
|
||||
"version": "37.3.1",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-37.3.1.tgz",
|
||||
"integrity": "sha512-7DhktRLqhe6OJh/Bo75bTI0puUYEmIwSzMinocgO63mx3MVjtIn2tYMzLmAleNIlud2htkjpsMG2zT4PiTCloA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
@@ -3920,9 +3920,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
|
||||
"integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Materialious",
|
||||
"version": "1.10.4",
|
||||
"version": "1.10.5",
|
||||
"description": "Modern material design for Invidious.",
|
||||
"author": {
|
||||
"name": "Ward Pearce",
|
||||
@@ -32,10 +32,10 @@
|
||||
"electron-updater": "^6.3.4",
|
||||
"electron-window-state": "^5.0.3",
|
||||
"jsdom": "^26.1.0",
|
||||
"jsonfile": "^6.1.0"
|
||||
"jsonfile": "^6.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^37.2.6",
|
||||
"electron": "^37.3.1",
|
||||
"electron-builder": "^26.0.12",
|
||||
"electron-rebuild": "^3.2.9",
|
||||
"typescript": "^5.9.2"
|
||||
|
||||
Generated
+34
-20
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "materialious",
|
||||
"version": "1.10.3",
|
||||
"version": "1.10.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "materialious",
|
||||
"version": "1.10.3",
|
||||
"version": "1.10.5",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@capacitor-community/electron": "^5.0.1",
|
||||
@@ -24,7 +24,7 @@
|
||||
"googlevideo": "^3.0.0",
|
||||
"he": "^1.2.0",
|
||||
"human-number": "^2.0.4",
|
||||
"i18next": "^25.2.1",
|
||||
"i18next": "^25.5.0",
|
||||
"iso-3166": "^4.3.0",
|
||||
"iso-639-1": "^3.1.5",
|
||||
"material-dynamic-colors": "^1.1.1",
|
||||
@@ -42,7 +42,7 @@
|
||||
"@capacitor/cli": "^7.0.0",
|
||||
"@sveltejs/adapter-auto": "^6.0.1",
|
||||
"@sveltejs/adapter-static": "^3.0.8",
|
||||
"@sveltejs/kit": "^2.21.2",
|
||||
"@sveltejs/kit": "^2.37.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||
"@types/eslint": "^8.56.7",
|
||||
"@types/event-source-polyfill": "^1.0.5",
|
||||
@@ -1682,9 +1682,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.27.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz",
|
||||
"integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==",
|
||||
"version": "7.28.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz",
|
||||
"integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -3250,6 +3250,13 @@
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/@standard-schema/spec": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
|
||||
"integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@surma/rollup-plugin-off-main-thread": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz",
|
||||
@@ -3305,17 +3312,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sveltejs/kit": {
|
||||
"version": "2.21.2",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.21.2.tgz",
|
||||
"integrity": "sha512-EMYTY4+rNa7TaRZYzCqhQslEkACEZzWc363jOYuc90oJrgvlWTcgqTxcGSIJim48hPaXwYlHyatRnnMmTFf5tA==",
|
||||
"version": "2.37.0",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.37.0.tgz",
|
||||
"integrity": "sha512-xgKtpjQ6Ry4mdShd01ht5AODUsW7+K1iValPDq7QX8zI1hWOKREH9GjG8SRCN5tC4K7UXmMhuQam7gbLByVcnw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@standard-schema/spec": "^1.0.0",
|
||||
"@sveltejs/acorn-typescript": "^1.0.5",
|
||||
"@types/cookie": "^0.6.0",
|
||||
"acorn": "^8.14.1",
|
||||
"cookie": "^0.6.0",
|
||||
"devalue": "^5.1.0",
|
||||
"devalue": "^5.3.2",
|
||||
"esm-env": "^1.2.2",
|
||||
"kleur": "^4.1.5",
|
||||
"magic-string": "^0.30.5",
|
||||
@@ -3331,9 +3339,15 @@
|
||||
"node": ">=18.13"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0",
|
||||
"@opentelemetry/api": "^1.0.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
|
||||
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
||||
"vite": "^5.0.3 || ^6.0.0"
|
||||
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@opentelemetry/api": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@sveltejs/vite-plugin-svelte": {
|
||||
@@ -5546,9 +5560,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/devalue": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
|
||||
"integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==",
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz",
|
||||
"integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@@ -7283,9 +7297,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/i18next": {
|
||||
"version": "25.2.1",
|
||||
"resolved": "https://registry.npmjs.org/i18next/-/i18next-25.2.1.tgz",
|
||||
"integrity": "sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==",
|
||||
"version": "25.5.0",
|
||||
"resolved": "https://registry.npmjs.org/i18next/-/i18next-25.5.0.tgz",
|
||||
"integrity": "sha512-Mm2CgIq0revRFbBvfzqW9kDw1r44M4VDWC+YNRx9vTo5bU/iogSdEAC2HEonDA4czEce/iSbAkK90Tw7UrRZKA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
@@ -7302,7 +7316,7 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.1"
|
||||
"@babel/runtime": "^7.27.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "materialious",
|
||||
"version": "1.10.4",
|
||||
"version": "1.10.5",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
@@ -17,7 +17,7 @@
|
||||
"@capacitor/cli": "^7.0.0",
|
||||
"@sveltejs/adapter-auto": "^6.0.1",
|
||||
"@sveltejs/adapter-static": "^3.0.8",
|
||||
"@sveltejs/kit": "^2.21.2",
|
||||
"@sveltejs/kit": "^2.37.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||
"@types/eslint": "^8.56.7",
|
||||
"@types/event-source-polyfill": "^1.0.5",
|
||||
@@ -56,7 +56,7 @@
|
||||
"googlevideo": "^3.0.0",
|
||||
"he": "^1.2.0",
|
||||
"human-number": "^2.0.4",
|
||||
"i18next": "^25.2.1",
|
||||
"i18next": "^25.5.0",
|
||||
"iso-3166": "^4.3.0",
|
||||
"iso-639-1": "^3.1.5",
|
||||
"material-dynamic-colors": "^1.1.1",
|
||||
@@ -69,4 +69,4 @@
|
||||
"svelte-persisted-store": "^0.12.0",
|
||||
"youtubei.js": "^15.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('enabled')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$synciousStore}
|
||||
onclick={() => synciousStore.set(!$synciousStore)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -43,11 +43,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('layout.deArrow.titleOnly')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$deArrowTitlesOnly}
|
||||
onclick={() => deArrowTitlesOnly.set(!$deArrowTitlesOnly)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -57,11 +58,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('enabled')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$deArrowEnabledStore}
|
||||
onclick={() => deArrowEnabledStore.set(!$deArrowEnabledStore)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceAllowInsecureRequests}
|
||||
onclick={allowInsecureRequests}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -184,11 +185,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.theme.AmoledTheme')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceAmoledTheme}
|
||||
onclick={() => interfaceAmoledTheme.set(!$interfaceAmoledTheme)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -201,7 +203,7 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.searchHistory')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceSearchHistoryEnabled}
|
||||
@@ -209,6 +211,7 @@
|
||||
interfaceSearchHistoryEnabled.set(!$interfaceSearchHistoryEnabled);
|
||||
searchHistoryStore.set([]);
|
||||
}}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -220,11 +223,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.lowBandwidthMode')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceLowBandwidthMode}
|
||||
onclick={() => interfaceLowBandwidthMode.set(!$interfaceLowBandwidthMode)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -236,11 +240,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.searchSuggestions')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceSearchSuggestionsStore}
|
||||
onclick={() => interfaceSearchSuggestionsStore.set(!$interfaceSearchSuggestionsStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -252,11 +257,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.expandDescription')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceAutoExpandDesc}
|
||||
onclick={() => interfaceAutoExpandDesc.set(!$interfaceAutoExpandDesc)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -268,11 +274,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.expandChapters')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceAutoExpandChapters}
|
||||
onclick={() => interfaceAutoExpandChapters.set(!$interfaceAutoExpandChapters)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -284,11 +291,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.expandComments')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceAutoExpandComments}
|
||||
onclick={() => interfaceAutoExpandComments.set(!$interfaceAutoExpandComments)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -301,11 +309,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.disableAutoUpdate')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$interfaceDisableAutoUpdate}
|
||||
onclick={() => interfaceDisableAutoUpdate.set(!$interfaceDisableAutoUpdate)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -141,11 +141,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.ccByDefault')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerCCByDefault}
|
||||
onclick={() => playerCCByDefault.set(!$playerCCByDefault)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -157,11 +158,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.autoPlay')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerAutoPlayStore}
|
||||
onclick={() => playerAutoPlayStore.set(!$playerAutoPlayStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -173,11 +175,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.alwaysLoopVideo')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerAlwaysLoopStore}
|
||||
onclick={() => playerAlwaysLoopStore.set(!$playerAlwaysLoopStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -190,11 +193,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.lockOrientation')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerAndroidLockOrientation}
|
||||
onclick={() => playerAndroidLockOrientation.set(!$playerAndroidLockOrientation)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -208,11 +212,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.proxyVideos')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerProxyVideosStore}
|
||||
onclick={() => playerProxyVideosStore.set(!$playerProxyVideosStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -225,11 +230,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.savePlaybackPosition')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerSavePlaybackPositionStore}
|
||||
onclick={() => playerSavePlaybackPositionStore.set(!$playerSavePlaybackPositionStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -241,11 +247,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.theatreModeByDefault')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerTheatreModeByDefaultStore}
|
||||
onclick={() => playerTheatreModeByDefaultStore.set(!$playerTheatreModeByDefaultStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -257,11 +264,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.autoPlayNextByDefault')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerAutoplayNextByDefaultStore}
|
||||
onclick={() => playerAutoplayNextByDefaultStore.set(!$playerAutoplayNextByDefaultStore)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -273,11 +281,12 @@
|
||||
<div class="max">
|
||||
<div>{$_('layout.player.playerStatistics')}</div>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={$playerStatisticsByDefault}
|
||||
onclick={() => playerStatisticsByDefault.set(!playerStatisticsByDefault)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -29,11 +29,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('enabled')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$returnYtDislikesStore}
|
||||
onclick={() => returnYtDislikesStore.set(!$returnYtDislikesStore)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -10,14 +10,22 @@
|
||||
import SponsorBlock from './SponsorBlock.svelte';
|
||||
import { isAndroidTvStore } from '$lib/store';
|
||||
|
||||
let activeTab:
|
||||
| 'interface'
|
||||
| 'player'
|
||||
| 'data'
|
||||
| 'ryd'
|
||||
| 'api extended'
|
||||
| 'sponsorblock'
|
||||
| 'dearrow' = $state('interface');
|
||||
let activeTab = $state('interface');
|
||||
const isActive = (id: string) => activeTab === id;
|
||||
|
||||
const tabs = [
|
||||
{ id: 'interface', label: $_('layout.interface'), icon: 'grid_view', component: Interface },
|
||||
{ id: 'player', label: $_('layout.player.title'), icon: 'smart_display', component: Player },
|
||||
{ id: 'ryd', label: 'RYD', icon: 'thumb_down', component: Ryd },
|
||||
{ id: 'api extended', label: 'API Extended', icon: 'sync', component: ApiExtended },
|
||||
{ id: 'sponsorblock', label: 'Sponsorblock', icon: 'block', component: SponsorBlock },
|
||||
{
|
||||
id: 'dearrow',
|
||||
label: $_('layout.deArrow.title'),
|
||||
icon: 'keyboard_double_arrow_down',
|
||||
component: DeArrow
|
||||
}
|
||||
];
|
||||
|
||||
let dialogType = $state('');
|
||||
|
||||
@@ -29,10 +37,41 @@
|
||||
}
|
||||
}
|
||||
|
||||
function onKeydown(event: KeyboardEvent, idx: number) {
|
||||
const keys = ['ArrowRight', 'ArrowLeft', 'Home', 'End'] as const;
|
||||
if (!keys.includes(event.key as (typeof keys)[number])) return;
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
let next = idx;
|
||||
switch (event.key) {
|
||||
case 'ArrowRight':
|
||||
next = (idx + 1) % tabs.length;
|
||||
break;
|
||||
case 'ArrowLeft':
|
||||
next = (idx - 1 + tabs.length) % tabs.length;
|
||||
break;
|
||||
case 'Home':
|
||||
next = 0;
|
||||
break;
|
||||
case 'End':
|
||||
next = tabs.length - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
activeTab = tabs[next].id;
|
||||
|
||||
const els = document.querySelectorAll<HTMLElement>('[role="tab"]');
|
||||
els[next]?.focus();
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
checkWidth();
|
||||
|
||||
addEventListener('resize', () => checkWidth());
|
||||
if ($isAndroidTvStore) {
|
||||
document.getElementById(`tab-${activeTab}`)?.focus();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -43,33 +82,32 @@
|
||||
</nav>
|
||||
|
||||
<div>
|
||||
<nav tabindex="0" class="tabbed small" style="outline: none" role="region">
|
||||
<a class:active={activeTab === 'interface'} onclick={() => (activeTab = 'interface')}>
|
||||
<i>grid_view</i>
|
||||
<span>{$_('layout.interface')}</span>
|
||||
</a>
|
||||
<a class:active={activeTab === 'player'} onclick={() => (activeTab = 'player')}>
|
||||
<i>smart_display</i>
|
||||
<span>{$_('layout.player.title')}</span>
|
||||
</a>
|
||||
<a tabindex="0" class:active={activeTab === 'ryd'} onclick={() => (activeTab = 'ryd')}>
|
||||
<i>thumb_down</i>
|
||||
<span>RYD</span>
|
||||
</a>
|
||||
<a class:active={activeTab === 'api extended'} onclick={() => (activeTab = 'api extended')}>
|
||||
<i>sync</i>
|
||||
<span>API Extended</span>
|
||||
</a>
|
||||
<a class:active={activeTab === 'sponsorblock'} onclick={() => (activeTab = 'sponsorblock')}>
|
||||
<i>block</i>
|
||||
<span>Sponsorblock</span>
|
||||
</a>
|
||||
<a class:active={activeTab === 'dearrow'} onclick={() => (activeTab = 'dearrow')}>
|
||||
<i>keyboard_double_arrow_down</i>
|
||||
<span>{$_('layout.deArrow.title')}</span>
|
||||
</a>
|
||||
<nav class="tabbed small" style="outline: none" role="tablist" tabindex="0">
|
||||
{#each tabs as tab, i}
|
||||
<a
|
||||
role="tab"
|
||||
class:active={isActive(tab.id)}
|
||||
aria-selected={isActive(tab.id)}
|
||||
id={`tab-${tab.id}`}
|
||||
aria-controls={`panel-${tab.id}`}
|
||||
tabindex={isActive(tab.id) ? 0 : -1}
|
||||
onclick={() => (activeTab = tab.id)}
|
||||
onkeydown={(event) => onKeydown(event, i)}
|
||||
>
|
||||
<i>{tab.icon}</i>
|
||||
<span>{tab.label}</span>
|
||||
</a>
|
||||
{/each}
|
||||
{#if !$isAndroidTvStore}
|
||||
<a class:active={activeTab === 'data'} onclick={() => (activeTab = 'data')}>
|
||||
<a
|
||||
role="tab"
|
||||
class:active={isActive('data')}
|
||||
aria-selected={isActive('data')}
|
||||
id="tab-data"
|
||||
aria-controls="panel-data"
|
||||
tabindex="0"
|
||||
onclick={() => (activeTab = 'data')}
|
||||
>
|
||||
<i>save</i>
|
||||
<span>{$_('layout.dataPreferences.dataPreferences')}</span>
|
||||
</a>
|
||||
@@ -91,27 +129,32 @@
|
||||
</a>
|
||||
{/if}
|
||||
</nav>
|
||||
<div class="page padding" class:active={activeTab === 'interface'}>
|
||||
<Interface />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'player'}>
|
||||
<Player />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'data'}>
|
||||
{#each tabs as tab, _}
|
||||
<div
|
||||
class="page padding"
|
||||
id={`panel-${tab.id}`}
|
||||
role="tabpanel"
|
||||
aria-labelledby={`tab-${tab.id}`}
|
||||
hidden={!isActive(tab.id)}
|
||||
inert={!$isAndroidTvStore && !isActive(tab.id)}
|
||||
aria-hidden={!isActive(tab.id)}
|
||||
class:active={isActive(tab.id)}
|
||||
>
|
||||
<tab.component />
|
||||
</div>
|
||||
{/each}
|
||||
<div
|
||||
class="page padding"
|
||||
id="panel-data"
|
||||
role="tabpanel"
|
||||
aria-labelledby="tab-data"
|
||||
hidden={!isActive('data')}
|
||||
inert={!$isAndroidTvStore && !isActive('data')}
|
||||
aria-hidden={!isActive('data')}
|
||||
class:active={isActive('data')}
|
||||
>
|
||||
<DataPreferences />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'ryd'}>
|
||||
<Ryd />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'api extended'}>
|
||||
<ApiExtended />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'sponsorblock'}>
|
||||
<SponsorBlock />
|
||||
</div>
|
||||
<div class="page padding" class:active={activeTab === 'dearrow'}>
|
||||
<DeArrow />
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
|
||||
@@ -61,11 +61,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('enabled')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$sponsorBlockStore}
|
||||
onclick={() => sponsorBlockStore.set(!$sponsorBlockStore)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -75,11 +76,12 @@
|
||||
<div class="max">
|
||||
<p>{$_('layout.sponsors.disableToast')}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
bind:checked={$sponsorBlockDisplayToastStore}
|
||||
onclick={() => sponsorBlockDisplayToastStore.set(!$sponsorBlockDisplayToastStore)}
|
||||
type="checkbox"
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -109,11 +111,12 @@
|
||||
<div class="max">
|
||||
<p>{sponsor.name}</p>
|
||||
</div>
|
||||
<label class="switch" tabindex="0" role="switch">
|
||||
<label class="switch" tabindex="0">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={sponsorCategoriesList.includes(sponsor.category)}
|
||||
onclick={() => toggleSponsor(sponsor.category)}
|
||||
role="switch"
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
@@ -1,146 +1,161 @@
|
||||
{
|
||||
"enabled": "Aktif et",
|
||||
"copyUrl": "URLi kopyala",
|
||||
"loadMore": "Daha fazlasını yükle",
|
||||
"views": "görüntülenme",
|
||||
"videos": "videolar",
|
||||
"cancel": "İptal",
|
||||
"create": "Oluştur",
|
||||
"title": "Başlık",
|
||||
"searchPlaceholder": "Ara...",
|
||||
"delete": "Sil",
|
||||
"deleteAllHistory": "Tüm geçmişi sil",
|
||||
"skipping": "Atla",
|
||||
"replies": "cevaplar",
|
||||
"region": "Bölge",
|
||||
"noResult": "Sonuç yok",
|
||||
"language": "Dil",
|
||||
"transcript": "Transkript",
|
||||
"noCaptionData": "Altyazılarda herhangi bir veri yoktur.",
|
||||
"selectLang": "Dil seçin",
|
||||
"letterCase": "Başlıklar için harf durumu",
|
||||
"hideReplies": "Cevapları gizle",
|
||||
"hideVideo": "Videoyu gizle",
|
||||
"syncParty": {
|
||||
"userJoined": "Kullanıcı izleme partinize katıldı.",
|
||||
"userLeft": "Kullanıcı izleme partinizden ayrıldı.",
|
||||
"userOnPrivatePage": "Kullanıcı şu an gizli bir sayfa görüntülüyor, senkronizasyon birazdan devam edecek."
|
||||
},
|
||||
"videoTabs": {
|
||||
"all": "Tümü",
|
||||
"videos": "Videolar",
|
||||
"playlists": "Oynatma listeleri",
|
||||
"channels": "Kanallar",
|
||||
"shorts": "Shorts",
|
||||
"streams": "Canlı Yayınlar"
|
||||
},
|
||||
"subscriptions": {
|
||||
"manageSubscriptions": "Abonelikleri Yönet"
|
||||
},
|
||||
"playlist": {
|
||||
"createPlaylist": "Oynatma listesi oluştur",
|
||||
"public": "Herkese açık",
|
||||
"unlisted": "Liste dışı",
|
||||
"private": "Gizli",
|
||||
"playVideos": "Videoları oynat",
|
||||
"shuffleVideos": "Videoları karışık oynat",
|
||||
"loopPlaylist": "Çalma listesini tekrarla"
|
||||
},
|
||||
"thumbnail": {
|
||||
"live": "CANLI",
|
||||
"failedToLoadImage": "Resim yüklenemedi"
|
||||
},
|
||||
"pages": {
|
||||
"home": "Ana Sayfa",
|
||||
"trending": "Trendler",
|
||||
"subscriptions": "Abonelikler",
|
||||
"history": "Geçmiş",
|
||||
"playlists": "Oynatma Listeleri"
|
||||
},
|
||||
"subscribers": "aboneler",
|
||||
"unsubscribe": "Abonelikten çık",
|
||||
"loginRequired": "Oturum açmak gereklidir",
|
||||
"player": {
|
||||
"audioOnly": "Sadece ses",
|
||||
"theatreMode": "Tiyatro modu",
|
||||
"share": {
|
||||
"title": "Paylaş",
|
||||
"materialiousLink": "Bağlantıyı Materialious a kopyala",
|
||||
"invidiousRedirect": "Invidious yönlendirme bağlantısını kopyala",
|
||||
"youtubeLink": "Youtube bağlantısını kopyala"
|
||||
},
|
||||
"download": "İndir",
|
||||
"downloadSteps": {
|
||||
"merging": "Birlikte video ve ses birleştiriliyor",
|
||||
"video": "Video indiriliyor",
|
||||
"audio": "Ses indiriliyor",
|
||||
"ffmpeg": "FFmpeg kütüphaneleri ve parçaları indiriliyor",
|
||||
"classWorker": "FFmpeg sınıf işcisi indiriliyor",
|
||||
"core": "FFmpeg çekirdeği indiriliyor",
|
||||
"wasm": "FFmpeg wasm indiriliyor",
|
||||
"worker": "FFmpeg işcisi indiriliyor"
|
||||
},
|
||||
"noPlaylists": "Oynatma listesi yok",
|
||||
"unableToLoadComments": "Yorumlar yüklenemiyor",
|
||||
"addToPlaylist": "Oynatma listesine ekle"
|
||||
},
|
||||
"layout": {
|
||||
"interface": "Arayüz",
|
||||
"star": "Github'da bize yıldız verin!",
|
||||
"syncParty": "Senkronizasyon partisi",
|
||||
"syncPartyWarning": "Lütfen IP nizin davet ettiğiniz kullanıcılara görüneceğini unutmayın.",
|
||||
"startSyncParty": "Senkronizasyon partisi başlat",
|
||||
"endSyncParty": "Senkronizasyon partisini sonlandır",
|
||||
"notifications": "Bildirimler",
|
||||
"noNewNotifications": "Burada yeni bildirim yok",
|
||||
"settings": "Ayarlar",
|
||||
"login": "Giriş Yap",
|
||||
"logout": "Çıkış Yap",
|
||||
"customize": "Özelleştir",
|
||||
"theme": {
|
||||
"theme": "Tema",
|
||||
"darkMode": "Koyu mod",
|
||||
"lightMode": "Açık Mod",
|
||||
"color": "Renk"
|
||||
},
|
||||
"searchSuggestions": "Önerileri ara",
|
||||
"previewVideoOnHover": "Fareyle üzerine gelindiğinde videoyu ön izleyin",
|
||||
"expandDescription": "Açıklamayı varsayılan olarak genişlet",
|
||||
"expandComments": "Yorumları varsayılan olarak genişlet",
|
||||
"dataPreferences": {
|
||||
"content": "Abonelikleri içe/dışa aktarmayı, şifreyi değiştirmeyi veya hesabı silmeyi mi istiyorsunuz? Buraya tıklayın ve sayfanın en altına gidin.",
|
||||
"dataPreferences": "Veri tercihleri"
|
||||
},
|
||||
"player": {
|
||||
"title": "Oynatıcı",
|
||||
"autoPlay": "Otomatik oynatılan video",
|
||||
"alwaysLoopVideo": "Videoyu her zaman tekrara al",
|
||||
"savePlaybackPosition": "Oynatma konumunu kaydet",
|
||||
"listenByDefault": "Varsayılan olarak dinle",
|
||||
"theatreModeByDefault": "Varsayılan olarak tiyatro modu",
|
||||
"autoPlayNextByDefault": "Sonrakini varsayılan olarak otomatik oynat",
|
||||
"miniPlayer": "Mini oynatıcı",
|
||||
"proxyVideos": "Vekil Sunucu videolar",
|
||||
"backgroundPlay": "Arka planda ses çal",
|
||||
"silenceSkipper": "Sessizlik atlayıcı (Deneysel)"
|
||||
},
|
||||
"bookmarklet": "Yer işareti",
|
||||
"instanceUrl": "Instance URL",
|
||||
"sponsors": {
|
||||
"sponsor": "Sponsor",
|
||||
"Catagories": "Kategoriler",
|
||||
"unpaidSelfPromotion": "Ücretsiz/Kişisel Promosyon",
|
||||
"interactionReminder": "Etkileşim Hatırlatıcısı (Abone Ol)",
|
||||
"intermissionIntroAnimation": "Ara/Giriş Animasyonu",
|
||||
"credits": "Bitiş Kartları/Krediler",
|
||||
"preViewRecapHook": "Önizleme/Özet/Kanca",
|
||||
"tangentJokes": "Dolgu Tanjantı/Şakalar"
|
||||
},
|
||||
"deArrow": {
|
||||
"title": "DeArrow",
|
||||
"thumbnailInstanceUrl": "Küçük resim görünüm URL'si",
|
||||
"titleOnly": "Sadece başlık"
|
||||
}
|
||||
},
|
||||
"subscribe": "Abone Ol"
|
||||
}
|
||||
"enabled": "Etkin",
|
||||
"copyUrl": "URL' yi kopyala",
|
||||
"loadMore": "Daha fazlasını yükle",
|
||||
"views": "görüntülenme",
|
||||
"videos": "videolar",
|
||||
"cancel": "İptal",
|
||||
"create": "Oluştur",
|
||||
"title": "Başlık",
|
||||
"searchPlaceholder": "Ara...",
|
||||
"delete": "Sil",
|
||||
"deleteAllHistory": "Tüm geçmişi sil",
|
||||
"skipping": "Atla",
|
||||
"replies": "cevaplar",
|
||||
"region": "Bölge",
|
||||
"noResult": "Sonuç yok",
|
||||
"language": "Dil",
|
||||
"transcript": "Transkript",
|
||||
"noCaptionData": "Altyazılarda herhangi bir veri yoktur.",
|
||||
"selectLang": "Dil seçin",
|
||||
"letterCase": "Başlıklar için harf durumu",
|
||||
"hideReplies": "Cevapları gizle",
|
||||
"hideVideo": "Videoyu gizle",
|
||||
"syncParty": {
|
||||
"userJoined": "Kullanıcı izleme partinize katıldı.",
|
||||
"userLeft": "Kullanıcı izleme partinizden ayrıldı.",
|
||||
"userOnPrivatePage": "Kullanıcı şu an gizli bir sayfa görüntülüyor, senkronizasyon birazdan devam edecek."
|
||||
},
|
||||
"videoTabs": {
|
||||
"all": "Tümü",
|
||||
"videos": "Videolar",
|
||||
"playlists": "Oynatma listeleri",
|
||||
"channels": "Kanallar",
|
||||
"shorts": "Shorts",
|
||||
"streams": "Canlı Yayınlar"
|
||||
},
|
||||
"subscriptions": {
|
||||
"manageSubscriptions": "Abonelikleri Yönet"
|
||||
},
|
||||
"playlist": {
|
||||
"createPlaylist": "Oynatma listesi oluştur",
|
||||
"public": "Herkese açık",
|
||||
"unlisted": "Liste dışı",
|
||||
"private": "Gizli",
|
||||
"playVideos": "Videoları oynat",
|
||||
"shuffleVideos": "Videoları karışık oynat",
|
||||
"loopPlaylist": "Çalma listesini tekrarla"
|
||||
},
|
||||
"thumbnail": {
|
||||
"live": "CANLI",
|
||||
"failedToLoadImage": "Resim yüklenemedi"
|
||||
},
|
||||
"pages": {
|
||||
"home": "Ana Sayfa",
|
||||
"trending": "Trendler",
|
||||
"subscriptions": "Abonelikler",
|
||||
"history": "Geçmiş",
|
||||
"playlists": "Oynatma Listeleri"
|
||||
},
|
||||
"subscribers": "aboneler",
|
||||
"unsubscribe": "Abonelikten çık",
|
||||
"loginRequired": "Oturum açmak gereklidir",
|
||||
"player": {
|
||||
"audioOnly": "Sadece ses",
|
||||
"theatreMode": "Tiyatro modu",
|
||||
"share": {
|
||||
"title": "Paylaş",
|
||||
"materialiousLink": "Bağlantıyı Materialious a kopyala",
|
||||
"invidiousRedirect": "Invidious yönlendirme bağlantısını kopyala",
|
||||
"youtubeLink": "Youtube bağlantısını kopyala"
|
||||
},
|
||||
"download": "İndir",
|
||||
"downloadSteps": {
|
||||
"merging": "Birlikte video ve ses birleştiriliyor",
|
||||
"video": "Video indiriliyor",
|
||||
"audio": "Ses indiriliyor",
|
||||
"ffmpeg": "FFmpeg kütüphaneleri ve parçaları indiriliyor",
|
||||
"classWorker": "FFmpeg sınıf işcisi indiriliyor",
|
||||
"core": "FFmpeg çekirdeği indiriliyor",
|
||||
"wasm": "FFmpeg wasm indiriliyor",
|
||||
"worker": "FFmpeg işcisi indiriliyor"
|
||||
},
|
||||
"noPlaylists": "Oynatma listesi yok",
|
||||
"unableToLoadComments": "Yorumlar yüklenemiyor",
|
||||
"addToPlaylist": "Oynatma listesine ekle"
|
||||
},
|
||||
"layout": {
|
||||
"interface": "Arayüz",
|
||||
"star": "Github'da bize yıldız verin!",
|
||||
"syncParty": "Senkronizasyon partisi",
|
||||
"syncPartyWarning": "Lütfen IP nizin davet ettiğiniz kullanıcılara görüneceğini unutmayın.",
|
||||
"startSyncParty": "Senkronizasyon partisi başlat",
|
||||
"endSyncParty": "Senkronizasyon partisini sonlandır",
|
||||
"notifications": "Bildirimler",
|
||||
"noNewNotifications": "Burada yeni bildirim yok",
|
||||
"settings": "Ayarlar",
|
||||
"login": "Giriş Yap",
|
||||
"logout": "Çıkış Yap",
|
||||
"customize": "Özelleştir",
|
||||
"theme": {
|
||||
"theme": "Tema",
|
||||
"darkMode": "Koyu mod",
|
||||
"lightMode": "Açık Mod",
|
||||
"color": "Renk"
|
||||
},
|
||||
"searchSuggestions": "Önerileri ara",
|
||||
"previewVideoOnHover": "Fareyle üzerine gelindiğinde videoyu ön izleyin",
|
||||
"expandDescription": "Açıklamayı varsayılan olarak genişlet",
|
||||
"expandComments": "Yorumları varsayılan olarak genişlet",
|
||||
"dataPreferences": {
|
||||
"content": "Abonelikleri içe/dışa aktarmayı, şifreyi değiştirmeyi veya hesabı silmeyi mi istiyorsunuz? Buraya tıklayın ve sayfanın en altına gidin.",
|
||||
"dataPreferences": "Veri tercihleri"
|
||||
},
|
||||
"player": {
|
||||
"title": "Oynatıcı",
|
||||
"autoPlay": "Otomatik oynatılan video",
|
||||
"alwaysLoopVideo": "Videoyu her zaman tekrara al",
|
||||
"savePlaybackPosition": "Oynatma konumunu kaydet",
|
||||
"listenByDefault": "Varsayılan olarak dinle",
|
||||
"theatreModeByDefault": "Varsayılan olarak tiyatro modu",
|
||||
"autoPlayNextByDefault": "Sonrakini varsayılan olarak otomatik oynat",
|
||||
"miniPlayer": "Mini oynatıcı",
|
||||
"proxyVideos": "Vekil Sunucu videolar",
|
||||
"backgroundPlay": "Arka planda ses çal",
|
||||
"silenceSkipper": "Sessizlik atlayıcı (Deneysel)"
|
||||
},
|
||||
"bookmarklet": "Yer işareti",
|
||||
"instanceUrl": "Instance URL",
|
||||
"sponsors": {
|
||||
"sponsor": "Sponsor",
|
||||
"Catagories": "Kategoriler",
|
||||
"unpaidSelfPromotion": "Ücretsiz/Kişisel Promosyon",
|
||||
"interactionReminder": "Etkileşim Hatırlatıcısı (Abone Ol)",
|
||||
"intermissionIntroAnimation": "Ara/Giriş Animasyonu",
|
||||
"credits": "Bitiş Kartları/Krediler",
|
||||
"preViewRecapHook": "Önizleme/Özet/Kanca",
|
||||
"tangentJokes": "Dolgu Tanjantı/Şakalar"
|
||||
},
|
||||
"deArrow": {
|
||||
"title": "DeArrow",
|
||||
"thumbnailInstanceUrl": "Küçük resim görünüm URL'si",
|
||||
"titleOnly": "Sadece başlık"
|
||||
},
|
||||
"allowInsecureRequests": "Güvenli olmayan isteklere izin ver"
|
||||
},
|
||||
"subscribe": "Abone Ol",
|
||||
"premium": "Premium YouTube içeriği Materialious ile izlenemez.",
|
||||
"isUpcoming": "Video henüz izlenebilir durumda değil.",
|
||||
"recommendedVideos": "Önerilen Videolar",
|
||||
"playlistVideos": "Çalma Listeleri",
|
||||
"channels": "kanallar",
|
||||
"defaultPage": "Varsayılan sayfa",
|
||||
"invalidInstance": "Lütfen URL' yi kontrol edin. Eğer doğruysa, sunucu kapalı olabilir veya üçüncü taraf istemcileri desteklemiyor olabilir.",
|
||||
"disabled": "Devre dışı",
|
||||
"invidiousBlockWarning": "Invidious şu anda Google tarafından engellenmiş durumda. Eğer bu sunucu çalışmıyorsa, bunu aşmak için lütfen Materialous {android} ve {masaüstü} sunucusunu kullanın.",
|
||||
"donate": "Bağış",
|
||||
"comments": "yorumlar",
|
||||
"reply": "cevapla",
|
||||
"login": "Giriş",
|
||||
"invidiousLogin": "Lütfen Invidious hesabınız ile giriş yapınız"
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ import os
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
LATEST_VERSION = "1.10.4"
|
||||
LATEST_VERSION = "1.10.5"
|
||||
RELEASE_DATE = datetime.now().strftime("%Y-%-m-%d") # Format: YYYY-M-D
|
||||
|
||||
WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "materialious")
|
||||
|
||||
Reference in New Issue
Block a user