mirror of
https://github.com/cagnulein/qdomyos-zwift.git
synced 2026-02-18 00:17:41 +01:00
Compare commits
132 Commits
build-1024
...
zwift-api-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd4cf5ea09 | ||
|
|
6d20a109a8 | ||
|
|
82ea0adadc | ||
|
|
359adce2ce | ||
|
|
52d4f0234b | ||
|
|
fe9bdc1e38 | ||
|
|
b4f18b8976 | ||
|
|
6da7b489f8 | ||
|
|
d29ecc6f64 | ||
|
|
f2db390567 | ||
|
|
320e09283d | ||
|
|
f6b0f4873d | ||
|
|
0ab25058fb | ||
|
|
b220bb93d6 | ||
|
|
c7c6f53468 | ||
|
|
f1c50972e1 | ||
|
|
8f6f775d3f | ||
|
|
a00306f283 | ||
|
|
4b09de26c9 | ||
|
|
542e88eac4 | ||
|
|
01d89fc53b | ||
|
|
7f92c11208 | ||
|
|
0ecff1c081 | ||
|
|
6e575c8b4f | ||
|
|
98c8a24698 | ||
|
|
86ecc71263 | ||
|
|
e6ddfcf682 | ||
|
|
9f40ddbb9d | ||
|
|
074b4509f6 | ||
|
|
81798642af | ||
|
|
1e3cde341d | ||
|
|
730682522e | ||
|
|
ea206bfd56 | ||
|
|
894fffd108 | ||
|
|
f4ab0673eb | ||
|
|
4ed46a975d | ||
|
|
33469e8508 | ||
|
|
be7ea33f9a | ||
|
|
4416093212 | ||
|
|
7e7bbe6f34 | ||
|
|
43c740fb44 | ||
|
|
1a368abc96 | ||
|
|
9672ac1108 | ||
|
|
136eef163d | ||
|
|
795e9390ee | ||
|
|
ed0b5c7bbc | ||
|
|
dd07927ad2 | ||
|
|
647d250f42 | ||
|
|
ea38ac7ab4 | ||
|
|
5110558895 | ||
|
|
8708bd1f03 | ||
|
|
9a882ad883 | ||
|
|
2adcae3fc1 | ||
|
|
d85f44285a | ||
|
|
d8fc685839 | ||
|
|
f7ee25e9fa | ||
|
|
13630aa52b | ||
|
|
ccca8c72b4 | ||
|
|
f512a4a515 | ||
|
|
2b6899a6c1 | ||
|
|
1f006101da | ||
|
|
d4382fb093 | ||
|
|
b838ac76c4 | ||
|
|
23c8628e4b | ||
|
|
70fd6f9097 | ||
|
|
d4c5853561 | ||
|
|
6b825c643a | ||
|
|
97856b752c | ||
|
|
5465e30d3d | ||
|
|
d0f2ab2700 | ||
|
|
24bf95a039 | ||
|
|
4c6401e7b9 | ||
|
|
571fd08d8c | ||
|
|
c667974aa2 | ||
|
|
4bb2012049 | ||
|
|
4ac43dc166 | ||
|
|
d5e795f5d6 | ||
|
|
eb52fcf6de | ||
|
|
9f4ab19e28 | ||
|
|
1cdfb1edef | ||
|
|
d865887311 | ||
|
|
598a2a6d3a | ||
|
|
d1f51c47fb | ||
|
|
58b4ddd07c | ||
|
|
f6bdbfa40d | ||
|
|
d36b28e8fe | ||
|
|
f0541b7bbc | ||
|
|
1beb7f69f3 | ||
|
|
cd0040cee3 | ||
|
|
b5f90bd8f7 | ||
|
|
f23dda50f0 | ||
|
|
6603195996 | ||
|
|
dadaece5c3 | ||
|
|
183e7dc0b6 | ||
|
|
7e12ca0476 | ||
|
|
cbf0c91a4b | ||
|
|
187dd9afc6 | ||
|
|
24078a9dc8 | ||
|
|
487671293f | ||
|
|
323d051c7c | ||
|
|
49f6fa9694 | ||
|
|
f804c01fde | ||
|
|
737f1faf47 | ||
|
|
a3c0bec761 | ||
|
|
6621c83452 | ||
|
|
efe0cbcb4c | ||
|
|
194ca721ab | ||
|
|
9de579ffc7 | ||
|
|
9f758ddbec | ||
|
|
b059dd681b | ||
|
|
e4e49524b8 | ||
|
|
9413349277 | ||
|
|
af0abb30a9 | ||
|
|
0e8bab3f34 | ||
|
|
cae67268a6 | ||
|
|
c5e53a920c | ||
|
|
06123b5347 | ||
|
|
6663b2c057 | ||
|
|
9b3462441a | ||
|
|
58270e7bf9 | ||
|
|
c3b04dcccc | ||
|
|
ffeb51eecc | ||
|
|
8dd29e2f5f | ||
|
|
5e5ee11b37 | ||
|
|
5057ddb3ed | ||
|
|
128812b5cd | ||
|
|
10f7387cfb | ||
|
|
6afc73f6fb | ||
|
|
eeae2ee587 | ||
|
|
c45c842f20 | ||
|
|
6dd8f6c831 | ||
|
|
8043b2807d |
126
.github/workflows/main.yml
vendored
126
.github/workflows/main.yml
vendored
@@ -88,10 +88,70 @@ jobs:
|
||||
|
||||
- uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-qt5-webview
|
||||
install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-qt5-webview mingw-w64-x86_64-protobuf mingw-w64-x86_64-abseil-cpp mingw-w64-x86_64-zlib
|
||||
msystem: mingw64
|
||||
release: false
|
||||
|
||||
- name: Print MSYS2 Installation Path
|
||||
run: echo $MSYSTEM_PREFIX
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: List Protocol Buffers Lib Files
|
||||
run: ls $MINGW_PREFIX/lib/
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: List Protocol Buffers Lib Files
|
||||
run: ls $MINGW_PREFIX/lib/libproto*.*
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: List Protocol Buffers Bin Files
|
||||
run: ls $MINGW_PREFIX/bin/
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Protobuf Headers to a Repo Subfolder
|
||||
run: cp -rv "$MINGW_PREFIX/include/google" "${GITHUB_WORKSPACE}/src/google/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Headers to a Repo Subfolder
|
||||
run: cp -rv "$MINGW_PREFIX/include/absl" "${GITHUB_WORKSPACE}/src/absl/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Compile Zwift Protopuf
|
||||
run: protoc --proto_path="${GITHUB_WORKSPACE}/src/zwift-api/" --cpp_out="${GITHUB_WORKSPACE}/src/zwift-api/" zwift_messages.proto
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Protobuf Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libproto* "${GITHUB_WORKSPACE}/src/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_log_internal_message.dll.a "${GITHUB_WORKSPACE}/src/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_log_internal_check_op.dll.a "${GITHUB_WORKSPACE}/src/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_base.dll.a "${GITHUB_WORKSPACE}/src/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Protobuf Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libproto* "${GITHUB_WORKSPACE}/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_base.dll.a "${GITHUB_WORKSPACE}/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_log_internal_message.dll.a "${GITHUB_WORKSPACE}/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/lib/libabsl_log_internal_check_op.dll.a "${GITHUB_WORKSPACE}/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Setup cmake
|
||||
uses: jwlawson/actions-setup-cmake@v1.9
|
||||
with:
|
||||
@@ -134,7 +194,7 @@ jobs:
|
||||
cd ..
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
run: |
|
||||
qmake
|
||||
make -j8
|
||||
cd src/debug
|
||||
@@ -146,6 +206,7 @@ jobs:
|
||||
cp "C:/mingw64/bin/libwinpthread-1.dll" .
|
||||
cp "C:/mingw64/bin/libgcc_s_seh-1.dll" .
|
||||
cp "C:/mingw64/bin/libstdc++-6.dll" .
|
||||
cp "C:/mingw64/bin/zlib1.dll" .
|
||||
cp ../../../icons/iOS/iTunesArtwork@2x.png .
|
||||
cp ../../AppxManifest.xml .
|
||||
cp ../../windows/*.py .
|
||||
@@ -162,6 +223,7 @@ jobs:
|
||||
|
||||
- name: Build without python
|
||||
run: |
|
||||
ls src/google/
|
||||
qmake
|
||||
make -j8
|
||||
cd src/debug
|
||||
@@ -173,6 +235,7 @@ jobs:
|
||||
cp "C:/mingw64/bin/libwinpthread-1.dll" .
|
||||
cp "C:/mingw64/bin/libgcc_s_seh-1.dll" .
|
||||
cp "C:/mingw64/bin/libstdc++-6.dll" .
|
||||
cp "C:/mingw64/bin/zlib1.dll" .
|
||||
cp ../../../icons/iOS/iTunesArtwork@2x.png .
|
||||
cp ../../AppxManifest.xml .
|
||||
cp ../../../windows_openssl/*.* .
|
||||
@@ -183,6 +246,14 @@ jobs:
|
||||
#../../MSIX-Toolkit/WindowsSDK/10/10.0.20348.0/x64/makeappx.exe pack /d ../output/ /p qz
|
||||
if: matrix.config.python == false
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/bin/libabsl_*.* "${GITHUB_WORKSPACE}/src/debug/output/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: Copy Abseil Binaries to a Repo Subfolder
|
||||
run: cp -v $MINGW_PREFIX/bin/libproto*.* "${GITHUB_WORKSPACE}/src/debug/output/"
|
||||
shell: msys2 {0}
|
||||
|
||||
- name: patching qt for bluetooth
|
||||
run: cp qt-patches/windows/5.15.2/binary/mingw64/*.* ${{ github.workspace }}/src/debug/output/
|
||||
|
||||
@@ -406,7 +477,7 @@ jobs:
|
||||
path: "src/qthttpserver"
|
||||
|
||||
- name: Install packages required to run QZ inside workflow
|
||||
run: sudo apt update -y && sudo apt-get install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtquickcontrols2-5-dev libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 libqt5networkauth5-dev libqt5websockets5* libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev
|
||||
run: sudo apt update -y && sudo apt-get install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtquickcontrols2-5-dev libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 libqt5networkauth5-dev libqt5websockets5* libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev cmake protobuf-compiler libprotobuf-dev libabsl-dev
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v3
|
||||
@@ -421,6 +492,10 @@ jobs:
|
||||
run: |
|
||||
cp qHttpServerBin/5.15.2/headers/* src/qthttpserver/src/3rdparty/http-parser/
|
||||
|
||||
- name: compile zwift protobuf
|
||||
run: |
|
||||
protoc --proto_path=src/zwift-api/ --cpp_out=src/zwift-api/ zwift_messages.proto
|
||||
|
||||
- name: Build qthttpserver
|
||||
run: |
|
||||
cd src/qthttpserver
|
||||
@@ -824,8 +899,24 @@ jobs:
|
||||
echo "${{ secrets.cesiumkey }}" >> inner_templates/googlemaps/cesium-key.js
|
||||
cd ..
|
||||
|
||||
- name: Clone vcpkg
|
||||
run: git clone https://github.com/microsoft/vcpkg.git
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Bootstrap vcpkg
|
||||
run: .\vcpkg\bootstrap-vcpkg.bat
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
.\vcpkg\vcpkg install protobuf protobuf-c abseil
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination . -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination src/ -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\include\* -Destination src/ -Recurse -Verbose
|
||||
qmake
|
||||
nmake
|
||||
cd src/debug
|
||||
@@ -839,6 +930,7 @@ jobs:
|
||||
cp ../../windows/*.py .
|
||||
cp ../../windows/*.bat .
|
||||
cp ../../../windows_openssl/*.* .
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\bin\*.* -Destination . -Verbose
|
||||
mkdir adb
|
||||
mkdir python
|
||||
Copy-Item -Path C:\hostedtoolcache\windows\Python\3.7.9\x64 -Destination python -Recurse
|
||||
@@ -849,7 +941,10 @@ jobs:
|
||||
if: matrix.config.python
|
||||
|
||||
- name: Build without python
|
||||
run: |
|
||||
run: |
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination . -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination src/ -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\include\* -Destination src/ -Recurse -Verbose
|
||||
qmake
|
||||
nmake
|
||||
cd src/debug
|
||||
@@ -860,10 +955,11 @@ jobs:
|
||||
windeployqt --qmldir ../../ qdomyos-zwift.exe
|
||||
cp "C:/mingw64/bin/libwinpthread-1.dll" .
|
||||
cp "C:/mingw64/bin/libgcc_s_seh-1.dll" .
|
||||
cp "C:/mingw64/bin/libstdc++-6.dll" .
|
||||
cp "C:/mingw64/bin/libstdc++-6.dll" .
|
||||
cp ../../../icons/iOS/iTunesArtwork@2x.png .
|
||||
cp ../../AppxManifest.xml .
|
||||
cp ../../../windows_openssl/*.* .
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\bin\*.* -Destination . -Verbose
|
||||
mkdir adb
|
||||
cp ../../adb/* adb/
|
||||
cd ..
|
||||
@@ -930,6 +1026,9 @@ jobs:
|
||||
repository: qt-labs/qthttpserver
|
||||
path: "src/qthttpserver"
|
||||
|
||||
- name: Install CMake
|
||||
uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
@@ -973,8 +1072,24 @@ jobs:
|
||||
echo "${{ secrets.cesiumkey }}" >> inner_templates/googlemaps/cesium-key.js
|
||||
cd ..
|
||||
|
||||
- name: Clone vcpkg
|
||||
run: git clone https://github.com/microsoft/vcpkg.git
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Bootstrap vcpkg
|
||||
run: .\vcpkg\bootstrap-vcpkg.bat
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
.\vcpkg\vcpkg install protobuf protobuf-c abseil
|
||||
working-directory: ${{ runner.workspace }}
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination . -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\lib\*.* -Destination src/ -Verbose
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\include\* -Destination src/ -Recurse -Verbose
|
||||
cd src
|
||||
echo "#define AISERVER" >> aiserver.h
|
||||
cd ..
|
||||
@@ -993,6 +1108,7 @@ jobs:
|
||||
cp ../../windows/zwift-workout-ai-server.py zwift-workout.py
|
||||
cp ../../windows/*.bat .
|
||||
cp ../../../windows_openssl/*.* .
|
||||
Copy-Item -Path ${{ runner.workspace }}\vcpkg\installed\x64-windows\bin\*.* -Destination . -Verbose
|
||||
mkdir adb
|
||||
cp ../../adb/* adb/
|
||||
cd ..
|
||||
|
||||
@@ -2163,25 +2163,13 @@ void horizontreadmill::serviceScanDone(void) {
|
||||
initRequest = false;
|
||||
firstStateChanged = 0;
|
||||
auto services_list = m_control->services();
|
||||
QBluetoothUuid ftmsService((quint16)0x1826);
|
||||
QBluetoothUuid CustomService((quint16)0xFFF0);
|
||||
|
||||
for (const QBluetoothUuid &s : qAsConst(services_list)) {
|
||||
#ifdef Q_OS_WIN
|
||||
if (s == ftmsService || s == CustomService)
|
||||
#endif
|
||||
{
|
||||
qDebug() << s << "discovering...";
|
||||
gattCommunicationChannelService.append(m_control->createServiceObject(s));
|
||||
connect(gattCommunicationChannelService.constLast(), &QLowEnergyService::stateChanged, this,
|
||||
&horizontreadmill::stateChanged);
|
||||
gattCommunicationChannelService.constLast()->discoverDetails();
|
||||
}
|
||||
#ifdef Q_OS_WIN
|
||||
else {
|
||||
qDebug() << s << "NOT discovering!";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ CONFIG += qmltypes
|
||||
#win32: CONFIG += webengine
|
||||
#unix:!android: CONFIG += webengine
|
||||
|
||||
win32:DEFINES += _ITERATOR_DEBUG_LEVEL=0
|
||||
win32:!mingw:LIBS += -llibprotobuf -llibprotoc -labseil_dll -llibprotobuf-lite -L$$PWD
|
||||
win32:mingw:LIBS += -lprotobuf -lprotoc -labsl_base -lprotobuf-lite -labsl_log_internal_message -labsl_log_internal_check_op -L$$PWD
|
||||
unix:!android:!ios:LIBS += -lprotobuf-lite -lprotobuf -labsl_base
|
||||
|
||||
QML_IMPORT_NAME = org.cagnulein.qdomyoszwift
|
||||
QML_IMPORT_MAJOR_VERSION = 1
|
||||
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||
@@ -281,6 +286,10 @@ zwiftworkout.cpp
|
||||
macx: SOURCES += macos/lockscreen.mm
|
||||
!ios: SOURCES += mainwindow.cpp charts.cpp
|
||||
|
||||
#zwift api
|
||||
unix:!android:!ios: SOURCES += zwift-api/zwift_messages.pb.cc
|
||||
win32: SOURCES += zwift-api/zwift_messages.pb.cc
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
#include "windows_zwift_incline_paddleocr_thread.h"
|
||||
#include "windows_zwift_workout_paddleocr_thread.h"
|
||||
#endif
|
||||
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
||||
#include "zwift-api/zwift_messages.pb.h"
|
||||
#endif
|
||||
#include "localipaddress.h"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
@@ -631,6 +634,7 @@ void trainprogram::scheduler() {
|
||||
if(zwift_counter++ >= (timeout - 1)) {
|
||||
zwift_counter = 0;
|
||||
QByteArray bb = zwift_world->playerStatus(zwift_player_id);
|
||||
qDebug() << " ZWIFT API PROTOBUF << " + bb.toHex(' ');
|
||||
#ifdef Q_OS_IOS
|
||||
#ifndef IO_UNDER_QT
|
||||
h->zwift_api_decodemessage_player(bb.data(), bb.length());
|
||||
@@ -654,6 +658,18 @@ void trainprogram::scheduler() {
|
||||
|
||||
float alt = QAndroidJniObject::callStaticMethod<float>("org/cagnulen/qdomyoszwift/ZwiftAPI", "getAltitude", "()F");
|
||||
float distance = QAndroidJniObject::callStaticMethod<float>("org/cagnulen/qdomyoszwift/ZwiftAPI", "getDistance", "()F");
|
||||
#elif !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
||||
PlayerState state;
|
||||
float alt = 0;
|
||||
float distance = 0;
|
||||
if (state.ParseFromArray(bb.constData(), bb.size())) {
|
||||
// Parsing riuscito, ora puoi accedere ai dati in `state`
|
||||
alt = state.altitude();
|
||||
distance = state.distance();
|
||||
} else {
|
||||
// Errore durante il parsing
|
||||
qDebug() << "Error parsing PlayerState";
|
||||
}
|
||||
#else
|
||||
float alt = 0;
|
||||
float distance = 0;
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
#include "zwift-api/PlayerStateWrapper.h"
|
||||
#include "zwift-api/zwift_client_auth.h"
|
||||
|
||||
#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS)
|
||||
#include "zwift-api/zwift_messages.pb.h"
|
||||
#endif
|
||||
|
||||
class trainrow {
|
||||
public:
|
||||
QTime duration = QTime(0, 0, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user