diff --git a/src/components/Dialogs/AddTorrentDialog.vue b/src/components/Dialogs/AddTorrentDialog.vue
index 2826dc12..4c14639e 100644
--- a/src/components/Dialogs/AddTorrentDialog.vue
+++ b/src/components/Dialogs/AddTorrentDialog.vue
@@ -89,7 +89,8 @@ const onCategoryChanged = () => {
-
@@ -184,23 +185,28 @@ const onCategoryChanged = () => {
-
-
-
-
-
@@ -209,7 +215,8 @@ const onCategoryChanged = () => {
-
+
diff --git a/src/components/Settings/Advanced.vue b/src/components/Settings/Advanced.vue
index 45dd4dcd..2342e724 100644
--- a/src/components/Settings/Advanced.vue
+++ b/src/components/Settings/Advanced.vue
@@ -1,56 +1,77 @@
@@ -59,21 +80,18 @@ onBeforeMount(async () => {
{{ t('settings.advanced.qbittorrent.subheader') }} ({{ t('settings.advanced.openDoc') }})
+ href="https://github.com/qbittorrent/qBittorrent/wiki/Explanation-of-Options-in-qBittorrent#Advanced"
+ target="_blank"
+ >{{ t('settings.advanced.openDoc') }})
-
+
{
-
+
+
+
+
+
+
+
+
{
-
+
-
+
@@ -133,7 +170,8 @@ onBeforeMount(async () => {
-
+
{
-
+
-
+
-
+
{
-
+
{
-
+
{
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
@@ -272,15 +327,29 @@ onBeforeMount(async () => {
:label="t('settings.advanced.libtorrent.sendBufferWatermarkFactor')" />
-
+
-
-
+
+
+
+
+
+
+
+
+
@@ -313,7 +382,8 @@ onBeforeMount(async () => {
:label="t('settings.advanced.libtorrent.networking.upnpLeaseDuration')" />
-
+
@@ -332,7 +402,8 @@ onBeforeMount(async () => {
-
+
{
:label="t('settings.advanced.libtorrent.security.validateHTTPSTrackerCertificate')" />
-
+
{
-
+
-
+
-
+
@@ -397,11 +472,13 @@ onBeforeMount(async () => {
:label="t('settings.advanced.libtorrent.maxConcurrentHTTPAnnounces')" />
-
+
-
+
{
-
+
diff --git a/src/components/Settings/Behavior.vue b/src/components/Settings/Behavior.vue
new file mode 100644
index 00000000..158452f6
--- /dev/null
+++ b/src/components/Settings/Behavior.vue
@@ -0,0 +1,82 @@
+
+
+
+
+ {{ $t('settings.behavior.logs.subheader') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Settings/BitTorrent.vue b/src/components/Settings/BitTorrent.vue
index 6343b2c5..603a829d 100644
--- a/src/components/Settings/BitTorrent.vue
+++ b/src/components/Settings/BitTorrent.vue
@@ -141,6 +141,7 @@ const thenTypes = ref([
+
@@ -151,10 +152,27 @@ const thenTypes = ref([
v-model="preferenceStore.preferences!.max_seeding_time"
:disabled="!preferenceStore.preferences!.max_seeding_time_enabled"
type="number"
+ hide-details
:suffix="t('units.minutes')" />
+
+
+
+
+
+
+
+
+
+
+
+
@@ -170,7 +188,7 @@ const thenTypes = ref([
-
+
diff --git a/src/components/Settings/Connection.vue b/src/components/Settings/Connection.vue
index 3b56e945..83074006 100644
--- a/src/components/Settings/Connection.vue
+++ b/src/components/Settings/Connection.vue
@@ -2,18 +2,21 @@
import PasswordField from '@/components/Core/PasswordField.vue'
import { BitTorrentProtocol, ProxyType } from '@/constants/qbit/AppPreferences'
import { usePreferenceStore } from '@/stores/preferences'
-import { onBeforeMount, ref, watch } from 'vue'
+import { computed, onBeforeMount, ref, watch } from 'vue'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const preferenceStore = usePreferenceStore()
const proxyTypes = ref([
- { title: '(None)', value: 'none' },
- { title: 'SOCKS4', value: 'socks4' },
- { title: 'SOCKS5', value: 'socks5' },
- { title: 'HTTP', value: 'http' }
+ { title: t('common.none'), value: ProxyType.NONE },
+ { title: 'SOCKS4', value: ProxyType.SOCKS4 },
+ { title: 'SOCKS5', value: ProxyType.SOCKS5 },
+ { title: 'HTTP', value: ProxyType.HTTP }
])
+const isProxyDisabled = computed(() => preferenceStore.preferences!.proxy_type === ProxyType.NONE)
+const isProxySocks4 = computed(() => preferenceStore.preferences!.proxy_type === ProxyType.SOCKS4)
+
const bittorrent_protocol = ref([
{ title: t('constants.bittorrentProtocols.tcp_utp'), value: BitTorrentProtocol.TCP_uTP },
{ title: t('constants.bittorrentProtocols.tcp'), value: BitTorrentProtocol.TCP },
@@ -23,8 +26,6 @@ const max_conn_enabled = ref(false)
const max_conn_per_torrent_enabled = ref(false)
const max_uploads_enabled = ref(false)
const max_uploads_per_torrent_enabled = ref(false)
-const proxyType = ref('none')
-const proxyAuth = ref(false)
const generateRandomPort = () => {
// source: https://github.com/qbittorrent/qBittorrent/blob/d83b2a61311b0dc3bc31ee52d1b9eaac715c3cdf/src/webui/www/private/views/preferences.html#L1729-L1734
@@ -32,50 +33,12 @@ const generateRandomPort = () => {
const max = 65535
preferenceStore.preferences!.listen_port = Math.floor(Math.random() * (max - min + 1) + min)
}
-const updateProxyType = () => {
- switch (proxyType.value) {
- case 'socks5':
- preferenceStore.preferences!.proxy_type = proxyAuth ? ProxyType.SOCKS5_PW : ProxyType.SOCKS5
- preferenceStore.preferences!.proxy_auth_enabled = proxyAuth.value
- break
- case 'http':
- preferenceStore.preferences!.proxy_type = proxyAuth ? ProxyType.HTTP_PW : ProxyType.HTTP
- preferenceStore.preferences!.proxy_auth_enabled = proxyAuth.value
- break
- case 'socks4':
- preferenceStore.preferences!.proxy_type = ProxyType.SOCKS4
- preferenceStore.preferences!.proxy_auth_enabled = false
- break
- case 'none':
- default:
- preferenceStore.preferences!.proxy_type = ProxyType.DISABLED
- preferenceStore.preferences!.proxy_auth_enabled = false
- break
- }
-}
onBeforeMount(async () => {
max_conn_enabled.value = preferenceStore.preferences!.max_connec > 0
max_conn_per_torrent_enabled.value = preferenceStore.preferences!.max_connec_per_torrent > 0
max_uploads_enabled.value = preferenceStore.preferences!.max_uploads > 0
max_uploads_per_torrent_enabled.value = preferenceStore.preferences!.max_uploads_per_torrent > 0
-
- switch (preferenceStore.preferences!.proxy_type) {
- case ProxyType.SOCKS4:
- proxyType.value = 'socks4'
- break
- case ProxyType.SOCKS5:
- case ProxyType.SOCKS5_PW:
- proxyType.value = 'socks5'
- break
- case ProxyType.HTTP:
- case ProxyType.HTTP_PW:
- proxyType.value = 'http'
- break
- default:
- proxyType.value = 'none'
- }
- proxyAuth.value = preferenceStore.preferences!.proxy_auth_enabled
})
watch(
@@ -102,24 +65,13 @@ watch(
preferenceStore.preferences!.max_uploads_per_torrent = newValue ? preferenceStore.preferences!.max_uploads_per_torrent : -1
}
)
-watch(
- () => proxyType.value,
- () => {
- updateProxyType()
- }
-)
-watch(
- () => proxyAuth.value,
- () => {
- updateProxyType()
- }
-)
-
+
@@ -128,16 +80,21 @@ watch(
-
+
- {{ t('settings.connection.listeningPort.randomPort') }}
+ {{
+ t('settings.connection.listeningPort.randomPort')
+ }}
+
-
+
@@ -198,19 +155,19 @@ watch(
-
+
@@ -220,26 +177,33 @@ watch(
-
+
+
+
+
-
+
+ :label="t('settings.connection.proxy.rss')" />
-
+
+ :label="t('settings.connection.proxy.misc')" />
@@ -248,19 +212,23 @@ watch(
+
+
+
+
@@ -268,16 +236,8 @@ watch(
@@ -291,12 +251,15 @@ watch(
{{ t('settings.connection.ipFiltering.subheader') }}
-
-
+
+
-
+
@@ -304,7 +267,8 @@ watch(
-
+
diff --git a/src/components/Settings/Downloads.vue b/src/components/Settings/Downloads.vue
index 13d40749..fdcb7caf 100644
--- a/src/components/Settings/Downloads.vue
+++ b/src/components/Settings/Downloads.vue
@@ -149,6 +149,10 @@ const closeDeleteDialog = async () => {
+
+
+
+
diff --git a/src/constants/qbit/AppPreferences.ts b/src/constants/qbit/AppPreferences.ts
index c209a424..24698c3f 100644
--- a/src/constants/qbit/AppPreferences.ts
+++ b/src/constants/qbit/AppPreferences.ts
@@ -12,7 +12,8 @@ export enum ContentLayout {
export enum DynDnsService {
USE_DYNDNS,
- USE_NOIP
+ USE_NOIP,
+ USE_NONE = -1
}
export enum Encryption {
@@ -21,6 +22,12 @@ export enum Encryption {
FORCE_OFF
}
+export enum FileLogAgeType {
+ DAYS,
+ MONTHS,
+ YEARS
+}
+
export enum MaxRatioAction {
PAUSE_TORRENT = 0,
REMOVE_TORRENT = 1,
@@ -29,18 +36,22 @@ export enum MaxRatioAction {
}
export enum ProxyType {
- DISABLED = 0,
- HTTP = 1,
- SOCKS5 = 2,
- HTTP_PW = 3,
- SOCKS5_PW = 4,
- SOCKS4 = 5
+ NONE = 'None',
+ SOCKS4 = 'SOCKS4',
+ SOCKS5 = 'SOCKS5',
+ HTTP = 'HTTP'
+}
+
+export enum ResumeDataStorageType {
+ LEGACY = 'Legacy',
+ SQLITE = 'SQLite'
}
export enum ScanDirsEnum {
MONITORED_FOLDER,
DEFAULT_SAVE_PATH
}
+
export type ScanDirs = ScanDirsEnum | string
export enum SchedulerDays {
diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue
index 547cb815..33aa84b9 100644
--- a/src/pages/Settings.vue
+++ b/src/pages/Settings.vue
@@ -1,4 +1,5 @@