* only use a single concurrent queue for timeMachineExclude instead of one queue per torrent
* moving to +initialize for now (will become a `static let` in Swift anyway)
* DISPATCH_QUEUE_SERIAL because DISPATCH_QUEUE_CONCURRENT is limited to 64 simultaneous torrent dispatch_async
* `static` is better than `global`, to make it private to a single compilation unit
* perf: make pref_is_savable() constexpr
* refactor: use std::vector in tr_torrents::removedSince()
* chore: remove unused typedef in OptionsDialog
* perf: use std::vector in tr_num_parse_range()
* perf: use small::max_size_set in FileTreeItem::update()
* perf: use small:set in Wishlist::next()
* perf: use small:map in FilterBar
* perf: use small::map for counts in tr_logAddMessage()
* perf: use small::max_size_map in FileTreeModel::twiddleWanted()
perf: use small::max_size_map in FileTreeModel::twiddlePriority()
* perf: use a std::array instead of std::map in TorrentFilter::update()
* perf: use a std::array instead of std::map in TorrentSorter::set_mode()
* perf: use a std::array instead of std::map in TorrentSorter::update()
* perf: use small::set in Application::Impl::on_rpc_changed_idle()
* perf: use std::array for MessageLogColumnsModel::level_names_
* fixup! perf: use std::array for MessageLogColumnsModel::level_names_
* fixup! perf: use small::map for counts in tr_logAddMessage()
* fix: specify `port-test` ip protocol in response when possible
* feat: IPv4 and IPv6 port test in Qt Client
* feat: shorten timeout of `port-test`
* feat: IPv4 and IPv6 port test in Gtk Client
* chore: housekeeping
* refactor: remove IP protocol error message
* code review: mikedld gtk
* feat: return tag in qt rpc response
* code review: mikedld qt
* feat: move port test button up alongside spin button
* fixup! code review: mikedld gtk
* fixup! code review: mikedld qt
* code review: port status initial text
* feat: decouple ipv4 and ipv6 status updates (GTK)
* feat: decouple ipv4 and ipv6 status updates (Qt)
* code review: unknown protocols are non-pending
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* code review: simplify status text when the statuses are the same
* Revert "feat: return tag in qt rpc response"
This reverts commit 2a022c2bb0ee7ddad81f8176839cf0d043422368.
* code review: add translation context for status text (GTK)
* code review: move `port_test_pending_` to `Impl` (GTK)
* fixup! code review: move `port_test_pending_` to `Impl` (GTK)
---------
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* chore: drop redundant if branch
* chore: housekeeping
* refactor: always keep error message as the second
* fix: restore `files-wanted` argument of `torrent-set`
* android patches for ndk
* Update libtransmission/file-capacity.cc
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* TrMacros: Move common & android vars
* Build android in CI
* Use vcpkg packages for curl & openssl
* Update CI for android
* Fix ndkVersion used with gradle
* Restore actions triggers events
* CMakeLists: Remove cond where curl is not found
* Use vcpkg tag instead of commit hash
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* TrMacros.cmake: clean unused variables & add vcpkg cond
* Remove quotes around VcpkgAndroid inclusion
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
* actions: split steps to install vcpkg packages
* Build for android arm64
* actions: add make-android condition
* Revert "Use vcpkg tag instead of commit hash"
This reverts commit 65819026b1.
* build.gradle: use cmake version 3.22.1
* actions: use vcpkg 2024.01.12
* actions: Add ninja-build dependency
---------
Co-authored-by: Mike Gelfand <mikedld@users.noreply.github.com>
Label update is made when slider changes its value, and on source change
slider value is being set to a newly calculated, but not necessarily
different from the previous one, value. This means that the slider
change signal may not be emitted, in which case label continues to show
previous text, including "No source selected", which is misleading.
Expose label text as accessible value instead of accessible name, and
get accessible name from buddy label as any proper input widget does.
Don't expose label tooltip as accessible description unless it's
different from its text (which isn't the case when displayed text is
truncated). Notify on label text and selection changes.
Switch to `SqueezeLabel` for values in statistics dialog which has
similar layout to information tab of torrent properties dialog.
* Add Debian 12 installation instructions
* Rename QT to Qt
* Remove GTK4 packages
#5858 bumped minimum required GTK4 past what Bookworm can offer.
* Tr does not bring its own libsystemd-dev
* refactor: tr_rpc_request_exec_json takes a std::function callback
* refactor: tr_rpc_request_exec_json callback takes a tr_variant&&
* refactor: use new tr_variant API in rpcimpl.cc
* refactor: tr_rpc_request_exec_json() now takes a const& to the request
* fixup! refactor: use new tr_variant API in rpcimpl.cc
* chore: rename function to tr_rpc_request_exec()
* chore: remove unused DetailsDialog::Impl::build_torrent_ids_variant_list()
* refactor: minor copyediting in rpcimpl.cc getTorrents()
* refactor: split handler methods between sync, async
* refactor: remove unused args_out param from AsyncHandlers
* chore: fix new readability-inconsistent-declaration-parameter-name warning
* refactor: unset peer BEP-9 support if size hint is invalid
* fix: open torrent file in binary mode
* refactor: move metadata size check to method
* refactor: remove duplicate checks
* refactor: reduce temp variable scope in `parseLtepHandshake()`
* refactor: convert `get_piece_length()` to method
* refactor: convert `tr_torrentSetMetadataSizeHint()` to method
* refactor: convert `tr_torrentGetMetadataPiece()` to method
* refactor: convert `tr_torrentUseMetainfoFromFile()` to method
* refactor: convert `tr_torrentSetMetadataPiece()` to method
* refactor: convert `tr_torrentGetNextMetadataRequest()` to method
* refactor: convert `tr_torrentGetMetadataPercent()` to method
* refactor: add basic framework for MagnetMediator
* refactor: initialise `tr_incomplete_metadata` fields in constructor
* refactor: check metadata transfer completion in `set_metadata_piece()`
* refactor: convert `use_new_metainfo()` and `on_have_all_metainfo()` to methods
* refactor: move parts of `tr_torrent::set_metadata_piece()` into `tr_incomplete_metadata`
* refactor: move parts of `tr_torrent::get_next_metadata_request()` into `tr_incomplete_metadata`
* refactor: move parts of `tr_torrent::get_metadata_percent()` into `tr_incomplete_metadata`
* refactor: hide all `tr_incomplete_metadata` fields
* refactor: move `incomplete_metadata` to private
* feat: add test for `set_metadata_piece()`
* refactor: unify integer types
* refactor: rename `tr_incomplete_metadata` to `tr_metadata_download`
* chore: make clang-tidy happy
libtransmission/torrent-magnet.cc:117:68: warning: comparison of integers of different signs: 'long' and 'const uint64_t' (aka 'const unsigned long') [clang-diagnostic-sign-compare]
* refactor: pass log name to `tr_metadata_download` constructor
* chore: iwyu
* fix: thread-safe `TorrentMagnetTest.setMetadataPiece`
* chore: housekeeping
* Revert "fix: thread-safe `TorrentMagnetTest.setMetadataPiece`"
This reverts commit 2a7fcd93a262888f9f55d542b1a9a2da9ca72cea.
* fix: stop soon instead of stop now in `on_metainfo_completed()`
This is unreachable code now, but if it is ever reached, Transmission
will very likely crash.
* fix: maybe fix OpenBSD test failure
* fix: return read buffer size in libutp read buffer size callback
* refactor: clamp amount of data processed in `can_read_wrapper()`
* chore: housekeeping
* refactor: call `utp_read_drained()` in on-read callback
so that uTP acks can be sent out in a more timely fashion