Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslocalizeddatapathregistry.cpp 3 : : -------------------------------------- 4 : : Date : May 2020 5 : : Copyright : (C) 2020 by Denis Rouzaud 6 : : Email : denis.rouzaud 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include <QDir> 17 : : 18 : : #include "qgslocalizeddatapathregistry.h" 19 : : #include "qgssettings.h" 20 : : #include "qgis.h" 21 : : #include "qgsreadwritelocker.h" 22 : : 23 : : 24 : 5 : QgsLocalizedDataPathRegistry::QgsLocalizedDataPathRegistry() 25 : : { 26 : 5 : readFromSettings(); 27 : 5 : } 28 : : 29 : 0 : QString QgsLocalizedDataPathRegistry::globalPath( const QString &relativePath ) const 30 : : { 31 : 0 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read ); 32 : : 33 : 0 : for ( const QDir &basePath : std::as_const( mPaths ) ) 34 : 0 : if ( basePath.exists( relativePath ) ) 35 : 0 : return basePath.absoluteFilePath( relativePath ); 36 : : 37 : 0 : return QString(); 38 : 0 : } 39 : : 40 : 0 : QString QgsLocalizedDataPathRegistry::localizedPath( const QString &fullPath ) const 41 : : { 42 : 0 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read ); 43 : : 44 : 0 : for ( const QDir &basePath : std::as_const( mPaths ) ) 45 : 0 : if ( fullPath.startsWith( basePath.absolutePath() ) ) 46 : 0 : return basePath.relativeFilePath( fullPath ); 47 : : 48 : 0 : return QString(); 49 : : 50 : 0 : } 51 : : 52 : 5 : QStringList QgsLocalizedDataPathRegistry::paths() const 53 : : { 54 : 5 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read ); 55 : : 56 : 5 : QStringList paths; 57 : 5 : for ( const QDir &dir : mPaths ) 58 : 0 : paths << dir.absolutePath(); 59 : 5 : return paths; 60 : 5 : } 61 : : 62 : 5 : void QgsLocalizedDataPathRegistry::setPaths( const QStringList &paths ) 63 : : { 64 : 5 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write ); 65 : : 66 : 5 : mPaths.clear(); 67 : 5 : for ( const QString &path : paths ) 68 : : { 69 : 0 : QDir dir( path ); 70 : 0 : if ( !mPaths.contains( dir ) ) 71 : 0 : mPaths << dir; 72 : 0 : } 73 : : 74 : 5 : locker.unlock(); 75 : 5 : writeToSettings(); 76 : 5 : } 77 : : 78 : 0 : void QgsLocalizedDataPathRegistry::registerPath( const QString &path, int position ) 79 : : { 80 : 0 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read ); 81 : : 82 : 0 : QDir dir( path ); 83 : 0 : if ( mPaths.contains( dir ) ) 84 : 0 : return; 85 : : 86 : 0 : locker.changeMode( QgsReadWriteLocker::Write ); 87 : : 88 : 0 : if ( position >= 0 && position < mPaths.count() ) 89 : 0 : mPaths.insert( position, dir ); 90 : : else 91 : 0 : mPaths.append( dir ); 92 : : 93 : 0 : locker.unlock(); 94 : 0 : writeToSettings(); 95 : 0 : } 96 : : 97 : 0 : void QgsLocalizedDataPathRegistry::unregisterPath( const QString &path ) 98 : : { 99 : 0 : QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write ); 100 : : 101 : 0 : mPaths.removeAll( QDir( path ) ); 102 : 0 : locker.unlock(); 103 : 0 : writeToSettings(); 104 : 0 : } 105 : : 106 : 5 : void QgsLocalizedDataPathRegistry::readFromSettings() 107 : : { 108 : 10 : setPaths( QgsSettings().value( QStringLiteral( "/qgis/localized_data_paths" ) ).toStringList() ); 109 : 5 : } 110 : : 111 : 5 : void QgsLocalizedDataPathRegistry::writeToSettings() 112 : : { 113 : 10 : QgsSettings().setValue( QStringLiteral( "/qgis/localized_data_paths" ), paths() ); 114 : 5 : }