From 0196b2306a3031241188f21cba608d81dcc51a7e Mon Sep 17 00:00:00 2001 From: Vitor Vieira <155513369+VitorVieiraZ@users.noreply.github.com> Date: Tue, 14 May 2024 03:09:25 -0300 Subject: [PATCH] Workspace and hardware Info in diagnostic log file (#3419) Fix #2983 and Fix #2978 * workspace info in log header * hardware info into header file --- .../uk/co/lutraconsulting/InputActivity.java | 8 +++++++ app/androidutils.cpp | 20 +++++++++++++++++ app/androidutils.h | 2 ++ app/inputhelp.cpp | 7 ++++-- app/inpututils.cpp | 22 +++++++++++++++++++ app/inpututils.h | 4 ++++ app/ios/iosutils.cpp | 16 ++++++++++++++ app/ios/iosutils.h | 6 +++++ app/ios/iosutils.mm | 14 ++++++++++++ 9 files changed, 97 insertions(+), 2 deletions(-) diff --git a/app/android/src/uk/co/lutraconsulting/InputActivity.java b/app/android/src/uk/co/lutraconsulting/InputActivity.java index cbe0204c8..fa5781037 100644 --- a/app/android/src/uk/co/lutraconsulting/InputActivity.java +++ b/app/android/src/uk/co/lutraconsulting/InputActivity.java @@ -110,6 +110,14 @@ public String getSafeArea() { } } + public String getManufacturer() { + return android.os.Build.MANUFACTURER.toUpperCase(); + } + + public String getDeviceModel() { + return android.os.Build.MODEL.toUpperCase(); + } + public void hideSplashScreen() { keepSplashScreenVisible = false; diff --git a/app/androidutils.cpp b/app/androidutils.cpp index 60b100f8a..1869a38cd 100644 --- a/app/androidutils.cpp +++ b/app/androidutils.cpp @@ -163,6 +163,26 @@ void AndroidUtils::quitApp() #endif } +QString AndroidUtils::getManufacturer() +{ + QString manufacturer = ""; +#ifdef ANDROID + QJniObject activity = QJniObject( QNativeInterface::QAndroidApplication::context() ); + manufacturer = activity.callObjectMethod( "getManufacturer", "()Ljava/lang/String;" ).toString().toUpper(); +#endif + return manufacturer; +} + +QString AndroidUtils::getDeviceModel() +{ + QString deviceModel = ""; +#ifdef ANDROID + QJniObject activity = QJniObject( QNativeInterface::QAndroidApplication::context() ); + deviceModel = activity.callObjectMethod( "getDeviceModel", "()Ljava/lang/String;" ).toString(); +#endif + return deviceModel; +} + QVector AndroidUtils::getSafeArea() { QVector ret; diff --git a/app/androidutils.h b/app/androidutils.h index 1dd340f62..8d7f6ec21 100644 --- a/app/androidutils.h +++ b/app/androidutils.h @@ -56,6 +56,8 @@ class AndroidUtils: public QObject static void quitApp(); + static QString getManufacturer(); + static QString getDeviceModel(); Q_INVOKABLE QVector getSafeArea(); void hideSplashScreen(); diff --git a/app/inputhelp.cpp b/app/inputhelp.cpp index 5cf166c2e..a030cce6b 100644 --- a/app/inputhelp.cpp +++ b/app/inputhelp.cpp @@ -238,6 +238,9 @@ QVector InputHelp::logHeader( bool isHtml ) retLines.push_back( QStringLiteral( "Device UUID: %1" ).arg( CoreUtils::deviceUuid() ) ); retLines.push_back( QStringLiteral( "Data Dir: %1" ).arg( InputUtils::appDataDir() ) ); retLines.push_back( QStringLiteral( "System: %1" ).arg( QSysInfo::prettyProductName() ) ); + retLines.push_back( QStringLiteral( "CPU Architecture: %1" ).arg( QSysInfo::currentCpuArchitecture() ) ); + retLines.push_back( QStringLiteral( "Device Model: %1" ).arg( InputUtils::getDeviceModel() ) ); + retLines.push_back( QStringLiteral( "Device Manufacturer: %1" ).arg( InputUtils::getManufacturer() ) ); retLines.push_back( QStringLiteral( "Mergin URL: %1" ).arg( mMerginApi->apiRoot() ) ); retLines.push_back( QStringLiteral( "Mergin User: %1" ).arg( mMerginApi->userAuth()->username() ) ); if ( !mMerginApi->userInfo()->email().isEmpty() ) @@ -245,8 +248,8 @@ QVector InputHelp::logHeader( bool isHtml ) retLines.push_back( QStringLiteral( "Mergin Data: %1/%2 Bytes" ) .arg( InputUtils::bytesToHumanSize( mMerginApi->workspaceInfo()->diskUsage() ) ) .arg( InputUtils::bytesToHumanSize( mMerginApi->workspaceInfo()->storageLimit() ) ) ); - retLines.push_back( QStringLiteral( "Subscription plan: %1" ).arg( mMerginApi->subscriptionInfo()->planAlias() ) ); - retLines.push_back( QStringLiteral( "Subscription Status: %1" ).arg( MerginSubscriptionStatus::toString( static_cast( mMerginApi->subscriptionInfo()->subscriptionStatus() ) ) ) ); + retLines.push_back( QStringLiteral( "Workspace Name: %1" ).arg( mMerginApi->userInfo()->activeWorkspaceName() ) ); + retLines.push_back( QStringLiteral( "Workspace ID: %1" ).arg( mMerginApi->userInfo()->activeWorkspaceId() ) ); } else { diff --git a/app/inpututils.cpp b/app/inpututils.cpp index c6e26183f..5a30f88d6 100644 --- a/app/inpututils.cpp +++ b/app/inpututils.cpp @@ -16,6 +16,8 @@ #include #include +#include "ios/iosutils.h" + #include "qgsruntimeprofiler.h" #include "qcoreapplication.h" #include "qgsgeometrycollection.h" @@ -2153,3 +2155,23 @@ QList InputUtils::parsePositionUpdates( const QString &data ) return parsedUpdates; } + +QString InputUtils::getManufacturer() +{ +#ifdef Q_OS_ANDROID + return AndroidUtils::getManufacturer(); +#elif defined(Q_OS_IOS) + return IosUtils::getManufacturer(); +#endif + return QStringLiteral( "N/A" ); +} + +QString InputUtils::getDeviceModel() +{ +#ifdef Q_OS_ANDROID + return AndroidUtils::getDeviceModel(); +#elif defined(Q_OS_IOS) + return IosUtils::getDeviceModel(); +#endif + return QStringLiteral( "N/A" ); +} diff --git a/app/inpututils.h b/app/inpututils.h index 78c2c80f7..f2606ab92 100644 --- a/app/inpututils.h +++ b/app/inpututils.h @@ -182,6 +182,10 @@ class InputUtils: public QObject Q_INVOKABLE void quitApp(); + Q_INVOKABLE static QString getManufacturer(); + + Q_INVOKABLE static QString getDeviceModel(); + /** * Method copies all entries from given source path to destination path. If cannot copy a file for the first time, * removes it and tries again (overwrite a file). If failes again, skips the file, sets result to false and continue. diff --git a/app/ios/iosutils.cpp b/app/ios/iosutils.cpp index 4b9c02063..37c3e107f 100644 --- a/app/ios/iosutils.cpp +++ b/app/ios/iosutils.cpp @@ -66,3 +66,19 @@ QVector IosUtils::getSafeArea() #endif return QVector(); } + +QString IosUtils::getManufacturer() +{ +#ifdef Q_OS_IOS + return getManufacturerImpl(); +#endif + return ""; +} + +QString IosUtils::getDeviceModel() +{ +#ifdef Q_OS_IOS + return getDeviceModelImpl(); +#endif + return ""; +} diff --git a/app/ios/iosutils.h b/app/ios/iosutils.h index 3895d1452..b0386b943 100644 --- a/app/ios/iosutils.h +++ b/app/ios/iosutils.h @@ -43,6 +43,9 @@ class IosUtils: public QObject Q_INVOKABLE QVector getSafeArea(); + static Q_INVOKABLE QString getManufacturer(); + static Q_INVOKABLE QString getDeviceModel(); + signals: void imageSelected( const QString &imagePath, const QString &code ); void notifyError( const QString &message ); @@ -61,6 +64,9 @@ class IosUtils: public QObject void setIdleTimerDisabled(); QVector getSafeAreaImpl(); + static QString getManufacturerImpl(); + static QString getDeviceModelImpl(); + }; #endif // IOSUTILS_H diff --git a/app/ios/iosutils.mm b/app/ios/iosutils.mm index 898ee80eb..ea91001ae 100644 --- a/app/ios/iosutils.mm +++ b/app/ios/iosutils.mm @@ -14,6 +14,7 @@ ***************************************************************************/ #include +#include #include "iosutils.h" void IosUtils::setIdleTimerDisabled() @@ -40,3 +41,16 @@ return ret; } + +QString IosUtils::getManufacturerImpl() +{ + return "APPLE INC."; +} + +QString IosUtils::getDeviceModelImpl() +{ + struct utsname systemInfo; + uname( &systemInfo ); + QString deviceModel = QString::fromUtf8( systemInfo.machine ); + return deviceModel.toUpper(); +}