mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 00:20:05 +00:00 
			
		
		
		
	Add map API key test button to initial dialog
This commit is contained in:
		
							parent
							
								
									8dfb2fe69c
								
							
						
					
					
						commit
						50006ada37
					
				
					 6 changed files with 178 additions and 24 deletions
				
			
		
							
								
								
									
										107
									
								
								scwx-qt/source/scwx/qt/ui/api_key_edit_widget.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								scwx-qt/source/scwx/qt/ui/api_key_edit_widget.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,107 @@ | |||
| #include <scwx/qt/ui/api_key_edit_widget.hpp> | ||||
| #include <scwx/util/logger.hpp> | ||||
| 
 | ||||
| #include <QMetaEnum> | ||||
| #include <QNetworkRequest> | ||||
| #include <QNetworkReply> | ||||
| #include <QNetworkAccessManager> | ||||
| #include <QApplication> | ||||
| #include <QStyle> | ||||
| #include <QUrlQuery> | ||||
| #include <QToolTip> | ||||
| 
 | ||||
| using namespace scwx::qt::ui; | ||||
| 
 | ||||
| static const std::string logPrefix_ = "scwx::qt::ui::setup::api_key"; | ||||
| static const auto        logger_    = scwx::util::Logger::Create(logPrefix_); | ||||
| 
 | ||||
| QApiKeyEdit::QApiKeyEdit(QWidget* parent) : | ||||
|     QLineEdit(parent), networkAccessManager_(new QNetworkAccessManager(this)) | ||||
| { | ||||
|    const QIcon icon = | ||||
|       QApplication::style()->standardIcon(QStyle::SP_BrowserReload); | ||||
|    testAction_ = addAction(icon, QLineEdit::TrailingPosition); | ||||
|    testAction_->setIconText(tr("Test Key")); | ||||
|    testAction_->setToolTip(tr("Test the API key for this provider")); | ||||
| 
 | ||||
|    connect(testAction_, &QAction::triggered, this, &QApiKeyEdit::apiTest); | ||||
|    connect(networkAccessManager_, | ||||
|            &QNetworkAccessManager::finished, | ||||
|            this, | ||||
|            &QApiKeyEdit::apiTestFinished); | ||||
| 
 | ||||
|    // Reset test icon when text changes
 | ||||
|    connect(this, | ||||
|            &QLineEdit::textChanged, | ||||
|            this, | ||||
|            [this, icon]() { testAction_->setIcon(icon); }); | ||||
| } | ||||
| 
 | ||||
| void QApiKeyEdit::apiTest() | ||||
| { | ||||
|    QNetworkRequest req; | ||||
|    req.setTransferTimeout(5000); | ||||
| 
 | ||||
|    switch (provider_) | ||||
|    { | ||||
|    case map::MapProvider::Mapbox: | ||||
|    { | ||||
|       QUrl url("https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/1/0/0.mvt"); | ||||
|       logger_->debug("Testing MapProvider::Mapbox API key at {}", | ||||
|                      url.toString().toStdString()); | ||||
|       QUrlQuery query; | ||||
|       query.addQueryItem("access_token", text()); | ||||
|       url.setQuery(query); | ||||
|       req.setUrl(url); | ||||
|       break; | ||||
|    } | ||||
|    case map::MapProvider::MapTiler: | ||||
|    { | ||||
|       QUrl url("https://api.maptiler.com/maps/streets-v2/"); | ||||
|       logger_->debug("Testing MapProvider::MapTiler API key at {}", | ||||
|                      url.toString().toStdString()); | ||||
|       QUrlQuery query; | ||||
|       query.addQueryItem("key", text()); | ||||
|       url.setQuery(query); | ||||
|       req.setUrl(url); | ||||
|       break; | ||||
|    } | ||||
|    default: | ||||
|    { | ||||
|       logger_->warn("Cannot test MapProvider::Unknown API key"); | ||||
|       break; | ||||
|    } | ||||
|    } | ||||
| 
 | ||||
|    networkAccessManager_->get(req); | ||||
| } | ||||
| 
 | ||||
| void QApiKeyEdit::apiTestFinished(QNetworkReply* reply) | ||||
| { | ||||
|    switch (reply->error()) | ||||
|    { | ||||
|    case QNetworkReply::NoError: | ||||
|    { | ||||
|       logger_->info("QApiKeyEdit: test success"); | ||||
|       QToolTip::showText(mapToGlobal(QPoint()), tr("Key was valid")); | ||||
|       testAction_->setIcon( | ||||
|          QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton)); | ||||
|       Q_EMIT apiTestSucceeded(); | ||||
|       break; | ||||
|    } | ||||
|    default: | ||||
|    { | ||||
|       const char* errStr = | ||||
|          QMetaEnum::fromType<QNetworkReply::NetworkError>().valueToKey( | ||||
|             reply->error()); | ||||
|       logger_->warn("QApiKeyEdit: test failed, got {} from {}", | ||||
|                     errStr, | ||||
|                     reply->url().host().toStdString()); | ||||
|       QToolTip::showText(mapToGlobal(QPoint()), tr("Invalid key")); | ||||
|       testAction_->setIcon( | ||||
|          QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); | ||||
|       Q_EMIT apiTestFailed(reply->error()); | ||||
|       break; | ||||
|    } | ||||
|    } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 aware70
						aware70