SVG5/dialogexportsamba.cpp
2025-10-12 13:55:56 +09:00

502 lines
12 KiB
C++

#include "dialogexportsamba.h"
#include "ui_dialogexportsamba.h"
#include <QStorageInfo>
#include <QDebug>
#include <QThread>
#include <QProcess>
#include "mainwindow.h"
DialogExportSamba::DialogExportSamba(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogExportSamba)
{
//setAttribute(Qt::WA_TranslucentBackground);
//setWindowFlags(Qt::CustomizeWindowHint);
setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::Popup);
//setWindowFlags(Qt::FramelessWindowHint);
ui->setupUi(this);
ui->label_InfoUSB->setGeometry(90, 60, 430, 190);
ui->label_InfoFile->hide();
ui->label_InfoProgress->hide();
ui->progressBar_File->hide();
ui->progressBar_Progress->hide();
m_nSyncCheckCount = 0;
//done(QDialog::Accepted);
ui->progressBar_Progress->setRange(0, 100);
ui->progressBar_File->setRange(0, 100);
ui->progressBar_File->setValue(0);
ui->progressBar_Progress->setValue(0);
ui->progressBar_Progress->setTextVisible(true);
ui->progressBar_File->setTextVisible(true);
ui->progressBar_File->setFormat("%v / %m File Exports");
ui->pushButton_Retry->hide();
m_nTypeExport = 1;
SThreadImageSave* pThread = MainWindow::GetCommonData()->GetThreadCaptureImage();
connect(pThread, SIGNAL(SetProgressExportFile(int, int)), this, SLOT(SetProgressExportFile(int, int)));
connect(pThread, SIGNAL(SetProgressExportPercent(quint64, quint64)), this, SLOT(SetProgressExportPercent(quint64, quint64)));
connect(pThread, SIGNAL(SetProgressSync(bool)), this, SLOT(SetProgressSync(bool)));
connect(pThread, SIGNAL(SetExportInit()), this, SLOT(SetExportInit()));
connect(pThread, SIGNAL(SetExportComplete()), this, SLOT(SetExportComplete()));
connect(this, SIGNAL(StartExport(int)), pThread, SLOT(StartExport(int)));
connect(this, SIGNAL(StopExport()), pThread, SLOT(StopExport()));
connect(&m_TimerSync, SIGNAL(timeout()), this, SLOT(SyncUpdate()));
connect(&m_TimerDeferred, SIGNAL(timeout()), this, SLOT(OnDeferredInit()));
//connect(&m_Process1, SIGNAL(finished(int)), this, SLOT(Process1Finish(int)));
//connect(&m_Process1, SIGNAL(readyReadStandardOutput()), this, SLOT(Process1ReadyReadStandardOutput()));
//connect(&m_Process1, SIGNAL(readyReadStandardError()), this, SLOT(Process1ReadyReadStandardError()));
//connect(&m_Process2, SIGNAL(finished(int)), this, SLOT(Process2Finish(int)));
//connect(&m_Process2, SIGNAL(readyReadStandardOutput()), this, SLOT(Process2ReadyReadStandardOutput()));
//connect(&m_Process2, SIGNAL(readyReadStandardError()), this, SLOT(Process2ReadyReadStandardError()));
m_TimerDeferred.setSingleShot(true);
m_TimerDeferred.setInterval(100);
m_TimerDeferred.start(100);
Umount();
}
DialogExportSamba::~DialogExportSamba()
{
SThreadImageSave* pThread = MainWindow::GetCommonData()->GetThreadCaptureImage();
disconnect(pThread, SIGNAL(SetProgressExportFile(int, int)), this, SLOT(SetProgressExportFile(int, int)));
disconnect(pThread, SIGNAL(SetProgressExportPercent(quint64, quint64)), this, SLOT(SetProgressExportPercent(quint64, quint64)));
disconnect(pThread, SIGNAL(SetProgressSync(bool)), this, SLOT(SetProgressSync(bool)));
disconnect(this, SIGNAL(StartExport(int)), pThread, SLOT(StartExport(int)));
disconnect(this, SIGNAL(StopExport()), pThread, SLOT(StopExport()));
disconnect(&m_TimerSync, SIGNAL(timeout()), this, SLOT(SyncUpdate()));
delete ui;
}
void DialogExportSamba::on_pushButton_Cancel_clicked()
{
StopExport();
if(m_TimerSync.isActive()==true)
{
m_TimerSync.stop();
}
Umount();
done(QDialog::Rejected);
}
void DialogExportSamba::on_pushButton_Export_clicked()
{
m_nSyncCheckCount = 0;
//done(QDialog::Accepted);
ui->label_InfoUSB->hide();
ui->label_InfoFile->show();
ui->label_InfoProgress->show();
ui->progressBar_File->show();
ui->progressBar_Progress->show();
ui->progressBar_Progress->setRange(0, 100);
ui->progressBar_Progress->setTextVisible(true);
ui->progressBar_File->setTextVisible(true);
ui->progressBar_File->setFormat("%v / %m File Exports");
update();
StartExport(m_nTypeExport);
return;
/*
int i=0;
for(i=1 ; i<101 ; i++)
{
ui->progressBar_Progress->setValue(i);
QThread::usleep(100*1000);
update();
}
*/
}
void DialogExportSamba::SetProgressExportFile(int nProgress, int nTotal)
{
ui->progressBar_File->setRange(1, nTotal);
ui->progressBar_File->setValue(nProgress);
QString strInfo;
strInfo = QString("%1 / %2 File Exports").arg(nProgress).arg(nTotal);
ui->progressBar_File->setFormat(strInfo);
}
void DialogExportSamba::SetProgressExportPercent(quint64 nProgress, quint64 nTotal)
{
int nPercentage = (float)(100.0f*(float)nProgress/(float)nTotal);
if(nPercentage>100)
{
nPercentage = 100;
}
ui->progressBar_Progress->setRange(1, 100);
ui->progressBar_Progress->setValue(nPercentage);
//ui->progressBar_Progress->setRange(1, nTotal);
//ui->progressBar_Progress->setValue(nProgress);
ui->progressBar_Progress->resetFormat();
}
void DialogExportSamba::SetProgressSync(bool bComplete)
{
if(bComplete==false)
{
m_TimerSync.setInterval(300);
m_TimerSync.start();
//ui->label_InfoProgress->hide();
//ui->progressBar_Progress->hide();
//ui->label_InfoFile->setText("Export Sync");
ui->label_InfoProgress->setText("Export Sync");
ui->pushButton_Export->setDisabled(true);
ui->pushButton_Export->hide();
//ui->pushButton_Cancel->setDisabled(true);
ui->pushButton_Cancel->setEnabled(true);
ui->pushButton_Cancel->setGeometry(240, 310, 130, 40);
}
else
{
if(m_TimerSync.isActive()==true)
{
m_TimerSync.stop();
//ui->progressBar_File->setFormat("Export Complete");
//ui->progressBar_Progress->setFormat("Export Complete");
}
}
}
void DialogExportSamba::SyncUpdate()
{
m_nSyncCheckCount++;
m_nSyncCheckCount = m_nSyncCheckCount%10;
QString strInfo;
strInfo = " Export File Sync ";
int i=0;
for(i=0 ; i<m_nSyncCheckCount ; i++)
{
strInfo += ". ";
}
//ui->progressBar_File->setFormat(strInfo);
ui->progressBar_Progress->setFormat(strInfo);
}
void DialogExportSamba::Mount()
{
SetExportEnable(true);
QString strInfo = "Ready to Export 'Shared Network'";
ui->pushButton_Export->click();
SetInfoString(strInfo);
return;
SambaClient* pSambaClient = MainWindow::GetCommonData()->GetSambaClient();
//QString strInfo;
bool bMount = pSambaClient->IsMount();
/*
if(bMount==false)
{
pSambaClient->Umount();
pSambaClient->Mount();
}
bMount = pSambaClient->IsMount();
*/
if(bMount==false)
{
SetExportEnable(false);
//strInfo = m_strInfo;
strInfo = "Check Your Network Server!!";
}
else
{
SetExportEnable(true);
strInfo = "Ready to Export 'Shared Network'";
ui->pushButton_Export->click();
}
SetInfoString(strInfo);
}
void DialogExportSamba::Umount()
{
return;
SambaClient* pSambaClient = MainWindow::GetCommonData()->GetSambaClient();
//pSambaClient->Umount();
/*
if(m_bError==true)
{
return;
}
m_strInfo.clear();
QProcess process1;
process1.setStandardOutputProcess(&m_Process2);
process1.start("echo 1");
m_Process2.start("sudo -S umount /home/birdhead/samba");
m_Process2.setProcessChannelMode(QProcess::ForwardedChannels);
// Wait for it to start
if(!process1.waitForStarted())
return;
bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = m_Process2.waitForFinished()))
{
buffer.append(m_Process2.readAll());
}
m_Process2.close();
if(m_Process2.isOpen()==true)
{
m_Process2.terminate();
}
process1.close();
if(process1.isOpen()==true)
{
process1.terminate();
}
buffer.clear();
if(m_bError==true)
{
SetInfoString(m_strInfo);
}
*/
}
void DialogExportSamba::SetExportComplete()
{
ui->progressBar_File->setFormat("Export Complete");
//ui->progressBar_Progress->setFormat("Export Complete");
ui->label_InfoProgress->hide();
ui->progressBar_Progress->hide();
Umount();
ui->pushButton_Cancel->setEnabled(true);
ui->pushButton_Cancel->click();
}
void DialogExportSamba::SetExportInit()
{
ui->progressBar_File->setFormat("");
//ui->progressBar_Progress->setFormat("Export Complete");
ui->label_InfoProgress->show();
ui->progressBar_Progress->show();
ui->pushButton_Cancel->setDisabled(false);
}
void DialogExportSamba::OnDeferredInit()
{
Mount();
}
void DialogExportSamba::SetInfoString(QString strInfo)
{
ui->label_InfoUSB->setText(strInfo);
}
void DialogExportSamba::SetExportEnable(bool bEnable)
{
if(bEnable==true)
{
ui->pushButton_Export->setEnabled(true);
ui->pushButton_Cancel->setEnabled(true);
ui->pushButton_Retry->hide();
ui->pushButton_Export->show();
}
else
{
ui->pushButton_Retry->show();
ui->pushButton_Export->hide();
//ui->pushButton_Export->setDisabled(true);
//ui->pushButton_Export->hide();
//ui->pushButton_Cancel->setEnabled(true);
//ui->pushButton_Cancel->setGeometry(240, 310, 130, 40);
}
}
/*
void DialogExportSamba::Process1Finish(int nRet)
{
QByteArray buffer;
buffer.append(m_Process1.readAll());
}
void DialogExportSamba::Process1ReadyReadStandardOutput()
{
QByteArray buffer;
buffer.append(m_Process1.readAllStandardOutput());
m_strInfo = buffer.toStdString().c_str();
}
void DialogExportSamba::Process1ReadyReadStandardError()
{
QByteArray buffer;
buffer.append(m_Process1.readAllStandardError());
m_strInfo = buffer.toStdString().c_str();
m_bError = 1;
}
void DialogExportSamba::Process2Finish(int nRet)
{
QByteArray buffer;
buffer.append(m_Process2.readAll());
}
void DialogExportSamba::Process2ReadyReadStandardOutput()
{
QByteArray buffer;
buffer.append(m_Process2.readAllStandardOutput());
m_strInfo = buffer.toStdString().c_str();
}
void DialogExportSamba::Process2ReadyReadStandardError()
{
QByteArray buffer;
buffer.append(m_Process2.readAllStandardError());
m_strInfo = buffer.toStdString().c_str();
if(m_strInfo.contains("not mounted")==false)
{
m_bError = 1;
}
else
{
}
}
*/
void DialogExportSamba::on_pushButton_Retry_clicked()
{
SambaClient* pSambaClient = MainWindow::GetCommonData()->GetSambaClient();
if(pSambaClient->IsMount()==false)
{
Umount();
Mount();
}
if(pSambaClient->IsMount()==true)
{
m_nSyncCheckCount = 0;
//done(QDialog::Accepted);
ui->label_InfoUSB->hide();
ui->label_InfoFile->show();
ui->label_InfoProgress->show();
ui->progressBar_File->show();
ui->progressBar_Progress->show();
ui->progressBar_Progress->setRange(0, 100);
ui->progressBar_Progress->setTextVisible(true);
ui->progressBar_File->setTextVisible(true);
ui->progressBar_File->setFormat("%v / %m File Exports");
update();
StartExport(m_nTypeExport);
}
}
void DialogExportSamba::reject()
{
return;
}