Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectortileconnection.cpp 3 : : --------------------- 4 : : begin : March 2020 5 : : copyright : (C) 2020 by Martin Dobias 6 : : email : wonder dot sk at gmail dot com 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 "qgsvectortileconnection.h" 17 : : 18 : : #include "qgslogger.h" 19 : : #include "qgsdatasourceuri.h" 20 : : #include "qgssettings.h" 21 : : 22 : : ///@cond PRIVATE 23 : : 24 : 0 : QString QgsVectorTileProviderConnection::encodedUri( const QgsVectorTileProviderConnection::Data &conn ) 25 : : { 26 : 0 : QgsDataSourceUri uri; 27 : 0 : uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) ); 28 : 0 : uri.setParam( QStringLiteral( "url" ), conn.url ); 29 : 0 : if ( conn.zMin != -1 ) 30 : 0 : uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) ); 31 : 0 : if ( conn.zMax != -1 ) 32 : 0 : uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) ); 33 : 0 : if ( !conn.authCfg.isEmpty() ) 34 : 0 : uri.setAuthConfigId( conn.authCfg ); 35 : 0 : if ( !conn.username.isEmpty() ) 36 : 0 : uri.setUsername( conn.username ); 37 : 0 : if ( !conn.password.isEmpty() ) 38 : 0 : uri.setPassword( conn.password ); 39 : 0 : if ( !conn.referer.isEmpty() ) 40 : 0 : uri.setParam( QStringLiteral( "referer" ), conn.referer ); 41 : 0 : if ( !conn.styleUrl.isEmpty() ) 42 : 0 : uri.setParam( QStringLiteral( "styleUrl" ), conn.styleUrl ); 43 : : 44 : 0 : switch ( conn.serviceType ) 45 : : { 46 : : case Generic: 47 : 0 : break; 48 : : 49 : : case ArcgisVectorTileService: 50 : 0 : uri.setParam( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) ); 51 : 0 : break; 52 : : } 53 : : 54 : 0 : return uri.encodedUri(); 55 : 0 : } 56 : : 57 : 0 : QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::decodedUri( const QString &uri ) 58 : : { 59 : 0 : QgsDataSourceUri dsUri; 60 : 0 : dsUri.setEncodedUri( uri ); 61 : : 62 : 0 : QgsVectorTileProviderConnection::Data conn; 63 : 0 : conn.url = dsUri.param( QStringLiteral( "url" ) ); 64 : 0 : conn.zMin = dsUri.hasParam( QStringLiteral( "zmin" ) ) ? dsUri.param( QStringLiteral( "zmin" ) ).toInt() : -1; 65 : 0 : conn.zMax = dsUri.hasParam( QStringLiteral( "zmax" ) ) ? dsUri.param( QStringLiteral( "zmax" ) ).toInt() : -1; 66 : 0 : conn.authCfg = dsUri.authConfigId(); 67 : 0 : conn.username = dsUri.username(); 68 : 0 : conn.password = dsUri.password(); 69 : 0 : conn.referer = dsUri.param( QStringLiteral( "referer" ) ); 70 : 0 : conn.styleUrl = dsUri.param( QStringLiteral( "styleUrl" ) ); 71 : : 72 : 0 : if ( dsUri.hasParam( QStringLiteral( "serviceType" ) ) ) 73 : : { 74 : 0 : if ( dsUri.param( QStringLiteral( "serviceType" ) ) == QLatin1String( "arcgis" ) ) 75 : 0 : conn.serviceType = ArcgisVectorTileService; 76 : 0 : } 77 : 0 : return conn; 78 : 0 : } 79 : : 80 : 0 : QString QgsVectorTileProviderConnection::encodedLayerUri( const QgsVectorTileProviderConnection::Data &conn ) 81 : : { 82 : : // compared to encodedUri() this one also adds type=xyz to the URI 83 : 0 : QgsDataSourceUri uri; 84 : 0 : uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) ); 85 : 0 : uri.setParam( QStringLiteral( "url" ), conn.url ); 86 : 0 : if ( conn.zMin != -1 ) 87 : 0 : uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) ); 88 : 0 : if ( conn.zMax != -1 ) 89 : 0 : uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) ); 90 : 0 : if ( !conn.authCfg.isEmpty() ) 91 : 0 : uri.setAuthConfigId( conn.authCfg ); 92 : 0 : if ( !conn.username.isEmpty() ) 93 : 0 : uri.setUsername( conn.username ); 94 : 0 : if ( !conn.password.isEmpty() ) 95 : 0 : uri.setPassword( conn.password ); 96 : 0 : if ( !conn.referer.isEmpty() ) 97 : 0 : uri.setParam( QStringLiteral( "referer" ), conn.referer ); 98 : 0 : if ( !conn.styleUrl.isEmpty() ) 99 : 0 : uri.setParam( QStringLiteral( "styleUrl" ), conn.styleUrl ); 100 : : 101 : 0 : switch ( conn.serviceType ) 102 : : { 103 : : case Generic: 104 : 0 : break; 105 : : 106 : : case ArcgisVectorTileService: 107 : 0 : uri.setParam( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) ); 108 : 0 : break; 109 : : } 110 : : 111 : 0 : return uri.encodedUri(); 112 : 0 : } 113 : : 114 : 0 : QStringList QgsVectorTileProviderConnection::connectionList() 115 : : { 116 : 0 : QgsSettings settings; 117 : 0 : settings.beginGroup( QStringLiteral( "qgis/connections-vector-tile" ) ); 118 : 0 : QStringList connList = settings.childGroups(); 119 : : 120 : 0 : return connList; 121 : 0 : } 122 : : 123 : 0 : QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::connection( const QString &name ) 124 : : { 125 : 0 : QgsSettings settings; 126 : 0 : settings.beginGroup( "qgis/connections-vector-tile/" + name ); 127 : : 128 : 0 : if ( settings.value( "url" ).toString().isEmpty() ) 129 : 0 : return QgsVectorTileProviderConnection::Data(); 130 : : 131 : 0 : QgsVectorTileProviderConnection::Data conn; 132 : 0 : conn.url = settings.value( QStringLiteral( "url" ) ).toString(); 133 : 0 : conn.zMin = settings.value( QStringLiteral( "zmin" ), -1 ).toInt(); 134 : 0 : conn.zMax = settings.value( QStringLiteral( "zmax" ), -1 ).toInt(); 135 : 0 : conn.authCfg = settings.value( QStringLiteral( "authcfg" ) ).toString(); 136 : 0 : conn.username = settings.value( QStringLiteral( "username" ) ).toString(); 137 : 0 : conn.password = settings.value( QStringLiteral( "password" ) ).toString(); 138 : 0 : conn.referer = settings.value( QStringLiteral( "referer" ) ).toString(); 139 : 0 : conn.styleUrl = settings.value( QStringLiteral( "styleUrl" ) ).toString(); 140 : : 141 : 0 : if ( settings.contains( QStringLiteral( "serviceType" ) ) ) 142 : : { 143 : 0 : if ( settings.value( QStringLiteral( "serviceType" ) ) == QLatin1String( "arcgis" ) ) 144 : 0 : conn.serviceType = ArcgisVectorTileService; 145 : 0 : } 146 : : 147 : 0 : return conn; 148 : 0 : } 149 : : 150 : 0 : void QgsVectorTileProviderConnection::deleteConnection( const QString &name ) 151 : : { 152 : 0 : QgsSettings settings; 153 : 0 : settings.remove( "qgis/connections-vector-tile/" + name ); 154 : 0 : } 155 : : 156 : 0 : void QgsVectorTileProviderConnection::addConnection( const QString &name, QgsVectorTileProviderConnection::Data conn ) 157 : : { 158 : 0 : QgsSettings settings; 159 : : 160 : 0 : settings.beginGroup( "qgis/connections-vector-tile/" + name ); 161 : 0 : settings.setValue( QStringLiteral( "url" ), conn.url ); 162 : 0 : settings.setValue( QStringLiteral( "zmin" ), conn.zMin ); 163 : 0 : settings.setValue( QStringLiteral( "zmax" ), conn.zMax ); 164 : 0 : settings.setValue( QStringLiteral( "authcfg" ), conn.authCfg ); 165 : 0 : settings.setValue( QStringLiteral( "username" ), conn.username ); 166 : 0 : settings.setValue( QStringLiteral( "password" ), conn.password ); 167 : 0 : settings.setValue( QStringLiteral( "referer" ), conn.referer ); 168 : 0 : settings.setValue( QStringLiteral( "styleUrl" ), conn.styleUrl ); 169 : : 170 : 0 : switch ( conn.serviceType ) 171 : : { 172 : : case Generic: 173 : 0 : break; 174 : : 175 : : case ArcgisVectorTileService: 176 : 0 : settings.setValue( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) ); 177 : 0 : break; 178 : : } 179 : 0 : } 180 : : 181 : 0 : QString QgsVectorTileProviderConnection::selectedConnection() 182 : : { 183 : 0 : QgsSettings settings; 184 : 0 : return settings.value( QStringLiteral( "qgis/connections-vector-tile/selected" ) ).toString(); 185 : 0 : } 186 : : 187 : 0 : void QgsVectorTileProviderConnection::setSelectedConnection( const QString &name ) 188 : : { 189 : 0 : QgsSettings settings; 190 : 0 : return settings.setValue( QStringLiteral( "qgis/connections-vector-tile/selected" ), name ); 191 : 0 : } 192 : : 193 : : // 194 : : 195 : 0 : QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &name ) 196 : 0 : : QgsAbstractProviderConnection( name ) 197 : 0 : { 198 : 0 : setUri( encodedUri( connection( name ) ) ); 199 : 0 : } 200 : : 201 : 0 : QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &uri, const QVariantMap &configuration ) 202 : 0 : : QgsAbstractProviderConnection( uri, configuration ) 203 : 0 : { 204 : 0 : } 205 : : 206 : 0 : void QgsVectorTileProviderConnection::store( const QString &name ) const 207 : : { 208 : 0 : addConnection( name, decodedUri( uri() ) ); 209 : 0 : } 210 : : 211 : 0 : void QgsVectorTileProviderConnection::remove( const QString &name ) const 212 : : { 213 : 0 : deleteConnection( name ); 214 : 0 : } 215 : : 216 : : ///@endcond