diff --git a/libtransmission/torrent.h b/libtransmission/torrent.h index 7e7b08b2e..c1c50246c 100644 --- a/libtransmission/torrent.h +++ b/libtransmission/torrent.h @@ -1006,7 +1006,6 @@ private: friend tr_stat const* tr_torrentStat(tr_torrent* tor); friend tr_torrent* tr_torrentNew(tr_ctor* ctor, tr_torrent** setme_duplicate_of); friend uint64_t tr_torrentGetBytesLeftToAllocate(tr_torrent const* tor); - friend uint64_t tr_torrentGetBytesLeftToAllocate(tr_torrent const* tor); enum class VerifyState : uint8_t { diff --git a/qt/ColumnResizer.cc b/qt/ColumnResizer.cc index acbdbdb9d..8f5acaac2 100644 --- a/qt/ColumnResizer.cc +++ b/qt/ColumnResizer.cc @@ -42,7 +42,7 @@ ColumnResizer::ColumnResizer(QObject* parent) void ColumnResizer::addLayout(QGridLayout* layout) { - layouts_ << layout; + layouts_.emplace(layout); scheduleUpdate(); } diff --git a/qt/ColumnResizer.h b/qt/ColumnResizer.h index 40f9cdd36..2d26e87f4 100644 --- a/qt/ColumnResizer.h +++ b/qt/ColumnResizer.h @@ -5,8 +5,9 @@ #pragma once +#include + #include -#include #include #include @@ -33,5 +34,5 @@ private: void scheduleUpdate(); QTimer timer_; - QSet layouts_; + std::set layouts_; }; diff --git a/qt/DetailsDialog.cc b/qt/DetailsDialog.cc index 58c8d90f4..ab311b0e1 100644 --- a/qt/DetailsDialog.cc +++ b/qt/DetailsDialog.cc @@ -1428,19 +1428,20 @@ void DetailsDialog::onRemoveTrackerClicked() // make a map of torrentIds to announce URLs to remove QItemSelectionModel* selection_model = ui_.trackersView->selectionModel(); QModelIndexList const selected_rows = selection_model->selectedRows(); - QMultiMap torrent_id_to_tracker_ids; + auto torrent_id_to_tracker_ids = std::map>{}; - for (QModelIndex const& i : selected_rows) + for (auto const& model_index : selected_rows) { - auto const inf = ui_.trackersView->model()->data(i, TrackerModel::TrackerRole).value(); - torrent_id_to_tracker_ids.insert(inf.torrent_id, inf.st.id); + auto const inf = ui_.trackersView->model()->data(model_index, TrackerModel::TrackerRole).value(); + torrent_id_to_tracker_ids[inf.torrent_id].insert(inf.st.id); } // batch all of a tracker's torrents into one command - for (int const id : torrent_id_to_tracker_ids.uniqueKeys()) + for (auto const& [torrent_id, tracker_ids] : torrent_id_to_tracker_ids) { - torrent_ids_t const ids{ id }; - torrentSet(ids, TR_KEY_trackerRemove, torrent_id_to_tracker_ids.values(id)); + auto const ids = torrent_ids_t{ torrent_id }; + auto const values = std::vector{ std::begin(tracker_ids), std::end(tracker_ids) }; + torrentSet(ids, TR_KEY_trackerRemove, values); } selection_model->clearSelection(); @@ -1582,15 +1583,15 @@ static constexpr tr_quark priorityKey(int priority) } } -void DetailsDialog::onFilePriorityChanged(QSet const& indices, int priority) +void DetailsDialog::onFilePriorityChanged(file_indices_t const& indices, int priority) { - torrentSet(priorityKey(priority), indices.values()); + torrentSet(priorityKey(priority), std::vector{ std::begin(indices), std::end(indices) }); } -void DetailsDialog::onFileWantedChanged(QSet const& indices, bool wanted) +void DetailsDialog::onFileWantedChanged(file_indices_t const& indices, bool wanted) { tr_quark const key = wanted ? TR_KEY_files_wanted : TR_KEY_files_unwanted; - torrentSet(key, indices.values()); + torrentSet(key, std::vector{ std::begin(indices), std::end(indices) }); } void DetailsDialog::onPathEdited(QString const& old_path, QString const& new_name) diff --git a/qt/DetailsDialog.h b/qt/DetailsDialog.h index a0c6be76a..e130370b1 100644 --- a/qt/DetailsDialog.h +++ b/qt/DetailsDialog.h @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -77,8 +76,8 @@ private slots: void onTrackerListEdited(QString); // Files tab - void onFilePriorityChanged(QSet const& file_indices, int); - void onFileWantedChanged(QSet const& file_indices, bool); + void onFilePriorityChanged(file_indices_t const& file_indices, int); + void onFileWantedChanged(file_indices_t const& file_indices, bool); void onPathEdited(QString const& old_path, QString const& new_name); void onOpenRequested(QString const& path) const; diff --git a/qt/FileTreeItem.cc b/qt/FileTreeItem.cc index 07db5ba7c..f96f17e2b 100644 --- a/qt/FileTreeItem.cc +++ b/qt/FileTreeItem.cc @@ -336,7 +336,7 @@ int FileTreeItem::priority() const return i; } -void FileTreeItem::setSubtreePriority(int priority, QSet& ids) +void FileTreeItem::setSubtreePriority(int priority, file_indices_t& setme_changed_ids) { if (priority_ != priority) { @@ -344,13 +344,13 @@ void FileTreeItem::setSubtreePriority(int priority, QSet& ids) if (file_index_ >= 0) { - ids.insert(file_index_); + setme_changed_ids.insert(file_index_); } } for (FileTreeItem* const child : children_) { - child->setSubtreePriority(priority, ids); + child->setSubtreePriority(priority, setme_changed_ids); } } @@ -386,21 +386,21 @@ int FileTreeItem::isSubtreeWanted() const return wanted; } -void FileTreeItem::setSubtreeWanted(bool b, QSet& ids) +void FileTreeItem::setSubtreeWanted(bool wanted, file_indices_t& setme_changed_ids) { - if (is_wanted_ != b) + if (is_wanted_ != wanted) { - is_wanted_ = b; + is_wanted_ = wanted; if (file_index_ >= 0) { - ids.insert(file_index_); + setme_changed_ids.insert(file_index_); } } for (FileTreeItem* const child : children_) { - child->setSubtreeWanted(b, ids); + child->setSubtreeWanted(wanted, setme_changed_ids); } } diff --git a/qt/FileTreeItem.h b/qt/FileTreeItem.h index 0fab0e117..89a1d7b0e 100644 --- a/qt/FileTreeItem.h +++ b/qt/FileTreeItem.h @@ -10,13 +10,13 @@ #include #include -#include #include #include #include #include "Utils.h" // for std::hash +#include "Typedefs.h" class FileTreeItem { @@ -69,8 +69,8 @@ public: QVariant data(int column, int role) const; std::pair update(QString const& name, bool want, int priority, uint64_t have, bool update_fields); - void setSubtreeWanted(bool, QSet& file_ids); - void setSubtreePriority(int priority, QSet& file_ids); + void setSubtreeWanted(bool wanted, file_indices_t& setme_changed_ids); + void setSubtreePriority(int priority, file_indices_t& setme_changed_ids); [[nodiscard]] constexpr auto fileIndex() const noexcept { diff --git a/qt/FileTreeModel.cc b/qt/FileTreeModel.cc index f14630bae..2ad69a0b5 100644 --- a/qt/FileTreeModel.cc +++ b/qt/FileTreeModel.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include // priorities @@ -412,7 +413,7 @@ void FileTreeModel::emitParentsChanged( QModelIndex const& index, int first_column, int last_column, - QSet* visited_parent_indices) + std::set* visited_parent_indices) { assert(first_column <= last_column); @@ -429,7 +430,7 @@ void FileTreeModel::emitParentsChanged( if (visited_parent_indices != nullptr) { - if (visited_parent_indices->contains(walk)) + if (visited_parent_indices->count(walk) != 0U) { break; } @@ -525,7 +526,7 @@ void FileTreeModel::setWanted(QModelIndexList const& indices, bool wanted) QModelIndexList const orphan_indices = getOrphanIndices(indices); - QSet file_ids; + auto file_ids = file_indices_t{}; for (QModelIndex const& i : orphan_indices) { @@ -537,14 +538,14 @@ void FileTreeModel::setWanted(QModelIndexList const& indices, bool wanted) } // emit parent changes separately to avoid multiple updates for same items - QSet parent_indices; + auto parent_indices = std::set{}; for (QModelIndex const& i : orphan_indices) { emitParentsChanged(i, COL_SIZE, COL_WANTED, &parent_indices); } - if (!file_ids.isEmpty()) + if (!std::empty(file_ids)) { emit wantedChanged(file_ids, wanted); } @@ -559,7 +560,7 @@ void FileTreeModel::setPriority(QModelIndexList const& indices, int priority) QModelIndexList const orphan_indices = getOrphanIndices(indices); - QSet file_ids; + auto file_ids = file_indices_t{}; for (QModelIndex const& i : orphan_indices) { @@ -571,14 +572,13 @@ void FileTreeModel::setPriority(QModelIndexList const& indices, int priority) } // emit parent changes separately to avoid multiple updates for same items - QSet parent_indices; - + auto parent_indices = std::set{}; for (QModelIndex const& i : orphan_indices) { emitParentsChanged(i, COL_PRIORITY, COL_PRIORITY, &parent_indices); } - if (!file_ids.isEmpty()) + if (!std::empty(file_ids)) { emit priorityChanged(file_ids, priority); } diff --git a/qt/FileTreeModel.h b/qt/FileTreeModel.h index 9440fef0a..6cbc92c0a 100644 --- a/qt/FileTreeModel.h +++ b/qt/FileTreeModel.h @@ -8,12 +8,14 @@ #include // uint64_t #include #include +#include #include -#include #include +#include "Typedefs.h" // file_indices_t + class FileTreeItem; class FileTreeModel final : public QAbstractItemModel @@ -77,8 +79,8 @@ public: bool setData(QModelIndex const& index, QVariant const& value, int role = Qt::EditRole) override; signals: - void priorityChanged(QSet const& file_indices, int); - void wantedChanged(QSet const& file_indices, bool); + void priorityChanged(file_indices_t const& file_indices, int); + void wantedChanged(file_indices_t const& file_indices, bool); void pathEdited(QString const& oldpath, QString const& new_name); void openRequested(QString const& path); @@ -89,7 +91,7 @@ private: QModelIndex const&, int first_column, int last_column, - QSet* visited_parent_indices = nullptr); + std::set* visited_parent_indices = nullptr); void emitSubtreeChanged(QModelIndex const&, int first_column, int last_column); FileTreeItem* findItemForFileIndex(int file_index) const; FileTreeItem* itemFromIndex(QModelIndex const&) const; diff --git a/qt/FileTreeView.cc b/qt/FileTreeView.cc index 96dde6c0e..a2b5c9893 100644 --- a/qt/FileTreeView.cc +++ b/qt/FileTreeView.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -253,7 +254,7 @@ void FileTreeView::onlyCheckSelectedItems() std::sort(wanted_indices.begin(), wanted_indices.end()); - QSet wanted_indices_parents; + auto wanted_indices_parents = std::set{}; for (QModelIndex const& i : wanted_indices) { @@ -294,7 +295,7 @@ void FileTreeView::onlyCheckSelectedItems() { unwanted_indices << child_index; } - else if (!wanted_indices_parents.contains(child_index)) + else if (wanted_indices_parents.count(child_index) == 0U) { unwanted_indices << child_index; } diff --git a/qt/FileTreeView.h b/qt/FileTreeView.h index 1f16d79bc..cbfe2c813 100644 --- a/qt/FileTreeView.h +++ b/qt/FileTreeView.h @@ -5,12 +5,12 @@ #pragma once -#include #include #include #include "Torrent.h" // FileList +#include "Typedefs.h" // file_indices_t class QAction; class QMenu; @@ -33,8 +33,8 @@ public: void setEditable(bool editable); signals: - void priorityChanged(QSet const& file_indices, int priority); - void wantedChanged(QSet const& file_indices, bool wanted); + void priorityChanged(file_indices_t const& file_indices, int priority); + void wantedChanged(file_indices_t const& file_indices, bool wanted); void pathEdited(QString const& old_path, QString const& new_name); void openRequested(QString const& path); diff --git a/qt/OptionsDialog.cc b/qt/OptionsDialog.cc index 44a083ef9..ce2cf6939 100644 --- a/qt/OptionsDialog.cc +++ b/qt/OptionsDialog.cc @@ -205,7 +205,7 @@ void OptionsDialog::onSessionUpdated() } } -void OptionsDialog::onPriorityChanged(QSet const& file_indices, int priority) +void OptionsDialog::onPriorityChanged(file_indices_t const& file_indices, int priority) { for (int const i : file_indices) { @@ -213,7 +213,7 @@ void OptionsDialog::onPriorityChanged(QSet const& file_indices, int priorit } } -void OptionsDialog::onWantedChanged(QSet const& file_indices, bool is_wanted) +void OptionsDialog::onWantedChanged(file_indices_t const& file_indices, bool is_wanted) { for (int const i : file_indices) { diff --git a/qt/OptionsDialog.h b/qt/OptionsDialog.h index 342ce3aa4..f35cd5bd6 100644 --- a/qt/OptionsDialog.h +++ b/qt/OptionsDialog.h @@ -11,7 +11,6 @@ #include #include -#include #include #include @@ -20,6 +19,7 @@ #include "AddData.h" // AddData #include "BaseDialog.h" #include "Torrent.h" // FileList +#include "Typedefs.h" // file_indices_t #include "ui_OptionsDialog.h" #include @@ -45,8 +45,8 @@ public: private slots: void onAccepted(); - void onPriorityChanged(QSet const& file_indices, int); - void onWantedChanged(QSet const& file_indices, bool); + void onPriorityChanged(file_indices_t const& file_indices, int); + void onWantedChanged(file_indices_t const& file_indices, bool); void onSourceChanged(); void onDestinationChanged(); diff --git a/qt/Prefs.cc b/qt/Prefs.cc index d6fc0d60b..5b95d1daf 100644 --- a/qt/Prefs.cc +++ b/qt/Prefs.cc @@ -225,7 +225,7 @@ Prefs::Prefs(QString config_dir) // these are the prefs that don't get saved to settings.json // when the application exits. - temporary_prefs_ << FILTER_TEXT; + temporary_prefs_.insert(FILTER_TEXT); auto top = get_default_app_settings(); top.merge(tr_sessionLoadSettings(config_dir_.toUtf8().constData(), nullptr)); @@ -326,7 +326,7 @@ Prefs::~Prefs() for (int i = 0; i < PREFS_COUNT; ++i) { - if (temporary_prefs_.contains(i)) + if (temporary_prefs_.count(i) != 0U) { continue; } diff --git a/qt/Prefs.h b/qt/Prefs.h index b0e5165e6..9ac5b68b0 100644 --- a/qt/Prefs.h +++ b/qt/Prefs.h @@ -6,9 +6,9 @@ #pragma once #include +#include #include -#include #include #include @@ -204,7 +204,7 @@ private: QString const config_dir_; - QSet temporary_prefs_; + std::set temporary_prefs_; std::array mutable values_; static std::array const Items; diff --git a/qt/Session.cc b/qt/Session.cc index a03e24541..2f5db906f 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -460,7 +460,7 @@ Session::Tag Session::torrentSet(torrent_ids_t const& torrent_ids, tr_quark cons return torrentSetImpl(&args); } -Session::Tag Session::torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, QList const& value) +Session::Tag Session::torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, std::vector const& value) { tr_variant args; tr_variantInitDict(&args, 2); diff --git a/qt/Session.h b/qt/Session.h index 6461e7456..07449af17 100644 --- a/qt/Session.h +++ b/qt/Session.h @@ -88,7 +88,7 @@ public: Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, int val); Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, double val); Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, QString const& val); - Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, QList const& val); + Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, std::vector const& val); Tag torrentSet(torrent_ids_t const& torrent_ids, tr_quark const key, QStringList const& val); void torrentSetLocation(torrent_ids_t const& torrent_ids, QString const& path, bool do_move); diff --git a/qt/Typedefs.h b/qt/Typedefs.h index c142b37d7..601b14db6 100644 --- a/qt/Typedefs.h +++ b/qt/Typedefs.h @@ -1,7 +1,10 @@ #pragma once +#include #include #include using torrent_ids_t = std::unordered_set; + +using file_indices_t = std::set; diff --git a/qt/WatchDir.cc b/qt/WatchDir.cc index 3bb30b3c0..8bee4520f 100644 --- a/qt/WatchDir.cc +++ b/qt/WatchDir.cc @@ -76,51 +76,44 @@ void WatchDir::setPath(QString const& path, bool is_enabled) void WatchDir::watcherActivated(QString const& path) { - auto const dir = QDir{ path }; - // get the list of files currently in the watch directory - QSet files; - - for (QString const& str : dir.entryList(QDir::Readable | QDir::Files)) - { - files.insert(str); - } + auto const dir = QDir{ path }; + auto const files = dir.entryList(QDir::Readable | QDir::Files); // try to add any new files which end in torrent - auto const new_files = files - watch_dir_files_; auto const torrent_suffix = QStringLiteral(".torrent"); - - for (QString const& name : new_files) + for (auto const& name : files) { - if (name.endsWith(torrent_suffix, Qt::CaseInsensitive)) + if (!name.endsWith(torrent_suffix, Qt::CaseInsensitive) || (watch_dir_files_.count(name) != 0U)) { - QString const filename = dir.absoluteFilePath(name); + continue; + } - switch (metainfoTest(filename)) + auto const filename = dir.absoluteFilePath(name); + switch (metainfoTest(filename)) + { + case AddResult::Success: + emit torrentFileAdded(filename); + break; + + case AddResult::Duplicate: + break; + + case AddResult::Error: { - case AddResult::Success: - emit torrentFileAdded(filename); - break; - - case AddResult::Duplicate: - break; - - case AddResult::Error: - { - // give the torrent a few seconds to finish downloading - auto* t = new QTimer{ this }; - t->setObjectName(dir.absoluteFilePath(name)); - t->setSingleShot(true); - connect(t, &QTimer::timeout, this, &WatchDir::onTimeout); - t->start(5000); - } + // give the torrent a few seconds to finish downloading + auto* t = new QTimer(this); + t->setObjectName(dir.absoluteFilePath(name)); + t->setSingleShot(true); + connect(t, &QTimer::timeout, this, &WatchDir::onTimeout); + t->start(5000); } } } // update our file list so that we can use it // for comparison the next time around - watch_dir_files_ = files; + watch_dir_files_ = { std::begin(files), std::end(files) }; } void WatchDir::rescanAllWatchedDirectories() diff --git a/qt/WatchDir.h b/qt/WatchDir.h index 4826983bd..8dcf436b7 100644 --- a/qt/WatchDir.h +++ b/qt/WatchDir.h @@ -6,10 +6,10 @@ #pragma once #include +#include #include #include -#include #include #include @@ -47,6 +47,6 @@ private: TorrentModel const& model_; - QSet watch_dir_files_; + std::set watch_dir_files_; std::unique_ptr watcher_; };