* refactor: add a Torrent.id property
* feat: add Controller.torrentForId
* refactor: make tr_session_idle_limit_hit_func a std::function
* refactor: make tr_session_metadata_func a std::function
* refactor: make tr_session_ratio_limit_hit_func a std::function
* refactor: make tr_torrent_completeness_func a std::function
* refactor: make tr_altSpeedFunc a std::function
* refactor: make tr_sessionSetQueueStartCallback callback a std::function
* refactor: make tr_rpc_callback_status callback a std::function
* refactor: remove user_data arg from tr_torrent_rename_done_func
* refactor: harden `tr_torrentFindFromId()` by making it safe to pass in a nullptr session
* ci: run `clang-tidy-libtransmission` for app/test-only changes
* fix: fix another new clang-tidy regression
---------
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* ci: infra for parallel clang-tidy runs
* ci(gtk): run clang-tidy
* chore(gtk): silence warnings
* code review: use constexpr auto
* code review: use constants over magic numbers in Utils.cc
* code review: use `std::ignore` to ignore return value
* code review: add back visibility labels that indicated sections
* fix: wrap each command argument in single quotes
* 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]
* refactor: use std::filesystem for tr_sys_path_is_same()
* refactor: use std::filesystem for tr_sys_path_exists()
* refactor: use std::filesystem for tr_sys_path_is_relative()
* refactor: use std::filesystem for tr_sys_path_get_info()
* refactor: use std::filesystem for tr_sys_dir_create()
* refactor: add `maybe_set_error()` helper
* refactor: change behavior to match previous impl
* fix: tr_sys_path_is_same() checks
refactor: address code review feedback
* refactor: address code review feedback
* chore: fix readability-else-after-return clang-tidy warning
* fix: warning: Value stored to 'created' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
fix: warning: parameter 'permissions' is unused [misc-unused-parameters]
* ci: work around a MSVC STL 14.44.35207 clang-tidy false warning
* refactor: simplify return logic of tr_sys_path_is_same()
* 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
* 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
* 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: add [Torrent updateTorrents]
refactor: use updateTorrents in Controller
* refactor: add a batch variant of tr_torrentStat()
* refactor: use batch variant of tr_torrentStat() in GTK details dialog
* refactor: use batch variant of tr_torrentStat() in gtr_confirm_remove()
* refactor: use batch variant of tr_torrentStat() in updateTorrents
* refactor: add Session::find_torrents()
* refactor: remove the raw ptr variant of updateTorrents()
* refactor: remove tr_sessionLock()
* fixup! refactor: add [Torrent updateTorrents]
remove duplicate method declaration
* fix: readability-avoid-const-params-in-decls
* fix: iwyu in transmission.h
* chore: remove an #include that was added in a draft that did not get used
* refactor: use nullptr instead of NULL
* chore: update copyright year in COPYING
* chore: update copyright year in user-facing files (1)
* chore: update copyright year in user-facing files (2)
* chore: update copyright year in cmake/transmission.rc.in
---------
Co-authored-by: github-actions <github-actions@github.com>
* refactor: add libtransmission-app
* refactor: add libtransmission-app/display-modes.h
* refactor: use app::SortMode, app:ShowMode in Qt client
* feat: add to_variant(), to_value() in serializer
* refactor: use app::SortMode in GTK client
* refactor: use app::ShowMode in GTK client
* refactor: make naming consistent with libtransmission-app
Move `FavIconCache` into a new `transmission::app` namespace.
I intend to add a couple more pieces into libtransmission to avoid
code duplication between the Qt and GTK apps.
We should consider making another module for these pieces if they start
to pile up; but for now, let's cordon them into their own namespace.