00001 00008 #include "core/autorecovery.h" 00009 00010 #include <QSet> 00011 #include <QTimer> 00012 #include <QFile> 00013 #include <QMessageBox> 00014 #include "export/canorusmlexport.h" 00015 #include "import/canorusmlimport.h" 00016 #include "canorus.h" 00017 #include "core/settings.h" 00018 00038 CAAutoRecovery::CAAutoRecovery() { 00039 _autoRecoveryTimer = new QTimer(this); 00040 _autoRecoveryTimer->setSingleShot( false ); 00041 connect( _autoRecoveryTimer, SIGNAL(timeout()), this, SLOT(saveRecovery()) ); 00042 updateTimer(); // reads interval from settings and starts the timer 00043 } 00044 00045 CAAutoRecovery::~CAAutoRecovery() { 00046 delete _autoRecoveryTimer; 00047 } 00048 00052 void CAAutoRecovery::updateTimer() { 00053 _autoRecoveryTimer->stop(); 00054 _autoRecoveryTimer->setInterval( CACanorus::settings()->autoRecoveryInterval()*60000 ); 00055 if ( CACanorus::settings()->autoRecoveryInterval() ) 00056 _autoRecoveryTimer->start(); 00057 } 00058 00062 void CAAutoRecovery::saveRecovery() { 00063 QSet<CADocument*> documents; 00064 for (int i=0; i<CACanorus::mainWinCount(); i++) 00065 documents << CACanorus::mainWinAt(i)->document(); 00066 00067 int c=0; 00068 for (QSet<CADocument*>::const_iterator i=documents.constBegin(); i!=documents.constEnd(); i++, c++) { 00069 CACanorusMLExport save; 00070 save.setStreamToFile( CACanorus::settingsPath()+"/recovery"+QString::number(c) ); 00071 save.exportDocument( *i ); 00072 save.wait(); 00073 } 00074 00075 while ( QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(c)) ) { 00076 QFile::remove(CACanorus::settingsPath()+"/recovery"+QString::number(c)); 00077 c++; 00078 } 00079 } 00080 00085 void CAAutoRecovery::cleanupRecovery() { 00086 for ( int i=0; QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(i)); i++ ) { 00087 QFile::remove(CACanorus::settingsPath()+"/recovery"+QString::number(i)); 00088 } 00089 } 00090 00095 void CAAutoRecovery::openRecovery() { 00096 QString documents; 00097 for ( int i=0; QFile::exists(CACanorus::settingsPath()+"/recovery"+QString::number(i)); i++ ) { 00098 CACanorusMLImport open; 00099 open.setStreamFromFile( CACanorus::settingsPath()+"/recovery"+QString::number(i) ); 00100 open.importDocument(); 00101 open.wait(); 00102 if ( open.importedDocument() ) { 00103 CAMainWin *mainWin = new CAMainWin(); 00104 documents.append( tr("- Document %1 last modified on %2.").arg(open.importedDocument()->title()).arg(open.importedDocument()->dateLastModified().toString()) + "\n" ); 00105 mainWin->openDocument( open.importedDocument() ); 00106 mainWin->show(); 00107 } 00108 } 00109 00110 cleanupRecovery(); 00111 00112 if (!documents.isEmpty()) { 00113 QMessageBox::information( 00114 CACanorus::mainWinAt( CACanorus::mainWinCount()-1 ), 00115 tr("Document recovery"), 00116 tr("Previous session of Canorus was unexpectedly closed.\n\n\ 00117 The following documents were successfully recovered:\n%1").arg(documents) 00118 ); 00119 } 00120 }
1.5.3