Commit Graph

2372 Commits

Author SHA1 Message Date
Chocobo1
dffd27a879 WebUI: prefer range based for loop
Using `entries()` can also save the work of manually handling the index variable.

PR #23182.
2025-08-31 21:54:48 +08:00
Chocobo1
b851caa6b9 WebUI: use local preference class locally 2025-08-31 21:45:48 +08:00
Chocobo1
07f2afc4ac WebUI: move variable into proper scope 2025-08-31 21:45:48 +08:00
Thomas (Tom) Piccirello
02c2a68282 WebAPI: Remove outdated TODO
This TODO has been in the code for 8 years since it was added in #6475 (commit b271fa9f00). It appears to have been related to the `skipChecking` variable, though what it actually means has been lost over time. Note that both the `savePath` and the `downloadPath` are recursively created if they don't yet exist.

PR #23165.
2025-08-31 21:31:49 +08:00
anikey
5e11f4dc5e WebAPI: Add I2P peers to peer list
Fixes the second part of #19794.

PR #23061.
2025-08-29 20:51:31 +08:00
Chocobo1
6ac0c5a8b8 WebUI: prefer for loop over Array.forEach method
The `for` loop can do everything `forEach` can and doesn't need a closure.
2025-08-27 22:19:16 +08:00
Chocobo1
2be052e9c4 WebUI: enforce sorted imports
Due to `allowSeparatedGroups = true`, the sorting is applied on a group of consecutive imports.
That means a new group of imports can be created by adding a blank line.
2025-08-27 22:19:16 +08:00
Chocobo1
2bd0965906 WebUI: remove redundant braces in switch statements
Braces are only required when there are variable/function declarations.
2025-08-27 22:19:16 +08:00
Chocobo1
acab056fe4 WebUI: disallow number literals with zero fractions or dangling dots
Javascript treats them all the same as `Number`.
2025-08-27 22:19:16 +08:00
Chocobo1
86acc01b1a WebUI: prefer Number static properties over global ones
`Number` purpose is modularization of globals in ECMAScript 2015.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt#number.parseint_vs._parseint
2025-08-27 22:19:16 +08:00
tehcneko
fb4b266828 WebUI: Fix blurry window controls
PR #23131.
2025-08-26 17:09:01 +08:00
Thomas (Tom) Piccirello
c953730a42 WebUI: Various improvements to dynamic tables
This PR contains various small improvements to dynamic tables, mostly around reducing duplication.

Closes #22921.
PR #23081.
2025-08-26 17:01:30 +08:00
Thomas (Tom) Piccirello
6830e32c72 WebUI: replace callback with promise chaining
PR #23109.
2025-08-23 03:14:49 +08:00
Thomas (Tom) Piccirello
2f34c9b2f0 WebAPI: Omit file names in parseMetadata response
This allows us to bypass any issues related to non-ascii file names.
Supersedes #23080.

PR #23085.
2025-08-23 03:06:24 +08:00
Chocobo1
feacfb0627 WebUI: enforce using prefix operators via ESLint
NPM has a bug that cannot fetch the plugin via git protocol:
https://github.com/npm/cli/issues/2610, so fetch a tarball instead.

PR #23110.
2025-08-18 03:05:25 +08:00
Thomas Piccirello
6ef9db89f9 WebUI: Support editing tracker tier
This PR adds the ability to direct modify a tracker's tier from the WebUI. This process is notably different than the GUI, which provides arrows for increasing/decreasing a tracker's tier.

Closes #12233.
PR #22963.
2025-08-18 02:46:10 +08:00
Chocobo1
7a1a214f73 WebUI: prefer prefix increment operator
Adhere to coding style.

PR #23076.
2025-08-12 19:02:59 +08:00
Chocobo1
d6672abb94 WebUI: use static method for getting time
Unify API usage across the code base.

PR #23077.
2025-08-11 16:47:37 +08:00
tehcneko
03fb036ae3 WebUI: Replace GIFs with SVG
Unused GIFs have been removed along with their CSS; some GIFs have been replaced with CSS, and all SVGs were drawn myself.

PR #23074.
2025-08-11 16:38:11 +08:00
tehcneko
f743ae2d08 WebUI: Use native css transition for context menu
Reduce MooTools usage.

PR #23069.
2025-08-11 16:28:47 +08:00
tehcneko
a265ba7fd2 WebUI: Implement missing tracker list features
Implemented: Tracker endpoints in the list, missing "Tracker Error" and "Unreachable" status, "Next Announce" and "Min Announce" column and double click to edit tracker url.

PR #23045.
2025-08-11 16:20:58 +08:00
Thomas Piccirello
02892d1250 WebUI: Add new Add Torrent experience
This PR uses the new APIs from #21015 to provide a WebUI Add Torrent experience more closely matching the GUI's.

New functionality:
- View torrent size, date, infohash, files, etc.
- Reprioritize and ignore files before adding
- Specify tags when adding torrent
- Specify save path for incomplete torrent

Closes #20557, closes #10997, closes #12499, closes #14201, closes #15071, closes #15718, closes #16207.
PR #21645.
2025-08-09 18:34:38 +08:00
rekayno
4eda3e791a Fix invalid Transifex links
PR #23057.
2025-08-05 00:20:53 +08:00
Thomas Piccirello
e86cc22b3d WebUI: Fix editing/creating category
This broke in #22938.

Closes #23042.
PR #23056.
2025-08-04 18:29:33 +08:00
tehcneko
96c55c4998 WebUI: Make "column resize" strings translatable
PR #23053.
2025-08-04 18:14:55 +08:00
HamletDuFromage
d7b330c069 WebAPI: Add setComment endpoint
No UI implementation as of now.

Closes #19598.
PR #23031.
2025-08-04 17:52:54 +08:00
Chocobo1
94552b2384 WebUI: use secure random number generator for generating random port
Cryptographically strong random number generators are generally preferred over others.

PR #23049.
2025-08-03 15:09:39 +08:00
Chocobo1
2c6c61cc79 WebUI: migrate away from outdated config in ESLint
The following message appears when using the outdated value:
>[@stylistic/eslint-plugin]: You are using deprecated value(boolean) for "allowTemplateLiterals"
>in "quotes", please use "always"/"never" instead.

Also prefer using double quotes over backticks for strings.

PR #23038.
2025-07-28 04:33:50 +08:00
Thomas Piccirello
2b3ee59e25 WebUI: Fix broken CACHEID changes
This broke in #22945.

PR #23025.
2025-07-28 04:09:21 +08:00
Mark Yu
8f709b5fbc WebUI: Implement Share limit action
PR #22989.
Closes #22984.
2025-07-20 16:39:31 +08:00
Thomas Piccirello
c962a6b1d7 WebUI: Apply cache id to all loaded resources
This includes html files and js/css assets loaded via MooTools.

PR #22945.
Closes #18712.
2025-07-20 16:32:18 +08:00
Bark
e3141ce449 WebUI: Allow closing dialogs with Escape key
Tested on the following WebUI Modals:
1. Delete
2. Rename files
3. Settings
4. About
5. Statistics
6. Add torrent

PR #22920.
Closes #13891.
2025-07-20 16:23:22 +08:00
Thomas Piccirello
163f683186 WebUI: Support reannouncing individual trackers
PR #22954.
2025-07-19 15:29:14 +08:00
Thomas Piccirello
7aebd07f9f WebUI: Support managing category download path
PR #22938.
2025-07-15 01:29:03 +08:00
Thomas Piccirello
66f3cf7e67 Reannounce DHT when reannouncing all trackers
PR #22953.
2025-07-13 21:39:29 +08:00
Bark
bf86592e8c WebUI: Add value constraint checks
Closes #22758.
PR #22911.
2025-07-13 21:29:33 +08:00
Thomas Piccirello
399707fdc5 WebUI: Focus on filter field using Ctrl+F
This supports the filters on the Transfers, Search, and Execution Log tabs.

Closes #15482.
PR #22946.
2025-07-08 02:01:51 +08:00
Thomas Piccirello
2ebe8595c9 Modify CategoryOptions serialization to JSON
When a category's download path option is set to "Default", its `downloadPath` is serialized into JSON as `undefined`. This results in the `downloadPath` field being omitted from `torrents/categories` and `torrents/maindata` payloads (as is expected with an `undefined` value).

The use of `undefined` here causes an issue in the WebUI. Specifically, when the category previously contained a value for this field (i.e. download path option set to either "Yes" or "No"), the `processMap` logic in `SyncController` does not detect the removal this field. This results in the category's new `downloadPath` not being properly sent to the client. By switching from `undefined` to `null`, we ensure that the `downloadPath` value is always included in the category's payload. This allows `processMap` to properly detect whenever the value changes.

This change is backwards compatible with existing categories.json files. Older qBittorrent versions should also be able to parse new categories.json files containing `null`.

More context: cd3fbfbf9b (r2173148696)

PR #22958.
2025-07-07 00:17:57 +08:00
Thomas Piccirello
c5a282a02f WebUI: Fix footer left alignment
Follow up to #22918.
PR #22947.
2025-07-07 00:04:46 +08:00
Thomas Piccirello
0e0b1d0962 WebUI: Limit window sizes to viewport size
This change makes the WebUI easier to use on small screens (e.g. mobile). In cases where the window's default size is larger than the user's screen, the window will be resized appropriate (see example below). Every window has been tested for compatibility. The only windows that don't support this are the multi file rename window and the RSS Downloader window.

Closes #19813.
PR #22919.
2025-07-06 23:58:07 +08:00
Thomas Piccirello
15b8a81f92 WebUI: Improve search page experience on mobile
This change better handles resizing of elements on the search page to ensure no controls are hidden at typical mobile screen sizes.
Improvements seen below:
- "Search" button is now accessible
- Content no longer overflows w/ "Search plugins..." button pushed offscreen
- Tabs overflow horizontally and are scrollable, rather than pushing down the search results table

PR #22916.
2025-07-06 23:50:54 +08:00
Thomas Piccirello
f8d44b5073 WebUI: Fix hiding of filters toolbar
The toolbar should be hidden when not on the "Transfers" tab. The hiding of this toolbar can result in resizing the panels, especially on mobile, so we should recompute panel heights.

PR #22915.
2025-07-06 23:45:45 +08:00
Thomas Piccirello
f42dd1b529 WebUI: Support horizontal scrolling of tabs
Previously, the tabs would overflow to the next line, often being hidden by other content. For example, the "Content" tab is now accessible on mobile.

PR #22914.
2025-07-06 23:40:25 +08:00
Thomas Piccirello
b7a43ea118 WebAPI: Cache metadata using TorrentID
`m_torrentMetadataCache` previously used a torrent's InfoHash as its key. However, InfoHashes for hybrid torrents cannot be serialized and deserialized via their TorrentID (e.g. `InfoHash(TorrentID(infoHash.toTorrentID().toString())) != infoHash`). This is due to hybrid InfoHashes containing both a v1 and v2 hash, while the serialized TorrentID only contains a single truncated v2 hash. Thus we cannot expect an InfoHash serialized by its TorrentID to be able to construct an equivalent InfoHash. By switching to the TorrentID, we always have a single ID to use.

Follow up #21015.
PR #22926.
2025-07-04 17:19:14 +08:00
Thomas Piccirello
ef4957a9f4 WebUI: Make footer scrollable on mobile
The window footer can now be scrolled.

Closes #21541.
PR #22918.
2025-06-30 01:51:06 +08:00
Chocobo1
70a6153b78 WebAPI: Trim leading whitespaces on Run External Program fields
Hacked qbt instances may contain malicious script placed in Run External Program and the script
will attempt to hide itself by adding a lot whitespaces at the start of the command string.
Users may mistake the field of being empty but is actually not.
So trim the leading whitespaces to easily expose the malicious script.

Note that GUI already trim the fields and only WebAPI doesn't trim them. This patch will unify
the behavior.
Related: https://github.com/qbittorrent/docker-qbittorrent-nox/issues/71#issuecomment-2993567440

PR #22939.
2025-06-30 01:39:03 +08:00
Bark
690a139538 WebUI: Add ability to add/remove tracker from selected torrents
Closes #22618.
PR #22698.
2025-06-28 14:06:03 +08:00
Thomas Piccirello
67ef356064 WebUI: Delete correct rows after re-sort
The previous logic assumed that trs was properly sorted, which is no longer the case.
Follow up to #22827.

PR #22884.
2025-06-22 15:35:07 +08:00
Thomas Piccirello
254f39f89d WebUI: Restore node default collapse state
By default, nodes should be expanded until explicitly collapsed. This restores the default behavior which changed in b4a16f6464.

Relevant: https://github.com/qbittorrent/qBittorrent/pull/21645#discussion_r2150695297

PR #22879.
2025-06-22 14:55:37 +08:00
tehcneko
d702a02c1f WebUI: Avoid forced reflow on virtual list rerender
Avoid forced synchronous layout caused by offsetHeight/scrollTop access.

PR #22858.
2025-06-22 14:27:16 +08:00