feat(addons): Add qbit Enhanced edition support (#1718)

This commit is contained in:
Rémi Marseault 2024-06-06 10:06:38 +02:00 committed by GitHub
parent d26236b1c9
commit d273ab810f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 91 additions and 2 deletions

View file

@ -92,6 +92,7 @@ Checkout the [wiki](https://github.com/VueTorrent/VueTorrent/wiki/Installation)!
- Additional backend for improved experience, [see the repo for more info](https://github.com/VueTorrent/vuetorrent-backend)
- This is a work in progress, and is not required to use VueTorrent
- Stores server-side settings
- Supports [qBittorrent Enhanced Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition) preferences
## Important Information

View file

@ -0,0 +1,51 @@
<script setup lang="ts">
import { usePreferenceStore } from '@/stores'
import { EnhancedAppPreferences } from '@/types/qbit/models/AppPreferences'
import { computed } from 'vue'
const preferenceStore = usePreferenceStore()
const preferences = computed({
get: () => preferenceStore.preferences as EnhancedAppPreferences,
set: v => preferenceStore.preferences = v
})
</script>
<template>
<v-list>
<v-list-item>
<v-checkbox v-model="preferences.auto_ban_bt_player_peer" hide-details :label="$t('settings.addons.enhanced_edition.auto_ban_bt_player_peer')" />
</v-list-item>
<v-list-item>
<v-checkbox v-model="preferences.auto_ban_unknown_peer" hide-details :label="$t('settings.addons.enhanced_edition.auto_ban_unknown_peer')" />
</v-list-item>
<v-list-item>
<v-checkbox v-model="preferences.auto_update_trackers_enabled" hide-details :label="$t('settings.addons.enhanced_edition.auto_update_trackers')" />
</v-list-item>
<v-list-item>
<v-text-field
v-model="preferences.customize_trackers_list_url"
:disabled="!preferences.auto_update_trackers_enabled"
hide-details
:label="$t('settings.addons.enhanced_edition.trackers_list_url')"
/>
</v-list-item>
<v-list-item>
<v-textarea
v-model="preferences.public_trackers"
disabled
auto-grow
persistent-hint
:hint="$t('settings.bittorrent.autoAddTrackersHint')"
:label="$t('settings.addons.enhanced_edition.public_trackers')" />
</v-list-item>
</v-list>
</template>
<style scoped>
</style>

View file

@ -628,6 +628,15 @@
"title": "Search engine"
},
"settings": {
"addons": {
"enhanced_edition": {
"auto_ban_bt_player_peer": "Auto ban BT player peer",
"auto_ban_unknown_peer": "Auto ban unknown peer",
"auto_update_trackers": "Automatically update public trackers list",
"trackers_list_url": "Customize Trackers URL List",
"public_trackers": "Public trackers"
}
},
"advanced": {
"libtorrent": {
"announceAllTiers": "Always announce to all tiers",
@ -928,6 +937,9 @@
"upload": "Upload"
},
"tabs": {
"addons": {
"enhanced_edition": "Enhanced edition"
},
"advanced": "Advanced",
"behavior": "Behavior",
"bittorrent": "BitTorrent",

View file

@ -1,4 +1,5 @@
<script setup lang="ts">
import EnhancedEdition from '@/components/Settings/addons/EnhancedEdition.vue'
import Advanced from '@/components/Settings/Advanced.vue'
import Behavior from '@/components/Settings/Behavior.vue'
import BitTorrent from '@/components/Settings/BitTorrent.vue'
@ -14,7 +15,7 @@ import VTorrentCardTable from '@/components/Settings/VueTorrent/TorrentCard/Tabl
import WebUI from '@/components/Settings/WebUI.vue'
import { backend } from '@/services/backend'
import { useDialogStore, usePreferenceStore, useVueTorrentStore } from '@/stores'
import { onBeforeUnmount, onMounted, ref, watchEffect } from 'vue'
import { computed, onBeforeUnmount, onMounted, ref, watchEffect } from 'vue'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import { toast } from 'vue3-toastify'
@ -48,6 +49,8 @@ const tabsV = [
const tab = ref('vuetorrent')
const innerTabV = ref('general')
const isEnhancedEdition = computed(() => preferenceStore.preferences && Object.keys(preferenceStore.preferences).includes('public_trackers'))
const saveSettings = async () => {
await preferenceStore.setPreferences()
toast.success(t('settings.saveSuccess'))
@ -132,11 +135,16 @@ onBeforeUnmount(() => {
<v-row class="ma-0 pa-0">
<v-tabs v-model="tab" bg-color="primary" grow show-arrows>
<v-tab v-if="isEnhancedEdition" value="enhancedEdition" href="#/settings/enhancedEdition" :text="$t('settings.tabs.addons.enhanced_edition')" />
<v-tab v-for="{ text, value } in tabs" :key="value" :value="value" :href="`#/settings/${value}`" :text="text" />
</v-tabs>
</v-row>
<v-window v-model="tab" :touch="false">
<v-window-item value="enhancedEdition">
<EnhancedEdition />
</v-window-item>
<v-window-item value="vuetorrent">
<v-tabs v-model="innerTabV" grow color="accent" show-arrows>
<v-tab v-for="{ text, value } in tabsV" :value="value" :text="text" :href="`#/settings/vuetorrent/${value}`" :class="{ 'text-accent': innerTabV === value }" />

View file

@ -59,12 +59,19 @@ export default class MockProvider implements IProvider {
async getPreferences(): Promise<AppPreferences> {
return this.generateResponse({
result: {
// Enhanced edition
// auto_ban_bt_player_peer: true,
// auto_ban_unknown_peer: true,
// auto_update_trackers_enabled: true,
// customize_trackers_list_url: 'http://example.com/',
// public_trackers: 'http://example.com/\nhttp://example.com/',
add_to_top_of_queue: false,
add_trackers: '',
add_trackers_enabled: false,
alt_dl_limit: 10240,
alt_up_limit: 10240,
alternative_webui_enabled: false,
alternative_webui_enabled: true,
alternative_webui_path: '/vuetorrent',
announce_ip: '',
announce_to_all_tiers: true,
@ -266,6 +273,7 @@ export default class MockProvider implements IProvider {
}
async setPreferences(_: AppPreferencesPayload): Promise<void> {
console.log(_)
return this.generateResponse({ shouldResolve: true })
}

View file

@ -419,3 +419,12 @@ export default interface AppPreferences {
/** WebUI username */
web_ui_username: string
}
/** Preferences extension from Enhanced qBittorrent edition */
export interface EnhancedAppPreferences extends AppPreferences {
auto_ban_bt_player_peer: boolean
auto_ban_unknown_peer: boolean
auto_update_trackers_enabled: boolean
customize_trackers_list_url: string
readonly public_trackers: string
}