* chore: add '@license' tag to web sources' comments
Webpack's tersify plugin looks for that JSDoc tag in order to decide
which comments to extract into the generated license file.
* chore: address sonarcloud.io warnings
* chore: address sonarcloud.io code smells
* fixup! chore: address sonarcloud.io warnings
Give the web client a major overhaul.
User-visible highlights include:
* Mobile is now fully supported.
* Added fullscreen support on mobile.
* Better support for dark mode.
* Added mime icons to the torrent list.
* Improved theme consistency across the app.
Maintainer highlights include:
* Updated code to use ES6 APIs.
* No longer uses jQuery UI.
* No longer uses jQuery.
* Use Webpack to bundle the Javascript, CSS, and assets together -- the entire bundle size is now 68K gzipped.
* Added eslint / prettier / stylelint tooling.
* Uses torrent-get's 'table' mode for more efficient RPC calls.
* feat: add torrent-get 'primary-mime-type' to RPC.
This is a cheap way for RPC clients to know what type of content is in a
torrent. This info can be used to display the torrent, e.g. by using an
icon that corresponds to the mime type.
* use size_t for content byte count
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* explicit boolean expressions
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* use uint64_t for content byte counts
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* avoid unnecessary logic branches
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* explicit cast
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* refactor: add an autogenerated mime-type.h header
* chore: maybe fix the win32 FTBFS
* chore: add mime-types.[ch] to xcode
* Squashed commit of the following:
commit 4c7153fa48
Author: Mike Gelfand <mikedld@users.noreply.github.com>
Date: Tue Oct 13 03:15:19 2020 +0300
Remove autotools-based build system (#1465)
* Support .git files (e.g. for worktrees, submodules)
* Fix symlinks in source tarball, switch to TXZ, adjust non-release name
* Remove autotools stuff
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* Support .git files (e.g. for worktrees, submodules)
* Fix symlinks in source tarball, switch to TXZ, adjust non-release name
* Remove autotools stuff
* chore: refresh css files with sass 1.26.10
* fix: css selector for toolbar-separator
* chore: fix duplicate html ids in mac client faq
* fix: duplicate ID 'pagetitle' tags in Mac help
* fix: duplicate ID 'taskbox' tags in Mac help
* chore: fix mismatched div
* refactor: mark subclass' destructors as override.
* refactor: use QUrl to parse announce URL strings.
The prompt for this was to work around a clang-tidy issue where
"char* host = nullptr;" triggers a "don't use varargs" warning,
but on the other hand it's also terser / cleaner.
* refactor: make the TorrentDelegate brushes const.
* refactor: s/auto/auto const*/ where appropriate
* chore: add some nonconst global warning exemptions
* chore: turn off warnings in GTest
* refactor: just disable the clang-tidy warning.
Apparently a std::array<T>::iterator is a T* on clang, since clang-tidy's
readability warning says we should use 'auto*' instead of 'auto'. However
adding that annotation fails on MSVC, where the is apparently _not_ a raw
pointer.
Since there's not a way to satisfy both of them at the same time, disable
the warning.
When set, this will log the RPC messages sent between the GUI and the
backend. This replaces the old `#ifdef DEBUG_HTTP` as something that can
be enabled without needing to recompile.
* refactor: make torrents' mime icons lazy-loaded.
Another "small wins" patch, this time on CPU: icon loading is expensive,
so calculating them for every torrent all at once on startup isn't the
smartest way to do it.
* refactor: use a vector for FavIcon cache keys
Third of three PRs focused on small memory wins in transmission-qt.
This one saves 1-2 M off RES in my 15K torrent testbed. Not a major
improvement, but nice enough.
Previously we held the torrent's tracker keys in an unordered_set.
That container type is overkill for this field: the list is usually
short and almost never changes, so we don't need fast insertion time.
We can keep the same log N lookup by using a sorted vector and avoid
the excess container size & memory allocations of an unordered_set.
* refactor: intern repeated strings e.g. downloadDir
Add an app-wide interned QString cache for commonly-repeated
strings. Currently used for download_dir, announce_url, comment,
creator, error_string.
* refactor: keep torrent hash in std::array<char,20>
This replaces the hashString QString allocation with a compile-time
array that's included in sizeof the Torrent struct that owns it.
* refactor: omit unnecessary #include
* refactor: make the onDuplicatesTimer slot private.
* feat: show dupe torrents in dialog's detailText
* fix: a stupid bug that I introduced.
* If you accidentally try to add a lot of duplicates -- for example, by
starting up with a lot of duplicate torrents in the watchdir -- then
coalesce all of them into a single error dialog instead of spamming
the desktop with a different dialog for every duplicate.
* Make the duplicate torrent dialog's error message slightly terser to
make it accommodate a long list of torrents: omit the ".torrent" file
suffixes and show an abbreviated form of the existing torrent's hash.
* Support searching by torrent hash in the filterbar's text entry.
This is useful when copy/pasting the hash from the duplicate torrent
error dialog and is also consistent with the GTK client behavior.
* Copy the GTK client's behavior of appending ".added" to the end of
.torrent files after they've been added to the session.
* refactor: speed up FaviconCache::add() again.
Another iteration on FaviconCache::add() since it's still showing up so
high in my perf tests. add()'s url argument is now a QString instead of
a QUrl, and the class has a private unordered_map that maps QString urls
into Keys. Basically, QUrl generation is so expensive that it's worth
caching the result to avoid constructing the intermediate QUrl object.
Also, ensure that the network reply's `deleteLater()` method is called
so that they don't leak, and add 'svg' to the icon list since it's now
supported on all major browsers.
Since there is no way to mark parameters as [potentially] unused in
standard C and when using MSVC compiler, use the widely accepted
cast-to-void approach instead.