#include "StepRunner.h" #include "NoteEditor.h" #include "TypeEditor.h" #include #include #include #include #include #include #include StepRunner::StepRunner(const QString &title, QObject *parent) : QObject(parent), m_state(Notes), m_title(title), m_noteEditor(0), m_firstDraft(0), m_secondDraft(0) { m_loading = true; QTimer *timer = new QTimer(this); timer->setInterval(5000); timer->setSingleShot(false); connect(timer, SIGNAL(timeout()), this, SLOT(saveStates())); timer->start(); m_noteEditor = new NoteEditor(m_title); QSettings s; const QString key = QString("%1/%2").arg(title); if (s.contains(key.arg(QLatin1String("state")))) { m_state = static_cast(s.value(key.arg(QLatin1String("state"))).toInt()); switch (m_state) { case Notes: notesStart(); m_noteEditor->restoreState(key.arg(QLatin1String("Notes/%1"))); break; case FirstDraft: notesStart(); m_noteEditor->restoreState(key.arg(QLatin1String("Notes/%1"))); m_noteEditor->finish(); m_firstDraft->restoreState(key.arg(QLatin1String("FirstDraft/%1"))); break; case SecondDraft: notesFinished(); m_firstDraft->restoreState(key.arg(QLatin1String("FirstDraft/%1")), true); m_firstDraft->finish(); m_secondDraft->restoreState(key.arg(QLatin1String("SecondDraft/%1"))); break; case Done: QApplication::exit(); } } else notesStart(); m_loading = false; } void StepRunner::notesStart() { m_noteEditor = new NoteEditor(m_title); connect(m_noteEditor, SIGNAL(finished()), this, SLOT(notesFinished())); m_noteEditor->show(); } void StepRunner::notesFinished() { saveStates(); m_state = FirstDraft; m_firstDraft = new TypeEditor(m_noteEditor->html(), true, m_title); connect(m_firstDraft, SIGNAL(finished()), this, SLOT(firstDraftFinished())); if (m_noteEditor) { m_noteEditor->deleteLater(); m_noteEditor = 0; } m_firstDraft->showFullScreen(); saveStates(); } void StepRunner::firstDraftFinished() { saveStates(); m_state = SecondDraft; m_secondDraft = new TypeEditor(m_firstDraft->result(), false, m_title); connect(m_secondDraft, SIGNAL(finished()), this, SLOT(secondDraftFinished())); if (m_firstDraft) { m_firstDraft->deleteLater(); m_firstDraft = 0; } m_secondDraft->showFullScreen(); saveStates(); } void StepRunner::secondDraftFinished() { saveStates(); m_state = Done; QString path = QDir::homePath() + "/Author - " + m_title + ".txt"; QFile f(path); f.open(QIODevice::WriteOnly); f.write(m_secondDraft->result().toLocal8Bit()); f.close(); #if defined(Q_OS_LINUX) const QString opener = QLatin1String("xdg-open"); #elif defined(Q_OS_MAC) const QString opener = QLatin1String("open"); #elif defined(Q_OS_WIN) const QString opener = QLatin1String("notepad"); #endif QProcess::startDetached(opener, QStringList() << path); if (m_secondDraft) { m_secondDraft->deleteLater(); m_secondDraft = 0; } saveStates(); QApplication::exit(); } StepRunner::~StepRunner() { saveStates(); if (m_noteEditor) m_noteEditor->deleteLater(); if (m_firstDraft) m_firstDraft->deleteLater(); if (m_secondDraft) m_secondDraft->deleteLater(); } void StepRunner::saveStates() { if (m_loading) return; QString key = QString("%1/%2").arg(m_title); QSettings s; s.setValue(key.arg(QLatin1String("state")), m_state); s.setValue(key.arg(QLatin1String("lastModified")), QDateTime::currentDateTimeUtc()); switch (m_state) { case Notes: if (m_noteEditor) m_noteEditor->saveState(key.arg(QLatin1String("Notes/%1"))); break; case FirstDraft: if (m_firstDraft) m_firstDraft->saveState(key.arg(QLatin1String("FirstDraft/%1"))); break; case SecondDraft: if (m_secondDraft) m_secondDraft->saveState(key.arg(QLatin1String("SecondDraft/%1"))); break; case Done: break; } }