void DownloadRepoDialog::updateSyncMode() { QString switch_hint_text; QString op_text; const QString link_template = "<a style=\"color:#FF9A2A\" href=\"#\">%1</a>"; QString OR = tr("or"); if (!manual_merge_mode_) { op_text = getOperatingText(repo_); sync_with_existing_ = false; QString link = link_template.arg(tr("sync with an existing folder")); switch_hint_text = QString("%1 %2").arg(OR).arg(link); } else { QString link = link_template.arg(tr("create a new sync folder")); switch_hint_text = QString("%1 %2").arg(OR).arg(link); sync_with_existing_ = true; op_text = tr("Sync with this existing folder:"); if (!alternative_path_.isNull()) { setDirectoryText(alternative_path_); } } mOperationText->setText(op_text); mSwitchModeHint->setText(switch_hint_text); }
DownloadRepoDialog::DownloadRepoDialog(const Account& account, const ServerRepo& repo, const QString& password, QWidget *parent) : QDialog(parent), repo_(repo), account_(account), merge_without_question_(false) { manual_merge_mode_ = false; setupUi(this); if (!repo.isSubfolder()) { setWindowTitle(tr("Sync library \"%1\"").arg(repo_.name)); } else { setWindowTitle(tr("Sync folder \"%1\"").arg(repo.parent_path)); } mDirectory->setPlaceholderText(getOperatingText(repo_)); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); mRepoIcon->setPixmap(repo.getPixmap()); mRepoName->setText(repo_.name); mOperationText->setText(tr("Sync to folder:")); if (repo_.encrypted) { if (!password.isEmpty()) { mPassword->setText(password); mPassword->setReadOnly(true); } mPassword->setVisible(true); mPasswordLabel->setVisible(true); } else { mPassword->setVisible(false); mPasswordLabel->setVisible(false); } int height = 250; #if defined(Q_OS_MAC) layout()->setContentsMargins(8, 9, 9, 5); layout()->setSpacing(6); verticalLayout_3->setSpacing(6); #endif if (repo.encrypted) { height += 50; } setMinimumHeight(height); setMaximumHeight(height); setDirectoryText(seafApplet->configurator()->worktreeDir()); connect(mSwitchModeHint, SIGNAL(linkActivated(const QString &)), this, SLOT(switchMode())); updateSyncMode(); mMergeHint->hide(); connect(mChooseDirBtn, SIGNAL(clicked()), this, SLOT(chooseDirAction())); connect(mOkBtn, SIGNAL(clicked()), this, SLOT(onOkBtnClicked())); }
bool DownloadRepoDialog::validateInputsManualMergeMode() { setDirectoryText(mDirectory->text().trimmed()); if (mDirectory->text().isEmpty()) { QMessageBox::warning(this, getBrand(), tr("Please choose the folder to sync"), QMessageBox::Ok); return false; } QDir dir(mDirectory->text()); if (!dir.exists()) { QMessageBox::warning(this, getBrand(), tr("The folder does not exist"), QMessageBox::Ok); return false; } if (repo_.encrypted) { mPassword->setText(mPassword->text().trimmed()); if (mPassword->text().isEmpty()) { QMessageBox::warning(this, getBrand(), tr("Please enter the password"), QMessageBox::Ok); return false; } } return true; }
void DownloadRepoDialog::switchMode() { manual_merge_mode_ = !manual_merge_mode_; QString path = mDirectory->text().trimmed(); if (!path.isEmpty()) { // from download new to merge existing if (manual_merge_mode_) { setDirectoryText(::pathJoin(path, repo_.name)); } else { // from merge existing to download new if (::getBaseName(path) == repo_.name) { setDirectoryText(::getParentPath(path)); } } } updateSyncMode(); }
void DownloadRepoDialog::chooseDirAction() { const QString &wt = seafApplet->configurator()->worktreeDir(); QString dir = QFileDialog::getExistingDirectory(this, tr("Please choose a folder"), wt.toUtf8().data(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (dir.isEmpty()) return; setDirectoryText(dir); }
void DownloadRepoDialog::setMergeWithExisting(const QString& localPath) { merge_without_question_ = true; setDirectoryText(localPath); }
bool DownloadRepoDialog::validateInputs() { setDirectoryText(mDirectory->text().trimmed()); if (mDirectory->text().isEmpty()) { seafApplet->warningBox(tr("Please choose the folder to sync.")); return false; } if (account_.hasDisableSyncWithAnyFolder() && !isPathInWorktree(seafApplet->configurator()->worktreeDir(), mDirectory->text())) { seafApplet->warningBox( tr("Your organization disables putting a library outside %1 folder.").arg(getBrand())); return false; } if (repo_.encrypted) { mPassword->setText(mPassword->text().trimmed()); if (mPassword->text().isEmpty()) { seafApplet->warningBox(tr("Please enter the password")); return false; } } if (manual_merge_mode_) { return validateInputsManualMergeMode(); } sync_with_existing_ = false; alternative_path_ = ""; QString path = QDir(mDirectory->text()).absoluteFilePath(repo_.name); QFileInfo fileinfo = QFileInfo(path); if (fileinfo.exists()) { sync_with_existing_ = true; // exist and but not a directory ? if (!fileinfo.isDir()) { seafApplet->warningBox( tr("Conflicting with existing file \"%1\", please choose a different folder.").arg(path)); return false; } // exist and but conflicting? QString repo_name; if (isPathConflictWithExistingRepo(path, &repo_name)) { seafApplet->warningBox( tr("Conflicting with existing library \"%1\", please choose a different folder.").arg(repo_name)); return false; } QMessageBox::StandardButton ret = merge_without_question_ ? QMessageBox::Yes : seafApplet->yesNoCancelBox( tr("The folder \"%1\" already exists. Are you sure to sync with it (contents will be merged)?") .arg(path) + QString("<br/><br/><small>%1</small>").arg(tr("Click No to sync with a new folder instead")), this, QMessageBox::Yes); if (ret == QMessageBox::Cancel) return false; if (ret == QMessageBox::No) { QString new_path = getAlternativePath(mDirectory->text(), repo_.name); if (new_path.isEmpty()) { seafApplet->warningBox(tr("Unable to find an alternative folder name").arg(path)); return false; } alternative_path_ = new_path; } } return true; }
void DownloadRepoDialog::setMergeWithExisting(const QString& localPath) { setDirectoryText(localPath); }
bool DownloadRepoDialog::validateInputs() { if (has_manual_merge_mode_ && manual_merge_mode_) { return validateInputsManualMergeMode(); } setDirectoryText(mDirectory->text().trimmed()); if (mDirectory->text().isEmpty()) { QMessageBox::warning(this, getBrand(), tr("Please choose the folder to sync."), QMessageBox::Ok); return false; } sync_with_existing_ = false; alternative_path_ = QString(); QString path = QDir(mDirectory->text()).absoluteFilePath(repo_.name); QFileInfo fileinfo = QFileInfo(path); if (fileinfo.exists()) { sync_with_existing_ = true; // exist and but not a directory ? if (!fileinfo.isDir()) { QMessageBox::warning(this, getBrand(), tr("Conflicting with existing file \"%1\", please choose a different folder.").arg(path), QMessageBox::Ok); return false; } // exist and but conflicting? QString repo_name; if (isPathConflictWithExistingRepo(path, &repo_name)) { QMessageBox::warning(this, getBrand(), tr("Conflicting with existing library \"%1\", please choose a different folder.").arg(repo_name), QMessageBox::Ok); return false; } int ret = QMessageBox::question( this, getBrand(), tr("The folder \"%1\" already exists. Are you sure to sync with it (contents will be merged)?") .arg(path) + QString("<br/><br/><small>%1</small>").arg(tr("Click No to sync with a new folder instead")), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::Yes); if (ret & QMessageBox::Cancel) return false; if (ret & QMessageBox::No) { QString new_path = getAlternativePath(mDirectory->text(), repo_.name); if (new_path.isEmpty()) { QMessageBox::warning(this, getBrand(), tr("Unable to find an alternative folder name").arg(path), QMessageBox::Ok); return false; } alternative_path_ = new_path; } } if (repo_.encrypted) { mPassword->setText(mPassword->text().trimmed()); if (mPassword->text().isEmpty()) { QMessageBox::warning(this, getBrand(), tr("Please enter the password"), QMessageBox::Ok); return false; } } return true; }