// This file Copyright © Mnemosyne LLC. // It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only), // or any future license endorsed by Mnemosyne LLC. // License text can be found in the licenses/ folder. #include #include #include "RelocateDialog.h" #include "Session.h" #include "Torrent.h" #include "TorrentModel.h" // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) bool RelocateDialog::move_flag = true; void RelocateDialog::onSetLocation() { session_.torrentSetLocation(ids_, newLocation(), move_flag); close(); } void RelocateDialog::onMoveToggled(bool b) const { move_flag = b; } RelocateDialog::RelocateDialog(Session& session, TorrentModel const& model, torrent_ids_t ids, QWidget* parent) : BaseDialog{ parent } , session_{ session } , ids_{ std::move(ids) } { ui_.setupUi(this); QString path; for (int const id : ids_) { Torrent const* tor = model.getTorrentFromId(id); if (path.isEmpty()) { path = tor->getPath(); } else if (path != tor->getPath()) { if (session_.isLocal()) { path = QDir::homePath(); } else { path = QDir::rootPath(); } break; } } if (session_.isLocal()) { ui_.newLocationStack->setCurrentWidget(ui_.newLocationButton); ui_.newLocationButton->setMode(PathButton::DirectoryMode); ui_.newLocationButton->setTitle(tr("Select Location")); ui_.newLocationButton->setPath(path); } else { ui_.newLocationStack->setCurrentWidget(ui_.newLocationEdit); ui_.newLocationEdit->setText(path); ui_.newLocationEdit->selectAll(); } ui_.newLocationStack->setFixedHeight(ui_.newLocationStack->currentWidget()->sizeHint().height()); ui_.newLocationLabel->setBuddy(ui_.newLocationStack->currentWidget()); if (move_flag) { ui_.moveDataRadio->setChecked(true); } else { ui_.findDataRadio->setChecked(true); } connect(ui_.moveDataRadio, &QAbstractButton::toggled, this, &RelocateDialog::onMoveToggled); connect(ui_.dialogButtons, &QDialogButtonBox::rejected, this, &RelocateDialog::close); connect(ui_.dialogButtons, &QDialogButtonBox::accepted, this, &RelocateDialog::onSetLocation); } QString RelocateDialog::newLocation() const { return ui_.newLocationStack->currentWidget() == ui_.newLocationButton ? ui_.newLocationButton->path() : ui_.newLocationEdit->text(); }