Skip to content

Commit

Permalink
Google Drive
Browse files Browse the repository at this point in the history
  • Loading branch information
BourgeoisLab committed Apr 7, 2023
1 parent 01772cb commit 9a4da6c
Show file tree
Hide file tree
Showing 13 changed files with 788 additions and 63 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog

## Version 2.5.2 (07.04.2023)
- Neu: Google Drive Unterstützung

## Version 2.5.1 (02.04.2023)
- Fix: Aktualisieren des Dropbox Access Tokens
- Fix: Berücksichtigung der Temperatur bei Spindelmessung
Expand Down Expand Up @@ -48,4 +51,4 @@
- Fix: WebDav

## Version 2.0.0beta1 (29.10.2019)
- Neu: Unterstüzung für kleiner-brauhelfer Version 2.x.x
- Neu: Unterstützung für kleiner-brauhelfer Version 2.x.x
84 changes: 59 additions & 25 deletions README.md
Expand Up @@ -3,13 +3,13 @@
[![GitHub Release Date](https://img.shields.io/github/release-date/kleiner-brauhelfer/kleiner-brauhelfer-app)](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-app/releases/latest/)
[![GitHub Downlaods](https://img.shields.io/github/downloads/kleiner-brauhelfer/kleiner-brauhelfer-app/total)](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-app/releases/latest/)

Die kleiner-brauhelfer-app ist eine App, welche die Software [kleiner-brauhelfer-2](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-2) ergänzt. Die App wird nur für Android Geräte kompiliert, sollte aber auch mit anderen Betriebssysteme kompatibel sein.
Die Android App *kleiner-brauhelfer-app* ergänzt das Desktopprogramm [kleiner-brauhelfer-2](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-2).

**Diskussionsthread:**
**Diskussion auf Hobbybrauer.de:**

https://hobbybrauer.de/forum/viewtopic.php?f=3&t=17466

## Download letzte Version
## Download
- [Version 2.x.x](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-app/releases/latest) passend zum [kleinen-brauhelfer-2](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-2)
- [Version 1.0.0](https://github.com/kleiner-brauhelfer/kleiner-brauhelfer-app/releases/tag/v1.0.0) passend zum [kleinen-brauhelfer bis 1.4.4.6](https://github.com/Gremmel/kleiner-brauhelfer)

Expand All @@ -22,29 +22,63 @@ Siehe [Changelog](CHANGELOG.md).
![Screenshot 03](doc/Screenshot_03.png)
![Screenshot 04](doc/Screenshot_04.png)
![Screenshot 05](doc/Screenshot_05.png)
![Screenshot 06](doc/Screenshot_06.png)
![Screenshot 07](doc/Screenshot_07.png)

## Setup
### Synchronization mit Dropbox
1. *Dropbox developer area* aufrufen https://www.dropbox.com/developers.
2. Oben rechts auf *App Console* klicken.
3. Auf *Create your app* klicken.
4. *Scoped access* auswählen.
5. *App folder* auswählen.
6. App Name wählen.
7. Auf *Create app* klicken.
8. Oben auf den *Permissions* Reiter wechseln.
9. Folgende Berechtigungen aktivieren: *files.metadata.write*, *files.metadata.read*, *files.content.write* und *files.content.read*
10. Einstellungen mit *Submit* bestätigen.
11. Zurück zum *Settings* Reiter wechseln.
12. Bei *Redirect URIs* *http://127.0.0.1:5476/* eintragen.
13. Die Dropbox Seite aufrufen https://www.dropbox.com und dabei die *Dropbox developer area* offen lassen.
14. Bei den Dateien sollte es jetzt einen Unterordner *App* und darin einen weiteren Unterordner mit dem App Name geben.
15. Datenbankdatei (*kb_daten.sqlite*) dorthin platzieren.
16. *kleiner-brauhelfer-app* starten und zu den Einstellungen wechseln.
17. *App key* und *App secret* aus der *Dropbox developer area* kopieren.
18. Unter *Pfad* den Pfad zur Datenbank inklusive Dateiname eingeben. Befindet sich die Datei direkt im Hauptordner des erstellten Dropboxordner, dann lautet der Pfad */kb_daten.sqlite*.
19. Auf *Zugriff erlauben* klicken und die Berechtigung erlauben. Die App sollte mit *Access granted!* die Zugriffberechtigung bestätigen.
20. Die App sollte sich dann mit Dropbox verbinden. Möglicherweise ist ein Neustart der App erforderlich.
21. Nicht vergessen im Desktopprogramm *kleiner-brauhelfer* die Datenbank vom entsprechenden Dropbox Ordner auszuwählen.
1. *Dropbox developer area* aufrufen (http://www.dropbox.com/developers)
2. Auf *App Console* klicken
3. Auf *Create app* klicken
4. *Scoped access* auswählen
5. *App folder* auswählen
6. App Name wählen
7. Auf *Create app* klicken
8. Zum *Permissions* Reiter wechseln
9. Folgende Berechtigungen aktivieren:
- *files.metadata.write*
- *files.metadata.read*
- *files.content.write*
- *files.content.read*
10. Einstellungen mit *Submit* bestätigen
11. Zurück zum *Settings* Reiter wechseln
12. Bei *Redirect URIs* "*http://127.0.0.1:5476/*" eintragen
13. Dropbox Seite aufrufen http://www.dropbox.com und dabei die *Dropbox developer area* offen lassen
14. Ein Ordner *Apps* und ein Unterordner mit dem App Name sollten automatisch erstellt worden sein
15. Die Datenbankdatei (*kb_daten.sqlite*) im Unterordner hochladen
16. *kleiner-brauhelfer-app* starten und zu den Einstellungen wechseln
17. *App key* und *App secret* aus der *Dropbox developer area* kopieren
18. Unter *Pfad* "*/kb_daten.sqlite*" eingeben. Eintrag entsprechend anpassen, falls die Datenbank in einem Unterordner platziert oder anders benannt wurde.
19. Auf *Zugriff erlauben* klicken und die Berechtigung erlauben. Die App sollte mit *Zugang gewährt.* die Zugriffberechtigung bestätigen.
20. Die App sollte sich nun mit Dropbox verbinden. Möglicherweise ist ein Neustart der App erforderlich.
21. Achten, dass das Desktopprogramm *kleiner-brauhelfer* auch auf die Datenbank aus dem Dropbox Ordner zugreift

### Synchronization mit Google Drive
1. *Google Cloud Platform Console* aufrufen (http://console.cloud.google.com)
2. Neues Projekt mit beliebigem Name anlegen und selektieren
3. Linkes Panel öffnen und *APIs & services* selektieren
4. Auf *Enable APIs and Services* (oder *Library*) klicken
5. *Google Drive API* auswählen und auf *Enable* klicken
6. Auf der linken Seite auf *OAuth consent screen* klicken
7. User Type *External* auswählen und auf *Create* klicken
8. Formular ausfüllen (App name, User support email & developer contact information) und auf *Save and continue* klicken
9. *Scopes* und *Test users* leer lassen und mit Klick auf *Save and continue* bestätigen
10. *Summary* mit Klick auf *Back to dashboard* bestätigen
11. *Publishing status* mit Klick auf *Publish App* ändern
12. Auf der linken Seite auf *Credentials* klicken
13. Auf *Create credentials* klicken und *OAuth client ID* wählen
14. Als *Application type* *Web application* wählen
15. Unter *Authorised redirect URIs* "*http://127.0.0.1:5477/*" eintragen
16. Auf *Create* klicken
17. *Client ID* und *Client secret* in der *kleiner-brauhelfer-app* eintragen
18. Auf *Zugriff erlauben* klicken und die Berechtigung erlauben. Die App sollte mit *Zugang gewährt.* die Zugriffberechtigung bestätigen.
19. Die Datenbankdatei (*kb_daten.sqlite*) im Google Drive (https://www.google.com/drive) hochladen
20. Dateiname in der *kleiner-brauhelfer-app* eintragen und auf *Datei ID ermitteln* klicken
21. Kann die richtige ID nicht ermittelt werden kann so vorgegangen werden:
1. Google Drive aufrufen (https://www.google.com/drive)
2. Rechtsklick auf die Datenbankdatei und *Get Link* wählen
3. Link mit *Copy link* kopieren und in einem Texteditor einfügen
4. Die ID ist der Teil zwischen "*../d/*" und "*/view...*"
Z.B. Link: https://drive.google.com/file/d/1eXmIGOU9Wzo7qtqYTOaUV-TTpEDaL-ON/view?usp=share_link
ID: 1eXmIGOU9Wzo7qtqYTOaUV-TTpEDaL-ON
5. ID in der *kleiner-brauhelfer-app* eintragen
22. Noch einmal auf *Zugriff erlauben* klicken. Dieses Mal sollte der Zugang gewährt werden und die Datenbank heruntergeladen werden.
4 changes: 3 additions & 1 deletion kleiner-brauhelfer-app/kleiner-brauhelfer-app.pro
Expand Up @@ -9,7 +9,7 @@ ORGANIZATION = kleiner-brauhelfer
TARGET = kleiner-brauhelfer-app
VER_MAJ = 2
VER_MIN = 5
VER_PAT = 1
VER_PAT = 2
VERSION = $$sprintf("%1.%2.%3",$$VER_MAJ,$$VER_MIN,$$VER_PAT)
DEFINES += ORGANIZATION=\\\"$$ORGANIZATION\\\" TARGET=\\\"$$TARGET\\\" VERSION=\\\"$$VERSION\\\"
DEFINES += VER_MAJ=\"$$VER_MAJ\" VER_MIN=\"$$VER_MIN\" VER_PAT=\"$$VER_PAT\"
Expand Down Expand Up @@ -55,6 +55,7 @@ INCLUDEPATH += src ../kleiner-brauhelfer-core/src
HEADERS += \
src/qmlutils.h \
src/syncservice.h \
src/syncservicegoogle.h \
src/syncservicelocal.h \
src/syncservicemanager.h \
src/syncservicedropbox.h \
Expand All @@ -66,6 +67,7 @@ SOURCES += \
src/main.cpp \
src/qmlutils.cpp \
src/syncservice.cpp \
src/syncservicegoogle.cpp \
src/syncservicelocal.cpp \
src/syncservicemanager.cpp \
src/syncservicedropbox.cpp \
Expand Down
8 changes: 8 additions & 0 deletions kleiner-brauhelfer-app/qml/main.qml
Expand Up @@ -66,6 +66,14 @@ ApplicationWindow {
messageDialog.open()
}
}
Connections {
target: SyncService.syncServiceGoogle
function onAccessGranted() {
connect()
messageDialog.text = qsTr("Zugang gewährt.")
messageDialog.open()
}
}

// scheduler to do stuff in the background, use run() or runExt()
Timer {
Expand Down
129 changes: 127 additions & 2 deletions kleiner-brauhelfer-app/qml/pagesOthers/PageSettings.qml
Expand Up @@ -55,6 +55,12 @@ PageBase {
app.connect()
}
break
case SyncService.Google:
if (SyncService.syncServiceGoogle.clientId !== "" &&
SyncService.syncServiceGoogle.clientSecret !== "" &&
SyncService.syncServiceGoogle.fileId !== "")
app.connect()
break
}
}

Expand All @@ -70,7 +76,7 @@ PageBase {
ComboBoxBase {
Layout.fillWidth: true
Layout.preferredHeight: height
model: [qsTr("Lokal"), qsTr("Dropbox"), qsTr("WebDav")]
model: [qsTr("Lokal"), qsTr("Dropbox"), qsTr("WebDav"), qsTr("Google Drive")]
currentIndex: SyncService.serviceId
onCurrentIndexChanged: {
if (activeFocus) {
Expand Down Expand Up @@ -155,7 +161,7 @@ PageBase {
Layout.topMargin: 8
Layout.bottomMargin: 8
font.italic: true
text: qsTr("Benötigt eine <a href=\"https://www.dropbox.com/developers/apps\">Dropbox App</a>.")
text: qsTr("Benötigt eine <a href=\"http://www.dropbox.com/developers/apps\">Dropbox App</a>.")
onLinkActivated: (link) => Qt.openUrlExternally(link)
}
LabelSubheader {
Expand Down Expand Up @@ -318,6 +324,125 @@ PageBase {
}
}
}
ColumnLayout {
Layout.fillWidth: true
visible: SyncService.serviceId === SyncService.Google
LabelPrim {
Layout.fillWidth: true
Layout.topMargin: 8
Layout.bottomMargin: 8
font.italic: true
text: qsTr("Benötigt ein <a href=\"http://console.cloud.google.com\">Google Cloud-Projekt</a>.")
onLinkActivated: (link) => Qt.openUrlExternally(link)
}
LabelSubheader {
Layout.fillWidth: true
text: qsTr("Client ID")
}
TextFieldBase {
property bool wasEdited: false
Layout.fillWidth: true
placeholderText: "Client ID"
inputMethodHints: Qt.ImhNoAutoUppercase
text: SyncService.syncServiceGoogle.clientId
selectByMouse: true
onTextChanged: {
if (activeFocus)
wasEdited = true
}
onEditingFinished: {
if (wasEdited)
{
SyncService.syncServiceGoogle.clientId = text
wasEdited = false
}
}
}
LabelSubheader {
Layout.fillWidth: true
text: qsTr("Client secret")
}
TextFieldBase {
property bool wasEdited: false
Layout.fillWidth: true
placeholderText: "Client secret"
inputMethodHints: Qt.ImhNoAutoUppercase
echoMode: TextInput.Password
text: SyncService.syncServiceGoogle.clientSecret
selectByMouse: true
onTextChanged: {
if (activeFocus)
wasEdited = true
}
onEditingFinished: {
if (wasEdited)
{
SyncService.syncServiceGoogle.clientSecret = text
wasEdited = false
}
}
}
ButtonBase {
Layout.fillWidth: true
text: qsTr("Zugriff erlauben")
onClicked: {
Brauhelfer.disconnectDatabase()
SyncService.syncServiceGoogle.grantAccess()
}
}
LabelSubheader {
Layout.fillWidth: true
text: qsTr("Dateiname")
}
TextFieldBase {
property bool wasEdited: false
Layout.fillWidth: true
placeholderText: "kb_daten.sqlite"
text: SyncService.syncServiceGoogle.fileName
selectByMouse: true
onTextChanged: {
if (activeFocus)
wasEdited = true
}
onEditingFinished: {
if (wasEdited)
{
SyncService.syncServiceGoogle.fileName = text
wasEdited = false
}
}
}
LabelSubheader {
Layout.fillWidth: true
text: qsTr("Datei ID")
}
TextFieldBase {
property bool wasEdited: false
Layout.fillWidth: true
placeholderText: "Datei ID"
text: SyncService.syncServiceGoogle.fileId
selectByMouse: true
onTextChanged: {
if (activeFocus)
wasEdited = true
}
onEditingFinished: {
if (wasEdited)
{
SyncService.syncServiceGoogle.fileId = text
wasEdited = false
}
}
}
ButtonBase {
Layout.fillWidth: true
text: qsTr("Datei ID ermitteln")
onClicked: {
Brauhelfer.disconnectDatabase()
SyncService.syncServiceGoogle.retrieveFileId()
}
}
}
CheckBoxBase {
Layout.fillWidth: true
text: qsTr("Schreibgeschützt")
Expand Down
3 changes: 1 addition & 2 deletions kleiner-brauhelfer-app/src/syncservice.cpp
Expand Up @@ -2,9 +2,8 @@

#include <QtNetwork>

SyncService::SyncService(QSettings *settings, const QString &urlServerCheck) :
SyncService::SyncService(QSettings *settings) :
_settings(settings),
_urlServerCheck(urlServerCheck),
_filePath(""),
_state(SyncState::Failed)
{
Expand Down
4 changes: 1 addition & 3 deletions kleiner-brauhelfer-app/src/syncservice.h
Expand Up @@ -45,9 +45,8 @@ class SyncService : public QObject
/**
* @brief Abstract class for synchronization service
* @param settings Settings
* @param urlServerCheck URL to check availability if synchronization service
*/
SyncService(QSettings *settings, const QString &urlServerCheck = "");
SyncService(QSettings *settings);
virtual ~SyncService();

/**
Expand Down Expand Up @@ -124,7 +123,6 @@ class SyncService : public QObject
static QString cacheFilePath(const QString filePath);

QSettings* _settings;
QString _urlServerCheck;

private:
QString _filePath;
Expand Down

0 comments on commit 9a4da6c

Please sign in to comment.