- more translations

- some fixes
This commit is contained in:
Dorian Zedler 2021-07-05 20:55:34 +02:00
parent 7d6b972ef3
commit 800796fb06
Signed by: dorian
GPG key ID: 989DE36109AFA354
20 changed files with 215 additions and 159 deletions

View file

@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
# [0.06] - UNRELEASED
### Changed
### Added
- Dark mode
- QR-Code scanning
- Sharing of every view using either link, QR-Code or a poster
- Text which is too large too fit is scrollable now in most places
- German translations
- URL handler for https://l.bluerock.dev and https://app.bluerock.dev
# [0.05] - 2021-06-07 # [0.05] - 2021-06-07
### Changed ### Changed
- the boulder result rect doesn't have a background if there is no result now - the boulder result rect doesn't have a background if there is no result now
@ -16,7 +27,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- the calendar now scrolls less far down - the calendar now scrolls less far down
- improoved layout in landscape mode - improoved layout in landscape mode
- some design changes in profile page and speed flowchart - some design changes in profile page and speed flowchart
- added second link for "further infos" in calendar
### Added
- Second link for "further infos" in calendar
# [0.03.0] - 2019-07-11 # [0.03.0] - 2019-07-11
### Added ### Added

View file

@ -10,7 +10,7 @@
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:extractNativeLibs="true" android:icon="@drawable/icon"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:extractNativeLibs="true" android:icon="@drawable/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="de.itsblue.blueROCK.MainActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="de.itsblue.blueROCK.MainActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleInstance">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>

View file

@ -73,7 +73,7 @@ android {
defaultConfig { defaultConfig {
resConfig "en" resConfig "en"
minSdkVersion = qtMinSdkVersion minSdkVersion = qtMinSdkVersion
targetSdkVersion = 29 targetSdkVersion = qtTargetSdkVersion
} }
lintOptions { lintOptions {

View file

@ -61,18 +61,18 @@ public class MainActivity extends QtActivity
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Log.d("ekkescorner", "onCreate QShareActivity"); Log.d("ekkescorner", "onCreate QShareActivity");
// now we're checking if the App was started from another Android App via Intent // now we're checking if the App was started from another Android App via Intent
Intent theIntent = getIntent(); Intent theIntent = getIntent();
if (theIntent != null){ if (theIntent != null){
String theAction = theIntent.getAction(); String theAction = theIntent.getAction();
if (theAction != null){ if (theAction != null){
Log.d("ekkescorner onCreate ", theAction); Log.d("ekkescorner onCreate ", theAction);
// QML UI not ready yet // QML UI not ready yet
// delay processIntent(); // delay processIntent();
isIntentPending = true; isIntentPending = true;
}
} }
}
} // onCreate } // onCreate
// WIP - trying to find a solution to survive a 2nd onCreate // WIP - trying to find a solution to survive a 2nd onCreate
@ -96,6 +96,7 @@ public class MainActivity extends QtActivity
// this method here - otherwise you'll get wrong request or result codes // this method here - otherwise you'll get wrong request or result codes
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to // Check which request we're responding to
Log.d("ekkescorner onActivityResult", "requestCode: "+requestCode); Log.d("ekkescorner onActivityResult", "requestCode: "+requestCode);
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {

View file

@ -89,7 +89,7 @@ android {
ANDROID_VERSION_NAME = $$VERSION ANDROID_VERSION_NAME = $$VERSION
ANDROID_VERSION_CODE = $$droidVersionCode($$ANDROID_VERSION_NAME) ANDROID_VERSION_CODE = $$droidVersionCode($$ANDROID_VERSION_NAME)
message(Android version code: $$ANDROID_VERSION_CODE) ANDROID_TARGET_SDK_VERSION = 29
include(/home/dorian/Android/Sdk/android_openssl/openssl.pri) include(/home/dorian/Android/Sdk/android_openssl/openssl.pri)
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android

View file

@ -0,0 +1,88 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.12
Item {
id: control
property alias text: firstLabel.text
property alias font: firstLabel.font
property alias verticalAlignment: firstLabel.verticalAlignment
property int spacing: 30
property MovingLabel syncWithLabel
property int _spacing: syncWithLabel && syncWithLabel._labelWidth > _labelWidth ? (syncWithLabel._labelWidth - _labelWidth + syncWithLabel.spacing) : spacing
property alias _labelWidth: firstLabel.width
signal linkActivated(string link)
clip: true
height: firstLabel.height
onTextChanged: {
_resetScroll()
}
function startScroll(triggerSyncedLabel=true) {
if(control.syncWithLabel && triggerSyncedLabel)
control.syncWithLabel.startScroll(false)
if(control.width < firstLabel.width && !scrollAnimation.running)
scrollAnimation.start()
}
function _resetScroll() {
scrollAnimation.stop()
firstLabel.anchors.leftMargin = 0
}
Label {
id: firstLabel
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}
onLinkActivated: control.onLinkActivated(link)
}
Label {
id: secondLabel
anchors {
left: firstLabel.right
leftMargin: control._spacing
verticalCenter: firstLabel.verticalCenter
}
visible: scrollAnimation.running
font: firstLabel.font
text: firstLabel.text
verticalAlignment: firstLabel.verticalAlignment
elide: firstLabel.elide
bottomPadding: firstLabel.bottomPadding
padding: firstLabel.padding
onLinkActivated: control.onLinkActivated(link)
}
MouseArea {
anchors.fill: parent
onClicked: control.startScroll()
}
NumberAnimation {
id: scrollAnimation
target: firstLabel
property: "anchors.leftMargin"
from: 0
to: -(firstLabel.width + control._spacing)
duration: (to / -100) * 1500
onRunningChanged: {
if(!running)
control._resetScroll()
}
}
}

View file

@ -1,5 +1,5 @@
import QtQuick 2.9 import QtQuick 2.15
import QtQuick.Controls 2.4 import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.3 import QtQuick.Controls.Material 2.3
Dialog { Dialog {
@ -33,37 +33,35 @@ Dialog {
id: selectorPuHeaderCol id: selectorPuHeaderCol
width: control.width width: control.width
height: headerSubLa.text !== "" && headerLa.text !== "" ? 73 : 40 height: headerLa.height + headerTopSpacerItm.height + (control.subTitle ? headerSubLa.height:0)
Label { Item {
id: headerTopSpacerItm
height: control.padding
width: parent.width
}
MovingLabel {
id: headerLa id: headerLa
visible: control.title anchors.horizontalCenter: parent.horizontalCenter
width: selectorPuHeaderCol.width - control.padding * 2
width: selectorPuHeaderCol.width
elide: "ElideRight"
padding: control.padding
bottomPadding: 0
font.bold: true font.bold: true
font.pixelSize: 16 font.pixelSize: 16
text: control.title text: control.title
onLinkActivated: { onLinkActivated: control.linkActivated(link)
control.linkActivated(link)
}
} }
Label { Label {
id: headerSubLa id: headerSubLa
visible: control.subTitle anchors.horizontalCenter: parent.horizontalCenter
width: selectorPuHeaderCol.width - control.padding * 2
width: selectorPuHeaderCol.width wrapMode: Text.Wrap
elide: "ElideRight"
padding: control.padding
topPadding: 5 topPadding: 5
bottomPadding: 0 bottomPadding: 0
font.bold: true font.bold: true

View file

@ -4,13 +4,10 @@ import QtQuick.Controls.Material 2.12
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import QtPurchasing 1.12 import QtPurchasing 1.12
Rectangle { Page {
id: speedFlowChartLockedOverlay id: control
anchors.fill: parent anchors.fill: parent
anchors.margins: -20
color: Material.background
Connections { Connections {
target: speedFlowChartProduct target: speedFlowChartProduct
@ -38,42 +35,40 @@ Rectangle {
} }
} }
ColumnLayout { Column {
id: lockedLayout id: lockedLayout
anchors { anchors {
fill: parent fill: parent
topMargin: parent.height * 0.05 topMargin: parent.height * 0.02
bottomMargin: parent.height * 0.05 bottomMargin: parent.height * 0.05
rightMargin: parent.width * 0.1 + 20 rightMargin: parent.width * 0.1 + 20
leftMargin: parent.width * 0.1 + 20 leftMargin: parent.width * 0.1 + 20
} }
//spacing: parent.height * 0.05 spacing: lockedLayout.height * 0.01
Label { Label {
Layout.fillWidth: true anchors.horizontalCenter: parent.horizontalCenter
height: lockedLayout.height * 0.03
height: parent.height * 0.015 width: lockedLayout.width
//% "This is a premium feature." //% "This is a premium feature."
text: qsTrId("#thisIsAPremiumFeature") text: qsTrId("#thisIsAPremiumFeature")
font.bold: true
font.pixelSize: height font.pixelSize: height
font.bold: true
fontSizeMode: Text.Fit fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
minimumPixelSize: 1 minimumPixelSize: 1
horizontalAlignment: Text.AlignHCenter
} }
SwipeGallery { SwipeGallery {
property string platformIcons: Qt.platform.os === "osx" || Qt.platform.os === "iso" ? "ios":"android" property string platformIcons: Qt.platform.os === "osx" || Qt.platform.os === "iso" ? "ios":"android"
Layout.fillHeight: true height: lockedLayout.height * 0.85
Layout.fillWidth: true width: lockedLayout.width
images: [ images: [
"qrc:/screenshots/SpeedFlowchartDemo/" + platformIcons + "/1.jpeg", "qrc:/screenshots/SpeedFlowchartDemo/" + platformIcons + "/1.jpeg",
@ -84,25 +79,33 @@ Rectangle {
Button { Button {
id: purchaseBt id: purchaseBt
Layout.alignment: Layout.Center anchors.horizontalCenter: parent.horizontalCenter
height: lockedLayout.height * 0.07
enabled: speedFlowChartProduct.status === Product.Registered enabled: speedFlowChartProduct.status === Product.Registered
text: speedFlowChartProduct.status === Product.Registered text: speedFlowChartProduct.status === Product.Registered
? "\uf218 "+ qsTrId("#buyNowFor") +" " + speedFlowChartProduct.price ? "\uf218 "+ qsTrId("#buyNowFor") + " " + speedFlowChartProduct.price
: qsTrId("#itemIsUnavailable") : qsTrId("#itemIsUnavailable")
font.family: fa5solid.name font.family: fa5solid.name
font.pixelSize: height * 0.4
font.capitalization: Font.MixedCase
onClicked: speedFlowChartProduct.purchase() onClicked: speedFlowChartProduct.purchase()
} }
RowLayout { RowLayout {
id: bottomRow
Layout.alignment: Layout.Center anchors.horizontalCenter: parent.horizontalCenter
height: lockedLayout.height * 0.065
Button { Button {
id: restorePurchaseButton id: restorePurchaseButton
Layout.alignment: Layout.Center Layout.alignment: Layout.Center
visible: speedFlowChartProduct.status === Product.Registered Layout.preferredHeight: bottomRow.height
//visible: speedFlowChartProduct.status === Product.Registered
flat: true flat: true
font.pixelSize: height * 0.4
font.capitalization: Font.MixedCase
//% "Restore purchase" //% "Restore purchase"
text: qsTrId("#restorePurchase") text: qsTrId("#restorePurchase")
@ -112,8 +115,11 @@ Rectangle {
Button { Button {
id: contactSupportButton id: contactSupportButton
Layout.alignment: Layout.Center Layout.alignment: Layout.Center
Layout.preferredHeight: bottomRow.height
flat: true flat: true
font.pixelSize: height * 0.4
font.capitalization: Font.MixedCase
//% "contact support" //% "contact support"
text: qsTrId("#contact support") text: qsTrId("#contact support")

View file

@ -11,6 +11,9 @@ Rectangle {
//property bool unlocked: QT_DEBUG || appSettings.read("speedBackendPurchase") === "1" //property bool unlocked: QT_DEBUG || appSettings.read("speedBackendPurchase") === "1"
property bool unlocked: appSettings.read("speedBackendPurchase") === "1" property bool unlocked: appSettings.read("speedBackendPurchase") === "1"
Component.onCompleted: {
console.warn("unlocked:", appSettings.read("speedBackendPurchase"))
}
state: "hidden" state: "hidden"

View file

@ -14,6 +14,7 @@ Item {
anchors.fill: parent anchors.fill: parent
anchors.margins: 1 anchors.margins: 1
anchors.bottomMargin: indicator.height anchors.bottomMargin: indicator.height
spacing: width * 0.2
Repeater { Repeater {
model: control.images.length model: control.images.length

View file

@ -94,7 +94,7 @@ Page {
} }
width: app.landscape() ? childrenRect.width : parent.width * 0.8 width: app.landscape() ? childrenRect.width : parent.width * 0.8
height: app.landscape() ? headerBadge.height : headerBadge.height * 2 height: app.landscape() ? headerBadge.height : Math.min(headerBadge.height * 2, width * 0.27)
columnSpacing: height * 0.1 columnSpacing: height * 0.1

View file

@ -95,7 +95,7 @@ DataListView {
} }
} }
selector.appear(selectOptions, qsTrId("#startlistHeadline")) selector.appear(selectOptions, qsTrId("#selectCategory"))
} }
Connections { Connections {

View file

@ -195,7 +195,7 @@ Window {
//app.openAthlete() // dorian: 53139 , rustam: 6933 , helen: 53300 //app.openAthlete() // dorian: 53139 , rustam: 6933 , helen: 53300
//openWidget({nation:'GER'}) //openWidget({nation:'GER'})
//mainStack.push("Pages/AthleteSearchPage.qml") //mainStack.push("Pages/AthleteSearchPage.qml")
//openWidget({comp: 11651, cat: 26}) openWidget({comp: 11651, cat: 26})
//openWidget({person: 6623}) //openWidget({person: 6623})
//console.log(JSON.stringify(serverConn.getParamsFromUrl(""))) //console.log(JSON.stringify(serverConn.getParamsFromUrl("")))
//openWidgetFromUrl("https://l.bluerock.dev/?comp=11601&type=starters") //openWidgetFromUrl("https://l.bluerock.dev/?comp=11601&type=starters")
@ -321,15 +321,13 @@ Window {
height: childrenRect.height height: childrenRect.height
width: parent.width - extraComponentLoader.width - toolButton.width - 3 * parent.spacing width: parent.width - extraComponentLoader.width - toolButton.width - 3 * parent.spacing
Label { MovingLabel {
id: toolBarTitleLa id: toolBarTitleLa
syncWithLabel: toolBarSubTitleLa
width: parent.width width: parent.width
scale: 1 scale: 1
elide: "ElideRight"
font.bold: true font.bold: true
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@ -361,13 +359,13 @@ Window {
} }
} }
Label { MovingLabel {
id: toolBarSubTitleLa id: toolBarSubTitleLa
width: parent.width visible: text !== ""
height: text !== "" ? undefined:0
elide: "ElideRight" syncWithLabel: toolBarTitleLa
width: parent.width
font.bold: false font.bold: false
@ -380,7 +378,7 @@ Window {
titleString = mainStack.currentItem.subTitle titleString = mainStack.currentItem.subTitle
} }
return(titleString) return titleString
} }
Behavior on text { Behavior on text {
@ -566,7 +564,7 @@ Window {
Product { Product {
id: speedFlowChartProduct id: speedFlowChartProduct
//identifier: "speed_flowchart" //identifier: "speed_flowchart"
identifier: QT_DEBUG ? "android.test.purchased":"speed_flowchart" identifier: "android.test.purchased"
//identifier: "android.test.canceled" //identifier: "android.test.canceled"
//identifier: "android.test.refunded" //identifier: "android.test.refunded"

View file

@ -30,5 +30,6 @@
<file>Components/AlignedButton.qml</file> <file>Components/AlignedButton.qml</file>
<file>Components/SharePopup.qml</file> <file>Components/SharePopup.qml</file>
<file>Pages/QrCodeScanPage.qml</file> <file>Pages/QrCodeScanPage.qml</file>
<file>Components/MovingLabel.qml</file>
</qresource> </qresource>
</RCC> </RCC>

Binary file not shown.

View file

@ -18,18 +18,18 @@
<location filename="../qml/Pages/QrCodeScanPage.qml" line="243"/> <location filename="../qml/Pages/QrCodeScanPage.qml" line="243"/>
<source>Camera access required</source> <source>Camera access required</source>
<oldsource>Camera access denied</oldsource> <oldsource>Camera access denied</oldsource>
<translation type="unfinished"></translation> <translation>Kamerazugriff benötigt</translation>
</message> </message>
<message id="#cameraPermissionDeniedDetails"> <message id="#cameraPermissionDeniedDetails">
<location filename="../qml/Pages/QrCodeScanPage.qml" line="259"/> <location filename="../qml/Pages/QrCodeScanPage.qml" line="259"/>
<source>blueROCK needs to access your camera in order to scan QR-Codes. It will never record or store any photos or videos.</source> <source>blueROCK needs to access your camera in order to scan QR-Codes. It will never record or store any photos or videos.</source>
<oldsource>This app needs to access your camera in order to scan QR-Codes. It will never record or store any photos or videos.</oldsource> <oldsource>This app needs to access your camera in order to scan QR-Codes. It will never record or store any photos or videos.</oldsource>
<translation type="unfinished"></translation> <translation>blueROCK benötig Zugriff auf die Kamera um QR-Codes zu scannen. Es werden keine Fotos oder Videos aufgezeichnet oder gespeichert.</translation>
</message> </message>
<message id="#allowAccess"> <message id="#allowAccess">
<location filename="../qml/Pages/QrCodeScanPage.qml" line="268"/> <location filename="../qml/Pages/QrCodeScanPage.qml" line="268"/>
<source>Allow access</source> <source>Allow access</source>
<translation type="unfinished"></translation> <translation>Zugriff zulassen</translation>
</message> </message>
<message id="#pleaseWait"> <message id="#pleaseWait">
<location filename="../qml/Pages/QrCodeScanPage.qml" line="50"/> <location filename="../qml/Pages/QrCodeScanPage.qml" line="50"/>
@ -85,7 +85,7 @@
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="36"/> <location filename="../qml/Components/SpeedFlowChartLocker.qml" line="36"/>
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="91"/> <location filename="../qml/Components/SpeedFlowChartLocker.qml" line="91"/>
<source>This item is currently unavailable</source> <source>This item is currently unavailable</source>
<translation>Diese Produkt ist nicht verfügbar</translation> <translation>Dieses Produkt ist nicht verfügbar</translation>
</message> </message>
<message id="#restorePurchase"> <message id="#restorePurchase">
<location filename="../qml/Components/SpeedFlowChartLocker.qml" line="107"/> <location filename="../qml/Components/SpeedFlowChartLocker.qml" line="107"/>
@ -130,7 +130,7 @@
<message id="#aboutBluerockDisclaimer"> <message id="#aboutBluerockDisclaimer">
<location filename="../qml/Pages/StartPage.qml" line="175"/> <location filename="../qml/Pages/StartPage.qml" line="175"/>
<source>This app was built using the &lt;a href=&apos;https://qt.io&apos;&gt;Qt Framework&lt;/a&gt; licensed under the &lt;a href=&apos;https://www.gnu.org/licenses/lgpl-3.0.en.html&apos;&gt;GNU lgplV3 license&lt;/a&gt;.&lt;br&gt;&lt;br&gt;This app is open source and licensed under the &lt;a href=&apos;https://www.gnu.org/licenses/agpl-3.0.en.html&apos;&gt;GNU agplV3 license&lt;/a&gt;, the source code can be found &lt;a href=&apos;https://itsblue.dev/dorian/blueROCK/&apos;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Resultservice and rankings provided by &lt;a href=&apos;http://www.digitalROCK.de&apos;&gt;digital ROCK&lt;/a&gt;.</source> <source>This app was built using the &lt;a href=&apos;https://qt.io&apos;&gt;Qt Framework&lt;/a&gt; licensed under the &lt;a href=&apos;https://www.gnu.org/licenses/lgpl-3.0.en.html&apos;&gt;GNU lgplV3 license&lt;/a&gt;.&lt;br&gt;&lt;br&gt;This app is open source and licensed under the &lt;a href=&apos;https://www.gnu.org/licenses/agpl-3.0.en.html&apos;&gt;GNU agplV3 license&lt;/a&gt;, the source code can be found &lt;a href=&apos;https://itsblue.dev/dorian/blueROCK/&apos;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Resultservice and rankings provided by &lt;a href=&apos;http://www.digitalROCK.de&apos;&gt;digital ROCK&lt;/a&gt;.</source>
<translation type="unfinished">Diese App wurde unter Verwendung des &lt;a href=&apos;https://qt.io&apos;&gt;Qt Frameworks&lt;/a&gt; unter der &lt;a href=&apos;https://www.gnu.org/licenses/lgpl-3.0.en.html&apos;&gt;GNU lgplV3 Lizenz&lt;/a&gt; erstellt.&lt;br&gt;&lt;br&gt;Diese App ist Open-source und lizensiert unter der &lt;a href=&apos;https://www.gnu.org/licenses/agpl-3.0.en.html&apos;&gt;GNU agplV3 Lizenz&lt;/a&gt;. Der Sourcecode findet sich &lt;a href=&apos;https://itsblue.dev/dorian/blueROCK/&apos;&gt;hier&lt;/a&gt;.Die Ergebnisse und Ranglisten werden von &lt;a href=&apos;http://www.digitalROCK.de&apos;&gt;digital ROCK&lt;/a&gt; zur Verfügung gestellt.</translation> <translation>Diese App wurde unter Verwendung des &lt;a href=&apos;https://qt.io&apos;&gt;Qt Frameworks&lt;/a&gt; unter der &lt;a href=&apos;https://www.gnu.org/licenses/lgpl-3.0.en.html&apos;&gt;GNU lgplV3 Lizenz&lt;/a&gt; erstellt.&lt;br&gt;&lt;br&gt;Diese App ist Open-source und lizensiert unter der &lt;a href=&apos;https://www.gnu.org/licenses/agpl-3.0.en.html&apos;&gt;GNU agplV3 Lizenz&lt;/a&gt;. Der Sourcecode findet sich &lt;a href=&apos;https://itsblue.dev/dorian/blueROCK/&apos;&gt;hier&lt;/a&gt;.Die Ergebnisse und Ranglisten werden von &lt;a href=&apos;http://www.digitalROCK.de&apos;&gt;digital ROCK&lt;/a&gt; zur Verfügung gestellt.</translation>
</message> </message>
<message id="#calendar"> <message id="#calendar">
<location filename="../qml/Widgets/CalendarWidget.qml" line="32"/> <location filename="../qml/Widgets/CalendarWidget.qml" line="32"/>
@ -176,6 +176,7 @@
<location filename="../qml/Widgets/CalendarWidget.qml" line="278"/> <location filename="../qml/Widgets/CalendarWidget.qml" line="278"/>
<location filename="../qml/Widgets/RegistrationWidget.qml" line="127"/> <location filename="../qml/Widgets/RegistrationWidget.qml" line="127"/>
<location filename="../qml/Widgets/ResultWidget.qml" line="169"/> <location filename="../qml/Widgets/ResultWidget.qml" line="169"/>
<location filename="../qml/Widgets/StartlistWidget.qml" line="98"/>
<source>Select category</source> <source>Select category</source>
<translation>Kategorie auswählen</translation> <translation>Kategorie auswählen</translation>
</message> </message>
@ -217,7 +218,7 @@
<message id="#showResults"> <message id="#showResults">
<location filename="../qml/Widgets/RegistrationWidget.qml" line="129"/> <location filename="../qml/Widgets/RegistrationWidget.qml" line="129"/>
<source>Show results</source> <source>Show results</source>
<translation type="unfinished"></translation> <translation>Ergebnisse anzeigen</translation>
</message> </message>
<message id="#resultsHeadline"> <message id="#resultsHeadline">
<location filename="../qml/Widgets/ResultWidget.qml" line="136"/> <location filename="../qml/Widgets/ResultWidget.qml" line="136"/>
@ -226,72 +227,44 @@
</message> </message>
<message id="#startlistHeadline"> <message id="#startlistHeadline">
<location filename="../qml/Widgets/StartlistWidget.qml" line="72"/> <location filename="../qml/Widgets/StartlistWidget.qml" line="72"/>
<location filename="../qml/Widgets/StartlistWidget.qml" line="98"/>
<source>(Startlist)</source> <source>(Startlist)</source>
<translation>(Startliste)</translation> <translation>(Startliste)</translation>
</message> </message>
<message id="#loading"> <message id="#loading">
<location filename="../qml/main.qml" line="552"/> <location filename="../qml/main.qml" line="550"/>
<source>Loading</source> <source>Loading</source>
<translation>Laden</translation> <translation>Laden</translation>
</message> </message>
<message id="#noConnectionError"> <message id="#noConnectionError">
<location filename="../qml/main.qml" line="666"/> <location filename="../qml/main.qml" line="664"/>
<source>No connection to server</source> <source>No connection to server</source>
<translation>Keine Verbindung zum Server</translation> <translation>Keine Verbindung zum Server</translation>
</message> </message>
<message id="#notFoundError"> <message id="#notFoundError">
<location filename="../qml/main.qml" line="671"/> <location filename="../qml/main.qml" line="669"/>
<source>Not found</source> <source>Not found</source>
<translation>Nicht gefunden</translation> <translation>Nicht gefunden</translation>
</message> </message>
<message id="#noDataError"> <message id="#noDataError">
<location filename="../qml/main.qml" line="676"/> <location filename="../qml/main.qml" line="674"/>
<source>No Data</source> <source>No Data</source>
<translation>Keine Daten</translation> <translation>Keine Daten</translation>
</message> </message>
<message id="#invalidRequestError"> <message id="#invalidRequestError">
<location filename="../qml/main.qml" line="681"/> <location filename="../qml/main.qml" line="679"/>
<source>Invalid Request</source> <source>Invalid Request</source>
<translation>Ungültige Anfrage</translation> <translation>Ungültige Anfrage</translation>
</message> </message>
<message id="#unexpectedError"> <message id="#unexpectedError">
<location filename="../qml/main.qml" line="687"/> <location filename="../qml/main.qml" line="685"/>
<source>Unexpected error</source> <source>Unexpected error</source>
<translation>Unerwarteter Fehler</translation> <translation>Unerwarteter Fehler</translation>
</message> </message>
<message id="#shareResultsLinkText"> <message id="#shareResultsLinkText">
<location filename="../../sources/bluerockbackend.cpp" line="99"/> <location filename="../../sources/bluerockbackend.cpp" line="101"/>
<source>Check out the results of %1 over here:</source> <source>Check out the results of %1 over here:</source>
<translation>Verfolge die Ergebnisse vom Wettkampf &quot;%1&quot; hier live:</translation> <oldsource>Check out the results of %1 over here:</oldsource>
</message> <translation>Verfolge die Ergebnisse von &quot;%1&quot; hier:</translation>
</context>
<context>
<name>AndroidShareUtils</name>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="191"/>
<source>Share: an Error occured</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="203"/>
<source>Share: an Error occured
WorkingDir not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="217"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="243"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="255"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="283"/>
<source>Empty URL received</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="235"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="273"/>
<source>File does not exist: %1</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
</TS> </TS>

Binary file not shown.

View file

@ -172,6 +172,7 @@
<location filename="../qml/Widgets/CalendarWidget.qml" line="278"/> <location filename="../qml/Widgets/CalendarWidget.qml" line="278"/>
<location filename="../qml/Widgets/RegistrationWidget.qml" line="127"/> <location filename="../qml/Widgets/RegistrationWidget.qml" line="127"/>
<location filename="../qml/Widgets/ResultWidget.qml" line="169"/> <location filename="../qml/Widgets/ResultWidget.qml" line="169"/>
<location filename="../qml/Widgets/StartlistWidget.qml" line="98"/>
<source>Select category</source> <source>Select category</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -222,71 +223,43 @@
</message> </message>
<message id="#startlistHeadline"> <message id="#startlistHeadline">
<location filename="../qml/Widgets/StartlistWidget.qml" line="72"/> <location filename="../qml/Widgets/StartlistWidget.qml" line="72"/>
<location filename="../qml/Widgets/StartlistWidget.qml" line="98"/>
<source>(Startlist)</source> <source>(Startlist)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#loading"> <message id="#loading">
<location filename="../qml/main.qml" line="552"/> <location filename="../qml/main.qml" line="550"/>
<source>Loading</source> <source>Loading</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#noConnectionError"> <message id="#noConnectionError">
<location filename="../qml/main.qml" line="666"/> <location filename="../qml/main.qml" line="664"/>
<source>No connection to server</source> <source>No connection to server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#notFoundError"> <message id="#notFoundError">
<location filename="../qml/main.qml" line="671"/> <location filename="../qml/main.qml" line="669"/>
<source>Not found</source> <source>Not found</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#noDataError"> <message id="#noDataError">
<location filename="../qml/main.qml" line="676"/> <location filename="../qml/main.qml" line="674"/>
<source>No Data</source> <source>No Data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#invalidRequestError"> <message id="#invalidRequestError">
<location filename="../qml/main.qml" line="681"/> <location filename="../qml/main.qml" line="679"/>
<source>Invalid Request</source> <source>Invalid Request</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#unexpectedError"> <message id="#unexpectedError">
<location filename="../qml/main.qml" line="687"/> <location filename="../qml/main.qml" line="685"/>
<source>Unexpected error</source> <source>Unexpected error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message id="#shareResultsLinkText"> <message id="#shareResultsLinkText">
<location filename="../../sources/bluerockbackend.cpp" line="99"/> <location filename="../../sources/bluerockbackend.cpp" line="101"/>
<source>Check out the results of %1 over here:</source> <source>Check out the results of %1 over here:</source>
<translation type="unfinished"></translation> <oldsource>Check out the results of %1 over here:</oldsource>
</message>
</context>
<context>
<name>AndroidShareUtils</name>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="191"/>
<source>Share: an Error occured</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="203"/>
<source>Share: an Error occured
WorkingDir not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="217"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="243"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="255"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="283"/>
<source>Empty URL received</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="235"/>
<location filename="../../sources/shareUtils/androidshareutils.cpp" line="273"/>
<source>File does not exist: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>

View file

@ -97,7 +97,7 @@ QVariantMap BlueRockBackend::getParamsFromUrl(QString stringUrl) {
} }
void BlueRockBackend::shareResultsAsUrl(QString url, QString compName) { void BlueRockBackend::shareResultsAsUrl(QString url, QString compName) {
//% "Check out the results of %1 over here:" //% "Check out the results of %1 over here:"
this->_shareUtils->shareText(qtTrId("#shareResultsLinkText").arg(compName) + " \n", url); this->_shareUtils->shareText(qtTrId("#shareResultsLinkText").arg(compName) + " \n", url);
} }
@ -112,6 +112,7 @@ void BlueRockBackend::shareResultsAsPoster(QString url, QString compName) {
} }
} }
compName = compName.replace("/", "");
path += "/" + compName + ".pdf"; path += "/" + compName + ".pdf";
QFile file(path); QFile file(path);
@ -206,7 +207,7 @@ bool BlueRockBackend::requestCameraPermission() {
return false; return false;
} }
return true; return false;
#elif defined Q_OS_IOS #elif defined Q_OS_IOS
return this->_iosPermissionUtils->requestCameraPermission(); return this->_iosPermissionUtils->requestCameraPermission();
#else #else

View file

@ -188,7 +188,7 @@ void AndroidShareUtils::processActivityResult(int requestCode, int resultCode)
emit shareFinished(requestCode); emit shareFinished(requestCode);
} else { } else {
qDebug() << "wrong result code: " << resultCode << " from request: " << requestCode; qDebug() << "wrong result code: " << resultCode << " from request: " << requestCode;
emit shareError(requestCode, tr("Share: an Error occured")); emit shareError(requestCode, "Share: an Error occured");
} }
} }
@ -200,7 +200,7 @@ void AndroidShareUtils::checkPendingIntents(const QString workingDirPath)
QAndroidJniObject jniWorkingDir = QAndroidJniObject::fromString(workingDirPath); QAndroidJniObject jniWorkingDir = QAndroidJniObject::fromString(workingDirPath);
if(!jniWorkingDir.isValid()) { if(!jniWorkingDir.isValid()) {
qWarning() << "QAndroidJniObject jniWorkingDir not valid."; qWarning() << "QAndroidJniObject jniWorkingDir not valid.";
emit shareError(0, tr("Share: an Error occured\nWorkingDir not valid")); emit shareError(0, "Share: an Error occured\nWorkingDir not valid");
return; return;
} }
activity.callMethod<void>("checkPendingIntents","(Ljava/lang/String;)V", jniWorkingDir.object<jstring>()); activity.callMethod<void>("checkPendingIntents","(Ljava/lang/String;)V", jniWorkingDir.object<jstring>());
@ -214,7 +214,7 @@ void AndroidShareUtils::setFileUrlReceived(const QString &url)
{ {
if(url.isEmpty()) { if(url.isEmpty()) {
qWarning() << "setFileUrlReceived: we got an empty URL"; qWarning() << "setFileUrlReceived: we got an empty URL";
emit shareError(0, tr("Empty URL received")); emit shareError(0, "Empty URL received");
return; return;
} }
qDebug() << "AndroidShareUtils setFileUrlReceived: we got the File URL from JAVA: " << url; qDebug() << "AndroidShareUtils setFileUrlReceived: we got the File URL from JAVA: " << url;
@ -232,7 +232,7 @@ void AndroidShareUtils::setFileUrlReceived(const QString &url)
emit fileUrlReceived(myUrl); emit fileUrlReceived(myUrl);
} else { } else {
qDebug() << "setFileUrlReceived: FILE does NOT exist "; qDebug() << "setFileUrlReceived: FILE does NOT exist ";
emit shareError(0, tr("File does not exist: %1").arg(myUrl)); emit shareError(0, QString("File does not exist: %1").arg(myUrl));
} }
} }
@ -240,7 +240,7 @@ void AndroidShareUtils::setOtherUrlReceived(const QString &url, const QString &s
{ {
if(url.isEmpty()) { if(url.isEmpty()) {
qWarning() << "setFileUrlReceived: we got an empty URL"; qWarning() << "setFileUrlReceived: we got an empty URL";
emit shareError(0, tr("Empty URL received")); emit shareError(0, "Empty URL received");
return; return;
} }
qDebug() << "AndroidShareUtils setOtherUrlReceived: we got the Other URL from JAVA: " << url; qDebug() << "AndroidShareUtils setOtherUrlReceived: we got the Other URL from JAVA: " << url;
@ -252,7 +252,7 @@ void AndroidShareUtils::setFileReceivedAndSaved(const QString &url)
{ {
if(url.isEmpty()) { if(url.isEmpty()) {
qWarning() << "setFileReceivedAndSaved: we got an empty URL"; qWarning() << "setFileReceivedAndSaved: we got an empty URL";
emit shareError(0, tr("Empty URL received")); emit shareError(0, "Empty URL received");
return; return;
} }
qDebug() << "AndroidShareUtils setFileReceivedAndSaved: we got the File URL from JAVA: " << url; qDebug() << "AndroidShareUtils setFileReceivedAndSaved: we got the File URL from JAVA: " << url;
@ -270,7 +270,7 @@ void AndroidShareUtils::setFileReceivedAndSaved(const QString &url)
emit fileReceivedAndSaved(myUrl); emit fileReceivedAndSaved(myUrl);
} else { } else {
qDebug() << "setFileReceivedAndSaved: FILE does NOT exist "; qDebug() << "setFileReceivedAndSaved: FILE does NOT exist ";
emit shareError(0, tr("File does not exist: %1").arg(myUrl)); emit shareError(0, QString("File does not exist: %1").arg(myUrl));
} }
} }
@ -280,7 +280,7 @@ bool AndroidShareUtils::checkFileExits(const QString &url)
{ {
if(url.isEmpty()) { if(url.isEmpty()) {
qWarning() << "checkFileExits: we got an empty URL"; qWarning() << "checkFileExits: we got an empty URL";
emit shareError(0, tr("Empty URL received")); emit shareError(0, "Empty URL received");
return false; return false;
} }
qDebug() << "AndroidShareUtils checkFileExits: we got the File URL from JAVA: " << url; qDebug() << "AndroidShareUtils checkFileExits: we got the File URL from JAVA: " << url;