17 #include <QDirIterator>
26 using namespace Marble;
30 m_dataDirectory( dataDirectory )
32 if ( m_dataDirectory.isEmpty() )
35 if ( !QDir( m_dataDirectory ).exists() )
36 QDir::root().mkpath( m_dataDirectory );
45 const QString fullName( m_dataDirectory +
'/' + fileName );
46 return QFile::exists( fullName );
51 QFileInfo
const dirInfo( fileName );
52 QString
const fullName = dirInfo.isAbsolute() ? fileName : m_dataDirectory +
'/' + fileName;
55 QFileInfo info( fullName );
57 const QDir localFileDir = info.dir();
58 const QString localFileDirPath = localFileDir.absolutePath();
60 if ( !QDir( localFileDirPath ).exists() )
61 QDir::root().mkpath( localFileDirPath );
64 QFile file( fullName );
65 if ( !file.open( QIODevice::WriteOnly ) ) {
66 m_errorMsg = QString(
"%1: %2" ).arg( fullName ).arg( file.errorString() );
67 qCritical() <<
"file.open" << m_errorMsg;
71 quint64 oldSize = file.size();
73 if ( !file.write( data ) ) {
74 m_errorMsg = QString(
"%1: %2" ).arg( fullName ).arg( file.errorString() );
75 qCritical() <<
"file.write" << m_errorMsg;
88 if ( m_dataDirectory.isEmpty() || !m_dataDirectory.endsWith(QLatin1String(
"data" )) )
90 mDebug() <<
"Error: Refusing to erase files under unknown conditions for safety reasons!";
94 QString cachedMapsDirectory = m_dataDirectory +
"/maps";
96 QDirIterator it( cachedMapsDirectory, QDir::NoDotAndDotDot | QDir::Dirs );
97 mDebug() << cachedMapsDirectory;
98 while (it.hasNext()) {
100 QString planetDirectory = it.filePath();
101 QDirIterator itPlanet( planetDirectory, QDir::NoDotAndDotDot | QDir::Dirs );
102 while (itPlanet.hasNext()) {
104 QString themeDirectory = itPlanet.filePath();
105 QDirIterator itTheme( themeDirectory, QDir::NoDotAndDotDot | QDir::Dirs );
106 while (itTheme.hasNext()) {
108 QString tileDirectory = itTheme.filePath();
114 QDirIterator itTile( tileDirectory, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories );
115 while (itTile.hasNext()) {
117 QString filePath = itTile.filePath();
118 QString lowerCase = filePath.toLower();
123 if ( lowerCase.endsWith( QLatin1String(
".jpg" ) )
124 || lowerCase.endsWith( QLatin1String(
".png" ) )
125 || lowerCase.endsWith( QLatin1String(
".gif" ) )
126 || lowerCase.endsWith( QLatin1String(
".svg" ) )
130 QFile file( filePath );
145 #include "FileStoragePolicy.moc"
bool fileExists(const QString &fileName) const
Returns whether the fileName exists already.
static QString localPath()
QString lastErrorMessage() const
Returns the last error message.
const int maxBaseTileLevel
void clearCache()
Clears the cache.
FileStoragePolicy(const QString &dataDirectory=QString(), QObject *parent=0)
Creates a new file storage policy.
QDebug mDebug()
a function to replace qDebug() in Marble library code
bool updateFile(const QString &fileName, const QByteArray &data)
Updates the fileName with the given data.
~FileStoragePolicy()
Destroys the cache storage policy.