Merge remote-tracking branch 'origin/staged' into dev

This commit is contained in:
Xiao YiFang 2022-05-15 23:14:32 +08:00
commit 964c54fc3c
27 changed files with 290 additions and 116 deletions

View file

@ -22,7 +22,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@ -37,7 +39,7 @@ jobs:
uses: mathieudutour/github-tag-action@v6.0 uses: mathieudutour/github-tag-action@v6.0
with: with:
github_token: ${{ secrets.GITHUB_TOKEN }} github_token: ${{ secrets.GITHUB_TOKEN }}
custom_tag: ${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} custom_tag: ${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}

View file

@ -29,7 +29,9 @@ jobs:
qt_arch: [clang_64] qt_arch: [clang_64]
env: env:
targetName: GoldenDict targetName: GoldenDict
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
# macos 11.0 默认环境变了,要指定 # macos 11.0 默认环境变了,要指定
@ -88,7 +90,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
# tag 上传Release # tag 上传Release
- name: uploadRelease - name: uploadRelease
@ -97,10 +99,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.targetName }}.dmg file: ${{ env.targetName }}.dmg
asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}_${{ matrix.os }}_${{ steps.vars.outputs.sha_short }}.dmg asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}_${{ matrix.os }}_${{ steps.vars.outputs.sha_short }}.dmg
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}

View file

@ -30,7 +30,9 @@ jobs:
qt_arch: [clang_64] qt_arch: [clang_64]
env: env:
targetName: GoldenDict targetName: GoldenDict
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
# macos 11.0 默认环境变了,要指定 # macos 11.0 默认环境变了,要指定
@ -91,7 +93,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
# tag 上传Release # tag 上传Release
- name: uploadRelease - name: uploadRelease
@ -100,10 +102,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.targetName }}.dmg file: ${{ env.targetName }}.dmg
asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}_${{ matrix.os }}_${{ steps.vars.outputs.sha_short }}.dmg asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}_${{ matrix.os }}_${{ steps.vars.outputs.sha_short }}.dmg
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}

View file

@ -30,7 +30,9 @@ jobs:
qt_ver: [6.2.4,6.3.0] qt_ver: [6.2.4,6.3.0]
qt_arch: [gcc_64] qt_arch: [gcc_64]
env: env:
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
@ -95,7 +97,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
- name: uploadRelease - name: uploadRelease
# if: startsWith(github.event.ref, 'refs/tags/') # if: startsWith(github.event.ref, 'refs/tags/')
@ -104,10 +106,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.vars.outputs.appname }} file: ${{ steps.vars.outputs.appname }}
asset_name: ${{ matrix.qt_ver }}-${{ steps.vars.outputs.appname }} asset_name: ${{ matrix.qt_ver }}-${{ steps.vars.outputs.appname }}
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}

View file

@ -24,7 +24,9 @@ jobs:
qt_ver: [5.15.2,6.2.4] qt_ver: [5.15.2,6.2.4]
qt_arch: [gcc_64] qt_arch: [gcc_64]
env: env:
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- uses: actions/setup-python@v3 - uses: actions/setup-python@v3
with: with:

View file

@ -30,7 +30,9 @@ jobs:
qt_ver: [5.15.2] qt_ver: [5.15.2]
qt_arch: [gcc_64] qt_arch: [gcc_64]
env: env:
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v3 uses: jurplel/install-qt-action@v3
@ -92,7 +94,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
- name: uploadRelease - name: uploadRelease
# if: startsWith(github.event.ref, 'refs/tags/') # if: startsWith(github.event.ref, 'refs/tags/')
@ -101,10 +103,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.vars.outputs.appname }} file: ${{ steps.vars.outputs.appname }}
asset_name: ${{ matrix.qt_ver }}-${{ steps.vars.outputs.appname }} asset_name: ${{ matrix.qt_ver }}-${{ steps.vars.outputs.appname }}
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}

View file

@ -31,7 +31,9 @@ jobs:
qt_arch: [win64_msvc2019_64] qt_arch: [win64_msvc2019_64]
env: env:
targetName: GoldenDict.exe targetName: GoldenDict.exe
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- uses: actions/setup-python@v3 - uses: actions/setup-python@v3
with: with:
@ -67,7 +69,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
# # msvc编译 # # msvc编译
@ -111,10 +113,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}.zip file: ${{ steps.package.outputs.packageName }}.zip
asset_name: ${{ matrix.qt_ver }}-${{ steps.package.outputs.packageName }}.zip asset_name: ${{ matrix.qt_ver }}-${{ steps.package.outputs.packageName }}.zip
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}
@ -131,10 +133,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: release/${{ env.targetName }} file: release/${{ env.targetName }}
asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }} asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
- name: copy nsis - name: copy nsis
shell: bash shell: bash
@ -156,7 +158,7 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}/GoldenDict-v22-Install.exe file: ${{ steps.package.outputs.packageName }}/GoldenDict-v22-Install.exe
asset_name: ${{ matrix.qt_ver }}-GoldenDict-v22-Install.exe asset_name: ${{ matrix.qt_ver }}-GoldenDict-v22-Install.exe
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}

View file

@ -27,7 +27,9 @@ jobs:
env: env:
targetName: GoldenDict.exe targetName: GoldenDict.exe
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
steps: steps:
- uses: actions/setup-python@v3 - uses: actions/setup-python@v3
with: with:

View file

@ -32,7 +32,9 @@ jobs:
qt_arch: [win64_msvc2019_64] qt_arch: [win64_msvc2019_64]
env: env:
targetName: GoldenDict.exe targetName: GoldenDict.exe
version: 22.4.24-alpha version: 22.4.24
version-suffix: alpha
prerelease: true
# 步骤 # 步骤
steps: steps:
# 安装Qt # 安装Qt
@ -69,7 +71,7 @@ jobs:
CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
CHANGELOG="${CHANGELOG//'\"'/'%22'}" CHANGELOG="${CHANGELOG//'\"'/'%22'}"
CHANGELOG="${CHANGELOG//"'"/'%20'}" CHANGELOG="${CHANGELOG//"'"/ }"
echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")" echo "::set-output name=COMMIT_SUMMARY::$(echo "$CHANGELOG")"
- uses: ilammy/msvc-dev-cmd@v1 - uses: ilammy/msvc-dev-cmd@v1
# msvc编译 # msvc编译
@ -106,10 +108,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}.zip file: ${{ steps.package.outputs.packageName }}.zip
asset_name: ${{ matrix.qt_ver }}-${{ steps.package.outputs.packageName }}.zip asset_name: ${{ matrix.qt_ver }}-${{ steps.package.outputs.packageName }}.zip
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
body: | body: |
release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}} release on date: ${{steps.vars.outputs.release_date}} time: ${{steps.vars.outputs.release_time_clock}}
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}
@ -131,10 +133,10 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: release/${{ env.targetName }} file: release/${{ env.targetName }}
asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }} asset_name: ${{ matrix.qt_ver }}-${{ env.targetName }}
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}
- name: copy nsis - name: copy nsis
@ -159,8 +161,8 @@ jobs:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.packageName }}/GoldenDict-v22-Install.exe file: ${{ steps.package.outputs.packageName }}/GoldenDict-v22-Install.exe
asset_name: ${{ matrix.qt_ver }}-GoldenDict-v22-Install.exe asset_name: ${{ matrix.qt_ver }}-GoldenDict-v22-Install.exe
tag: v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} tag: v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
overwrite: true overwrite: true
release_name: GoldenDict-v${{env.version}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }} release_name: GoldenDict-v${{env.version}}-${{env.version-suffix}}.${{ steps.vars.outputs.release_hm }}.${{ steps.vars.outputs.sha_short }}
prerelease: true prerelease: ${{env.prerelease}}

View file

@ -733,19 +733,19 @@ void ArticleRequest::bodyFinished()
{ {
update(); update();
qDebug() << "send dicts(stemmed):" << word << ":" << dictIds; qDebug() << "send dicts(stemmed):" << word << ":" << dictIds;
emit GlobalBroadcaster::instance()->emitDictIds(ActiveDictIds{word, dictIds}); emit GlobalBroadcaster::instance()->dictionaryChanges(ActiveDictIds{word, dictIds});
dictIds.clear(); dictIds.clear();
} }
else { else {
finish(); finish();
qDebug() << "send dicts(finished):" << word << ":" << dictIds; qDebug() << "send dicts(finished):" << word << ":" << dictIds;
emit GlobalBroadcaster::instance()->emitDictIds(ActiveDictIds{word, dictIds}); emit GlobalBroadcaster::instance()->dictionaryChanges(ActiveDictIds{word, dictIds});
dictIds.clear(); dictIds.clear();
} }
} else if (wasUpdated) { } else if (wasUpdated) {
update(); update();
qDebug() << "send dicts(updated):" << word << ":" << dictIds; qDebug() << "send dicts(updated):" << word << ":" << dictIds;
emit GlobalBroadcaster::instance()->emitDictIds(ActiveDictIds{word, dictIds}); emit GlobalBroadcaster::instance()->dictionaryChanges(ActiveDictIds{word, dictIds});
dictIds.clear(); dictIds.clear();
} }
} }

View file

@ -29,7 +29,7 @@ using std::string;
connect( baseReply, SIGNAL( errorOccurred( QNetworkReply::NetworkError) ), connect( baseReply, SIGNAL( errorOccurred( QNetworkReply::NetworkError) ),
this, SLOT( applyError( QNetworkReply::NetworkError ) ) ); this, SLOT( applyError( QNetworkReply::NetworkError ) ) );
connect( baseReply, SIGNAL( readyRead() ), this, SLOT( readDataFromBase() ) ); connect( baseReply, SIGNAL( readyRead() ), this, SIGNAL( readyRead() ) );
// Redirect QNetworkReply signals // Redirect QNetworkReply signals
@ -68,7 +68,8 @@ using std::string;
QList< QByteArray > rawHeaders = baseReply->rawHeaderList(); QList< QByteArray > rawHeaders = baseReply->rawHeaderList();
for( QList< QByteArray >::iterator it = rawHeaders.begin(); it != rawHeaders.end(); ++it ) for( QList< QByteArray >::iterator it = rawHeaders.begin(); it != rawHeaders.end(); ++it )
{ {
if( it->toLower() != "x-frame-options" ) auto headerName = it->toLower();
if( headerName != "x-frame-options" && headerName != "content-security-policy")
setRawHeader( *it, baseReply->rawHeader( *it ) ); setRawHeader( *it, baseReply->rawHeader( *it ) );
} }
@ -121,7 +122,7 @@ using std::string;
qint64 AllowFrameReply::bytesAvailable() const qint64 AllowFrameReply::bytesAvailable() const
{ {
return buffer.size() + QNetworkReply::bytesAvailable(); return baseReply->bytesAvailable();
} }
void AllowFrameReply::applyError( QNetworkReply::NetworkError code ) void AllowFrameReply::applyError( QNetworkReply::NetworkError code )
@ -130,20 +131,22 @@ using std::string;
emit errorOccurred( code ); emit errorOccurred( code );
} }
void AllowFrameReply::readDataFromBase() // void AllowFrameReply::readDataFromBase()
{ // {
QByteArray data; //// QByteArray data;
data.resize( baseReply->bytesAvailable() ); //// data.resize( baseReply->bytesAvailable() );
baseReply->read( data.data(), data.size() ); //// baseReply->read( data.data(), data.size() );
buffer += data; //// buffer += data;
emit readyRead(); // emit readyRead();
} // }
qint64 AllowFrameReply::readData( char * data, qint64 maxSize ) qint64 AllowFrameReply::readData( char * data, qint64 maxSize )
{ {
qint64 size = qMin( maxSize, qint64( buffer.size() ) ); auto bytesAvailable= baseReply->bytesAvailable();
memcpy( data, buffer.data(), size ); qint64 size = qMin( maxSize, bytesAvailable );
buffer.remove( 0, size ); baseReply->read( data, size );
// memcpy( data, buffer.data(), size );
// buffer.remove( 0, size );
return size; return size;
} }
@ -151,6 +154,7 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
QNetworkRequest const & req, QNetworkRequest const & req,
QIODevice * outgoingData ) QIODevice * outgoingData )
{ {
QUrl url;
if ( op == GetOperation ) if ( op == GetOperation )
{ {
if ( req.url().scheme() == "qrcx" ) if ( req.url().scheme() == "qrcx" )
@ -168,7 +172,7 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
return QNetworkAccessManager::createRequest( op, newReq, outgoingData ); return QNetworkAccessManager::createRequest( op, newReq, outgoingData );
} }
QUrl url=req.url(); url=req.url();
QMimeType mineType=db.mimeTypeForUrl (url); QMimeType mineType=db.mimeTypeForUrl (url);
QString contentType=mineType.name(); QString contentType=mineType.name();
@ -178,7 +182,6 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
Utils::Url::addQueryItem(url,"word",path.mid(1)); Utils::Url::addQueryItem(url,"word",path.mid(1));
url.setPath(""); url.setPath("");
Utils::Url::addQueryItem(url,"group","1"); Utils::Url::addQueryItem(url,"group","1");
} }
} }
@ -193,7 +196,7 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
//can not match dictionary in the above code,means the url must be external links. //can not match dictionary in the above code,means the url must be external links.
//if not external url,can be blocked from here. no need to continue execute the following code. //if not external url,can be blocked from here. no need to continue execute the following code.
//such as bres://upload.wikimedia.... etc . //such as bres://upload.wikimedia.... etc .
if (!Utils::isExternalLink(req.url())) { if (!Utils::isExternalLink(url)) {
gdWarning( "Blocking element \"%s\" as built-in link ", req.url().toEncoded().data() ); gdWarning( "Blocking element \"%s\" as built-in link ", req.url().toEncoded().data() );
return new BlockedNetworkReply( this ); return new BlockedNetworkReply( this );
} }
@ -205,17 +208,15 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
{ {
QByteArray referer = req.rawHeader( "Referer" ); QByteArray referer = req.rawHeader( "Referer" );
//GD_DPRINTF( "Referer: %s\n", referer.data() );
QUrl refererUrl = QUrl::fromEncoded( referer ); QUrl refererUrl = QUrl::fromEncoded( referer );
//GD_DPRINTF( "Considering %s vs %s\n", getHostBase( req.url() ).toUtf8().data(), //GD_DPRINTF( "Considering %s vs %s\n", getHostBase( req.url() ).toUtf8().data(),
// getHostBase( refererUrl ).toUtf8().data() ); // getHostBase( refererUrl ).toUtf8().data() );
if ( !req.url().host().endsWith( refererUrl.host() ) && if ( !url.host().endsWith( refererUrl.host() ) &&
getHostBase( req.url() ) != getHostBase( refererUrl ) && !req.url().scheme().startsWith("data") ) getHostBase( url ) != getHostBase( refererUrl ) && !url.scheme().startsWith("data") )
{ {
gdWarning( "Blocking element \"%s\" due to not same domain", req.url().toEncoded().data() ); gdWarning( "Blocking element \"%s\" due to not same domain", url.toEncoded().data() );
return new BlockedNetworkReply( this ); return new BlockedNetworkReply( this );
} }
@ -241,15 +242,17 @@ QNetworkReply * ArticleNetworkAccessManager::createRequest( Operation op,
} }
// spoof User-Agent // spoof User-Agent
QNetworkRequest newReq(req); QNetworkRequest newReq;
if ( hideGoldenDictHeader && req.url().scheme().startsWith("http", Qt::CaseInsensitive)) newReq.setUrl(url);
newReq.setAttribute( QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy );
if ( hideGoldenDictHeader && url.scheme().startsWith("http", Qt::CaseInsensitive))
{ {
newReq.setRawHeader("User-Agent", req.rawHeader("User-Agent").replace(qApp->applicationName().toUtf8(), "")); newReq.setRawHeader("User-Agent", req.rawHeader("User-Agent").replace(qApp->applicationName().toUtf8(), ""));
} }
QNetworkReply * reply = QNetworkAccessManager::createRequest( op, newReq, outgoingData ); QNetworkReply * reply = QNetworkAccessManager::createRequest( op, newReq, outgoingData );
if( req.url().scheme() == "https") if( url.scheme() == "https")
{ {
#ifndef QT_NO_OPENSSL #ifndef QT_NO_OPENSSL
connect( reply, SIGNAL( sslErrors( QList< QSslError > ) ), connect( reply, SIGNAL( sslErrors( QList< QSslError > ) ),
@ -522,14 +525,10 @@ LocalSchemeHandler::LocalSchemeHandler(ArticleNetworkAccessManager& articleNetMg
void LocalSchemeHandler::requestStarted(QWebEngineUrlRequestJob *requestJob) void LocalSchemeHandler::requestStarted(QWebEngineUrlRequestJob *requestJob)
{ {
QUrl url = requestJob->requestUrl(); QUrl url = requestJob->requestUrl();
QNetworkRequest request; QNetworkRequest request;
request.setUrl( url ); request.setUrl( url );
QNetworkReply * reply = this->mManager.createRequest( QNetworkAccessManager::GetOperation, request ); QNetworkReply * reply = this->mManager.createRequest( QNetworkAccessManager::GetOperation, request );
connect(reply,&QNetworkReply::finished,requestJob,[=](){ connect( reply, &QNetworkReply::finished, requestJob, [ = ]() { requestJob->reply( "text/html", reply ); } );
requestJob->reply("text/html",reply);
});
connect( requestJob, &QObject::destroyed, reply, &QObject::deleteLater ); connect( requestJob, &QObject::destroyed, reply, &QObject::deleteLater );
} }

View file

@ -66,7 +66,7 @@ public slots:
// Own AllowFrameReply slots // Own AllowFrameReply slots
void applyMetaData(); void applyMetaData();
void applyError( QNetworkReply::NetworkError code ); void applyError( QNetworkReply::NetworkError code );
void readDataFromBase(); // void readDataFromBase();
// Redirect QNetworkReply slots // Redirect QNetworkReply slots
virtual void abort() virtual void abort()
@ -214,5 +214,6 @@ protected:
private: private:
ArticleNetworkAccessManager& mManager; ArticleNetworkAccessManager& mManager;
QNetworkAccessManager mgr;
}; };
#endif #endif

View file

@ -347,7 +347,7 @@ ArticleView::ArticleView( QWidget * parent, ArticleNetworkAccessManager & nm, Au
// Variable name for store current selection range // Variable name for store current selection range
rangeVarName = QString( "sr_%1" ).arg( QString::number( (quint64)this, 16 ) ); rangeVarName = QString( "sr_%1" ).arg( QString::number( (quint64)this, 16 ) );
connect(GlobalBroadcaster::instance(), SIGNAL( emitDictIds(ActiveDictIds)), this, connect(GlobalBroadcaster::instance(), SIGNAL( dictionaryChanges(ActiveDictIds)), this,
SLOT(setActiveDictIds(ActiveDictIds))); SLOT(setActiveDictIds(ActiveDictIds)));
channel = new QWebChannel(ui.definition->page()); channel = new QWebChannel(ui.definition->page());

View file

@ -42,23 +42,23 @@ void gdDebug(const char *msg, ...)
{ {
va_list ap; va_list ap;
va_start(ap, msg); va_start(ap, msg);
QTextCodec *localeCodec = 0; // QTextCodec *localeCodec = 0;
if( logFilePtr && logFilePtr->isOpen() ) // if( logFilePtr && logFilePtr->isOpen() )
{ // {
if( utf8Codec == 0 ) // if( utf8Codec == 0 )
utf8Codec = QTextCodec::codecForName( "UTF8" ); // utf8Codec = QTextCodec::codecForName( "UTF8" );
localeCodec = QTextCodec::codecForLocale(); // localeCodec = QTextCodec::codecForLocale();
QTextCodec::setCodecForLocale( utf8Codec ); // QTextCodec::setCodecForLocale( utf8Codec );
} // }
qDebug()<< QString().vasprintf( msg, ap ); qDebug()<< QString().vasprintf( msg, ap );
if( logFilePtr && logFilePtr->isOpen() ) // if( logFilePtr && logFilePtr->isOpen() )
{ // {
QTextCodec::setCodecForLocale( localeCodec ); // QTextCodec::setCodecForLocale( localeCodec );
} // }
va_end(ap); va_end(ap);
} }

View file

@ -7,7 +7,7 @@
#define GD_DPRINTF(...) do {} while( 0 ) #define GD_DPRINTF(...) do {} while( 0 )
#define GD_FDPRINTF(...) do {} while( 0 ) #define GD_FDPRINTF(...) do {} while( 0 )
#else #else
#define GD_DPRINTF(...) printf(__VA_ARGS__) #define GD_DPRINTF(...) gdDebug(__VA_ARGS__)
#define GD_FDPRINTF(...) fprintf(__VA_ARGS__) #define GD_FDPRINTF(...) fprintf(__VA_ARGS__)
#endif #endif

View file

@ -19,4 +19,11 @@ Config::Preferences * GlobalBroadcaster::getPreference()
return preference; return preference;
} }
void GlobalBroadcaster::addWhitelist(QString url){
whitelist.push_back(url);
}
bool GlobalBroadcaster::existedInWhitelist(QString url){
return std::find(whitelist.begin(), whitelist.end(), url) != whitelist.end();
}
// namespace global // namespace global

View file

@ -2,6 +2,7 @@
#define GLOBAL_GLOBALBROADCASTER_H #define GLOBAL_GLOBALBROADCASTER_H
#include <QObject> #include <QObject>
#include <vector>
#include "config.hh" #include "config.hh"
struct ActiveDictIds struct ActiveDictIds
@ -15,14 +16,16 @@ class GlobalBroadcaster : public QObject
Q_OBJECT Q_OBJECT
private: private:
Config::Preferences * preference; Config::Preferences * preference;
std::vector<QString> whitelist;
public: public:
void setPreference( Config::Preferences * _pre ); void setPreference( Config::Preferences * _pre );
Config::Preferences * getPreference(); Config::Preferences * getPreference();
GlobalBroadcaster( QObject * parent = nullptr ); GlobalBroadcaster( QObject * parent = nullptr );
void addWhitelist(QString host);
bool existedInWhitelist(QString host);
static GlobalBroadcaster * instance(); static GlobalBroadcaster * instance();
signals: signals:
void emitDictIds( ActiveDictIds ad ); void dictionaryChanges( ActiveDictIds ad );
}; };
#endif // GLOBAL_GLOBALBROADCASTER_H #endif // GLOBAL_GLOBALBROADCASTER_H

View file

@ -226,6 +226,7 @@ DEFINES += PROGRAM_VERSION=\\\"$$VERSION\\\"
HEADERS += folding.hh \ HEADERS += folding.hh \
article_inspect.h \ article_inspect.h \
globalbroadcaster.h \ globalbroadcaster.h \
iframeschemehandler.h \
inc_case_folding.hh \ inc_case_folding.hh \
inc_diacritic_folding.hh \ inc_diacritic_folding.hh \
mainwindow.hh \ mainwindow.hh \
@ -366,6 +367,7 @@ FORMS += groups.ui \
SOURCES += folding.cc \ SOURCES += folding.cc \
article_inspect.cpp \ article_inspect.cpp \
globalbroadcaster.cpp \ globalbroadcaster.cpp \
iframeschemehandler.cpp \
main.cc \ main.cc \
dictionary.cc \ dictionary.cc \
config.cc \ config.cc \

104
iframeschemehandler.cpp Normal file
View file

@ -0,0 +1,104 @@
#include "iframeschemehandler.h"
#include <QTextCodec>
IframeSchemeHandler::IframeSchemeHandler(QObject * parent):QWebEngineUrlSchemeHandler(parent){
}
void IframeSchemeHandler::requestStarted(QWebEngineUrlRequestJob *requestJob)
{
QUrl url = requestJob->requestUrl();
// website dictionary iframe url
url = QUrl( Utils::Url::queryItemValue( url, "url" ) );
QNetworkRequest request;
request.setUrl( url );
QNetworkReply * reply = mgr.get( request );
auto finishAction = [ = ]() -> void
{
// Handle reply data
QByteArray replyData = reply->readAll();
QString articleString;
QTextCodec * codec = QTextCodec::codecForHtml( replyData );
if( codec )
articleString = codec->toUnicode( replyData );
else
articleString = QString::fromUtf8( replyData );
// Change links from relative to absolute
QString root = reply->url().scheme() + "://" + reply->url().host();
QString base = root + reply->url().path();
while( !base.isEmpty() && !base.endsWith( "/" ) )
base.chop( 1 );
QRegularExpression tags( "<\\s*(a|link|img|script)\\s+[^>]*(src|href)\\s*=\\s*['\"][^>]+>",
QRegularExpression::CaseInsensitiveOption );
QRegularExpression links( "\\b(src|href)\\s*=\\s*(['\"])([^'\"]+['\"])",
QRegularExpression::CaseInsensitiveOption );
int pos = 0;
QString articleNewString;
QRegularExpressionMatchIterator it = tags.globalMatch( articleString );
while( it.hasNext() )
{
QRegularExpressionMatch match = it.next();
articleNewString += articleString.mid( pos, match.capturedStart() - pos );
pos = match.capturedEnd();
QString tag = match.captured();
QRegularExpressionMatch match_links = links.match( tag );
if( !match_links.hasMatch() )
{
articleNewString += tag;
continue;
}
QString url = match_links.captured( 3 );
if( url.indexOf( ":/" ) >= 0 || url.indexOf( "data:" ) >= 0 || url.indexOf( "mailto:" ) >= 0 ||
url.startsWith( "#" ) || url.startsWith( "javascript:" ) )
{
// External link, anchor or base64-encoded data
articleNewString += tag;
continue;
}
QString newUrl = match_links.captured( 1 ) + "=" + match_links.captured( 2 );
if( url.startsWith( "//" ) )
newUrl += reply->url().scheme() + ":";
else if( url.startsWith( "/" ) )
newUrl += root;
else
newUrl += base;
newUrl += match_links.captured( 3 );
tag.replace( match_links.capturedStart(), match_links.capturedLength(), newUrl );
articleNewString += tag;
}
if( pos )
{
articleNewString += articleString.mid( pos );
articleString = articleNewString;
articleNewString.clear();
}
sptr< Dictionary::DataRequestInstant > response = new Dictionary::DataRequestInstant( true );
auto content = articleString.toStdString();
response->getData().resize( content.size() );
memcpy( &( response->getData().front() ), content.data(), content.size() );
auto contentType="text/html";
auto newReply = new ArticleResourceReply( this, request, response, contentType );
requestJob->reply( contentType, newReply );
connect( requestJob, &QObject::destroyed, newReply, &QObject::deleteLater );
};
connect( reply, &QNetworkReply::finished, requestJob, finishAction );
connect( requestJob, &QObject::destroyed, reply, &QObject::deleteLater );
}

19
iframeschemehandler.h Normal file
View file

@ -0,0 +1,19 @@
#ifndef IFRAMESCHEMEHANDLER_H
#define IFRAMESCHEMEHANDLER_H
#include"article_netmgr.hh"
class IframeSchemeHandler : public QWebEngineUrlSchemeHandler
{
Q_OBJECT
public:
IframeSchemeHandler(QObject * parent=nullptr);
void requestStarted(QWebEngineUrlRequestJob *requestJob);
protected:
private:
QNetworkAccessManager mgr;
};
#endif // IFRAMESCHEMEHANDLER_H

View file

@ -253,7 +253,7 @@ int main( int argc, char ** argv )
#endif #endif
QStringList localSchemes={"gdlookup","gdau","gico","qrcx","bres","bword","gdprg","gdvideo","gdpicture","gdtts"}; QStringList localSchemes={"gdlookup","gdau","gico","qrcx","bres","bword","gdprg","gdvideo","gdpicture","gdtts","ifr"};
for (int i = 0; i < localSchemes.size(); ++i) for (int i = 0; i < localSchemes.size(); ++i)
{ {

View file

@ -149,10 +149,15 @@ MainWindow::MainWindow( Config::Class & cfg_ ):
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "gdlookup", localSchemeHandler ); QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "gdlookup", localSchemeHandler );
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "bword", localSchemeHandler ); QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "bword", localSchemeHandler );
iframeSchemeHandler = new IframeSchemeHandler( this );
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "ifr", iframeSchemeHandler );
QStringList localSchemes = { "gdau", "gico", "qrcx", "bres", "gdprg", "gdvideo", "gdpicture", "gdtts" }; QStringList localSchemes = { "gdau", "gico", "qrcx", "bres", "gdprg", "gdvideo", "gdpicture", "gdtts" };
resourceSchemeHandler = new ResourceSchemeHandler( articleNetMgr ); resourceSchemeHandler = new ResourceSchemeHandler( articleNetMgr );
for(int i=0;i<localSchemes.size();i++){ for( int i = 0; i < localSchemes.size(); i++ )
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler(localSchemes.at(i).toLatin1(), resourceSchemeHandler); {
QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( localSchemes.at( i ).toLatin1(),
resourceSchemeHandler );
} }
wuri = new WebUrlRequestInterceptor(); wuri = new WebUrlRequestInterceptor();

View file

@ -34,6 +34,7 @@
#include "hotkeywrapper.hh" #include "hotkeywrapper.hh"
#include "weburlrequestinterceptor.h" #include "weburlrequestinterceptor.h"
#include "resourceschemehandler.h" #include "resourceschemehandler.h"
#include "iframeschemehandler.h"
#ifdef HAVE_X11 #ifdef HAVE_X11
#include <fixx11h.h> #include <fixx11h.h>
#endif #endif
@ -177,6 +178,7 @@ private:
QIcon starIcon, blueStarIcon; QIcon starIcon, blueStarIcon;
LocalSchemeHandler * localSchemeHandler; LocalSchemeHandler * localSchemeHandler;
IframeSchemeHandler * iframeSchemeHandler;
ResourceSchemeHandler * resourceSchemeHandler; ResourceSchemeHandler * resourceSchemeHandler;
/// Applies the qt's stylesheet, given the style's name. /// Applies the qt's stylesheet, given the style's name.

View file

@ -120,7 +120,7 @@ bool MdictParser::open( const char * filename )
filename_ = QString::fromUtf8( filename ); filename_ = QString::fromUtf8( filename );
file_ = new QFile( filename_ ); file_ = new QFile( filename_ );
GD_DPRINTF( "MdictParser: open %s\n", filename ); gdDebug( "MdictParser: open %s", filename );
if ( file_.isNull() || !file_->exists() ) if ( file_.isNull() || !file_->exists() )
return false; return false;

6
mdx.cc
View file

@ -523,7 +523,7 @@ void MdxDictionary::makeFTSIndex( QAtomicInt & isCancelled, bool firstIteration
if( firstIteration && getArticleCount() > FTS::MaxDictionarySizeForFastSearch ) if( firstIteration && getArticleCount() > FTS::MaxDictionarySizeForFastSearch )
return; return;
gdDebug( "MDict: Building the full-text index for dictionary: %s\n", gdDebug( "MDict: Building the full-text index for dictionary: %s",
getName().c_str() ); getName().c_str() );
try try
@ -533,7 +533,7 @@ void MdxDictionary::makeFTSIndex( QAtomicInt & isCancelled, bool firstIteration
} }
catch( std::exception &ex ) catch( std::exception &ex )
{ {
gdWarning( "MDict: Failed building full-text search index for \"%s\", reason: %s\n", getName().c_str(), ex.what() ); gdWarning( "MDict: Failed building full-text search index for \"%s\", reason: %s", getName().c_str(), ex.what() );
QFile::remove( FsEncoding::decode( ftsIdxName.c_str() ) ); QFile::remove( FsEncoding::decode( ftsIdxName.c_str() ) );
} }
} }
@ -550,7 +550,7 @@ void MdxDictionary::getArticleText( uint32_t articleAddress, QString & headword,
} }
catch( std::exception &ex ) catch( std::exception &ex )
{ {
gdWarning( "MDict: Failed retrieving article from \"%s\", reason: %s\n", getName().c_str(), ex.what() ); gdWarning( "MDict: Failed retrieving article from \"%s\", reason: %s", getName().c_str(), ex.what() );
} }
} }

View file

@ -9,6 +9,7 @@
#include <QDir> #include <QDir>
#include <QFileInfo> #include <QFileInfo>
#include "gddebug.hh" #include "gddebug.hh"
#include "globalbroadcaster.h"
#include <QRegularExpression> #include <QRegularExpression>
@ -371,8 +372,12 @@ sptr< DataRequest > WebSiteDictionary::getArticle( wstring const & str,
string result = "<div class=\"website_padding\"></div>"; string result = "<div class=\"website_padding\"></div>";
//permissive add url to global whitelist.
QUrl url(urlString);
GlobalBroadcaster::instance()->addWhitelist(url.host());
result += string( "<iframe id=\"gdexpandframe-" ) + getId() + result += string( "<iframe id=\"gdexpandframe-" ) + getId() +
"\" src=\"" + urlString.data() + "\" src=\"ifr://localhost?url=" +QUrl::toPercentEncoding( urlString).data() +
"\" onmouseover=\"processIframeMouseOver('gdexpandframe-" + getId() + "');\" " "\" onmouseover=\"processIframeMouseOver('gdexpandframe-" + getId() + "');\" "
"onmouseout=\"processIframeMouseOut();\" " "onmouseout=\"processIframeMouseOut();\" "
"scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" " "scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" "

View file

@ -1,6 +1,7 @@
#include "weburlrequestinterceptor.h" #include "weburlrequestinterceptor.h"
#include <QDebug> #include <QDebug>
#include "utils.hh" #include "utils.hh"
#include "globalbroadcaster.h"
WebUrlRequestInterceptor::WebUrlRequestInterceptor(QObject *p) WebUrlRequestInterceptor::WebUrlRequestInterceptor(QObject *p)
:QWebEngineUrlRequestInterceptor(p) :QWebEngineUrlRequestInterceptor(p)
@ -8,6 +9,14 @@ WebUrlRequestInterceptor::WebUrlRequestInterceptor(QObject *p)
} }
void WebUrlRequestInterceptor::interceptRequest( QWebEngineUrlRequestInfo &info) { void WebUrlRequestInterceptor::interceptRequest( QWebEngineUrlRequestInfo &info) {
if( Utils::isExternalLink( info.requestUrl() ) )
{
if(!GlobalBroadcaster::instance()-> existedInWhitelist(info.requestUrl().host()))
{
info.block( true );
}
}
if (QWebEngineUrlRequestInfo::NavigationTypeLink == info.navigationType() && info.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) { if (QWebEngineUrlRequestInfo::NavigationTypeLink == info.navigationType() && info.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) {
//workaround to fix devtool "Switch devtool to chinese" interface was blocked. //workaround to fix devtool "Switch devtool to chinese" interface was blocked.
if( info.requestUrl().scheme() == "devtools" ) if( info.requestUrl().scheme() == "devtools" )