* chore: fix markdown headers in NEWS.md
* chore: turn closed pulls/issues into links
* chore: linkify the release headers
* chore: fill in the 3.00 release date
* chore: use 'NEWS.md' in build scripts
* chore: tweak date format to YYYY-MM-DD
GTK client: none.
Qt client: Japanese.
Mac client: none (there're suitable languages, but they're lacking XIB files
and we haven't switched to base localization yet).
* perf: lazy-update actions enabled on change events
Actions' sensitivity was being lazy-updated in response to other events
but accidentally were doing immediate updates in response to torrentsChanged
signals being emitted from TorrentModel. This commit makes that path a
lazy-update as well.
* chore: uncrustify
* refactor: make the idle updater a lambda again
Previously it was calculated from `log10(1.0 / DBL_EPISILON) - 1`;
however, there's no need to calculate it out when there's an ANSI
standard that already spells it out consisely.
In libtransmission/variant.c, function tr_variantWalk, when the variant
stack is reallocated, a pointer to the previously allocated memory
region is kept. This address is later accessed (heap use-after-free)
while walking back down the stack, causing the application to crash.
The application can be any application which uses libtransmission, such
as transmission-daemon, transmission-gtk, transmission-show, etc.
Reported-by: Tom Richards <tom@tomrichards.net>
* Add EDIT_DATE torrent property declaration (Qt client)
Switch to static assertion to help avoid similar issues in the future.
* Only declare std::hash<QString> for Qt < 5.14
* Pass main window as context when connecting lambdas to torrents model signals (Qt client)
This helps to automatically disconnect from signals on main window
destruction. If not done, use after free is possible since main window is
destroyed before torrents model.
Fixes: #1106
Reduce `nl_(before|after)_class` from 2 to 1 to avoid needless newlines added
between class forward declarations (which is a shame, I liked the old behavior
more).
* feat: add tr_stat.infoDate to note tr_info changes
The last time during this session that any tr_info field changed
(e.g. trackers/filenames edited or magnet torrent got metadata).
RPC clients can monitor this to know when to reload fields which
don't usually change.
* faster updating of trackers combobox.
* generate trackerDisplayNames just once per torrent
* refactor: cache torrent delegate's warning emblem
* refactor: change mainwin refresh debounce to 200ms
* refactor: do not store trackers, hosts in QVariant
* refactor: don't use `virtual` when it's not needed
* refactor: faster counting torrents-matching-filter
* refactor: faster tracker handling in filterbar
* refactor: improve json parser's prealloc heuristic
* refactor: make Torrent::hasError() faster
* refactor: remove redundant speed stats collection
* refactor: remove unnecessary tor->isQueued() calls
* refactor: use unordered containers where possible
* scale favicons only once, when adding to the cache
* feat: add optional "format" arg to torrent-get RPC
If the "format" request was "objects" (default), "torrents" will be an
array of objects, each of which contains the key/value pairs matching
the request's "fields" arg. This is unchanged from previous versions.
If the format was "table", then "torrents" will be an array of arrays.
The first row holds the keys and each remaining row holds a torrent's
values for those keys. This format is more efficient in terms of JSON
generation and JSON parsing.