diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000..cc7d695
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,22 @@
+changelog:
+ exclude:
+ labels:
+ - ignore-for-release
+ authors:
+ - octocat
+ categories:
+ - title: Breaking Changes
+ labels:
+ - Semver-Major
+ - breaking-change
+ - title: Exciting New Features
+ labels:
+ - Semver-Minor
+ - enhancement
+ - title: Bug Fixing
+ labels:
+ - Semver-Patch
+ - bug
+ - title: Other Changes
+ labels:
+ - "*"
diff --git a/.github/workflows/build-test-install.yml b/.github/workflows/build-test-install.yml
new file mode 100644
index 0000000..21da0d5
--- /dev/null
+++ b/.github/workflows/build-test-install.yml
@@ -0,0 +1,61 @@
+name: push-build-release
+run-name: ${{ github.actor }} ${{ github.event_name }} to ${{ github.base_ref }}
+on:
+
+ push:
+ tags:
+ - 'v*'
+ pull_request:
+ branches: [develop]
+jobs:
+ build_test_package:
+ strategy:
+ matrix:
+ os: [ubuntu-latest,macos-latest,windows-latest]
+
+ uses: EddyTheCo/Common/.github/workflows/build-test-install.yml@v0.1.2
+ permissions:
+ contents: write
+ with:
+ os: ${{ matrix.os }}
+ cmakeArgs: ' -DUSE_THREADS=ON -DQTDEPLOY=ON'
+ qtModules: 'qtwebsockets qtshadertools qtmultimedia qtlocation qtpositioning'
+ qtVersion: '6.6.0'
+ test: false
+ build-android:
+ strategy:
+ matrix:
+ qtArch: ['android_arm64_v8a','android_armv7']
+
+ uses: EddyTheCo/Common/.github/workflows/build-android.yml@android_subdirectory
+ with:
+ qtModules: 'qtwebsockets qtshadertools qtmultimedia qtlocation qtpositioning'
+ qtTarget: 'lockersClient'
+ qtVersion: '6.6.0'
+ cmakeArgs: '-DUSE_THREADS=ON -DBUILD_SERVER=OFF'
+ qtArch: ${{ matrix.qtArch }}
+ subdir: 'Client'
+ secrets:
+ QT_ANDROID_KEYSTORE_STORE_PASS: ${{ secrets.QT_ANDROID_KEYSTORE_STORE_PASS }}
+ release:
+ if: startsWith(github.ref, 'refs/tags/v')
+ needs: [build_test_package,build-android]
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: write
+
+ steps:
+
+ - uses: actions/checkout@v4
+
+ - uses: actions/download-artifact@v4
+ with:
+ path: artifacts
+ - name: Display structure of downloaded files
+ run: ls -R
+
+ - name: Releases
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ./artifacts/*/*
diff --git a/.github/workflows/build-wasm.yaml b/.github/workflows/build-wasm.yaml
new file mode 100644
index 0000000..fcc78d7
--- /dev/null
+++ b/.github/workflows/build-wasm.yaml
@@ -0,0 +1,59 @@
+name: build-wasm
+run-name: ${{ github.actor }} ${{ github.event_name }} to ${{ github.base_ref }}
+on:
+ pull_request:
+ branches: [main,develop]
+ pull_request_target:
+ types: [closed]
+ branches: [main]
+jobs:
+ build-html:
+ uses: EddyTheCo/Common/.github/workflows/build-wasm.yml@v0.1.2
+ permissions:
+ pages: write
+ id-token: write
+ with:
+ qtModules: 'qtwebsockets qtshadertools '
+ qtVersion: '6.6.0'
+ emsdkVersion: '3.1.37'
+ deploy_dev: ${{ (github.event.pull_request.merged == false)&&(startsWith(github.base_ref, 'main'))&&(startsWith(github.head_ref, 'develop')) }}
+ deploy_wasm:
+ needs: build-html
+ if: ${{ (startsWith(github.base_ref, 'main'))&&(startsWith(github.head_ref, 'develop')) }}
+
+ runs-on: 'ubuntu-latest'
+ permissions:
+ pages: write
+ id-token: write
+
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
+
+ release:
+ if: startsWith(github.ref, 'refs/tags/v')
+ needs: build-html
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: write
+
+ steps:
+
+ - uses: actions/checkout@v4
+
+ - uses: actions/download-artifact@v4
+ with:
+ path: artifacts
+ - name: Display structure of downloaded files
+ run: ls -R
+
+ - name: Releases
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ./artifacts/*/*
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 949a0b3..ce27c41 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,3 +56,12 @@ endif(BUILD_CLIENT)
if(BUILD_SERVER)
add_subdirectory(Server)
endif(BUILD_SERVER)
+
+if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
+ set(CPACK_PACKAGE_CONTACT "estervtech")
+ set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-v${SEMVER}-${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_VERSION}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_CXX_COMPILER_ID}")
+ if(USE_THREADS)
+ set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-MThread")
+ endif(USE_THREADS)
+ include(CPack)
+endif()
diff --git a/Client/CMakeLists.txt b/Client/CMakeLists.txt
index 78d5162..99002ed 100644
--- a/Client/CMakeLists.txt
+++ b/Client/CMakeLists.txt
@@ -18,7 +18,7 @@ endif()
if(EMSCRIPTEN OR ANDROID)
- find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Qml Multimedia QuickControls2)
+ find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Qml QuickControls2)
find_package(EstervDesigns 1.1 REQUIRED COMPONENTS FlatControl CONFIG )
endif(EMSCRIPTEN OR ANDROID)
@@ -64,6 +64,19 @@ if(ANDROID)
set_property(TARGET lockersClient APPEND PROPERTY QT_ANDROID_MIN_SDK_VERSION 30)
set_property(TARGET lockersClient APPEND PROPERTY QT_ANDROID_TARGET_SDK_VERSION 34)
set_property(TARGET lockersClient APPEND PROPERTY QT_ANDROID_SDK_BUILD_TOOLS_REVISION 34.0.0)
+
+ FetchContent_Declare(
+ android_openssl
+ DOWNLOAD_EXTRACT_TIMESTAMP true
+ URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
+ )
+FetchContent_GetProperties(android_openssl)
+if(NOT android_openssl_POPULATED)
+ FetchContent_Populate(android_openssl)
+ include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
+ add_android_openssl_libraries(lockersClient)
+endif(NOT android_openssl_POPULATED)
+
endif(ANDROID)
endif(EMSCRIPTEN OR ANDROID)
diff --git a/Client/CMakeLists.txt.user b/Client/CMakeLists.txt.user
deleted file mode 100644
index fb4720e..0000000
--- a/Client/CMakeLists.txt.user
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
- EnvironmentId
- {b59dfd0c-8ff4-4afe-a287-088d37c3c50d}
-
-
- ProjectExplorer.Project.ActiveTarget
- 0
-
-
- ProjectExplorer.Project.EditorSettings
-
- true
- false
- true
-
- Cpp
-
- CppGlobal
-
-
-
- QmlJS
-
- QmlJSGlobal
-
-
- 2
- UTF-8
- false
- 4
- false
- 80
- true
- true
- 1
- 0
- false
- true
- false
- 1
- true
- true
- 1
- 8
- true
- false
- 1
- true
- true
- true
- *.md, *.MD, Makefile
- false
- true
- true
-
-
-
- ProjectExplorer.Project.PluginSettings
-
-
- true
- false
- true
- true
- true
- true
-
-
- 0
- true
-
- true
- true
- Builtin.DefaultTidyAndClazy
- 4
- true
-
-
-
- true
-
-
-
-
- ProjectExplorer.Project.Target.0
-
- Desktop
- Desktop Qt 6.7.0 64
- Desktop Qt 6.7.0 64
- qt.qt6.670.linux_gcc_64_kit
- 0
- 0
- 0
-
- Debug
- 2
- false
-
- -DCMAKE_GENERATOR:STRING=Ninja
--DCMAKE_BUILD_TYPE:STRING=Debug
--DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
--DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
--DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
--DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
--DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
--DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
- 0
- /home/camelud/Documents/IOTADevelop/COMPONENTS/DLockersClient/build
-
-
-
-
- all
-
- false
-
- true
- Build
- CMakeProjectManager.MakeStep
-
- 1
- Build
- Build
- ProjectExplorer.BuildSteps.Build
-
-
-
-
-
- clean
-
- false
-
- true
- Build
- CMakeProjectManager.MakeStep
-
- 1
- Clean
- Clean
- ProjectExplorer.BuildSteps.Clean
-
- 2
- false
-
- false
-
- Debug
- CMakeProjectManager.CMakeBuildConfiguration
-
- 1
-
-
- 0
- Deploy
- Deploy
- ProjectExplorer.BuildSteps.Deploy
-
- 1
-
- false
- ProjectExplorer.DefaultDeployConfiguration
-
- 1
-
- true
- true
- 0
- true
-
- 2
-
- false
- client_main
- CMakeProjectManager.CMakeRunConfiguration.client_main
- client_main
- false
- true
- true
- true
- /home/camelud/Documents/IOTADevelop/COMPONENTS/DLockersClient/build
-
- 1
-
-
-
- ProjectExplorer.Project.TargetCount
- 1
-
-
- ProjectExplorer.Project.Updater.FileVersion
- 22
-
-
- Version
- 22
-
-
diff --git a/Client/README.md b/Client/README.md
index 7fda449..3e5c965 100644
--- a/Client/README.md
+++ b/Client/README.md
@@ -1,7 +1,7 @@
# DLockers Client
This application can be seen as a decentralized client that allows you to book a locker by paying with crypto.
-In order to use the application one needs to set the address of the node to connect.
+To use the application one needs to set the address of the node to connect.
The Proof of Work has to be performed by the node.
This application is meant to be used on the testnet.
If using the mainnet **you are the ONLY responsible for the eventual loss of your funds**.
@@ -12,12 +12,12 @@ One can download the client application from the releases of this repo or use th
The client shows the different [Dlockers Server](https://github.com/EddyTheCo/DLockers/tree/main/Server) available in a map.
One can select the server and book a slot of time on the server.
-In order to book, the client must have funds, one can ask for funds [here](https://faucet.testnet.shimmer.network/)
+To book, the client must have funds, one can ask for funds [here](https://faucet.testnet.shimmer.network/)
by entering the Client account.
-If the book and payment is accepted by the server, the server will send the client a NFT signed by the server.
+If the book and payment are accepted by the server, the server will send the client an NFT signed by the server.
By presenting this NFT to the server you can open the locker.
-To do this, this application send the NFT to a server address but with expiration time in the past, so you continue owning the NFT
-and can reuse it as any times you want.
+To do this, this application sends the NFT to a server address but with expiration time in the past, so you continue owning the NFT
+and can reuse it as many times as you want.
diff --git a/Client/ServerMap/qml/ObjectMapView.qml b/Client/ServerMap/qml/ObjectMapView.qml
index 11ec315..3b5eadf 100644
--- a/Client/ServerMap/qml/ObjectMapView.qml
+++ b/Client/ServerMap/qml/ObjectMapView.qml
@@ -107,7 +107,7 @@ MapView {
height:56
radius: 56
anchors.right: parent.right
- anchors.bottom: parent.bottom
+ anchors.top: parent.top
anchors.margins: 10
visible: LocationPermisioner.isGranted
ToolTip.text: qsTr("Recenter")
diff --git a/Client/android/android_release.keystore b/Client/android/android_release.keystore
new file mode 100644
index 0000000..6beb4dd
Binary files /dev/null and b/Client/android/android_release.keystore differ
diff --git a/Client/tags b/Client/tags
deleted file mode 100644
index 26bd69c..0000000
--- a/Client/tags
+++ /dev/null
@@ -1,157 +0,0 @@
-!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME Exuberant Ctags //
-!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
-!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
-Book_Client include/bclient.hpp /^class Book_Client : public QObject$/;" c
-Book_Client src/bclient.cpp /^Book_Client::Book_Client(QObject *parent):QObject(parent)$/;" f class:Book_Client
-ConState include/bclient.hpp /^ enum ConState {$/;" g class:Server
-Connected include/bclient.hpp /^ Connected$/;" e enum:Server::ConState
-Disconnected include/bclient.hpp /^ Disconnected = 0,$/;" e enum:Server::ConState
-QT_NAMESPACE build/.rcc/qrc_client_main_fonts.cpp /^namespace QT_NAMESPACE {$/;" n file:
-QT_NAMESPACE build/.rcc/qrc_client_main_raw_qml_0.cpp /^namespace QT_NAMESPACE {$/;" n file:
-QT_NAMESPACE build/.rcc/qrc_qmake_client.cpp /^namespace QT_NAMESPACE {$/;" n file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_client_main_fonts.cpp 4750;" d file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_client_main_fonts.cpp 4754;" d file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_client_main_raw_qml_0.cpp 5109;" d file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_client_main_raw_qml_0.cpp 5113;" d file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_qmake_client.cpp 77;" d file:
-QT_RCC_MANGLE_NAMESPACE build/.rcc/qrc_qmake_client.cpp 81;" d file:
-QT_RCC_MANGLE_NAMESPACE0 build/.rcc/qrc_client_main_fonts.cpp 4747;" d file:
-QT_RCC_MANGLE_NAMESPACE0 build/.rcc/qrc_client_main_raw_qml_0.cpp 5106;" d file:
-QT_RCC_MANGLE_NAMESPACE0 build/.rcc/qrc_qmake_client.cpp 74;" d file:
-QT_RCC_MANGLE_NAMESPACE1 build/.rcc/qrc_client_main_fonts.cpp 4748;" d file:
-QT_RCC_MANGLE_NAMESPACE1 build/.rcc/qrc_client_main_raw_qml_0.cpp 5107;" d file:
-QT_RCC_MANGLE_NAMESPACE1 build/.rcc/qrc_qmake_client.cpp 75;" d file:
-QT_RCC_MANGLE_NAMESPACE2 build/.rcc/qrc_client_main_fonts.cpp 4749;" d file:
-QT_RCC_MANGLE_NAMESPACE2 build/.rcc/qrc_client_main_raw_qml_0.cpp 5108;" d file:
-QT_RCC_MANGLE_NAMESPACE2 build/.rcc/qrc_qmake_client.cpp 76;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_client_main_fonts.cpp 4746;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_client_main_fonts.cpp 4753;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_client_main_raw_qml_0.cpp 5105;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_client_main_raw_qml_0.cpp 5112;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_qmake_client.cpp 73;" d file:
-QT_RCC_PREPEND_NAMESPACE build/.rcc/qrc_qmake_client.cpp 80;" d file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qml/Enter_Pin_client_qml.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qml/Head_qml.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qml/LocalConf_qml.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qml/MyMapView_qml.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qml/window_qml.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QmlCacheGeneratedCode build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^namespace QmlCacheGeneratedCode {$/;" n file:
-QtLoader wasm/qtloader.js /^function QtLoader(config)$/;" f
-Registry build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^Registry::Registry() {$/;" f class:__anon1::Registry
-Registry build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^struct Registry {$/;" s namespace:__anon1 file:
-Sending include/bclient.hpp /^ Sending,$/;" e enum:Server::ConState
-Server include/bclient.hpp /^class Server : public QObject$/;" c
-_QtLoader wasm/qtloader.js /^function _QtLoader(config)$/;" f
-_esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml build/.rcc/qmlcache/client_main_qml/Enter_Pin_client_qml.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml {$/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml { $/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_Head_qml build/.rcc/qmlcache/client_main_qml/Head_qml.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_Head_qml {$/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_Head_qml build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_Head_qml { $/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_LocalConf_qml build/.rcc/qmlcache/client_main_qml/LocalConf_qml.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_LocalConf_qml {$/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_LocalConf_qml build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_LocalConf_qml { $/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_MyMapView_qml build/.rcc/qmlcache/client_main_qml/MyMapView_qml.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_MyMapView_qml {$/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_window_qml build/.rcc/qmlcache/client_main_qml/window_qml.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_window_qml {$/;" n namespace:QmlCacheGeneratedCode file:
-_esterVtech_0x2e_com_imports_client_qml_window_qml build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^namespace _esterVtech_0x2e_com_imports_client_qml_window_qml { $/;" n namespace:QmlCacheGeneratedCode file:
-addCanvasElement wasm/qtloader.js /^ function addCanvasElement(element) {$/;" f
-aotBuiltFunctions build/.rcc/qmlcache/client_main_qml/Enter_Pin_client_qml.cpp /^extern const QQmlPrivate::AOTCompiledFunction aotBuiltFunctions[] = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml file:
-aotBuiltFunctions build/.rcc/qmlcache/client_main_qml/Head_qml.cpp /^extern const QQmlPrivate::AOTCompiledFunction aotBuiltFunctions[] = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Head_qml file:
-aotBuiltFunctions build/.rcc/qmlcache/client_main_qml/LocalConf_qml.cpp /^extern const QQmlPrivate::AOTCompiledFunction aotBuiltFunctions[] = { { 0, QMetaType::fromType(), {}, nullptr } };QT_WARNING_POP$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_LocalConf_qml file:
-aotBuiltFunctions build/.rcc/qmlcache/client_main_qml/MyMapView_qml.cpp /^extern const QQmlPrivate::AOTCompiledFunction aotBuiltFunctions[] = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_MyMapView_qml file:
-aotBuiltFunctions build/.rcc/qmlcache/client_main_qml/window_qml.cpp /^extern const QQmlPrivate::AOTCompiledFunction aotBuiltFunctions[] = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_window_qml file:
-books_ include/bclient.hpp /^ std::vector books_;$/;" m class:Server
-canLoadQt wasm/qtloader.js /^ function canLoadQt() {$/;" f function:webAssemblySupported
-checkFunds src/bclient.cpp /^void Book_Client::checkFunds(std::vector outs)$/;" f class:Book_Client
-check_if_expired src/bclient.cpp /^void Book_Client::check_if_expired(void)$/;" f class:Book_Client
-check_state_output src/bclient.cpp /^void Server::check_state_output(const Node_output& node_output_)$/;" f class:Server
-clientId include/bclient.hpp /^ QString clientId(void)const{return m_clientId;}$/;" f class:Book_Client
-committedStatus wasm/qtloader.js /^ var committedStatus = undefined;$/;" v
-completeLoadEmscriptenModule wasm/qtloader.js /^ function completeLoadEmscriptenModule(applicationName, emscriptenModuleSource, wasmModule) {$/;" f function:webAssemblySupported
-config.restart wasm/qtloader.js /^ config.restart = function() {$/;" f
-deserialize_state src/bclient.cpp /^void Server::deserialize_state(const QByteArray &state)$/;" f class:Server
-dummy build/.rcc/qrc_client_main_fonts.cpp /^ } dummy;$/;" m namespace:__anon4 typeref:struct:__anon4::initializer file:
-dummy build/.rcc/qrc_client_main_raw_qml_0.cpp /^ } dummy;$/;" m namespace:__anon2 typeref:struct:__anon2::initializer file:
-dummy build/.rcc/qrc_qmake_client.cpp /^ } dummy;$/;" m namespace:__anon3 typeref:struct:__anon3::initializer file:
-fetchCompileWasm wasm/qtloader.js /^ function fetchCompileWasm(filePath) {$/;" f function:webAssemblySupported
-fetchResource wasm/qtloader.js /^ function fetchResource(filePath) {$/;" f function:webAssemblySupported
-fetchText wasm/qtloader.js /^ function fetchText(filePath) {$/;" f function:webAssemblySupported
-fetchThenCompileWasm wasm/qtloader.js /^ function fetchThenCompileWasm(response) {$/;" f function:webAssemblySupported
-fontDpi wasm/qtloader.js /^ function fontDpi() {$/;" f
-funds include/bclient.hpp /^ QJsonObject funds(void)const{return funds_json;}$/;" f class:Book_Client
-funds_ include/bclient.hpp /^ quint64 funds_;$/;" m class:Book_Client
-funds_json include/bclient.hpp /^ QJsonObject funds_json;$/;" m class:Book_Client
-getServerList src/bclient.cpp /^void Book_Client::getServerList(void)$/;" f class:Book_Client
-get_server_id src/bclient.cpp /^QString Book_Client::get_server_id(void)const$/;" f class:Book_Client
-handleError wasm/qtloader.js /^ function handleError(error) {$/;" f function:webAssemblySupported
-handleStatusChange wasm/qtloader.js /^ function handleStatusChange() {$/;" f
-init wasm/js/scripts.js /^function init() {$/;" f
-initQTwasm wasm/js/initQTwasm.js /^function initQTwasm(wasm_url, app_name, rootDivSele, logoPath) {$/;" f
-initializer build/.rcc/qrc_client_main_fonts.cpp /^ initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_client_main_fonts)(); }$/;" f struct:__anon4::initializer
-initializer build/.rcc/qrc_client_main_fonts.cpp /^ struct initializer {$/;" s namespace:__anon4 file:
-initializer build/.rcc/qrc_client_main_raw_qml_0.cpp /^ initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_client_main_raw_qml_0)(); }$/;" f struct:__anon2::initializer
-initializer build/.rcc/qrc_client_main_raw_qml_0.cpp /^ struct initializer {$/;" s namespace:__anon2 file:
-initializer build/.rcc/qrc_qmake_client.cpp /^ initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_qmake_client)(); }$/;" f struct:__anon3::initializer
-initializer build/.rcc/qrc_qmake_client.cpp /^ struct initializer {$/;" s namespace:__anon3 file:
-loadEmscriptenModule wasm/qtloader.js /^ function loadEmscriptenModule(applicationName) {$/;" f function:webAssemblySupported
-lookupCachedUnit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^const QQmlPrivate::CachedQmlUnit *Registry::lookupCachedUnit(const QUrl &url) {$/;" f class:__anon1::Registry
-m_clientId include/bclient.hpp /^ QString m_clientId;$/;" m class:Book_Client
-m_state include/bclient.hpp /^ ConState m_state;$/;" m class:Server
-main client_main.cpp /^int main(int argc, char *argv[])$/;" f
-module wasm/qtloader.js /^ function module() {$/;" f
-monitor_state src/bclient.cpp /^void Server::monitor_state(void)$/;" f class:Server
-paytoaddr_ include/bclient.hpp /^ qblocks::c_array server_id_,paytoaddr_;$/;" m class:Server
-presentNft src/bclient.cpp /^void Server::presentNft(const QString address)$/;" f class:Server
-price_per_hour_ include/bclient.hpp /^ quint64 price_per_hour_;$/;" m class:Server
-qCleanupResources_client_main_fonts build/.rcc/qrc_client_main_fonts.cpp /^int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_client_main_fonts)()$/;" f
-qCleanupResources_client_main_raw_qml_0 build/.rcc/qrc_client_main_raw_qml_0.cpp /^int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_client_main_raw_qml_0)()$/;" f
-qCleanupResources_qmake_client build/.rcc/qrc_qmake_client.cpp /^int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qmake_client)()$/;" f
-qCleanupResources_qmlcache_client_main build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^int QT_MANGLE_NAMESPACE(qCleanupResources_qmlcache_client_main)() {$/;" f
-qInitResources_client_main_fonts build/.rcc/qrc_client_main_fonts.cpp /^int QT_RCC_MANGLE_NAMESPACE(qInitResources_client_main_fonts)()$/;" f
-qInitResources_client_main_raw_qml_0 build/.rcc/qrc_client_main_raw_qml_0.cpp /^int QT_RCC_MANGLE_NAMESPACE(qInitResources_client_main_raw_qml_0)()$/;" f
-qInitResources_qmake_client build/.rcc/qrc_qmake_client.cpp /^int QT_RCC_MANGLE_NAMESPACE(qInitResources_qmake_client)()$/;" f
-qInitResources_qmlcache_client_main build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^int QT_MANGLE_NAMESPACE(qInitResources_qmlcache_client_main)() {$/;" f
-qResourceFeatureZlib build/.rcc/qrc_client_main_raw_qml_0.cpp /^static inline unsigned char qResourceFeatureZlib()$/;" f namespace:QT_NAMESPACE
-qt_resource_data build/.rcc/qrc_client_main_fonts.cpp /^static const unsigned char qt_resource_data[] = {$/;" v file:
-qt_resource_data build/.rcc/qrc_client_main_raw_qml_0.cpp /^static const unsigned char qt_resource_data[] = {$/;" v file:
-qt_resource_data build/.rcc/qrc_qmake_client.cpp /^static const unsigned char qt_resource_data[] = {$/;" v file:
-qt_resource_name build/.rcc/qrc_client_main_fonts.cpp /^static const unsigned char qt_resource_name[] = {$/;" v file:
-qt_resource_name build/.rcc/qrc_client_main_raw_qml_0.cpp /^static const unsigned char qt_resource_name[] = {$/;" v file:
-qt_resource_name build/.rcc/qrc_qmake_client.cpp /^static const unsigned char qt_resource_name[] = {$/;" v file:
-qt_resource_struct build/.rcc/qrc_client_main_fonts.cpp /^static const unsigned char qt_resource_struct[] = {$/;" v file:
-qt_resource_struct build/.rcc/qrc_client_main_raw_qml_0.cpp /^static const unsigned char qt_resource_struct[] = {$/;" v file:
-qt_resource_struct build/.rcc/qrc_qmake_client.cpp /^static const unsigned char qt_resource_struct[] = {$/;" v file:
-removeCanvasElement wasm/qtloader.js /^ function removeCanvasElement(element) {$/;" f
-removeChildren wasm/qtloader.js /^ function removeChildren(element) {$/;" f function:webAssemblySupported
-resizeCanvasElement wasm/qtloader.js /^ function resizeCanvasElement(element) {$/;" f
-resizeSplitX wasm/js/scripts.js /^function resizeSplitX(event) {$/;" f
-resourcePathToCachedUnit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^ QHash resourcePathToCachedUnit;$/;" m struct:__anon1::Registry file:
-self.moduleConfig.instantiateWasm wasm/qtloader.js /^ self.moduleConfig.instantiateWasm = function(imports, successCallback) {$/;" f function:webAssemblySupported
-sendNft src/bclient.cpp /^void Book_Client::sendNft(Node_output out,c_array address)$/;" f class:Book_Client
-send_booking src/bclient.cpp /^void Server::send_booking(const QJsonArray books)$/;" f class:Server
-server_id_ include/bclient.hpp /^ qblocks::c_array server_id_,paytoaddr_;$/;" m class:Server
-setCanvasContent wasm/qtloader.js /^ function setCanvasContent() {$/;" f function:_QtLoader
-setClientId include/bclient.hpp /^ void setClientId(QString clie){if(clie!=m_clientId){m_clientId=clie;emit clientIdChanged();}}$/;" f class:Book_Client
-setErrorContent wasm/qtloader.js /^ function setErrorContent() {$/;" f function:_QtLoader
-setExitContent wasm/qtloader.js /^ function setExitContent() {$/;" f function:_QtLoader
-setFontDpi wasm/qtloader.js /^ function setFontDpi(dpi) {$/;" f
-setFunds src/bclient.cpp /^void Book_Client::setFunds(quint64 funds_m){$/;" f class:Book_Client
-setLoaderContent wasm/qtloader.js /^ function setLoaderContent() {$/;" f function:_QtLoader
-setStatus wasm/qtloader.js /^ function setStatus(status) {$/;" f
-set_server_id src/bclient.cpp /^void Book_Client::set_server_id(QString server_id_m)$/;" f class:Book_Client
-state include/bclient.hpp /^ ConState state(void){return m_state;}$/;" f class:Server
-total_funds include/bclient.hpp /^ QHash total_funds;$/;" m class:Book_Client
-unit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^ const QQmlPrivate::CachedQmlUnit unit = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml file:
-unit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^ const QQmlPrivate::CachedQmlUnit unit = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Head_qml file:
-unit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^ const QQmlPrivate::CachedQmlUnit unit = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_LocalConf_qml file:
-unit build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^ const QQmlPrivate::CachedQmlUnit unit = {$/;" m namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_window_qml file:
-webAssemblySupported wasm/qtloader.js /^ function webAssemblySupported() {$/;" f function:_QtLoader
-webGLSupported wasm/qtloader.js /^ function webGLSupported() {$/;" f function:webAssemblySupported
-wrapCall build/.rcc/qmlcache/client_main_qml/Enter_Pin_client_qml.cpp /^void wrapCall(const QQmlPrivate::AOTCompiledContext *aotContext, void *dataPtr, void **argumentsPtr, Binding &&binding)$/;" f namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Enter_Pin_client_qml
-wrapCall build/.rcc/qmlcache/client_main_qml/Head_qml.cpp /^void wrapCall(const QQmlPrivate::AOTCompiledContext *aotContext, void *dataPtr, void **argumentsPtr, Binding &&binding)$/;" f namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_Head_qml
-wrapCall build/.rcc/qmlcache/client_main_qml/MyMapView_qml.cpp /^void wrapCall(const QQmlPrivate::AOTCompiledContext *aotContext, void *dataPtr, void **argumentsPtr, Binding &&binding)$/;" f namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_MyMapView_qml
-wrapCall build/.rcc/qmlcache/client_main_qml/window_qml.cpp /^void wrapCall(const QQmlPrivate::AOTCompiledContext *aotContext, void *dataPtr, void **argumentsPtr, Binding &&binding)$/;" f namespace:QmlCacheGeneratedCode::_esterVtech_0x2e_com_imports_client_qml_window_qml
-~Registry build/.rcc/qmlcache/client_main_qmlcache_loader.cpp /^Registry::~Registry() {$/;" f class:__anon1::Registry
-~initializer build/.rcc/qrc_client_main_fonts.cpp /^ ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_client_main_fonts)(); }$/;" f struct:__anon4::initializer
-~initializer build/.rcc/qrc_client_main_raw_qml_0.cpp /^ ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_client_main_raw_qml_0)(); }$/;" f struct:__anon2::initializer
-~initializer build/.rcc/qrc_qmake_client.cpp /^ ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_qmake_client)(); }$/;" f struct:__anon3::initializer
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..44461e6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# DLockers
+
+This repo produces a [server](https://github.com/EddyTheCo/DLockers/tree/main/Server/) and a [client](https://github.com/EddyTheCo/DLockers/tree/main/Client/) applications that communicate peer-to-peer using the IOTA network.
+We are not interested in crypto's speculative side and are not associated with the Iota Foundation.
+We discourage investing in Shimmer and IOTA because that will be investing in the Iota Foundation and its pursuit of centralizing the development and protocol.
+
+
+Use the [web client](https://eddytheco.github.io/DLockers/Client/) or set a [MockUpServer](https://eddytheco.github.io/DLockers/MockupServer/).
+
+## The bigger picture
+
+* Any person can start renting physical space for lockers.
+* You do not depend on centralized company servers to store your business data or to process payments.
+* As long as you maintain a node(blockchain), your gainings and business data are cryptographically secured.
+* The open source code grants you certain rights and responsibilities to respect other people's rights.
+* By using NFTs the client can pass the right to open a box to other clients.
diff --git a/Server/README.md b/Server/README.md
index f2fba21..96a99d4 100644
--- a/Server/README.md
+++ b/Server/README.md
@@ -8,23 +8,26 @@ If using the mainnet **you are the ONLY responsible for the eventual loss of you
## How to use it
-In order to book a box one can use the [client](https://eddytheco.github.io/DLockers/Client).
+To book a box one can use the [client](https://eddytheco.github.io/DLockers/Client).
The communication between server and client relies on creating outputs on the ledger.
Because of that, the server needs an initial amount of funds to be able to publish its state on the ledger.
-These initial funds are always own by the server.
+These initial funds are always owned by the server.
The server looks for new bookings sent by the clients and checks the validity of these bookings.
-A booking is valid if it has an allowed start and finish time and the price payed for the booking is correct.
-If everything is fine the server collect the money from the client, update its internal state and send a NFT to the client.
+A booking is valid if it has an allowed start and finish time and the price paid for the booking is correct.
+If everything is fine the server collects the money from the client, updates its internal state, and sends an NFT to the client.
-The server allows you to open the locker if you own a NFT signed by the server.
-The signed NFT has immutable metadata that reference certain time interval of the bookings the client has paid.
+The server allows you to open the locker if you own an NFT signed by the server.
+The signed NFT has immutable metadata that references certain time intervals of the bookings the client has paid.
-The server is configured to run on a raspberry-pi, with a 4g and GPS module.
+## Platforms
+
+The server is configured to run on a raspberry-pi, with a 4g and GPS module by using the [evt yocto Layer](https://github.com/EddyTheCo/meta-evt)
The server will set the pin 17(this can be configured) up when a valid NFT is received.
-The later will open the electrical locker.
+The latter will open the electrical locker.
+If using the GPS, the geographical position of the server will be public.
-One using the GPS, the geographical position of the server will be public.
-One can also setup a [mock-up Server](https://eddytheco.github.io/DLockers/MockupServer) for testing.
+One can also set up a [mock-up Server](https://eddytheco.github.io/DLockers/MockupServer) for testing just by using the browser.
+The releases from this repo are also a mock-up Server.
diff --git a/Server/tags b/Server/tags
deleted file mode 100644
index f57953b..0000000
--- a/Server/tags
+++ /dev/null
@@ -1,55 +0,0 @@
-!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME Exuberant Ctags //
-!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
-!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
-Book_Server include/server.hpp /^class Book_Server : public QObject$/;" c
-Book_Server src/server.cpp /^Book_Server::Book_Server(QObject *parent):QObject(parent),price_per_hour_(10000),state_(Ready),reciever(nullptr),started(false),$/;" f class:Book_Server
-ConState include/server.hpp /^ enum ConState {$/;" g class:Book_Server
-PosSource include/server.hpp /^ QGeoPositionInfoSource *PosSource;$/;" m class:Book_Server
-Publishing include/server.hpp /^ Publishing = 0,$/;" e enum:Book_Server::ConState
-Ready include/server.hpp /^ Ready$/;" e enum:Book_Server::ConState
-books_ include/server.hpp /^ std::set books_;$/;" m class:Book_Server
-checkFunds src/server.cpp /^void Book_Server::checkFunds(std::vector outs)$/;" f class:Book_Server
-checkLPermission src/server.cpp /^void Book_Server::checkLPermission(void)$/;" f class:Book_Server
-check_nft_to_open src/server.cpp /^void Book_Server::check_nft_to_open(Node_output node_out)$/;" f class:Book_Server
-check_state_output src/server.cpp /^void Book_Server::check_state_output(const std::vector node_output_s)$/;" f class:Book_Server
-clean_state src/server.cpp /^void Book_Server::clean_state(void)$/;" f class:Book_Server
-deserialize_state src/server.cpp /^void Book_Server::deserialize_state(const QByteArray &state)$/;" f class:Book_Server
-funds include/server.hpp /^ QJsonObject funds(void)const{return funds_json;}$/;" f class:Book_Server
-funds_ include/server.hpp /^ quint64 funds_;$/;" m class:Book_Server
-funds_json include/server.hpp /^ QJsonObject funds_json,minfunds_json;$/;" m class:Book_Server
-get_publish_output src/server.cpp /^std::shared_ptr Book_Server::get_publish_output(const quint64 &amount)const$/;" f class:Book_Server
-get_restart_state src/server.cpp /^void Book_Server::get_restart_state(void)$/;" f class:Book_Server
-handle_init_funds src/server.cpp /^void Book_Server::handle_init_funds()$/;" f class:Book_Server
-handle_new_book src/server.cpp /^void Book_Server::handle_new_book(Node_output node_out)$/;" f class:Book_Server
-init src/server.cpp /^void Book_Server::init()$/;" f class:Book_Server
-initGPS src/server.cpp /^void Book_Server::initGPS(void)$/;" f class:Book_Server
-is_open include/server.hpp /^ bool is_open()const{return open;}$/;" f class:Book_Server
-m_GeoCoord include/server.hpp /^ QGeoCoordinate m_GeoCoord;$/;" m class:Book_Server
-m_rpi_server include/server.hpp /^ bool m_rpi_server;$/;" m class:Book_Server
-main main.cpp /^int main(int argc, char *argv[])$/;" f
-minfunds include/server.hpp /^ QJsonObject minfunds(void)const{return minfunds_json;}$/;" f class:Book_Server
-minfunds_json include/server.hpp /^ QJsonObject funds_json,minfunds_json;$/;" m class:Book_Server
-open include/server.hpp /^ bool open,started;$/;" m class:Book_Server
-open_rpi_box src/server.cpp /^void Book_Server::open_rpi_box(void)$/;" f class:Book_Server
-payments include/server.hpp /^ auto payments(void)const{return payments_;}$/;" f class:Book_Server
-payments_ include/server.hpp /^ QJsonArray payments_;$/;" m class:Book_Server
-price_per_hour_ include/server.hpp /^ quint64 price_per_hour_;$/;" m class:Book_Server
-queue include/server.hpp /^ std::queue queue;$/;" m class:Book_Server
-reciever include/server.hpp /^ QObject* reciever;$/;" m class:Book_Server
-restart src/server.cpp /^void Book_Server::restart(void)$/;" f class:Book_Server
-serialize_state src/server.cpp /^QByteArray Book_Server::serialize_state(void)const$/;" f class:Book_Server
-serverId include/server.hpp /^ QString serverId(void)const{return serverId_;}$/;" f class:Book_Server
-serverId_ include/server.hpp /^ QString serverId_;$/;" m class:Book_Server
-setFunds src/server.cpp /^void Book_Server::setFunds(quint64 funds_m){$/;" f class:Book_Server
-setOpen include/server.hpp /^ void setOpen(bool op){if(op!=open){open=op;emit openChanged();}}$/;" f class:Book_Server
-setServerId include/server.hpp /^ void setServerId(QString ser){if(ser!=serverId_){serverId_=ser;emit serverIdChanged();}}$/;" f class:Book_Server
-set_state include/server.hpp /^ void set_state(ConState state_m){if(state_m!=state_){state_=state_m;emit stateChanged(); }}$/;" f class:Book_Server
-setminFunds src/server.cpp /^void Book_Server::setminFunds(quint64 funds_m){$/;" f class:Book_Server
-started include/server.hpp /^ bool open,started;$/;" m class:Book_Server
-state include/server.hpp /^ ConState state(void)const{return state_;}$/;" f class:Book_Server
-state_ include/server.hpp /^ ConState state_;$/;" m class:Book_Server
-total_funds include/server.hpp /^ QHash total_funds;$/;" m class:Book_Server
-try_to_open src/server.cpp /^void Book_Server::try_to_open(void)$/;" f class:Book_Server
diff --git a/wasm/Client/index.html b/wasm/Client/index.html
index c771de0..b7bf20d 100644
--- a/wasm/Client/index.html
+++ b/wasm/Client/index.html
@@ -24,7 +24,7 @@