28 #include <QDesktopServices> 29 #include <QRegularExpression> 30 #include <QNetworkProxy> 31 #include <QNetworkProxyFactory> 46 QStringList paths = settings.
value( QStringLiteral(
"help/helpSearchPath" ) ).toStringList();
47 if ( paths.isEmpty() )
56 QString helpPath, fullPath;
57 bool helpFound =
false;
59 Q_FOREACH (
const QString &path, paths )
61 if ( path.endsWith( QLatin1String(
"\\" ) ) || path.endsWith( QLatin1String(
"/" ) ) )
63 fullPath = path.left( path.size() - 1 );
70 Q_FOREACH (
const QString &var, scope->variableNames() )
72 QRegularExpression rx( QStringLiteral(
"(<!\\$\\$)*(\\$%1)" ).arg( var ) );
73 fullPath.replace( rx, scope->variable( var ).toString() );
75 fullPath.replace( QRegularExpression( QStringLiteral(
"(\\$\\$)" ) ), QStringLiteral(
"$" ) );
77 helpPath = QStringLiteral(
"%1/%2" ).arg( fullPath, key );
81 if ( helpPath.startsWith( QLatin1String(
"http" ) ) )
83 if ( !QgsHelp::urlExists( helpPath ) )
87 helpUrl = QUrl( helpPath );
91 QString filePath = helpPath.mid( 0, helpPath.lastIndexOf( QLatin1String(
"#" ) ) );
92 if ( !QFileInfo::exists( filePath ) )
96 helpUrl = QUrl::fromLocalFile( filePath );
97 int pos = helpPath.lastIndexOf( QLatin1String(
"#" ) );
100 helpUrl.setFragment( helpPath.mid( helpPath.lastIndexOf( QLatin1String(
"#" ) ) + 1, -1 ) );
108 return helpFound ?
helpUrl : helpNotFound;
111 bool QgsHelp::urlExists(
const QString &url )
117 bool proxyEnabled = settings.
value( QStringLiteral(
"proxy/proxyEnabled" ),
false ).toBool();
121 QString proxyHost = settings.
value( QStringLiteral(
"proxy/proxyHost" ), QString() ).toString();
122 int proxyPort = settings.
value( QStringLiteral(
"proxy/proxyPort" ), QString() ).toString().toInt();
123 QString proxyUser = settings.
value( QStringLiteral(
"proxy/proxyUser" ), QString() ).toString();
124 QString proxyPassword = settings.
value( QStringLiteral(
"proxy/proxyPassword" ), QString() ).toString();
126 QString proxyTypeString = settings.
value( QStringLiteral(
"proxy/proxyType" ), QString() ).toString();
128 if ( proxyTypeString == QLatin1String(
"DefaultProxy" ) )
130 QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery();
131 if ( !proxies.isEmpty() )
133 proxy = proxies.first();
138 QNetworkProxy::ProxyType proxyType = QNetworkProxy::DefaultProxy;
139 if ( proxyTypeString == QLatin1String(
"Socks5Proxy" ) )
141 proxyType = QNetworkProxy::Socks5Proxy;
143 else if ( proxyTypeString == QLatin1String(
"HttpProxy" ) )
145 proxyType = QNetworkProxy::HttpProxy;
147 else if ( proxyTypeString == QLatin1String(
"HttpCachingProxy" ) )
149 proxyType = QNetworkProxy::HttpCachingProxy;
151 else if ( proxyTypeString == QLatin1String(
"FtpCachingProxy" ) )
153 proxyType = QNetworkProxy::FtpCachingProxy;
155 proxy = QNetworkProxy( proxyType, proxyHost, proxyPort, proxyUser, proxyPassword );
157 socket.setProxy( proxy );
160 socket.connectToHost( helpUrl.host(), 80 );
161 if ( socket.waitForConnected() )
163 socket.write(
"HEAD " + helpUrl.path().toUtf8() +
" HTTP/1.1\r\n" 164 "Host: " + helpUrl.host().toUtf8() +
"\r\n\r\n" );
165 if ( socket.waitForReadyRead() )
167 QByteArray bytes = socket.readAll();
168 if ( bytes.contains(
"200 OK" ) || bytes.contains(
"302 Found" ) || bytes.contains(
"301 Moved" ) )
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
static QUrl helpUrl(const QString &key)
Returns URI of the help topic for the given key.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context...
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
static QString pkgDataPath()
Returns the common root path of all application data directories.
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.