Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgsarcgisportalutils.h
3 : : --------------------
4 : : begin : December 2020
5 : : copyright : (C) 2020 by Nyall Dawson
6 : : email : nyall dot dawson 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 : : #include "qgsarcgisportalutils.h"
16 : : #include "qgsarcgisrestquery.h"
17 : : #include "qgsfeedback.h"
18 : :
19 : : #include <QUrl>
20 : : #include <QUrlQuery>
21 : :
22 : 0 : QVariantMap QgsArcGisPortalUtils::retrieveUserInfo( const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QMap<QString, QString> &requestHeaders, QgsFeedback *feedback )
23 : : {
24 : 0 : QString endPoint = communityUrl;
25 : 0 : if ( endPoint.endsWith( '/' ) )
26 : 0 : endPoint.chop( 1 );
27 : :
28 : 0 : if ( user.isEmpty() )
29 : 0 : endPoint += QLatin1String( "/self" );
30 : : else
31 : 0 : endPoint += QStringLiteral( "/users/" ) + user;
32 : :
33 : 0 : QUrl queryUrl( endPoint );
34 : 0 : QUrlQuery query( queryUrl );
35 : 0 : query.addQueryItem( QStringLiteral( "f" ), QStringLiteral( "json" ) );
36 : 0 : queryUrl.setQuery( query );
37 : :
38 : 0 : return QgsArcGisRestQueryUtils::queryServiceJSON( queryUrl, authcfg, errorTitle, errorText, requestHeaders, feedback );
39 : 0 : }
40 : :
41 : 0 : QVariantList QgsArcGisPortalUtils::retrieveUserGroups( const QString &communityUrl, const QString &user, const QString &authcfg, QString &errorTitle, QString &errorText, const QMap<QString, QString> &requestHeaders, QgsFeedback *feedback )
42 : : {
43 : 0 : const QVariantMap info = retrieveUserInfo( communityUrl, user, authcfg, errorTitle, errorText, requestHeaders, feedback );
44 : 0 : return info.value( QStringLiteral( "groups" ) ).toList();
45 : 0 : }
46 : :
47 : 0 : QVariantList QgsArcGisPortalUtils::retrieveGroupContent( const QString &contentUrl, const QString &groupId, const QString &authcfg, QString &errorTitle, QString &errorText, const QMap<QString, QString> &requestHeaders, QgsFeedback *feedback, int pageSize )
48 : : {
49 : 0 : QString endPoint = contentUrl;
50 : 0 : if ( endPoint.endsWith( '/' ) )
51 : 0 : endPoint.chop( 1 );
52 : :
53 : 0 : endPoint += QStringLiteral( "/groups/" ) + groupId;
54 : :
55 : 0 : int start = 1;
56 : :
57 : 0 : QVariantList items;
58 : 0 : while ( true )
59 : : {
60 : 0 : QUrl queryUrl( endPoint );
61 : 0 : QUrlQuery query( queryUrl );
62 : 0 : query.addQueryItem( QStringLiteral( "f" ), QStringLiteral( "json" ) );
63 : 0 : query.addQueryItem( QStringLiteral( "start" ), QString::number( start ) );
64 : 0 : query.addQueryItem( QStringLiteral( "num" ), QString::number( pageSize ) );
65 : 0 : queryUrl.setQuery( query );
66 : :
67 : 0 : const QVariantMap response = QgsArcGisRestQueryUtils::queryServiceJSON( queryUrl, authcfg, errorTitle, errorText, requestHeaders, feedback );
68 : 0 : if ( !errorText.isEmpty() )
69 : 0 : return QVariantList();
70 : :
71 : 0 : items.append( response.value( QStringLiteral( "items" ) ).toList() );
72 : :
73 : 0 : if ( feedback && feedback->isCanceled() )
74 : 0 : return items;
75 : :
76 : 0 : const int total = response.value( QStringLiteral( "total" ) ).toInt();
77 : 0 : start += pageSize;
78 : 0 : if ( total < start )
79 : 0 : break;
80 : 0 : }
81 : 0 : return items;
82 : 0 : }
83 : :
84 : 0 : QVariantList QgsArcGisPortalUtils::retrieveGroupItemsOfType( const QString &contentUrl, const QString &groupId, const QString &authcfg, const QList<int> &itemTypes, QString &errorTitle, QString &errorText, const QMap<QString, QString> &requestHeaders, QgsFeedback *feedback, int pageSize )
85 : : {
86 : 0 : const QVariantList items = retrieveGroupContent( contentUrl, groupId, authcfg, errorTitle, errorText, requestHeaders, feedback, pageSize );
87 : :
88 : : // filter results to desired types
89 : 0 : QVariantList result;
90 : 0 : for ( const QVariant &item : items )
91 : : {
92 : 0 : const QVariantMap itemDef = item.toMap();
93 : 0 : const QString itemType = itemDef.value( QStringLiteral( "type" ) ).toString();
94 : :
95 : 0 : for ( int filterType : itemTypes )
96 : : {
97 : 0 : if ( typeToString( static_cast< ItemType >( filterType ) ).compare( itemType, Qt::CaseInsensitive ) == 0 )
98 : : {
99 : 0 : result << item;
100 : 0 : break;
101 : : }
102 : : }
103 : 0 : }
104 : 0 : return result;
105 : 0 : }
106 : :
107 : 0 : QString QgsArcGisPortalUtils::typeToString( QgsArcGisPortalUtils::ItemType type )
108 : : {
109 : 0 : switch ( type )
110 : : {
111 : : case QgsArcGisPortalUtils::FeatureService:
112 : 0 : return QStringLiteral( "Feature Service" );
113 : : case QgsArcGisPortalUtils::MapService:
114 : 0 : return QStringLiteral( "Map Service" );
115 : : case QgsArcGisPortalUtils::ImageService:
116 : 0 : return QStringLiteral( "Image Service" );
117 : : }
118 : 0 : return QString();
119 : 0 : }
|