* refactor: move primary_mime_type() to tr_torrent_files where it is easier to test
* fix: use video/mp4 mime type for .mp4 files
* docs: remove obsolete code comment
* refactor: add StatsMode to libtransmission-app
* test: add display-mode unit tests
* feat: add apicompat for StatsMode
* refactor: use StatsMode in Qt client
* refactor: add template method for gtr_set_pref()
* refactor: use StatsMode in GTK client
* ci: use the all-tests alias instead of hardcoding tests
* ci: copy runtime DLLS into test output directory for Windows test binaries
* fix: warning: declaration shadows a variable in the global namespace [clang-diagnostic-shadow]
* fix: warning: use 'contains' to check for membership [readability-container-contains]
* fix: warning: variable gl_confdir can be made static or moved into an anonymous namespace to enforce internal linkage [misc-use-internal-linkage]
* warning: function 'TorrentFilter::match_mode' has a definition with different parameter names [readability-inconsistent-declaration-parameter-name]
* build: add sigslot dependency
* refactor: use sigslot for tr::Blocklists
* refactor: use sigslot for torrent, peer-mgr, wishlist
* refactor: remove tr::SimpleObservable
* chore: make lint happy
warning: method 'make_wishlist' can be made static [readability-convert-member-functions-to-static]
warning: invalid case style for function 'make_wishlist' [readability-identifier-naming]
warning: do not declare C-style arrays, use std::array<> instead [cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays]
* refactor: remove unused forward declaration of tr_peer
* chore: remove slop
* refactor: Blocklist::observe_changes() now returns a scoped connection
* build: use transmission/sigslot fork
* refactor: copyediting
* refactor: fix cyclical dependency loop between Wishlist and tr_peerMgr::WishlistMediator
* Revert "fix: put torrent in "recently active" set after changing queue position (#8290)"
This reverts commit c4283e0c8f.
* fix: update changed dates after setting torrent queue position
* refactor: callers now own the return value of tr_torrentStat()
fix one potential thread issue by simplifying ownership
* refactor: make tr_stat_errtype an enum class; move into tr_stat
* refactor: order tr_stat fields to reduce padding
* chore: fix branch shear
* fix: int-to-enum-class comparison
* fix: namespace regression
* chore: make clang-tidy happy
* fix: some errors are not returned in `tr_sys_path_get_capacity()`
* test: disable well-formed free_space tests
There are no reliable way to test them.
* chore: remove unused tr_announcerCreate() declaration
added in d27c4c5 but never used
* chore: remove unused ParserStack::parentType()
added in 5efec26 but never used
* chore: remove tr_port::set_network()
added in 32f854a but never used
* chore: remove tr_torrent_metainfo::pieces_offset()
added in 52f6e80 but never used
* chore: remove unused `tr_session::setPeerCongestionAlgorithm()`
unused after 611d36a
chore: remove unused `tr_session::setAnnounceIP()`
unused after 611d36a
* refactor: tr_sys_file_open() now takes a std::string_view arg
* refactor: tr_sys_path_copy() now takes a std::string_view arg
* refactor: tr_blocklistSetContent() now takes a std::string_view arg
* refactor: tr_sys_path_remove() now takes a std::string_view arg
* refactor: tr_sys_path_exists() now takes a std::string_view arg
* refactor: tr_sys_dir_create() now takes a std::string_view arg
* refactor: add private stat_sv(), lstat_sv() helpers in file-posix.cc
* refactor: tr_sys_path_is_same() now takes a std::string_view arg
* refactor: tr_sys_path_rename() now takes a std::string_view arg
* refactor: tr_ctorGetDownloadDir() returns a std::optional<std::string>
* refactor: tr_sessionGetConfigDir() now returns a std::string
* refactor: tr_sessionGetDownloadDir() now returns a std::string
* refactor: tr_sessionGetIncompleteDir() now returns a std::string
* refactor: tr_sessionGetRPCWhitelist() now returns a std::string
* refactor: tr_sessionGetRPCPassword() now returns a std::string
* refactor: tr_sessionGetRPCUsername() now returns a std::string
* refactor: tr_sessionGetScript() now returns a std::string
* refactor: tr_blocklistGetURL() now returns a std::string
* refactor: tr_ctorGetSourceFile() now returns a std::optional<std::string>
* refactor: tr_torrentFile() now returns a std::string
* refactor: rename enum types in ip-cache private enum class is_updating_t
this avoids name collisions with YES and NO on macOS
* refactor: rename tr_strv_convert_utf8() to tr_strv_to_utf8_string()
use a name that is symmetrical with the upcoming tr_strv_to_utf8_nsstring()
* feat: add tr_strv_to_utf8_nsstring()
* test: add tests for the new tr_strv_to_utf8_nsstring() methods
* refactor do not cache style in convert_outgoing_data() -- not testing-friendly
* refactor: pass a QNetworkAccessManager into RpcClient constructor
this way we can inject a fake one in tests
* refactor: add RpcClient tests
* refactor: remove pointless QVERIFY call
* refactor: add api_compat::default_style()
* refactor: add api_compat::set_default_style()
* test: parameterize RpcClient tests for Tr4 and Tr5
* refactor: make libcurl thread shutdown faster during tests
* docs: fix out-of-date code comment in web.h
* refactor: tr_sessionClose() now takes fractions of seconds for deadline
refactor: make tr_web::startShutdown() deadline dependent on the tr_sessionClose() deadline arg
* test: set tr_sessionClose() deadline of 0.5 secs
* refactor: FileTest now inherits from SandboxedTest
* fixup! test: set tr_sessionClose() deadline of 0.5 secs
* Revert "build(cmake): support building with (almost) all system 3rd-party libraries (#7554)"
This reverts commit a89ca4f2c9.
* fixup! refactor: use a map of getters, setters for `session_get` and `session_set` properties (#8024)
fix: capture-by-reference error in session_accessors()
* fix: 'Qt depends on a UTF-8 locale' CI warning
* fix: 'qt.qpa.xcb: could not connect to display' CI error
* build: overhaul tr_add_external_auto_library
* build: use package-provided CMake config file libevent
* build: use package-provided CMake config file miniupnpc
* build: update libutp find module
* build: make LIBNAME an optional parameter
* build: use package-provided CMake config file libdeflate
* build: update libb64 find module
* build: update libnatpmp find module
* build: update libpsl find module
* build: support system fast_float library
* chore: reformat long brew commands
* build: support system fmt library
* build: support system rapidjson library
* build: support system small library
* build: support system library utf8cpp
* build: support system library WideInteger
* build: support system library gtest
* fix: incorrectly labeled test suites
* build: remove unused parameters from tr_add_external_auto_library
* build: update crc32c cmake script
* fix: dht system library
* fix: add libutp interface target
* code review: move TrGtest.cmake
* code review: move tr_get_fmt_version into Findfmt.cmake
* code review: use option() for gtest
* code review: move find_package(PkgConfig) out of loop
* build: delete FindCrc32c.cmake
Impossible to parse package version from distributed source files.
* code review: Finddht.cmake
* build: delete FindFastFloat.cmake
Impossible to parse package version from distributed source files.
* code review: Findfmt.cmake
* code review: Findlibb64.cmake
* code review: Findlibdeflate.cmake
* code review: Findlibevent.cmake
* code review: Findlibnatpmp.cmake
* code review: Findlibpsl.cmake
* code review: Findlibutp.cmake
* code review: Findlibminiupnpc.cmake
* code review: FindRapidJSON.cmake
* build: delete FindSmall.cmake
Impossible to parse package version from distributed source files.
* build: only accept cmake config package for utf8cpp
Impossible to parse package version from distributed source files.
* build: delete FindWideInteger.cmake
Impossible to parse package version from distributed source files.
* build: add `USE_SYSTEM_DEFAULT`
* ci: drop Fedora 40 and adopt Fedora 43
* ci: try to silence system header warnings
* ci: use `cmake --install`
* Revert "build: only accept cmake config package for utf8cpp"
This reverts commit 2158d631fd.
* build: harden utf8cpp find module
* chore: bump wide-integer
Pick up bf9398f9da and bcc726a30f
* refactor: gtest should be included with angled brackets
Now that gtest is built as a system library, it should be included with angled brackets instead of quotes.
* code review: fixup libutp variables before `find_package_handle_standard_args`
* code review: define `WIDE_INTEGER_HAS_LIMB_TYPE_UINT64` only for targets depending on WideInteger
* chore: bump wide-integer
Pickup 4b2258acac so that wide-integer tests won't run in Transmission project.
* fix: hicpp-use-auto,modernize-use-auto
* refactor: make Prefs::getKey() a static method
refactor: make Prefs::isCore() a static method
refactor: make Prefs::type() a static method
* refactor: Application takes a Prefs& arg, not a std::unique_ptr<Prefs> arg
* fix: bugprone-exception-escape
save settings by calling prefs.save() from main()
* refactor: load settings by calling prefs.load() from main()
* refactor: use preferred declaration order in Prefs
* fixup! fix: bugprone-exception-escape
* refactor: add Prefs::current_values()
* refactor: clean up namespace use in Prefs.cc
* feat: add QString, QDateTime serializers
* test: add scaffolding for testing Qt code
test: add tests for Prefs
* refactor: remove unused #includes
* build: add clang-tidy rules to tests/qt/
* refactor: clean up the new test code a little
* chore: add missing copyright statement
* ci: ensure Qt6Test is installed
build: check for QTest when ENABLE_TESTS + ENABLE_QT are ON
* fixup! feat: add QString, QDateTime serializers
* fix: Wswitch warning
* build: do not disable tests in release/windows/build-qt5.psl, build-qt6.psl
* ci: set QT_QPA_PLATFORM for running new Qt tests
* test: build cleanly in Qt 5.15
* fixup! fixup! feat: add QString, QDateTime serializers
fix QDateTime serializer on macOS
* fixup! ci: set QT_QPA_PLATFORM for running new Qt tests
install xcb-util-cursor on alpine
* fix: url port parsing
- `tr_urlParse()` should fail if cannot parse port
- Avoid parsing scheme ports to numbers
- Port should not be parsed to a negative number
- Port should not be parsed to `0`
- Directly parse number string to `uint16_t`
* test: invalid port
* feat: `settings.json` `encryption` is now string
* feat: api-compat for encryption in `settings.json`
* feat: rpc now uses the same strings as `settings.json` for encryption modes
* feat: api-compat for encryption in rpc
* code review: use `to_variant()`
Given the unreliable nature of network transfers, it's entirely possible for a requested block to arrive after it has timed out. We need to update the wishlist accordingly in cases like this.
* test: add TransmissionTest fixture that calls tr_lib_init()
* refactor: use std::call_once() in tr_lib_init()
* test: ensure quarks are sorted in RpcTest::sessionGet
* refactor: use ::libtransmission::test::TransmissionTest
prefer this over ::testing::Test to ensure tr_lib_init() is called once