mirror of
https://github.com/miurahr/aqtinstall.git
synced 2025-12-16 20:27:05 +03:00
chore(ci): avoid zipped resources from repository (#895)
Some checks are pending
Check tox tests / Check packaging 📦 (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / Build package (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / publish Python 🐍 distributions 📦 to PyPI (push) Blocked by required conditions
Test on GH actions environment / test (binary, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.0) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.1) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.7.3) (push) Waiting to run
Some checks are pending
Check tox tests / Check packaging 📦 (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / Build package (push) Waiting to run
Publish Python 🐍 distributions 📦 to PyPI / publish Python 🐍 distributions 📦 to PyPI (push) Blocked by required conditions
Test on GH actions environment / test (binary, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.0) (push) Waiting to run
Test on GH actions environment / test (standard, ubuntu-latest, 3.12, 6.8.1) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.5.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.6.3) (push) Waiting to run
Test on GH actions environment / test (standard, windows-latest, 3.12, 6.7.3) (push) Waiting to run
* chore(ci): expand test sources - Avoid zip archive from repository for security Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): download jom from official repository Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): revert jom to 1.1.3 Signed-off-by: Hiroshi Miura <miurahr@linux.com> * chore(ci): update md5 checks Signed-off-by: Hiroshi Miura <miurahr@linux.com> --------- Signed-off-by: Hiroshi Miura <miurahr@linux.com>
This commit is contained in:
Binary file not shown.
10
ci/accelbubble/Bluebubble.svg
Normal file
10
ci/accelbubble/Bluebubble.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny">
|
||||
<defs>
|
||||
<radialGradient id="grad1" cx="0.5" cy="0.7" r="0.7" fx="0.5" fy="0.4">
|
||||
<stop offset="0" style="stop-color:rgb(255,255,255)" />
|
||||
<stop offset="1.5" style="stop-color:rgb(0,102,153)" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<circle cx="100" cy="80" r="42" fill="url(#grad1)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 399 B |
60
ci/accelbubble/Bubble.qml
Normal file
60
ci/accelbubble/Bubble.qml
Normal file
@@ -0,0 +1,60 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
Image {
|
||||
source: "Bluebubble.svg"
|
||||
smooth: true
|
||||
property real centerX
|
||||
property real centerY
|
||||
property real bubbleCenter
|
||||
}
|
||||
34
ci/accelbubble/Info.plist
Normal file
34
ci/accelbubble/Info.plist
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>accelbubble</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>accelbubble</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Created by Qt/QMake</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.digia.accelbubble</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>accelbubble</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NOTE</key>
|
||||
<string>This file was generated by Qt/QMake.</string>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
74
ci/accelbubble/Page1Form.ui.qml
Normal file
74
ci/accelbubble/Page1Form.ui.qml
Normal file
@@ -0,0 +1,74 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
Page {
|
||||
width: 600
|
||||
height: 400
|
||||
property alias bubble: bubble
|
||||
property alias mainWindow: mainWindow
|
||||
|
||||
header: Label {
|
||||
text: qsTr("Page 1")
|
||||
font.pixelSize: Qt.application.font.pixelSize * 2
|
||||
padding: 10
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: mainWindow
|
||||
color: "#ffffff"
|
||||
anchors.fill: parent
|
||||
|
||||
Bubble {
|
||||
id: bubble
|
||||
}
|
||||
}
|
||||
}
|
||||
67
ci/accelbubble/Page2Form.ui.qml
Normal file
67
ci/accelbubble/Page2Form.ui.qml
Normal file
@@ -0,0 +1,67 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
Page {
|
||||
width: 600
|
||||
height: 400
|
||||
|
||||
header: Label {
|
||||
text: qsTr("Page 2")
|
||||
font.pixelSize: Qt.application.font.pixelSize * 2
|
||||
padding: 10
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("You are on Page 2.")
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
37
ci/accelbubble/accelbubble.pro
Normal file
37
ci/accelbubble/accelbubble.pro
Normal file
@@ -0,0 +1,37 @@
|
||||
QT += quick svg xml
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which as been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if you use deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += main.cpp
|
||||
|
||||
RESOURCES += qml.qrc
|
||||
|
||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||
QML_IMPORT_PATH =
|
||||
|
||||
# Additional import path used to resolve QML modules just for Qt Quick Designer
|
||||
QML_DESIGNER_IMPORT_PATH =
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
ios {
|
||||
QTPLUGIN += qsvg qsvgicon qtsensors_ios
|
||||
QMAKE_INFO_PLIST = Info.plist
|
||||
}
|
||||
|
||||
DISTFILES += \
|
||||
Bluebubble.svg
|
||||
66
ci/accelbubble/main.cpp
Normal file
66
ci/accelbubble/main.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QQmlApplicationEngine>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
|
||||
if (engine.rootObjects().isEmpty())
|
||||
return -1;
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
141
ci/accelbubble/main.qml
Normal file
141
ci/accelbubble/main.qml
Normal file
@@ -0,0 +1,141 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.2
|
||||
import QtSensors 5.9
|
||||
|
||||
ApplicationWindow {
|
||||
visible: true
|
||||
width: 640
|
||||
height: 480
|
||||
title: qsTr("Accelerate Bubble")
|
||||
|
||||
SwipeView {
|
||||
id: swipeView
|
||||
anchors.fill: parent
|
||||
currentIndex: tabBar.currentIndex
|
||||
|
||||
Page1Form {
|
||||
bubble {
|
||||
id: bubble
|
||||
centerX: mainWindow.width / 2
|
||||
centerY: mainWindow.height / 2
|
||||
bubbleCenter: bubble.width / 2
|
||||
x: bubble.centerX - bubble.bubbleCenter
|
||||
y: bubble.centerY - bubble.bubbleCenter
|
||||
|
||||
Behavior on y {
|
||||
SmoothedAnimation {
|
||||
easing.type: Easing.Linear
|
||||
duration: 100
|
||||
}
|
||||
}
|
||||
Behavior on x {
|
||||
SmoothedAnimation {
|
||||
easing.type: Easing.Linear
|
||||
duration: 100
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Page2Form {
|
||||
}
|
||||
}
|
||||
|
||||
footer: TabBar {
|
||||
id: tabBar
|
||||
currentIndex: swipeView.currentIndex
|
||||
|
||||
TabButton {
|
||||
text: qsTr("Page 1")
|
||||
}
|
||||
TabButton {
|
||||
text: qsTr("Page 2")
|
||||
}
|
||||
}
|
||||
|
||||
Accelerometer {
|
||||
id: accel
|
||||
dataRate: 100
|
||||
active: true
|
||||
|
||||
onReadingChanged: {
|
||||
var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||
var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||
|
||||
if (isNaN(newX) || isNaN(newY))
|
||||
return;
|
||||
|
||||
if (newX < 0)
|
||||
newX = 0
|
||||
|
||||
if (newX > mainWindow.width - bubble.width)
|
||||
newX = mainWindow.width - bubble.width
|
||||
|
||||
if (newY < 18)
|
||||
newY = 18
|
||||
|
||||
if (newY > mainWindow.height - bubble.height)
|
||||
newY = mainWindow.height - bubble.height
|
||||
|
||||
bubble.x = newX
|
||||
bubble.y = newY
|
||||
}
|
||||
}
|
||||
|
||||
function calcPitch(x, y, z) {
|
||||
return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
|
||||
}
|
||||
function calcRoll(x, y, z) {
|
||||
return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
|
||||
}
|
||||
}
|
||||
10
ci/accelbubble/qml.qrc
Normal file
10
ci/accelbubble/qml.qrc
Normal file
@@ -0,0 +1,10 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>Page1Form.ui.qml</file>
|
||||
<file>Page2Form.ui.qml</file>
|
||||
<file>qtquickcontrols2.conf</file>
|
||||
<file>Bubble.qml</file>
|
||||
<file>Bluebubble.svg</file>
|
||||
<file>main.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
6
ci/accelbubble/qtquickcontrols2.conf
Normal file
6
ci/accelbubble/qtquickcontrols2.conf
Normal file
@@ -0,0 +1,6 @@
|
||||
; This file can be edited to change the style of the application
|
||||
; Read "Qt Quick Controls 2 Configuration File" for details:
|
||||
; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
|
||||
|
||||
[Controls]
|
||||
Style=Default
|
||||
BIN
ci/helloworld.7z
BIN
ci/helloworld.7z
Binary file not shown.
9
ci/helloworld/hello.pro
Normal file
9
ci/helloworld/hello.pro
Normal file
@@ -0,0 +1,9 @@
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = Hello
|
||||
TEMPLATE = app
|
||||
|
||||
SOURCES += main.cpp
|
||||
|
||||
12
ci/helloworld/main.cpp
Normal file
12
ci/helloworld/main.cpp
Normal file
@@ -0,0 +1,12 @@
|
||||
#include <QApplication>
|
||||
#include <QPushButton>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app (argc, argv);
|
||||
|
||||
QPushButton button ("Hello world !");
|
||||
button.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
Binary file not shown.
7
ci/helloworld_qttools/hello.pro
Normal file
7
ci/helloworld_qttools/hello.pro
Normal file
@@ -0,0 +1,7 @@
|
||||
QT += uitools
|
||||
|
||||
TARGET = Hello
|
||||
TEMPLATE = app
|
||||
|
||||
SOURCES += main.cpp
|
||||
|
||||
13
ci/helloworld_qttools/main.cpp
Normal file
13
ci/helloworld_qttools/main.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include <QtUiTools>
|
||||
#include <QApplication>
|
||||
#include <QPushButton>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app (argc, argv);
|
||||
QUiLoader loader;
|
||||
QPushButton button ("Hello world !");
|
||||
button.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
BIN
ci/jom_1_1_3.zip
BIN
ci/jom_1_1_3.zip
Binary file not shown.
Binary file not shown.
34
ci/openglwindow/CMakeLists.txt
Normal file
34
ci/openglwindow/CMakeLists.txt
Normal file
@@ -0,0 +1,34 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(openglwindow LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
||||
set(INSTALL_EXAMPLESDIR "examples")
|
||||
endif()
|
||||
|
||||
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/openglwindow")
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
|
||||
|
||||
qt_add_executable(openglwindow
|
||||
main.cpp
|
||||
openglwindow.cpp openglwindow.h
|
||||
)
|
||||
|
||||
set_target_properties(openglwindow PROPERTIES
|
||||
WIN32_EXECUTABLE TRUE
|
||||
MACOSX_BUNDLE TRUE
|
||||
)
|
||||
|
||||
target_link_libraries(openglwindow PUBLIC
|
||||
Qt::Core
|
||||
Qt::Gui
|
||||
Qt::OpenGL
|
||||
)
|
||||
|
||||
install(TARGETS openglwindow
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
||||
130
ci/openglwindow/main.cpp
Normal file
130
ci/openglwindow/main.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "openglwindow.h"
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QMatrix4x4>
|
||||
#include <QOpenGLShaderProgram>
|
||||
#include <QScreen>
|
||||
#include <QtMath>
|
||||
|
||||
|
||||
//! [1]
|
||||
class TriangleWindow : public OpenGLWindow
|
||||
{
|
||||
public:
|
||||
using OpenGLWindow::OpenGLWindow;
|
||||
|
||||
void initialize() override;
|
||||
void render() override;
|
||||
|
||||
private:
|
||||
GLint m_posAttr = 0;
|
||||
GLint m_colAttr = 0;
|
||||
GLint m_matrixUniform = 0;
|
||||
|
||||
QOpenGLShaderProgram *m_program = nullptr;
|
||||
int m_frame = 0;
|
||||
};
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
QSurfaceFormat format;
|
||||
format.setSamples(16);
|
||||
|
||||
TriangleWindow window;
|
||||
window.setFormat(format);
|
||||
window.resize(640, 480);
|
||||
window.show();
|
||||
|
||||
window.setAnimating(true);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
//! [2]
|
||||
|
||||
|
||||
//! [3]
|
||||
static const char *vertexShaderSource =
|
||||
"attribute highp vec4 posAttr;\n"
|
||||
"attribute lowp vec4 colAttr;\n"
|
||||
"varying lowp vec4 col;\n"
|
||||
"uniform highp mat4 matrix;\n"
|
||||
"void main() {\n"
|
||||
" col = colAttr;\n"
|
||||
" gl_Position = matrix * posAttr;\n"
|
||||
"}\n";
|
||||
|
||||
static const char *fragmentShaderSource =
|
||||
"varying lowp vec4 col;\n"
|
||||
"void main() {\n"
|
||||
" gl_FragColor = col;\n"
|
||||
"}\n";
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
void TriangleWindow::initialize()
|
||||
{
|
||||
m_program = new QOpenGLShaderProgram(this);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->link();
|
||||
m_posAttr = m_program->attributeLocation("posAttr");
|
||||
Q_ASSERT(m_posAttr != -1);
|
||||
m_colAttr = m_program->attributeLocation("colAttr");
|
||||
Q_ASSERT(m_colAttr != -1);
|
||||
m_matrixUniform = m_program->uniformLocation("matrix");
|
||||
Q_ASSERT(m_matrixUniform != -1);
|
||||
}
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
void TriangleWindow::render()
|
||||
{
|
||||
const qreal retinaScale = devicePixelRatio();
|
||||
glViewport(0, 0, width() * retinaScale, height() * retinaScale);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
m_program->bind();
|
||||
|
||||
QMatrix4x4 matrix;
|
||||
matrix.perspective(60.0f, 4.0f / 3.0f, 0.1f, 100.0f);
|
||||
matrix.translate(0, 0, -2);
|
||||
matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);
|
||||
|
||||
m_program->setUniformValue(m_matrixUniform, matrix);
|
||||
|
||||
static const GLfloat vertices[] = {
|
||||
0.0f, 0.707f,
|
||||
-0.5f, -0.5f,
|
||||
0.5f, -0.5f
|
||||
};
|
||||
|
||||
static const GLfloat colors[] = {
|
||||
1.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
||||
glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors);
|
||||
|
||||
glEnableVertexAttribArray(m_posAttr);
|
||||
glEnableVertexAttribArray(m_colAttr);
|
||||
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
|
||||
glDisableVertexAttribArray(m_colAttr);
|
||||
glDisableVertexAttribArray(m_posAttr);
|
||||
|
||||
m_program->release();
|
||||
|
||||
++m_frame;
|
||||
}
|
||||
//! [5]
|
||||
114
ci/openglwindow/openglwindow.cpp
Normal file
114
ci/openglwindow/openglwindow.cpp
Normal file
@@ -0,0 +1,114 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "openglwindow.h"
|
||||
|
||||
#include <QOpenGLContext>
|
||||
#include <QOpenGLPaintDevice>
|
||||
#include <QPainter>
|
||||
|
||||
//! [1]
|
||||
OpenGLWindow::OpenGLWindow(QWindow *parent)
|
||||
: QWindow(parent)
|
||||
{
|
||||
setSurfaceType(QWindow::OpenGLSurface);
|
||||
}
|
||||
//! [1]
|
||||
|
||||
OpenGLWindow::~OpenGLWindow()
|
||||
{
|
||||
delete m_device;
|
||||
}
|
||||
//! [2]
|
||||
void OpenGLWindow::render(QPainter *painter)
|
||||
{
|
||||
Q_UNUSED(painter);
|
||||
}
|
||||
|
||||
void OpenGLWindow::initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void OpenGLWindow::render()
|
||||
{
|
||||
if (!m_device)
|
||||
m_device = new QOpenGLPaintDevice;
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
m_device->setSize(size() * devicePixelRatio());
|
||||
m_device->setDevicePixelRatio(devicePixelRatio());
|
||||
|
||||
QPainter painter(m_device);
|
||||
render(&painter);
|
||||
}
|
||||
//! [2]
|
||||
|
||||
//! [3]
|
||||
void OpenGLWindow::renderLater()
|
||||
{
|
||||
requestUpdate();
|
||||
}
|
||||
|
||||
bool OpenGLWindow::event(QEvent *event)
|
||||
{
|
||||
switch (event->type()) {
|
||||
case QEvent::UpdateRequest:
|
||||
renderNow();
|
||||
return true;
|
||||
default:
|
||||
return QWindow::event(event);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLWindow::exposeEvent(QExposeEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
if (isExposed())
|
||||
renderNow();
|
||||
}
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
void OpenGLWindow::renderNow()
|
||||
{
|
||||
if (!isExposed())
|
||||
return;
|
||||
|
||||
bool needsInitialize = false;
|
||||
|
||||
if (!m_context) {
|
||||
m_context = new QOpenGLContext(this);
|
||||
m_context->setFormat(requestedFormat());
|
||||
m_context->create();
|
||||
|
||||
needsInitialize = true;
|
||||
}
|
||||
|
||||
m_context->makeCurrent(this);
|
||||
|
||||
if (needsInitialize) {
|
||||
initializeOpenGLFunctions();
|
||||
initialize();
|
||||
}
|
||||
|
||||
render();
|
||||
|
||||
m_context->swapBuffers(this);
|
||||
|
||||
if (m_animating)
|
||||
renderLater();
|
||||
}
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
void OpenGLWindow::setAnimating(bool animating)
|
||||
{
|
||||
m_animating = animating;
|
||||
|
||||
if (animating)
|
||||
renderLater();
|
||||
}
|
||||
//! [5]
|
||||
|
||||
44
ci/openglwindow/openglwindow.h
Normal file
44
ci/openglwindow/openglwindow.h
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include <QWindow>
|
||||
#include <QOpenGLFunctions>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QPainter;
|
||||
class QOpenGLContext;
|
||||
class QOpenGLPaintDevice;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
//! [1]
|
||||
class OpenGLWindow : public QWindow, protected QOpenGLFunctions
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit OpenGLWindow(QWindow *parent = nullptr);
|
||||
~OpenGLWindow();
|
||||
|
||||
virtual void render(QPainter *painter);
|
||||
virtual void render();
|
||||
|
||||
virtual void initialize();
|
||||
|
||||
void setAnimating(bool animating);
|
||||
|
||||
public slots:
|
||||
void renderLater();
|
||||
void renderNow();
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event) override;
|
||||
|
||||
void exposeEvent(QExposeEvent *event) override;
|
||||
|
||||
private:
|
||||
bool m_animating = false;
|
||||
|
||||
QOpenGLContext *m_context = nullptr;
|
||||
QOpenGLPaintDevice *m_device = nullptr;
|
||||
};
|
||||
//! [1]
|
||||
|
||||
4
ci/openglwindow/openglwindow.pri
Normal file
4
ci/openglwindow/openglwindow.pri
Normal file
@@ -0,0 +1,4 @@
|
||||
QT += opengl
|
||||
INCLUDEPATH += $$PWD
|
||||
SOURCES += $$PWD/openglwindow.cpp
|
||||
HEADERS += $$PWD/openglwindow.h
|
||||
7
ci/openglwindow/openglwindow.pro
Normal file
7
ci/openglwindow/openglwindow.pro
Normal file
@@ -0,0 +1,7 @@
|
||||
include(openglwindow.pri)
|
||||
|
||||
SOURCES += \
|
||||
main.cpp
|
||||
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/opengl/openglwindow
|
||||
INSTALLS += target
|
||||
180
ci/openglwindow_qt5/main.cpp
Normal file
180
ci/openglwindow_qt5/main.cpp
Normal file
@@ -0,0 +1,180 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "openglwindow.h"
|
||||
|
||||
#include <QtGui/QGuiApplication>
|
||||
#include <QtGui/QMatrix4x4>
|
||||
#include <QtGui/QOpenGLShaderProgram>
|
||||
#include <QtGui/QScreen>
|
||||
|
||||
#include <QtCore/qmath.h>
|
||||
|
||||
//! [1]
|
||||
class TriangleWindow : public OpenGLWindow
|
||||
{
|
||||
public:
|
||||
TriangleWindow();
|
||||
|
||||
void initialize() override;
|
||||
void render() override;
|
||||
|
||||
private:
|
||||
GLuint m_posAttr;
|
||||
GLuint m_colAttr;
|
||||
GLuint m_matrixUniform;
|
||||
|
||||
QOpenGLShaderProgram *m_program;
|
||||
int m_frame;
|
||||
};
|
||||
|
||||
TriangleWindow::TriangleWindow()
|
||||
: m_program(0)
|
||||
, m_frame(0)
|
||||
{
|
||||
}
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
QSurfaceFormat format;
|
||||
format.setSamples(16);
|
||||
|
||||
TriangleWindow window;
|
||||
window.setFormat(format);
|
||||
window.resize(640, 480);
|
||||
window.show();
|
||||
|
||||
window.setAnimating(true);
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
//! [2]
|
||||
|
||||
|
||||
//! [3]
|
||||
static const char *vertexShaderSource =
|
||||
"attribute highp vec4 posAttr;\n"
|
||||
"attribute lowp vec4 colAttr;\n"
|
||||
"varying lowp vec4 col;\n"
|
||||
"uniform highp mat4 matrix;\n"
|
||||
"void main() {\n"
|
||||
" col = colAttr;\n"
|
||||
" gl_Position = matrix * posAttr;\n"
|
||||
"}\n";
|
||||
|
||||
static const char *fragmentShaderSource =
|
||||
"varying lowp vec4 col;\n"
|
||||
"void main() {\n"
|
||||
" gl_FragColor = col;\n"
|
||||
"}\n";
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
void TriangleWindow::initialize()
|
||||
{
|
||||
m_program = new QOpenGLShaderProgram(this);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
|
||||
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
|
||||
m_program->link();
|
||||
m_posAttr = m_program->attributeLocation("posAttr");
|
||||
m_colAttr = m_program->attributeLocation("colAttr");
|
||||
m_matrixUniform = m_program->uniformLocation("matrix");
|
||||
}
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
void TriangleWindow::render()
|
||||
{
|
||||
const qreal retinaScale = devicePixelRatio();
|
||||
glViewport(0, 0, width() * retinaScale, height() * retinaScale);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
m_program->bind();
|
||||
|
||||
QMatrix4x4 matrix;
|
||||
matrix.perspective(60.0f, 4.0f/3.0f, 0.1f, 100.0f);
|
||||
matrix.translate(0, 0, -2);
|
||||
matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);
|
||||
|
||||
m_program->setUniformValue(m_matrixUniform, matrix);
|
||||
|
||||
GLfloat vertices[] = {
|
||||
0.0f, 0.707f,
|
||||
-0.5f, -0.5f,
|
||||
0.5f, -0.5f
|
||||
};
|
||||
|
||||
GLfloat colors[] = {
|
||||
1.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
||||
glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors);
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glEnableVertexAttribArray(1);
|
||||
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
|
||||
glDisableVertexAttribArray(1);
|
||||
glDisableVertexAttribArray(0);
|
||||
|
||||
m_program->release();
|
||||
|
||||
++m_frame;
|
||||
}
|
||||
//! [5]
|
||||
166
ci/openglwindow_qt5/openglwindow.cpp
Normal file
166
ci/openglwindow_qt5/openglwindow.cpp
Normal file
@@ -0,0 +1,166 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "openglwindow.h"
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
#include <QtGui/QOpenGLContext>
|
||||
#include <QtGui/QOpenGLPaintDevice>
|
||||
#include <QtGui/QPainter>
|
||||
|
||||
//! [1]
|
||||
OpenGLWindow::OpenGLWindow(QWindow *parent)
|
||||
: QWindow(parent)
|
||||
, m_animating(false)
|
||||
, m_context(0)
|
||||
, m_device(0)
|
||||
{
|
||||
setSurfaceType(QWindow::OpenGLSurface);
|
||||
}
|
||||
//! [1]
|
||||
|
||||
OpenGLWindow::~OpenGLWindow()
|
||||
{
|
||||
delete m_device;
|
||||
}
|
||||
//! [2]
|
||||
void OpenGLWindow::render(QPainter *painter)
|
||||
{
|
||||
Q_UNUSED(painter);
|
||||
}
|
||||
|
||||
void OpenGLWindow::initialize()
|
||||
{
|
||||
}
|
||||
|
||||
void OpenGLWindow::render()
|
||||
{
|
||||
if (!m_device)
|
||||
m_device = new QOpenGLPaintDevice;
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
m_device->setSize(size() * devicePixelRatio());
|
||||
m_device->setDevicePixelRatio(devicePixelRatio());
|
||||
|
||||
QPainter painter(m_device);
|
||||
render(&painter);
|
||||
}
|
||||
//! [2]
|
||||
|
||||
//! [3]
|
||||
void OpenGLWindow::renderLater()
|
||||
{
|
||||
requestUpdate();
|
||||
}
|
||||
|
||||
bool OpenGLWindow::event(QEvent *event)
|
||||
{
|
||||
switch (event->type()) {
|
||||
case QEvent::UpdateRequest:
|
||||
renderNow();
|
||||
return true;
|
||||
default:
|
||||
return QWindow::event(event);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLWindow::exposeEvent(QExposeEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
|
||||
if (isExposed())
|
||||
renderNow();
|
||||
}
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
void OpenGLWindow::renderNow()
|
||||
{
|
||||
if (!isExposed())
|
||||
return;
|
||||
|
||||
bool needsInitialize = false;
|
||||
|
||||
if (!m_context) {
|
||||
m_context = new QOpenGLContext(this);
|
||||
m_context->setFormat(requestedFormat());
|
||||
m_context->create();
|
||||
|
||||
needsInitialize = true;
|
||||
}
|
||||
|
||||
m_context->makeCurrent(this);
|
||||
|
||||
if (needsInitialize) {
|
||||
initializeOpenGLFunctions();
|
||||
initialize();
|
||||
}
|
||||
|
||||
render();
|
||||
|
||||
m_context->swapBuffers(this);
|
||||
|
||||
if (m_animating)
|
||||
renderLater();
|
||||
}
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
void OpenGLWindow::setAnimating(bool animating)
|
||||
{
|
||||
m_animating = animating;
|
||||
|
||||
if (animating)
|
||||
renderLater();
|
||||
}
|
||||
//! [5]
|
||||
|
||||
91
ci/openglwindow_qt5/openglwindow.h
Normal file
91
ci/openglwindow_qt5/openglwindow.h
Normal file
@@ -0,0 +1,91 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtGui/QWindow>
|
||||
#include <QtGui/QOpenGLFunctions>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QPainter;
|
||||
class QOpenGLContext;
|
||||
class QOpenGLPaintDevice;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
//! [1]
|
||||
class OpenGLWindow : public QWindow, protected QOpenGLFunctions
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit OpenGLWindow(QWindow *parent = 0);
|
||||
~OpenGLWindow();
|
||||
|
||||
virtual void render(QPainter *painter);
|
||||
virtual void render();
|
||||
|
||||
virtual void initialize();
|
||||
|
||||
void setAnimating(bool animating);
|
||||
|
||||
public slots:
|
||||
void renderLater();
|
||||
void renderNow();
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event) override;
|
||||
|
||||
void exposeEvent(QExposeEvent *event) override;
|
||||
|
||||
private:
|
||||
bool m_animating;
|
||||
|
||||
QOpenGLContext *m_context;
|
||||
QOpenGLPaintDevice *m_device;
|
||||
};
|
||||
//! [1]
|
||||
|
||||
3
ci/openglwindow_qt5/openglwindow.pri
Normal file
3
ci/openglwindow_qt5/openglwindow.pri
Normal file
@@ -0,0 +1,3 @@
|
||||
INCLUDEPATH += $$PWD
|
||||
SOURCES += $$PWD/openglwindow.cpp
|
||||
HEADERS += $$PWD/openglwindow.h
|
||||
7
ci/openglwindow_qt5/openglwindow.pro
Normal file
7
ci/openglwindow_qt5/openglwindow.pro
Normal file
@@ -0,0 +1,7 @@
|
||||
include(openglwindow.pri)
|
||||
|
||||
SOURCES += \
|
||||
main.cpp
|
||||
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/gui/openglwindow
|
||||
INSTALLS += target
|
||||
Binary file not shown.
Binary file not shown.
76
ci/redditclient/main.cpp
Normal file
76
ci/redditclient/main.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditmodel.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtWidgets>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
QCommandLineParser parser;
|
||||
const QCommandLineOption clientId(QStringList() << "i" << "client-id",
|
||||
"Specifies the application client id", "client_id");
|
||||
|
||||
parser.addOptions({clientId});
|
||||
parser.process(app);
|
||||
|
||||
if (parser.isSet(clientId)) {
|
||||
QListView view;
|
||||
RedditModel model(parser.value(clientId));
|
||||
view.setModel(&model);
|
||||
view.show();
|
||||
return app.exec();
|
||||
} else {
|
||||
parser.showHelp();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
17
ci/redditclient/redditclient.pro
Normal file
17
ci/redditclient/redditclient.pro
Normal file
@@ -0,0 +1,17 @@
|
||||
QT += widgets network networkauth
|
||||
requires(qtConfig(listview))
|
||||
|
||||
TARGET = redditclient
|
||||
|
||||
# Input
|
||||
SOURCES += main.cpp \
|
||||
redditmodel.cpp \
|
||||
redditwrapper.cpp
|
||||
|
||||
HEADERS += \
|
||||
redditmodel.h \
|
||||
redditwrapper.h
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/oauth/redditclient
|
||||
INSTALLS += target
|
||||
130
ci/redditclient/redditmodel.cpp
Normal file
130
ci/redditclient/redditmodel.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditmodel.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
|
||||
RedditModel::RedditModel(QObject *parent) : QAbstractTableModel(parent) {}
|
||||
|
||||
RedditModel::RedditModel(const QString &clientId, QObject *parent) :
|
||||
QAbstractTableModel(parent),
|
||||
redditWrapper(clientId)
|
||||
{
|
||||
grant();
|
||||
}
|
||||
|
||||
int RedditModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return threads.size();
|
||||
}
|
||||
|
||||
int RedditModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return threads.size() ? 1 : 0;
|
||||
}
|
||||
|
||||
QVariant RedditModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
Q_UNUSED(role);
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
const auto childrenObject = threads.at(index.row());
|
||||
Q_ASSERT(childrenObject.value("data").isObject());
|
||||
const auto dataObject = childrenObject.value("data").toObject();
|
||||
return dataObject.value("title").toString();
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void RedditModel::grant()
|
||||
{
|
||||
redditWrapper.grant();
|
||||
connect(&redditWrapper, &RedditWrapper::authenticated, this, &RedditModel::update);
|
||||
}
|
||||
|
||||
void RedditModel::update()
|
||||
{
|
||||
auto reply = redditWrapper.requestHotThreads();
|
||||
|
||||
connect(reply, &QNetworkReply::finished, [=]() {
|
||||
reply->deleteLater();
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
emit error(reply->errorString());
|
||||
return;
|
||||
}
|
||||
const auto json = reply->readAll();
|
||||
const auto document = QJsonDocument::fromJson(json);
|
||||
Q_ASSERT(document.isObject());
|
||||
const auto rootObject = document.object();
|
||||
Q_ASSERT(rootObject.value("kind").toString() == "Listing");
|
||||
const auto dataValue = rootObject.value("data");
|
||||
Q_ASSERT(dataValue.isObject());
|
||||
const auto dataObject = dataValue.toObject();
|
||||
const auto childrenValue = dataObject.value("children");
|
||||
Q_ASSERT(childrenValue.isArray());
|
||||
const auto childrenArray = childrenValue.toArray();
|
||||
|
||||
if (childrenArray.isEmpty())
|
||||
return;
|
||||
|
||||
beginInsertRows(QModelIndex(), threads.size(), childrenArray.size() + threads.size() - 1);
|
||||
for (const auto childValue : qAsConst(childrenArray)) {
|
||||
Q_ASSERT(childValue.isObject());
|
||||
threads.append(childValue.toObject());
|
||||
}
|
||||
endInsertRows();
|
||||
});
|
||||
}
|
||||
86
ci/redditclient/redditmodel.h
Normal file
86
ci/redditclient/redditmodel.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef REDDITMODEL_H
|
||||
#define REDDITMODEL_H
|
||||
|
||||
#include "redditwrapper.h"
|
||||
|
||||
#include <QtCore>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QNetworkReply)
|
||||
|
||||
class RedditModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RedditModel(QObject *parent = nullptr);
|
||||
RedditModel(const QString &clientId, QObject *parent = nullptr);
|
||||
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
|
||||
void grant();
|
||||
|
||||
signals:
|
||||
void error(const QString &errorString);
|
||||
|
||||
private slots:
|
||||
void update();
|
||||
|
||||
private:
|
||||
RedditWrapper redditWrapper;
|
||||
QPointer<QNetworkReply> liveThreadReply;
|
||||
QList<QJsonObject> threads;
|
||||
};
|
||||
|
||||
#endif // REDDITMODEL_H
|
||||
133
ci/redditclient/redditwrapper.cpp
Normal file
133
ci/redditclient/redditwrapper.cpp
Normal file
@@ -0,0 +1,133 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditwrapper.h"
|
||||
|
||||
#include <QtGui>
|
||||
#include <QtCore>
|
||||
#include <QtNetworkAuth>
|
||||
|
||||
const QUrl newUrl("https://oauth.reddit.com/new");
|
||||
const QUrl hotUrl("https://oauth.reddit.com/hot");
|
||||
const QUrl liveThreadsUrl("https://oauth.reddit.com/live/XXXX/about.json");
|
||||
|
||||
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
|
||||
{
|
||||
auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
|
||||
oauth2.setReplyHandler(replyHandler);
|
||||
oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
|
||||
oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
|
||||
oauth2.setScope("identity read");
|
||||
|
||||
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
|
||||
QAbstractOAuth::Status status) {
|
||||
if (status == QAbstractOAuth::Status::Granted)
|
||||
emit authenticated();
|
||||
});
|
||||
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QMultiMap<QString, QVariant> *parameters) {
|
||||
if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
|
||||
parameters->insert("duration", "permanent");
|
||||
});
|
||||
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
|
||||
&QDesktopServices::openUrl);
|
||||
}
|
||||
|
||||
RedditWrapper::RedditWrapper(const QString &clientIdentifier, QObject *parent) :
|
||||
RedditWrapper(parent)
|
||||
{
|
||||
oauth2.setClientIdentifier(clientIdentifier);
|
||||
}
|
||||
|
||||
QNetworkReply *RedditWrapper::requestHotThreads()
|
||||
{
|
||||
qDebug() << "Getting hot threads...";
|
||||
return oauth2.get(hotUrl);
|
||||
}
|
||||
|
||||
bool RedditWrapper::isPermanent() const
|
||||
{
|
||||
return permanent;
|
||||
}
|
||||
|
||||
void RedditWrapper::setPermanent(bool value)
|
||||
{
|
||||
permanent = value;
|
||||
}
|
||||
|
||||
void RedditWrapper::grant()
|
||||
{
|
||||
oauth2.grant();
|
||||
}
|
||||
|
||||
void RedditWrapper::subscribeToLiveUpdates()
|
||||
{
|
||||
qDebug() << "Susbscribing...";
|
||||
QNetworkReply *reply = oauth2.get(liveThreadsUrl);
|
||||
connect(reply, &QNetworkReply::finished, [=]() {
|
||||
reply->deleteLater();
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
qCritical() << "Reddit error:" << reply->errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
const auto json = reply->readAll();
|
||||
|
||||
const auto document = QJsonDocument::fromJson(json);
|
||||
Q_ASSERT(document.isObject());
|
||||
const auto rootObject = document.object();
|
||||
const auto dataValue = rootObject.value("data");
|
||||
Q_ASSERT(dataValue.isObject());
|
||||
const auto dataObject = dataValue.toObject();
|
||||
const auto websocketUrlValue = dataObject.value("websocket_url");
|
||||
Q_ASSERT(websocketUrlValue.isString() && websocketUrlValue.toString().size());
|
||||
const QUrl websocketUrl(websocketUrlValue.toString());
|
||||
emit subscribed(websocketUrl);
|
||||
});
|
||||
}
|
||||
85
ci/redditclient/redditwrapper.h
Normal file
85
ci/redditclient/redditwrapper.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef REDDITWRAPPER_H
|
||||
#define REDDITWRAPPER_H
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
|
||||
#include <QOAuth2AuthorizationCodeFlow>
|
||||
|
||||
class RedditWrapper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RedditWrapper(QObject *parent = nullptr);
|
||||
RedditWrapper(const QString &clientIdentifier, QObject *parent = nullptr);
|
||||
|
||||
QNetworkReply *requestHotThreads();
|
||||
|
||||
bool isPermanent() const;
|
||||
void setPermanent(bool value);
|
||||
|
||||
public slots:
|
||||
void grant();
|
||||
void subscribeToLiveUpdates();
|
||||
|
||||
signals:
|
||||
void authenticated();
|
||||
void subscribed(const QUrl &url);
|
||||
|
||||
private:
|
||||
QOAuth2AuthorizationCodeFlow oauth2;
|
||||
bool permanent = false;
|
||||
};
|
||||
|
||||
#endif // REDDITWRAPPER_H
|
||||
76
ci/redditclient_qt5/main.cpp
Normal file
76
ci/redditclient_qt5/main.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditmodel.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtWidgets>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
QCommandLineParser parser;
|
||||
const QCommandLineOption clientId(QStringList() << "i" << "client-id",
|
||||
"Specifies the application client id", "client_id");
|
||||
|
||||
parser.addOptions({clientId});
|
||||
parser.process(app);
|
||||
|
||||
if (parser.isSet(clientId)) {
|
||||
QListView view;
|
||||
RedditModel model(parser.value(clientId));
|
||||
view.setModel(&model);
|
||||
view.show();
|
||||
return app.exec();
|
||||
} else {
|
||||
parser.showHelp();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
17
ci/redditclient_qt5/redditclient.pro
Normal file
17
ci/redditclient_qt5/redditclient.pro
Normal file
@@ -0,0 +1,17 @@
|
||||
QT += widgets network networkauth
|
||||
requires(qtConfig(listview))
|
||||
|
||||
TARGET = redditclient
|
||||
|
||||
# Input
|
||||
SOURCES += main.cpp \
|
||||
redditmodel.cpp \
|
||||
redditwrapper.cpp
|
||||
|
||||
HEADERS += \
|
||||
redditmodel.h \
|
||||
redditwrapper.h
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/oauth/redditclient
|
||||
INSTALLS += target
|
||||
130
ci/redditclient_qt5/redditmodel.cpp
Normal file
130
ci/redditclient_qt5/redditmodel.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditmodel.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
|
||||
RedditModel::RedditModel(QObject *parent) : QAbstractTableModel(parent) {}
|
||||
|
||||
RedditModel::RedditModel(const QString &clientId, QObject *parent) :
|
||||
QAbstractTableModel(parent),
|
||||
redditWrapper(clientId)
|
||||
{
|
||||
grant();
|
||||
}
|
||||
|
||||
int RedditModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return threads.size();
|
||||
}
|
||||
|
||||
int RedditModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return threads.size() ? 1 : 0;
|
||||
}
|
||||
|
||||
QVariant RedditModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
Q_UNUSED(role);
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
const auto childrenObject = threads.at(index.row());
|
||||
Q_ASSERT(childrenObject.value("data").isObject());
|
||||
const auto dataObject = childrenObject.value("data").toObject();
|
||||
return dataObject.value("title").toString();
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
void RedditModel::grant()
|
||||
{
|
||||
redditWrapper.grant();
|
||||
connect(&redditWrapper, &RedditWrapper::authenticated, this, &RedditModel::update);
|
||||
}
|
||||
|
||||
void RedditModel::update()
|
||||
{
|
||||
auto reply = redditWrapper.requestHotThreads();
|
||||
|
||||
connect(reply, &QNetworkReply::finished, [=]() {
|
||||
reply->deleteLater();
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
emit error(reply->errorString());
|
||||
return;
|
||||
}
|
||||
const auto json = reply->readAll();
|
||||
const auto document = QJsonDocument::fromJson(json);
|
||||
Q_ASSERT(document.isObject());
|
||||
const auto rootObject = document.object();
|
||||
Q_ASSERT(rootObject.value("kind").toString() == "Listing");
|
||||
const auto dataValue = rootObject.value("data");
|
||||
Q_ASSERT(dataValue.isObject());
|
||||
const auto dataObject = dataValue.toObject();
|
||||
const auto childrenValue = dataObject.value("children");
|
||||
Q_ASSERT(childrenValue.isArray());
|
||||
const auto childrenArray = childrenValue.toArray();
|
||||
|
||||
if (childrenArray.isEmpty())
|
||||
return;
|
||||
|
||||
beginInsertRows(QModelIndex(), threads.size(), childrenArray.size() + threads.size() - 1);
|
||||
for (const auto childValue : qAsConst(childrenArray)) {
|
||||
Q_ASSERT(childValue.isObject());
|
||||
threads.append(childValue.toObject());
|
||||
}
|
||||
endInsertRows();
|
||||
});
|
||||
}
|
||||
86
ci/redditclient_qt5/redditmodel.h
Normal file
86
ci/redditclient_qt5/redditmodel.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef REDDITMODEL_H
|
||||
#define REDDITMODEL_H
|
||||
|
||||
#include "redditwrapper.h"
|
||||
|
||||
#include <QtCore>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QNetworkReply)
|
||||
|
||||
class RedditModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RedditModel(QObject *parent = nullptr);
|
||||
RedditModel(const QString &clientId, QObject *parent = nullptr);
|
||||
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
|
||||
void grant();
|
||||
|
||||
signals:
|
||||
void error(const QString &errorString);
|
||||
|
||||
private slots:
|
||||
void update();
|
||||
|
||||
private:
|
||||
RedditWrapper redditWrapper;
|
||||
QPointer<QNetworkReply> liveThreadReply;
|
||||
QList<QJsonObject> threads;
|
||||
};
|
||||
|
||||
#endif // REDDITMODEL_H
|
||||
133
ci/redditclient_qt5/redditwrapper.cpp
Normal file
133
ci/redditclient_qt5/redditwrapper.cpp
Normal file
@@ -0,0 +1,133 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "redditwrapper.h"
|
||||
|
||||
#include <QtGui>
|
||||
#include <QtCore>
|
||||
#include <QtNetworkAuth>
|
||||
|
||||
const QUrl newUrl("https://oauth.reddit.com/new");
|
||||
const QUrl hotUrl("https://oauth.reddit.com/hot");
|
||||
const QUrl liveThreadsUrl("https://oauth.reddit.com/live/XXXX/about.json");
|
||||
|
||||
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
|
||||
{
|
||||
auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
|
||||
oauth2.setReplyHandler(replyHandler);
|
||||
oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
|
||||
oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
|
||||
oauth2.setScope("identity read");
|
||||
|
||||
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
|
||||
QAbstractOAuth::Status status) {
|
||||
if (status == QAbstractOAuth::Status::Granted)
|
||||
emit authenticated();
|
||||
});
|
||||
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap *parameters) {
|
||||
if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
|
||||
parameters->insert("duration", "permanent");
|
||||
});
|
||||
connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
|
||||
&QDesktopServices::openUrl);
|
||||
}
|
||||
|
||||
RedditWrapper::RedditWrapper(const QString &clientIdentifier, QObject *parent) :
|
||||
RedditWrapper(parent)
|
||||
{
|
||||
oauth2.setClientIdentifier(clientIdentifier);
|
||||
}
|
||||
|
||||
QNetworkReply *RedditWrapper::requestHotThreads()
|
||||
{
|
||||
qDebug() << "Getting hot threads...";
|
||||
return oauth2.get(hotUrl);
|
||||
}
|
||||
|
||||
bool RedditWrapper::isPermanent() const
|
||||
{
|
||||
return permanent;
|
||||
}
|
||||
|
||||
void RedditWrapper::setPermanent(bool value)
|
||||
{
|
||||
permanent = value;
|
||||
}
|
||||
|
||||
void RedditWrapper::grant()
|
||||
{
|
||||
oauth2.grant();
|
||||
}
|
||||
|
||||
void RedditWrapper::subscribeToLiveUpdates()
|
||||
{
|
||||
qDebug() << "Susbscribing...";
|
||||
QNetworkReply *reply = oauth2.get(liveThreadsUrl);
|
||||
connect(reply, &QNetworkReply::finished, [=]() {
|
||||
reply->deleteLater();
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
qCritical() << "Reddit error:" << reply->errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
const auto json = reply->readAll();
|
||||
|
||||
const auto document = QJsonDocument::fromJson(json);
|
||||
Q_ASSERT(document.isObject());
|
||||
const auto rootObject = document.object();
|
||||
const auto dataValue = rootObject.value("data");
|
||||
Q_ASSERT(dataValue.isObject());
|
||||
const auto dataObject = dataValue.toObject();
|
||||
const auto websocketUrlValue = dataObject.value("websocket_url");
|
||||
Q_ASSERT(websocketUrlValue.isString() && websocketUrlValue.toString().size());
|
||||
const QUrl websocketUrl(websocketUrlValue.toString());
|
||||
emit subscribed(websocketUrl);
|
||||
});
|
||||
}
|
||||
85
ci/redditclient_qt5/redditwrapper.h
Normal file
85
ci/redditclient_qt5/redditwrapper.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Network Auth module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** BSD License Usage
|
||||
** Alternatively, you may use this file under the terms of the BSD license
|
||||
** as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef REDDITWRAPPER_H
|
||||
#define REDDITWRAPPER_H
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
|
||||
#include <QOAuth2AuthorizationCodeFlow>
|
||||
|
||||
class RedditWrapper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RedditWrapper(QObject *parent = nullptr);
|
||||
RedditWrapper(const QString &clientIdentifier, QObject *parent = nullptr);
|
||||
|
||||
QNetworkReply *requestHotThreads();
|
||||
|
||||
bool isPermanent() const;
|
||||
void setPermanent(bool value);
|
||||
|
||||
public slots:
|
||||
void grant();
|
||||
void subscribeToLiveUpdates();
|
||||
|
||||
signals:
|
||||
void authenticated();
|
||||
void subscribed(const QUrl &url);
|
||||
|
||||
private:
|
||||
QOAuth2AuthorizationCodeFlow oauth2;
|
||||
bool permanent = false;
|
||||
};
|
||||
|
||||
#endif // REDDITWRAPPER_H
|
||||
87
ci/steps.yml
87
ci/steps.yml
@@ -173,10 +173,8 @@ steps:
|
||||
unzip android-ndk-r21e-darwin-x86_64.zip
|
||||
fi
|
||||
export ANDROID_NDK_ROOT=$(Build.SourcesDirectory)/android-ndk-r21e
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/accelbubble.7z)
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake $(Build.BinariesDirectory)/tests/accelbubble
|
||||
qmake $(Build.SourcesDirectory)/ci/accelbubble
|
||||
make
|
||||
condition: |
|
||||
and(
|
||||
@@ -194,10 +192,8 @@ steps:
|
||||
# for iOS target
|
||||
- bash: |
|
||||
set -ex
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/accelbubble.7z)
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake $(Build.BinariesDirectory)/tests/accelbubble
|
||||
qmake $(Build.SourcesDirectory)/ci/accelbubble
|
||||
make
|
||||
condition: |
|
||||
and(eq(variables['TARGET'], 'ios'),
|
||||
@@ -247,19 +243,25 @@ steps:
|
||||
Write-Host '##vso[task.setvariable variable=VSVER]2022'
|
||||
}
|
||||
cd $(WIN_QT_BINDIR)
|
||||
unzip $(Build.SourcesDirectory)\ci\jom_1_1_3.zip
|
||||
$jomurl = 'https://download.qt.io/official_releases/jom/' + $env:JOM
|
||||
$md5sum = $env:MD5 + ' ' + $env:JOM
|
||||
Invoke-WebRequest -Uri $jomurl -OutFile $env:JOM
|
||||
Set-Content -Encoding utf8 -Path md5sums.txt -Value $md5sum
|
||||
md5sum -c md5sums.txt
|
||||
unzip $env:JOM
|
||||
condition: |
|
||||
and(eq(variables['Agent.OS'], 'Windows_NT'),
|
||||
eq(variables['SUBCOMMAND'], 'install-qt'))
|
||||
env:
|
||||
JOM: jom_1_1_3.zip
|
||||
MD5: f960efa8dc1e99df088d32bc1bc2157c
|
||||
displayName: Detect toolchain for Windows and update PATH
|
||||
|
||||
# When no modules
|
||||
- script: |
|
||||
set -ex
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/helloworld.7z)
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake $(Build.BinariesDirectory)/tests/helloworld
|
||||
qmake $(Build.SourcesDirectory)/ci/helloworld
|
||||
make
|
||||
condition: |
|
||||
and(
|
||||
@@ -284,11 +286,7 @@ steps:
|
||||
|
||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||
mkdir $(Build.BinariesDirectory)\tests
|
||||
cd $(Build.BinariesDirectory)\tests
|
||||
7z x $(Build.SourcesDirectory)\ci\helloworld.7z
|
||||
cd ..
|
||||
qmake $(Build.BinariesDirectory)\tests\helloworld
|
||||
qmake $(Build.SourcesDirectory)/ci/helloworld
|
||||
jom
|
||||
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
||||
python -m aqt install-tool $(if (($QT_BASE_MIRROR + "") -ne "") { "-b $QT_BASE_MIRROR" } else {""}) `
|
||||
@@ -300,11 +298,7 @@ steps:
|
||||
}
|
||||
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
||||
Write-Host "Path == " + $env:Path
|
||||
mkdir $(Build.BinariesDirectory)\tests
|
||||
cd $(Build.BinariesDirectory)\tests
|
||||
7z x $(Build.SourcesDirectory)\ci\helloworld.7z
|
||||
cd ..
|
||||
qmake $(Build.BinariesDirectory)\tests\helloworld
|
||||
qmake $(Build.SourcesDirectory)\ci\helloworld
|
||||
mingw32-make
|
||||
}
|
||||
condition: |
|
||||
@@ -321,11 +315,8 @@ steps:
|
||||
# When --archives non-empty
|
||||
- script: |
|
||||
set -ex
|
||||
rm -rf $(Build.BinariesDirectory)/tests
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
(cd $(Build.BinariesDirectory)/tests && 7zr x $(Build.SourcesDirectory)/ci/helloworld_qttools.7z)
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake -d $(Build.BinariesDirectory)/tests/helloworld_qttools
|
||||
qmake $(Build.SourcesDirectory)/ci/helloworld_qttools
|
||||
make
|
||||
condition: |
|
||||
and(
|
||||
@@ -349,11 +340,7 @@ steps:
|
||||
|
||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
|
||||
mkdir $(Build.BinariesDirectory)\tests
|
||||
cd $(Build.BinariesDirectory)\tests
|
||||
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
|
||||
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
|
||||
qmake $(Build.SourcesDirectory)\ci\helloworld_qttools
|
||||
nmake
|
||||
} elseif ( $env:TOOLCHAIN -eq 'MINGW' ) {
|
||||
Set-Item -Path Env:Path -Value ("$(Build.BinariesDirectory)\Qt\Tools\$(MINGW_FOLDER)\bin;$(WIN_QT_BINDIR);" + $Env:Path)
|
||||
@@ -367,11 +354,7 @@ steps:
|
||||
throw 'Failed to install tools_mingw'
|
||||
}
|
||||
}
|
||||
try { rm -r -fo $(Build.BinariesDirectory)\tests } catch { $Error.Clear() }
|
||||
mkdir $(Build.BinariesDirectory)\tests
|
||||
cd $(Build.BinariesDirectory)\tests
|
||||
7z x $(Build.SourcesDirectory)\ci\helloworld_qttools.7z
|
||||
qmake -d $(Build.BinariesDirectory)\tests\helloworld_qttools
|
||||
qmake $(Build.SourcesDirectory)\ci\helloworld_qttools
|
||||
mingw32-make
|
||||
}
|
||||
condition: |
|
||||
@@ -395,11 +378,7 @@ steps:
|
||||
Import-VisualStudioVars -VisualStudioVersion $(VSVER) -Architecture $(ARCHITECTURE)
|
||||
$env:Path += ";$(WIN_QT_BINDIR)"
|
||||
echo Add Qt to PATH: $env:PATH
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
cd $(Build.BinariesDirectory)/tests
|
||||
7z x $(Build.SourcesDirectory)/ci/redditclient.7z
|
||||
cd ..
|
||||
qmake $(Build.BinariesDirectory)\tests\redditclient
|
||||
qmake $(Build.SourcesDirectory)/ci/redditclient
|
||||
nmake
|
||||
condition: |
|
||||
and(
|
||||
@@ -411,13 +390,12 @@ steps:
|
||||
displayName: build test with qmake with MSVC with extra module
|
||||
- bash: |
|
||||
set -ex
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/redditclient.7z)
|
||||
if [[ "6" -eq "${QT_VERSION:0:1}" ]]; then
|
||||
(cd $(Build.BinariesDirectory)/tests/redditclient;patch -i redditclient_6.diff -p1)
|
||||
fi
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake $(Build.BinariesDirectory)/tests/redditclient
|
||||
if [[ "6" -eq "${QT_VERSION:0:1}" ]]; then
|
||||
qmake $(Build.SourcesDirectory)/ci/redditclient
|
||||
else
|
||||
qmake $(Build.SourcesDirectory)/ci/redditclient_qt5
|
||||
fi
|
||||
make
|
||||
condition: |
|
||||
and(
|
||||
@@ -440,15 +418,12 @@ steps:
|
||||
./emsdk install $(EMSDK_VERSION)
|
||||
./emsdk activate --embedded $(EMSDK_VERSION)
|
||||
source $(Build.BinariesDirectory)/emsdk/emsdk_env.sh
|
||||
mkdir $(Build.BinariesDirectory)/tests
|
||||
if [[ $(QT_VERSION) = 6* ]]; then
|
||||
OPENGLWINDOW_7Z="openglwindow_qt6.7z"
|
||||
else
|
||||
OPENGLWINDOW_7Z="openglwindow.7z"
|
||||
fi
|
||||
(cd $(Build.BinariesDirectory)/tests; 7zr x $(Build.SourcesDirectory)/ci/$OPENGLWINDOW_7Z)
|
||||
export PATH=$(QT_BINDIR):$PATH
|
||||
qmake $(Build.BinariesDirectory)/tests/openglwindow
|
||||
if [[ $(QT_VERSION) = 6* ]]; then
|
||||
qmake $(Build.SourcesDirectory)/ci/openglwindow
|
||||
else
|
||||
qmake $(Build.SourcesDirectory)/ci/openglwindow_qt5
|
||||
fi
|
||||
make
|
||||
workingDirectory: $(Build.BinariesDirectory)
|
||||
condition: |
|
||||
@@ -474,13 +449,11 @@ steps:
|
||||
echo "Add Qt/qmake to PATH at $(WIN_QT_BINDIR):"
|
||||
echo "$env:Path"
|
||||
if ('$(QT_VERSION)' -like '6*') {
|
||||
7z x $(Build.SourcesDirectory)\ci\openglwindow_qt6.7z
|
||||
echo "Inlined qmake.bat command is: $(WIN_AUTODESK_QT_BINDIR)\qmake -qtconf $(WIN_QT_BINDIR)\target_qt.conf $(Build.BinariesDirectory)\tests\openglwindow"
|
||||
$(WIN_AUTODESK_QT_BINDIR)\qmake.exe -qtconf "$(WIN_QT_BINDIR)\target_qt.conf" $(Build.BinariesDirectory)\tests\openglwindow
|
||||
$(WIN_AUTODESK_QT_BINDIR)\qmake.exe -qtconf "$(WIN_QT_BINDIR)\target_qt.conf" $(Build.SourcesDirectory)\ci\openglwindow
|
||||
} else {
|
||||
7z x $(Build.SourcesDirectory)\ci\openglwindow.7z
|
||||
echo "Qt5: run qmake.exe"
|
||||
qmake $(Build.BinariesDirectory)\tests\openglwindow
|
||||
qmake $(Build.SourcesDirectory)\ci\openglwindow_qt5
|
||||
}
|
||||
if ($false -eq $?) {
|
||||
Write-Error "qmake failed."
|
||||
|
||||
Reference in New Issue
Block a user