when attempting to open a DVI file, check whether the file is correct

if not (for example it is still being (re)generated), then wait 800ms and try again, doing at most 10 waits
this should protect against opening incomplete documents
CCBUG: 189623

svn path=/trunk/KDE/kdegraphics/okular/; revision=972763
remotes/origin/KDE/4.3
Pino Toscano 17 years ago
parent 372968eb6c
commit 12e601b733
  1. 27
      generators/dvi/generator_dvi.cpp

@ -34,6 +34,13 @@
#include <klocale.h>
#include <ktemporaryfile.h>
#ifdef Q_OS_UNIX
#include <ctime>
#endif
#ifdef Q_OS_WIN
#include <windows.h> // for Sleep
#endif
static const int DviDebug = 4713;
static KAboutData createAboutData()
@ -70,6 +77,26 @@ bool DviGenerator::loadDocument( const QString & fileName, QVector< Okular::Page
(void)userMutex();
m_dviRenderer = new dviRenderer();
static const ushort s_waitTime = 800; // milliseconds
static const int s_maxIterations = 10;
int iter = 0;
for ( ; !m_dviRenderer->isValidFile( fileName ) && iter < s_maxIterations; ++iter )
{
kDebug(DviDebug).nospace() << "file not valid after iteration #" << iter << "/" << s_maxIterations << ", waiting for " << s_waitTime;
#ifdef Q_OS_WIN
Sleep( uint( s_waitTime ) );
#else
struct timespec ts = { 0, s_waitTime * 1000 * 1000 };
nanosleep( &ts, NULL );
#endif
}
if ( iter >= s_maxIterations && !m_dviRenderer->isValidFile( fileName ) )
{
kDebug(DviDebug) << "file still not valid after" << s_maxIterations;
delete m_dviRenderer;
m_dviRenderer = 0;
return false;
}
if ( ! m_dviRenderer->setFile( fileName, base ) )
{
delete m_dviRenderer;

Loading…
Cancel
Save