added default crunchyroll language selector
This commit is contained in:
parent
be4fd91f74
commit
d9fe95dd25
@ -5,9 +5,14 @@ import type { CrunchyAnimeFetch, CrunchyEpisodeFetch, CrunchyEpisodesFetch, Crun
|
|||||||
|
|
||||||
export async function searchCrunchy(q: string) {
|
export async function searchCrunchy(q: string) {
|
||||||
var isProxyActive: boolean | undefined
|
var isProxyActive: boolean | undefined
|
||||||
|
var selectedLanguage: string | undefined
|
||||||
|
|
||||||
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
||||||
isProxyActive = result
|
isProxyActive = result
|
||||||
})
|
})
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: string) => {
|
||||||
|
selectedLanguage = result
|
||||||
|
})
|
||||||
|
|
||||||
var proxies
|
var proxies
|
||||||
|
|
||||||
@ -32,7 +37,9 @@ export async function searchCrunchy(q: string) {
|
|||||||
q: q,
|
q: q,
|
||||||
n: 100,
|
n: 100,
|
||||||
type: 'series',
|
type: 'series',
|
||||||
ratings: false
|
ratings: false,
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -61,7 +68,9 @@ export async function searchCrunchy(q: string) {
|
|||||||
q: q,
|
q: q,
|
||||||
n: 100,
|
n: 100,
|
||||||
type: 'series',
|
type: 'series',
|
||||||
ratings: false
|
ratings: false,
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -119,9 +128,14 @@ export async function searchCrunchy(q: string) {
|
|||||||
|
|
||||||
export async function getCRSeries(q: string) {
|
export async function getCRSeries(q: string) {
|
||||||
var isProxyActive: boolean | undefined
|
var isProxyActive: boolean | undefined
|
||||||
|
var selectedLanguage: string | undefined
|
||||||
|
|
||||||
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
||||||
isProxyActive = result
|
isProxyActive = result
|
||||||
})
|
})
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: string) => {
|
||||||
|
selectedLanguage = result
|
||||||
|
})
|
||||||
|
|
||||||
var proxies
|
var proxies
|
||||||
|
|
||||||
@ -141,6 +155,10 @@ export async function getCRSeries(q: string) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${token.value.access_token}`
|
Authorization: `Bearer ${token.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -162,6 +180,10 @@ export async function getCRSeries(q: string) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${tokeng.value.access_token}`
|
Authorization: `Bearer ${tokeng.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -201,9 +223,14 @@ export async function getCRSeries(q: string) {
|
|||||||
|
|
||||||
export async function getCREpisodeSeriesID(q: string) {
|
export async function getCREpisodeSeriesID(q: string) {
|
||||||
var isProxyActive: boolean | undefined
|
var isProxyActive: boolean | undefined
|
||||||
|
var selectedLanguage: string | undefined
|
||||||
|
|
||||||
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
;(window as any).myAPI.getProxyActive().then((result: boolean) => {
|
||||||
isProxyActive = result
|
isProxyActive = result
|
||||||
})
|
})
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: string) => {
|
||||||
|
selectedLanguage = result
|
||||||
|
})
|
||||||
|
|
||||||
var proxies
|
var proxies
|
||||||
|
|
||||||
@ -223,6 +250,10 @@ export async function getCREpisodeSeriesID(q: string) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${token.value.access_token}`
|
Authorization: `Bearer ${token.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -244,6 +275,10 @@ export async function getCREpisodeSeriesID(q: string) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${tokeng.value.access_token}`
|
Authorization: `Bearer ${tokeng.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -2,6 +2,13 @@ import { crunchyLogin } from './Account'
|
|||||||
import type { CrunchyEpisodesFetch } from './Types'
|
import type { CrunchyEpisodesFetch } from './Types'
|
||||||
|
|
||||||
export async function listEpisodeCrunchy(q: string, geo: string | undefined) {
|
export async function listEpisodeCrunchy(q: string, geo: string | undefined) {
|
||||||
|
|
||||||
|
var selectedLanguage: string | undefined
|
||||||
|
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: string) => {
|
||||||
|
selectedLanguage = result
|
||||||
|
})
|
||||||
|
|
||||||
const { data: token, error: tokenerror } = await crunchyLogin(geo ? geo : 'LOCAL')
|
const { data: token, error: tokenerror } = await crunchyLogin(geo ? geo : 'LOCAL')
|
||||||
|
|
||||||
if (!token.value) {
|
if (!token.value) {
|
||||||
@ -12,6 +19,10 @@ export async function listEpisodeCrunchy(q: string, geo: string | undefined) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${token.value.access_token}`
|
Authorization: `Bearer ${token.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -3,6 +3,13 @@ import { getProxies } from './Proxy'
|
|||||||
import type { CrunchySeasonsFetch } from './Types'
|
import type { CrunchySeasonsFetch } from './Types'
|
||||||
|
|
||||||
export async function listSeasonCrunchy(q: string, geo: string | undefined) {
|
export async function listSeasonCrunchy(q: string, geo: string | undefined) {
|
||||||
|
|
||||||
|
var selectedLanguage: string | undefined
|
||||||
|
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: string) => {
|
||||||
|
selectedLanguage = result
|
||||||
|
})
|
||||||
|
|
||||||
const { data: token, error: tokenerror } = await crunchyLogin(geo ? geo : 'LOCAL')
|
const { data: token, error: tokenerror } = await crunchyLogin(geo ? geo : 'LOCAL')
|
||||||
|
|
||||||
if (!token.value) {
|
if (!token.value) {
|
||||||
@ -13,6 +20,10 @@ export async function listSeasonCrunchy(q: string, geo: string | undefined) {
|
|||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${token.value.access_token}`
|
Authorization: `Bearer ${token.value.access_token}`
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
preferred_audio_language: selectedLanguage,
|
||||||
|
locale: selectedLanguage
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,5 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col gap-3 mt-3 font-dm" style="-webkit-app-region: no-drag">
|
<div class="flex flex-col gap-3 mt-3 font-dm" style="-webkit-app-region: no-drag">
|
||||||
|
<div class="flex flex-col items-center p-3 bg-[#11111189] rounded-xl select-none">
|
||||||
|
<div class="text-sm mb-2">Default Language</div>
|
||||||
|
<select v-model="selectedLanguage" @change="selectLanguage()" class="bg-[#5c5b5b] w-full focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
||||||
|
<option value="en-US">English</option>
|
||||||
|
<option value="de-DE">Deutsch</option>
|
||||||
|
<option value="it-IT">Italiano</option>
|
||||||
|
<option value="es-419">Español</option>
|
||||||
|
<option value="es-ES">Español (España)</option>
|
||||||
|
<option value="fr-FR">Français (France)</option>
|
||||||
|
<option value="pt-BR">Português (Brasil)</option>
|
||||||
|
<option value="pt-PT">Português (Portugal)</option>
|
||||||
|
<option value="ru-RU">Русский</option>
|
||||||
|
<option value="ar-SA">العربية</option>
|
||||||
|
<option value="hi-IN">हिंदी</option>
|
||||||
|
</select>
|
||||||
|
<div class="text-xs mt-2"> For search, series and episode name </div>
|
||||||
|
</div>
|
||||||
<div class="flex flex-col items-center p-3 bg-[#11111189] rounded-xl select-none">
|
<div class="flex flex-col items-center p-3 bg-[#11111189] rounded-xl select-none">
|
||||||
<div class="text-sm mb-2">Stream Endpoint</div>
|
<div class="text-sm mb-2">Stream Endpoint</div>
|
||||||
<select v-model="selectedEndpoint" @change="selectEndpoint()" class="bg-[#5c5b5b] w-full focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
<select v-model="selectedEndpoint" @change="selectEndpoint()" class="bg-[#5c5b5b] w-full focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
||||||
@ -23,13 +40,24 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
const selectedLanguage = ref<string>()
|
||||||
const selectedEndpoint = ref<number>()
|
const selectedEndpoint = ref<number>()
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
;(window as any).myAPI.getEndpoint().then((result: any) => {
|
;(window as any).myAPI.getEndpoint().then((result: any) => {
|
||||||
selectedEndpoint.value = result
|
selectedEndpoint.value = result
|
||||||
})
|
})
|
||||||
|
|
||||||
|
;(window as any).myAPI.getDefaultCrunchyrollLanguage().then((result: any) => {
|
||||||
|
selectedLanguage.value = result
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const selectLanguage = () => {
|
||||||
|
if (process.client) {
|
||||||
|
;(window as any).myAPI.setDefaultCrunchyrollLanguage(selectedLanguage.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const selectEndpoint = () => {
|
const selectEndpoint = () => {
|
||||||
if (process.client) {
|
if (process.client) {
|
||||||
|
@ -187,7 +187,7 @@
|
|||||||
<div v-if="service === 'adn' && ADNselectedShow" class="relative flex flex-col select-none">
|
<div v-if="service === 'adn' && ADNselectedShow" class="relative flex flex-col select-none">
|
||||||
<div @click="selectDub ? (selectDub = false) : (selectDub = true)" class="bg-[#5c5b5b] focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
<div @click="selectDub ? (selectDub = false) : (selectDub = true)" class="bg-[#5c5b5b] focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
||||||
Dubs:
|
Dubs:
|
||||||
{{ selectedDubs.map((t) => t.name).join(', ') }}
|
{{ selectedDubs.length !== 0 ? selectedDubs.map((t) => t.name).join(', ') : 'No Dubs selected' }}
|
||||||
</div>
|
</div>
|
||||||
<div v-if="selectDub" class="absolute top-full left-0 w-full bg-[#868585] rounded-xl grid grid-cols-12 gap-1 p-1 z-10">
|
<div v-if="selectDub" class="absolute top-full left-0 w-full bg-[#868585] rounded-xl grid grid-cols-12 gap-1 p-1 z-10">
|
||||||
<button
|
<button
|
||||||
@ -292,10 +292,18 @@
|
|||||||
<option :value="480" class="text-sm text-slate-200">480p</option>
|
<option :value="480" class="text-sm text-slate-200">480p</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="service === 'crunchyroll'" class="relative flex flex-col w-full">
|
||||||
|
<select v-model="qualityaudio" name="format" class="bg-[#5c5b5b] focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
||||||
|
<option :value="1" class="text-sm text-slate-200">44.10 kHz</option>
|
||||||
|
<option :value="2" class="text-sm text-slate-200">44.10 kHz (2)</option>
|
||||||
|
<option :value="3" class="text-sm text-slate-200">22.05 kHz</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div class="relative flex flex-col w-full">
|
<div class="relative flex flex-col w-full">
|
||||||
<select v-model="format" name="format" class="bg-[#5c5b5b] focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
<select v-model="format" name="format" class="bg-[#5c5b5b] focus:outline-none px-3 py-2 rounded-xl text-sm text-center cursor-pointer">
|
||||||
<option value="mp4" class="text-sm text-slate-200">MP4</option>
|
|
||||||
<option value="mkv" class="text-sm text-slate-200">MKV</option>
|
<option value="mkv" class="text-sm text-slate-200">MKV</option>
|
||||||
|
<option value="mp4" class="text-sm text-slate-200">MP4</option>
|
||||||
|
<option value="untouched" class="text-sm text-slate-200">Untouched</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -410,7 +418,8 @@ const hardsub = ref<boolean>(false)
|
|||||||
const added = ref<boolean>(false)
|
const added = ref<boolean>(false)
|
||||||
const isHardsubDisabled = ref<boolean>(true)
|
const isHardsubDisabled = ref<boolean>(true)
|
||||||
const quality = ref<1080 | 720 | 480 | 360 | 240>(1080)
|
const quality = ref<1080 | 720 | 480 | 360 | 240>(1080)
|
||||||
const format = ref<'mp4' | 'mkv'>('mkv')
|
const qualityaudio = ref<1 | 2 | 3>(1)
|
||||||
|
const format = ref<'mp4' | 'mkv' | 'untouched'>('mkv')
|
||||||
|
|
||||||
const isFetchingSeasons = ref<number>(0)
|
const isFetchingSeasons = ref<number>(0)
|
||||||
const isFetchingEpisodes = ref<number>(0)
|
const isFetchingEpisodes = ref<number>(0)
|
||||||
@ -837,6 +846,7 @@ const addToPlaylist = async () => {
|
|||||||
dir: path.value,
|
dir: path.value,
|
||||||
hardsub: hardsub.value,
|
hardsub: hardsub.value,
|
||||||
quality: quality.value,
|
quality: quality.value,
|
||||||
|
qualityaudio: qualityaudio.value,
|
||||||
service: 'CR',
|
service: 'CR',
|
||||||
format: format.value
|
format: format.value
|
||||||
}
|
}
|
||||||
|
@ -334,6 +334,25 @@ ipcMain.handle('dialog:getSeasonTemplate', async (events) => {
|
|||||||
return seTP
|
return seTP
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcMain.handle('dialog:setDefaultCrunchyrollLanguageTemplate', async (events, lang: string) => {
|
||||||
|
await settings.set('CrunchyrollDefaultLanguage', lang)
|
||||||
|
|
||||||
|
return lang
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcMain.handle('dialog:getDefaultCrunchyrollLanguageTemplate', async (events) => {
|
||||||
|
const seTP = await settings.get('CrunchyrollDefaultLanguage')
|
||||||
|
|
||||||
|
if (!seTP) {
|
||||||
|
await settings.set('CrunchyrollDefaultLanguage', 'en-US')
|
||||||
|
|
||||||
|
return 'en-US'
|
||||||
|
}
|
||||||
|
|
||||||
|
return seTP
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
const openWindows = new Map()
|
const openWindows = new Map()
|
||||||
|
|
||||||
// Open New Window
|
// Open New Window
|
||||||
|
@ -24,5 +24,13 @@ contextBridge.exposeInMainWorld('myAPI', {
|
|||||||
setSeasonTemplate: (name: string) => ipcRenderer.invoke('dialog:setSeasonTemplate', name),
|
setSeasonTemplate: (name: string) => ipcRenderer.invoke('dialog:setSeasonTemplate', name),
|
||||||
getSeasonTemplate: () => ipcRenderer.invoke('dialog:getSeasonTemplate'),
|
getSeasonTemplate: () => ipcRenderer.invoke('dialog:getSeasonTemplate'),
|
||||||
setSeasonEnabled: (active: boolean) => ipcRenderer.invoke('dialog:setSeasonEnabledTemplate', active),
|
setSeasonEnabled: (active: boolean) => ipcRenderer.invoke('dialog:setSeasonEnabledTemplate', active),
|
||||||
getSeasonEnabled: () => ipcRenderer.invoke('dialog:getSeasonEnabledTemplate')
|
getSeasonEnabled: () => ipcRenderer.invoke('dialog:getSeasonEnabledTemplate'),
|
||||||
|
// setDefaultVideoQuality: (quality: number) => ipcRenderer.invoke('dialog:setDefaultVideoQualityTemplate', quality),
|
||||||
|
// getDefaultVideoQuality: () => ipcRenderer.invoke('dialog:getDefaultVideoQualityTemplate'),
|
||||||
|
// setDefaultAudioQuality: (quality: number) => ipcRenderer.invoke('dialog:setDefaultAudioQualityTemplate', quality),
|
||||||
|
// getDefaultAudioQuality: () => ipcRenderer.invoke('dialog:getDefaultAudioQualityTemplate'),
|
||||||
|
// setDefaultOutputFormat: (format: string) => ipcRenderer.invoke('dialog:setDefaultOutputFormatTemplate', format),
|
||||||
|
// getDefaultOutputFormat: () => ipcRenderer.invoke('dialog:getDefaultOutputFormatTemplate'),
|
||||||
|
setDefaultCrunchyrollLanguage: (lang: string) => ipcRenderer.invoke('dialog:setDefaultCrunchyrollLanguageTemplate', lang),
|
||||||
|
getDefaultCrunchyrollLanguage: () => ipcRenderer.invoke('dialog:getDefaultCrunchyrollLanguageTemplate')
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user