diff --git a/src/core/qgsauxiliarystorage.cpp b/src/core/qgsauxiliarystorage.cpp index 61e2f62bbd6..712c29d8b74 100644 --- a/src/core/qgsauxiliarystorage.cpp +++ b/src/core/qgsauxiliarystorage.cpp @@ -626,15 +626,33 @@ bool QgsAuxiliaryStorage::duplicateTable( const QgsDataSourceUri &ogrUri, const return rc; } -bool QgsAuxiliaryStorage::saveAs( const QString &filename ) const +QString QgsAuxiliaryStorage::errorString() const { - if ( QFile::exists( filename ) ) - QFile::remove( filename ); - - return QFile::copy( currentFileName(), filename ); + return mErrorString; } -bool QgsAuxiliaryStorage::saveAs( const QgsProject &project ) const +bool QgsAuxiliaryStorage::saveAs( const QString &filename ) +{ + mErrorString.clear(); + + QFile dest( filename ); + if ( dest.exists() && !dest.remove() ) + { + mErrorString = dest.errorString(); + return false; + } + + QFile origin( currentFileName() ); + if ( !origin.copy( filename ) ) + { + mErrorString = origin.errorString(); + return false; + } + + return true; +} + +bool QgsAuxiliaryStorage::saveAs( const QgsProject &project ) { return saveAs( filenameForProject( project ) ); } diff --git a/src/core/qgsauxiliarystorage.h b/src/core/qgsauxiliarystorage.h index 181c842f371..04d56ee3f7c 100644 --- a/src/core/qgsauxiliarystorage.h +++ b/src/core/qgsauxiliarystorage.h @@ -319,12 +319,14 @@ class CORE_EXPORT QgsAuxiliaryStorage */ QString currentFileName() const; + QString errorString() const; + /** * Saves the current database to a new path. * * \returns true if everything is saved, false otherwise */ - bool saveAs( const QString &filename ) const; + bool saveAs( const QString &filename ); /** * Saves the current database to a new path for a specific project. @@ -333,7 +335,7 @@ class CORE_EXPORT QgsAuxiliaryStorage * * \returns true if everything is saved, false otherwise */ - bool saveAs( const QgsProject &project ) const; + bool saveAs( const QgsProject &project ); /** * Saves the current database. @@ -408,6 +410,7 @@ class CORE_EXPORT QgsAuxiliaryStorage QString mFileName; // original filename QString mTmpFileName; // temporary filename used in copy mode bool mCopy = false; + QString mErrorString; }; #endif diff --git a/src/core/qgsproject.cpp b/src/core/qgsproject.cpp index a166d41f86c..93108f82ad6 100644 --- a/src/core/qgsproject.cpp +++ b/src/core/qgsproject.cpp @@ -1649,7 +1649,10 @@ bool QgsProject::write() // errors raised during writing project file are more important if ( !asOk && writeOk ) - setError( tr( "Unable to save auxiliary storage" ) ); + { + const QString err = mAuxiliaryStorage->errorString(); + setError( tr( "Unable to save auxiliary storage ('%1')" ).arg( err ) ); + } return asOk && writeOk; } @@ -2614,7 +2617,8 @@ bool QgsProject::zip( const QString &filename ) if ( ! saveAuxiliaryStorage( asFileName ) ) { - setError( tr( "Unable to save auxiliary storage" ) ); + const QString err = mAuxiliaryStorage->errorString(); + setError( tr( "Unable to save auxiliary storage ('%1')" ).arg( err ) ); return false; }