* refactor: tr_torrentPeers() now returns a std::vector<tr_peer_stat>
* refactor: make tr_peer_stat.client a std::string_view
* refactor: make tr_peer_stat.flag_str a std::string
* refactor: make tr_peer_stat.addr a std::string
* refactor: rename tr_peer_stat field names to camel_case
* refactor: use Speed type for tr_peer_stat speed fields
* refactor: add default initializers to tr_peer_stat fields
* refactor: order tr_peer_stat fields to reduce padding
* fix: typo in [Torrent peers] getter
* refactor: make tr_peer_stat.user_agent a std::string
* refactor: pass by reference instead of by pointer in DetailsDialog
* fixup! refactor: add default initializers to tr_peer_stat fields
* 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: gtr_open_file() now takes a std::string_view
refactor: gtr_open_file() now calls Glib::filename_to_uri()
refactor: add gtr_open_file() variant that takes basedir and relative path
refactor: gtr_open_uri() now takes a relative_path std::string_view
* refactor: tr_torrentGetCurrentDir() now returns a std::string_view
refactor: tr_torrentGetDownloadDir() now returns a std::string_view
* 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
* fix: crash when `--global-seedratio` argument is invalid
* fix: crash when `--global-idle-seeding-limit` argument is invalid
* fix: crash when `--peers` argument is invalid
* fix: crash when `--tracker-remove` argument is invalid
* fix: crash when `--seedratio` argument is invalid
* fix: crash when `--idle-seeding-limit` argument is invalid