#include "FileExistsDialog.h" #include "ui_fileExistsDialog.h" #include "TransferThread.h" #ifdef Q_OS_WIN32 #define CURRENTSEPARATOR "\\" #else #define CURRENTSEPARATOR "/" #endif #include #include #include FileExistsDialog::FileExistsDialog(QWidget *parent, QFileInfo source, QFileInfo destination, std::string firstRenamingRule, std::string otherRenamingRule) : QDialog(parent), ui(new Ui::fileExistsDialog) { Qt::WindowFlags flags = windowFlags(); #ifdef Q_OS_LINUX flags=flags & ~Qt::X11BypassWindowManagerHint; #endif flags=flags | Qt::WindowStaysOnTopHint; setWindowFlags(flags); ui->setupUi(this); action=FileExists_Cancel; destinationInfo=destination; oldName=TransferThread::resolvedName(destination); ui->lineEditNewName->setText(QString::fromStdString(oldName)); ui->lineEditNewName->setPlaceholderText(QString::fromStdString(oldName)); ui->Overwrite->addAction(ui->actionOverwrite_if_newer); ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date); ui->label_content_source_size->setText(QString::number(source.size())); ui->label_content_source_modified->setText(source.lastModified().toString()); ui->label_content_source_file_name->setText(QString::fromStdString(TransferThread::resolvedName(source))); QString folder=source.absolutePath(); if(folder.size()>80) folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); ui->label_content_source_folder->setText(folder); ui->label_content_destination_size->setText(QString::number(destination.size())); ui->label_content_destination_modified->setText(destination.lastModified().toString()); ui->label_content_destination_file_name->setText(QString::fromStdString(TransferThread::resolvedName(destination))); folder=destination.absolutePath(); if(folder.size()>80) folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); ui->label_content_destination_folder->setText(folder); QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); if(maxTimelabel_source_modified->setVisible(true); ui->label_content_source_modified->setVisible(true); ui->label_content_source_modified->setText(source.lastModified().toString()); } else { ui->label_source_modified->setVisible(false); ui->label_content_source_modified->setVisible(false); } if(maxTimelabel_destination_modified->setVisible(true); ui->label_content_destination_modified->setVisible(true); ui->label_content_destination_modified->setText(destination.lastModified().toString()); } else { ui->label_destination_modified->setVisible(false); ui->label_content_destination_modified->setVisible(false); } if(!source.exists()) { ui->label_content_source_size->setVisible(false); ui->label_source_size->setVisible(false); ui->label_source_modified->setVisible(false); ui->label_content_source_modified->setVisible(false); } if(!destination.exists()) { ui->label_content_destination_size->setVisible(false); ui->label_destination_size->setVisible(false); ui->label_destination_modified->setVisible(false); ui->label_content_destination_modified->setVisible(false); } this->firstRenamingRule=firstRenamingRule; this->otherRenamingRule=otherRenamingRule; on_SuggestNewName_clicked(); } FileExistsDialog::~FileExistsDialog() { delete ui; } void FileExistsDialog::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } std::string FileExistsDialog::getNewName() { if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked()) return oldName; else return ui->lineEditNewName->text().toStdString(); } void FileExistsDialog::on_SuggestNewName_clicked() { QFileInfo destinationInfo=this->destinationInfo; QString absolutePath=destinationInfo.absolutePath(); QString fileName=QString::fromStdString(TransferThread::resolvedName(destinationInfo)); QString suffix=""; QString destination; QString newFileName; //resolv the suffix if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")))) { suffix=fileName; suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2")); fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1")); } //resolv the new name int num=1; do { if(num==1) { if(firstRenamingRule.empty()) newFileName=tr("%1 - copy").arg(fileName); else { newFileName=QString::fromStdString(firstRenamingRule); newFileName.replace("%name%",fileName); } } else { if(otherRenamingRule.empty()) newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); else { newFileName=QString::fromStdString(otherRenamingRule); newFileName.replace(QStringLiteral("%name%"),fileName); newFileName.replace(QStringLiteral("%number%"),QString::number(num)); } } destination=absolutePath+CURRENTSEPARATOR+newFileName+suffix; destinationInfo.setFile(destination); num++; } while(destinationInfo.exists()); ui->lineEditNewName->setText(newFileName+suffix); } void FileExistsDialog::on_Rename_clicked() { action=FileExists_Rename; this->close(); } void FileExistsDialog::on_Overwrite_clicked() { action=FileExists_Overwrite; this->close(); } void FileExistsDialog::on_Skip_clicked() { action=FileExists_Skip; this->close(); } void FileExistsDialog::on_Cancel_clicked() { action=FileExists_Cancel; this->close(); } void FileExistsDialog::on_actionOverwrite_if_newer_triggered() { action=FileExists_OverwriteIfNewer; this->close(); } void FileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered() { action=FileExists_OverwriteIfNotSame; this->close(); } FileExistsAction FileExistsDialog::getAction() { return action; } bool FileExistsDialog::getAlways() { return ui->checkBoxAlways->isChecked(); } void FileExistsDialog::updateRenameButton() { ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text().toStdString() && !ui->lineEditNewName->text().isEmpty())); } void FileExistsDialog::on_checkBoxAlways_toggled(bool checked) { Q_UNUSED(checked); updateRenameButton(); } void FileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1) { Q_UNUSED(arg1); updateRenameButton(); } void FileExistsDialog::on_lineEditNewName_returnPressed() { updateRenameButton(); if(ui->Rename->isEnabled()) on_Rename_clicked(); else QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters")); } void FileExistsDialog::on_actionOverwrite_if_older_triggered() { action=FileExists_OverwriteIfOlder; this->close(); } void FileExistsDialog::on_lineEditNewName_editingFinished() { updateRenameButton(); }