40 , Dumper_ {
new QProcess {
this } }
41 , Restorer_ {
new QProcess {
this } }
43 Iface_.reportStarted ();
45 Dumper_->setStandardOutputProcess (Restorer_);
47 new Util::SlotClosure<Util::NoDeletePolicy>
49 [
this] { HandleProcessError (Dumper_); },
51 SIGNAL (error (QProcess::ProcessError)),
54 new Util::SlotClosure<Util::NoDeletePolicy>
56 [
this] { HandleProcessError (Restorer_); },
58 SIGNAL (error (QProcess::ProcessError)),
62 new Util::SlotClosure<Util::NoDeletePolicy>
64 [
this] { HandleProcessFinished (Dumper_); },
66 SIGNAL (finished (
int, QProcess::ExitStatus)),
69 new Util::SlotClosure<Util::NoDeletePolicy>
71 [
this] { HandleProcessFinished (Restorer_); },
73 SIGNAL (finished (
int, QProcess::ExitStatus)),
77 Dumper_->start (
"sqlite3", { from,
".dump" });
78 Restorer_->start (
"sqlite3", { to });
83 return Iface_.future ();
86 void Dumper::HandleProcessFinished (QProcess *process)
88 const auto& stderr = QString::fromUtf8 (process->readAllStandardError ());
89 const auto exitCode = process->exitCode ();
91 qDebug () << Q_FUNC_INFO
92 << process->exitStatus ()
96 switch (process->exitStatus ())
98 case QProcess::CrashExit:
103 ReportResult (tr (
"Dumping process crashed: %1.")
104 .arg (stderr.isEmpty () ?
105 process->errorString () :
108 case QProcess::NormalExit:
110 ReportResult (tr (
"Dumping process finished with error: %1 (%2).")
113 else if (++FinishedCount_ == 2)
115 ReportResult (Finished {});
122 void Dumper::HandleProcessError (
const QProcess *process)
124 qWarning () << Q_FUNC_INFO
126 << process->errorString ();
133 if (process->error () == QProcess::FailedToStart)
134 ReportResult (tr (
"Unable to start dumping process: %1. Do you have sqlite3 installed?")
135 .arg (process->errorString ()));
137 ReportResult (tr (
"Unable to dump the database: %1.")
138 .arg (process->errorString ()));
141 void Dumper::ReportResult (
const Result_t& result)
143 Iface_.reportFinished (&result);
Dumper(const QString &from, const QString &to, QObject *=nullptr)
QFuture< Result_t > GetFuture()