You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

83 lines
1.7 KiB

#include "AutosaveJob.h"
#include "control/Control.h"
#include "control/xojfile/SaveHandler.h"
#include <i18n.h>
AutosaveJob::AutosaveJob(Control* control)
{
XOJ_INIT_TYPE(AutosaveJob);
this->control = control;
}
AutosaveJob::~AutosaveJob()
{
XOJ_RELEASE_TYPE(AutosaveJob);
}
void AutosaveJob::afterRun()
{
XOJ_CHECK_TYPE(AutosaveJob);
GtkWidget* dialog = gtk_message_dialog_new((GtkWindow*) control->getWindow(),
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s",
FC(_F("Autosave: {1}") % this->error));
gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(this->control->getWindow()->getWindow()));
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
void AutosaveJob::run(bool noThreads)
{
XOJ_CHECK_TYPE(AutosaveJob);
SaveHandler handler;
control->getUndoRedoHandler()->documentAutosaved();
Document* doc = control->getDocument();
doc->lock();
handler.prepareSave(doc);
path filename = doc->getFilename();
doc->unlock();
if (filename.empty())
{
filename = Util::getAutosaveFilename();
}
else
{
string file = filename.filename().string();
filename.remove_filename();
filename /= CONCAT(".", file);
filename.replace_extension(".autosave.xoj");
}
control->renameLastAutosaveFile();
GzOutputStream* out = new GzOutputStream(filename);
handler.saveTo(out, filename);
delete out;
out = NULL;
this->error = handler.getErrorMessage();
if (!this->error.empty())
{
callAfterRun();
}
else
{
//control->deleteLastAutosaveFile(filename);
control->setLastAutosaveFile(filename);
}
}
JobType AutosaveJob::getType()
{
XOJ_CHECK_TYPE(AutosaveJob);
return JOB_TYPE_AUTOSAVE;
}