summaryrefslogtreecommitdiff
path: root/plugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp')
-rwxr-xr-xplugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp209
1 files changed, 209 insertions, 0 deletions
diff --git a/plugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp
new file mode 100755
index 0000000..587a889
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-Spec/FileErrorDialog.cpp
@@ -0,0 +1,209 @@
+#include "FileErrorDialog.h"
+#include "ui_fileErrorDialog.h"
+#include "TransferThread.h"
+#include "../../../cpp11addition.h"
+
+#include <QString>
+
+bool FileErrorDialog::isInAdmin=false;
+
+FileErrorDialog::FileErrorDialog(QWidget *parent, INTERNALTYPEPATH fileInfo, std::string errorString, const ErrorType &errorType,FacilityInterface * facilityEngine) :
+ QDialog(parent),
+ ui(new Ui::fileErrorDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileError_Cancel;
+ ui->label_error->setText(QString::fromStdString(errorString));
+#ifdef Q_OS_WIN32
+ WIN32_FILE_ATTRIBUTE_DATA fileInfoW;
+ if(GetFileAttributesExW(fileInfo.c_str(),GetFileExInfoStandard,&fileInfoW))
+ {
+ uint64_t mdate=fileInfoW.ftLastWriteTime.dwHighDateTime;
+ mdate<<=32;
+ mdate|=fileInfoW.ftLastWriteTime.dwLowDateTime;
+ uint64_t size=fileInfoW.nFileSizeHigh;
+ size<<=32;
+ size|=fileInfoW.nFileSizeLow;
+#else
+ struct stat p_statbuf;
+ if(stat(TransferThread::internalStringTostring(fileInfo).c_str(), &p_statbuf)==0)
+ {
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_MAC
+ uint64_t mdate=p_statbuf.st_mtimespec.tv_sec;
+ #else
+ uint64_t mdate=*reinterpret_cast<int64_t*>(&p_statbuf.st_mtim);
+ #endif
+ #else
+ uint64_t mdate=*reinterpret_cast<int64_t*>(&p_statbuf.st_mtime);
+ #endif
+ const uint64_t size=p_statbuf.st_size;
+#endif
+ ui->label_content_file_name->setText(
+ QString::fromStdString(
+ TransferThread::resolvedName(
+ TransferThread::internalStringTostring(fileInfo)
+ )
+ )
+ );
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(QString::fromStdString(TransferThread::internalStringTostring(fileInfo)));
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ {
+ std::string folder=TransferThread::internalStringTostring(fileInfo);
+ if(folder.size()>80)
+ folder=folder.substr(0,38)+"..."+folder.substr(folder.size()-38);
+ ui->label_content_folder->setText(QString::fromStdString(FSabsolutePath(TransferThread::internalStringTostring(fileInfo))));
+ }
+ ui->label_content_size->setText(QString::fromStdString(facilityEngine->sizeToString(size)));
+ if(ULTRACOPIER_PLUGIN_MINIMALYEAR_TIMESTAMPS<mdate)
+ {
+ ui->label_modified->setVisible(true);
+ ui->label_content_modified->setVisible(true);
+ ui->label_content_modified->setText(QDateTime::fromMSecsSinceEpoch(mdate*1000).toString());
+ }
+ else
+ {
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ #ifdef Q_OS_WIN32
+ if(fileInfoW.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ #else
+ if(S_ISDIR(p_statbuf.st_mode))
+ #endif
+ {
+ this->setWindowTitle(tr("Error on folder"));
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_file_name->setText(tr("Folder name"));
+ }
+ #ifdef Q_OS_UNIX
+ ui->label_file_destination->setVisible(p_statbuf.st_mode==S_IFLNK);
+ ui->label_content_file_destination->setVisible(p_statbuf.st_mode==S_IFLNK);
+ if(S_ISLNK(p_statbuf.st_mode))
+ {
+ char buf[1024];
+ ssize_t len;
+ if ((len = readlink(TransferThread::internalStringTostring(fileInfo).c_str(), buf, sizeof(buf)-1)) != -1)
+ {
+ buf[len] = '\0';
+ ui->label_content_file_destination->setText(buf);
+ }
+ }
+ #else
+ ui->label_file_destination->setVisible(false);
+ ui->label_content_file_destination->setVisible(false);
+ #endif
+ }
+ else
+ {
+ ui->label_content_file_name->setText(QString::fromStdString(TransferThread::resolvedName(TransferThread::internalStringTostring(fileInfo))));
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(QString::fromStdString(TransferThread::internalStringTostring(fileInfo)));
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ ui->label_content_folder->setText(QString::fromStdString(FSabsolutePath(TransferThread::internalStringTostring(fileInfo))));
+
+ ui->label_file_destination->hide();
+ ui->label_content_file_destination->hide();
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_modified->hide();
+ ui->label_content_modified->hide();
+ }
+ if(errorType==ErrorType_Folder || errorType==ErrorType_FolderWithRety)
+ ui->PutToBottom->hide();
+ if(errorType==ErrorType_Folder)
+ ui->Retry->hide();
+
+ ui->Rights->hide();
+ #ifdef ULTRACOPIER_PLUGIN_RIGHTS
+ if(isInAdmin)
+ ui->Rights->hide();
+ #ifdef Q_OS_WIN32
+ if(errorType!=ErrorType_Rights)
+ ui->Rights->hide();
+ #else
+ ui->Rights->hide();
+ #endif
+ #else
+ ui->Rights->hide();
+ #endif
+}
+
+FileErrorDialog::~FileErrorDialog()
+{
+ delete ui;
+}
+
+void FileErrorDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void FileErrorDialog::on_PutToBottom_clicked()
+{
+ action=FileError_PutToEndOfTheList;
+ this->close();
+}
+
+void FileErrorDialog::on_Retry_clicked()
+{
+ action=FileError_Retry;
+ this->close();
+}
+
+void FileErrorDialog::on_Skip_clicked()
+{
+ action=FileError_Skip;
+ this->close();
+}
+
+void FileErrorDialog::on_Cancel_clicked()
+{
+ action=FileError_Cancel;
+ this->close();
+}
+
+bool FileErrorDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+FileErrorAction FileErrorDialog::getAction()
+{
+ return action;
+}
+
+void FileErrorDialog::on_checkBoxAlways_clicked()
+{
+ ui->Rights->setEnabled(!ui->checkBoxAlways->isChecked());
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RIGHTS
+void FileErrorDialog::on_Rights_clicked()
+{
+}
+#endif