From e463d2d22ce0b20b2cce7ef8553564d9c527052c Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 10 Jan 2023 19:03:03 +0100 Subject: [PATCH] drop Qt4 support, move Source files and few other changes --- .ci/app.rc | 33 - .ci/ci.sh | 72 - .ci/debian_build.sh | 38 - .ci/debian_ci.sh | 8 - .ci/debian_docker.sh | 15 - .ci/debian_install.sh | 13 - .ci/dropbox_uploader.sh | 1763 ----------------- .ci/gta5view.nsi | 364 ---- .ci/osx_build.sh | 24 - .ci/osx_ci.sh | 8 - .ci/osx_install.sh | 4 - .ci/windows_build.sh | 28 - .ci/windows_docker.sh | 25 - .ci/wininstall_build.sh | 29 - .ci/wininstall_docker.sh | 11 - .drone.yml | 36 - .drone/TelemetryClassAuthenticator.cpp.enc | Bin 2960 -> 0 bytes .drone/drone.sh | 33 - .flatpak/de.syping.gta5view.yaml | 22 - .gitignore | 3 +- .gitlab-ci.yml | 31 - .gitlab/TelemetryClassAuthenticator.cpp.enc | Bin 2960 -> 0 bytes .gitlab/gitlab.sh | 24 - .travis.yml | 50 - .travis/TelemetryClassAuthenticator.cpp.enc | Bin 2944 -> 0 bytes .travis/dropbox_uploader.enc | 1 - .travis/source.sh | 5 - .travis/travis.sh | 27 - .travis/ubuntu_travis.sh | 8 - CMakeLists.txt | 217 +- gta5view.pro | 285 --- lang/README.txt | 5 - qjson4/QJsonArray | 1 - qjson4/QJsonArray.cpp | 410 ---- qjson4/QJsonArray.h | 139 -- qjson4/QJsonDocument | 1 - qjson4/QJsonDocument.cpp | 424 ---- qjson4/QJsonDocument.h | 103 - qjson4/QJsonObject | 1 - qjson4/QJsonObject.cpp | 322 --- qjson4/QJsonObject.h | 121 -- qjson4/QJsonParseError | 1 - qjson4/QJsonParseError.cpp | 64 - qjson4/QJsonParseError.h | 60 - qjson4/QJsonParser.cpp | 455 ----- qjson4/QJsonParser.h | 81 - qjson4/QJsonRoot | 1 - qjson4/QJsonRoot.h | 45 - qjson4/QJsonValue | 1 - qjson4/QJsonValue.cpp | 391 ---- qjson4/QJsonValue.h | 120 -- qjson4/QJsonValueRef | 1 - qjson4/QJsonValueRef.cpp | 228 --- qjson4/QJsonValueRef.h | 79 - res/qt4/qt_de.qm | Bin 325046 -> 0 bytes res/qt4/qt_fr.qm | Bin 254997 -> 0 bytes res/qt4/qt_ko.qm | Bin 241758 -> 0 bytes res/qt4/qt_ru.qm | Bin 288266 -> 0 bytes res/qt4/qt_uk.qm | Bin 215879 -> 0 bytes res/qt4/qt_zh_TW.qm | Bin 117253 -> 0 bytes res/qt4/tr_qt.qrc | 10 - AboutDialog.cpp => src/AboutDialog.cpp | 0 AboutDialog.h => src/AboutDialog.h | 0 AboutDialog.ui => src/AboutDialog.ui | 0 AppEnv.cpp => src/AppEnv.cpp | 0 AppEnv.h => src/AppEnv.h | 0 CrewDatabase.cpp => src/CrewDatabase.cpp | 0 CrewDatabase.h => src/CrewDatabase.h | 0 DatabaseThread.cpp => src/DatabaseThread.cpp | 0 DatabaseThread.h => src/DatabaseThread.h | 0 ExportDialog.cpp => src/ExportDialog.cpp | 0 ExportDialog.h => src/ExportDialog.h | 0 ExportDialog.ui => src/ExportDialog.ui | 0 ExportThread.cpp => src/ExportThread.cpp | 0 ExportThread.h => src/ExportThread.h | 0 GlobalString.cpp => src/GlobalString.cpp | 0 GlobalString.h => src/GlobalString.h | 0 IconLoader.cpp => src/IconLoader.cpp | 0 IconLoader.h => src/IconLoader.h | 0 ImportDialog.cpp => src/ImportDialog.cpp | 0 ImportDialog.h => src/ImportDialog.h | 0 ImportDialog.ui => src/ImportDialog.ui | 0 .../JsonEditorDialog.cpp | 0 JsonEditorDialog.h => src/JsonEditorDialog.h | 0 .../JsonEditorDialog.ui | 0 .../MapLocationDialog.cpp | 0 .../MapLocationDialog.h | 0 .../MapLocationDialog.ui | 0 MessageThread.cpp => src/MessageThread.cpp | 0 MessageThread.h => src/MessageThread.h | 0 OptionsDialog.cpp => src/OptionsDialog.cpp | 0 OptionsDialog.h => src/OptionsDialog.h | 0 OptionsDialog.ui => src/OptionsDialog.ui | 0 PictureDialog.cpp => src/PictureDialog.cpp | 0 PictureDialog.h => src/PictureDialog.h | 0 PictureDialog.ui => src/PictureDialog.ui | 0 PictureExport.cpp => src/PictureExport.cpp | 0 PictureExport.h => src/PictureExport.h | 0 PictureWidget.cpp => src/PictureWidget.cpp | 0 PictureWidget.h => src/PictureWidget.h | 0 .../PlayerListDialog.cpp | 0 PlayerListDialog.h => src/PlayerListDialog.h | 0 .../PlayerListDialog.ui | 0 .../ProfileDatabase.cpp | 0 ProfileDatabase.h => src/ProfileDatabase.h | 0 .../ProfileInterface.cpp | 0 ProfileInterface.h => src/ProfileInterface.h | 0 .../ProfileInterface.ui | 0 ProfileLoader.cpp => src/ProfileLoader.cpp | 0 ProfileLoader.h => src/ProfileLoader.h | 0 ProfileWidget.cpp => src/ProfileWidget.cpp | 0 ProfileWidget.h => src/ProfileWidget.h | 0 RagePhoto.cpp => src/RagePhoto.cpp | 0 RagePhoto.h => src/RagePhoto.h | 0 SavegameCopy.cpp => src/SavegameCopy.cpp | 0 SavegameCopy.h => src/SavegameCopy.h | 0 SavegameData.cpp => src/SavegameData.cpp | 0 SavegameData.h => src/SavegameData.h | 0 SavegameDialog.cpp => src/SavegameDialog.cpp | 0 SavegameDialog.h => src/SavegameDialog.h | 0 SavegameDialog.ui => src/SavegameDialog.ui | 0 SavegameWidget.cpp => src/SavegameWidget.cpp | 0 SavegameWidget.h => src/SavegameWidget.h | 0 SavegameWidget.ui => src/SavegameWidget.ui | 0 .../SidebarGenerator.cpp | 0 SidebarGenerator.h => src/SidebarGenerator.h | 0 .../SnapmaticEditor.cpp | 0 SnapmaticEditor.h => src/SnapmaticEditor.h | 0 SnapmaticEditor.ui => src/SnapmaticEditor.ui | 0 .../SnapmaticPicture.cpp | 0 SnapmaticPicture.h => src/SnapmaticPicture.h | 0 .../SnapmaticWidget.cpp | 0 SnapmaticWidget.h => src/SnapmaticWidget.h | 0 SnapmaticWidget.ui => src/SnapmaticWidget.ui | 0 StandardPaths.cpp => src/StandardPaths.cpp | 0 StandardPaths.h => src/StandardPaths.h | 0 StringParser.cpp => src/StringParser.cpp | 0 StringParser.h => src/StringParser.h | 0 TelemetryClass.cpp => src/TelemetryClass.cpp | 0 TelemetryClass.h => src/TelemetryClass.h | 0 .../TranslationClass.cpp | 0 TranslationClass.h => src/TranslationClass.h | 0 UserInterface.cpp => src/UserInterface.cpp | 0 UserInterface.h => src/UserInterface.h | 0 UserInterface.ui => src/UserInterface.ui | 0 {anpro => src/anpro}/QrCode.cpp | 0 {anpro => src/anpro}/QrCode.h | 0 {anpro => src/anpro}/imagecropper.cpp | 0 {anpro => src/anpro}/imagecropper.h | 0 {anpro => src/anpro}/imagecropper_e.h | 0 {anpro => src/anpro}/imagecropper_p.h | 0 config.h => src/config.h | 6 +- main.cpp => src/main.cpp | 0 {pcg => src/pcg}/LICENSE.txt | 0 {pcg => src/pcg}/pcg_basic.c | 0 {pcg => src/pcg}/pcg_basic.h | 0 .../tmext}/TelemetryClassAuthenticator.cpp | 0 .../tmext}/TelemetryClassAuthenticator.h | 0 {uimod => src/uimod}/JSHighlighter.cpp | 0 {uimod => src/uimod}/JSHighlighter.h | 0 {uimod => src/uimod}/UiModLabel.cpp | 0 {uimod => src/uimod}/UiModLabel.h | 0 {uimod => src/uimod}/UiModWidget.cpp | 0 {uimod => src/uimod}/UiModWidget.h | 0 wrapper.h => src/wrapper.h | 0 165 files changed, 114 insertions(+), 6133 deletions(-) delete mode 100644 .ci/app.rc delete mode 100755 .ci/ci.sh delete mode 100755 .ci/debian_build.sh delete mode 100755 .ci/debian_ci.sh delete mode 100755 .ci/debian_docker.sh delete mode 100755 .ci/debian_install.sh delete mode 100755 .ci/dropbox_uploader.sh delete mode 100644 .ci/gta5view.nsi delete mode 100755 .ci/osx_build.sh delete mode 100755 .ci/osx_ci.sh delete mode 100755 .ci/osx_install.sh delete mode 100755 .ci/windows_build.sh delete mode 100755 .ci/windows_docker.sh delete mode 100755 .ci/wininstall_build.sh delete mode 100755 .ci/wininstall_docker.sh delete mode 100644 .drone.yml delete mode 100644 .drone/TelemetryClassAuthenticator.cpp.enc delete mode 100755 .drone/drone.sh delete mode 100644 .flatpak/de.syping.gta5view.yaml delete mode 100644 .gitlab-ci.yml delete mode 100644 .gitlab/TelemetryClassAuthenticator.cpp.enc delete mode 100755 .gitlab/gitlab.sh delete mode 100644 .travis.yml delete mode 100644 .travis/TelemetryClassAuthenticator.cpp.enc delete mode 100644 .travis/dropbox_uploader.enc delete mode 100755 .travis/source.sh delete mode 100755 .travis/travis.sh delete mode 100755 .travis/ubuntu_travis.sh delete mode 100644 gta5view.pro delete mode 100644 lang/README.txt delete mode 100644 qjson4/QJsonArray delete mode 100644 qjson4/QJsonArray.cpp delete mode 100644 qjson4/QJsonArray.h delete mode 100644 qjson4/QJsonDocument delete mode 100644 qjson4/QJsonDocument.cpp delete mode 100644 qjson4/QJsonDocument.h delete mode 100644 qjson4/QJsonObject delete mode 100644 qjson4/QJsonObject.cpp delete mode 100644 qjson4/QJsonObject.h delete mode 100644 qjson4/QJsonParseError delete mode 100644 qjson4/QJsonParseError.cpp delete mode 100644 qjson4/QJsonParseError.h delete mode 100644 qjson4/QJsonParser.cpp delete mode 100644 qjson4/QJsonParser.h delete mode 100644 qjson4/QJsonRoot delete mode 100644 qjson4/QJsonRoot.h delete mode 100644 qjson4/QJsonValue delete mode 100644 qjson4/QJsonValue.cpp delete mode 100644 qjson4/QJsonValue.h delete mode 100644 qjson4/QJsonValueRef delete mode 100644 qjson4/QJsonValueRef.cpp delete mode 100644 qjson4/QJsonValueRef.h delete mode 100644 res/qt4/qt_de.qm delete mode 100644 res/qt4/qt_fr.qm delete mode 100644 res/qt4/qt_ko.qm delete mode 100644 res/qt4/qt_ru.qm delete mode 100644 res/qt4/qt_uk.qm delete mode 100644 res/qt4/qt_zh_TW.qm delete mode 100644 res/qt4/tr_qt.qrc rename AboutDialog.cpp => src/AboutDialog.cpp (100%) rename AboutDialog.h => src/AboutDialog.h (100%) rename AboutDialog.ui => src/AboutDialog.ui (100%) rename AppEnv.cpp => src/AppEnv.cpp (100%) rename AppEnv.h => src/AppEnv.h (100%) rename CrewDatabase.cpp => src/CrewDatabase.cpp (100%) rename CrewDatabase.h => src/CrewDatabase.h (100%) rename DatabaseThread.cpp => src/DatabaseThread.cpp (100%) rename DatabaseThread.h => src/DatabaseThread.h (100%) rename ExportDialog.cpp => src/ExportDialog.cpp (100%) rename ExportDialog.h => src/ExportDialog.h (100%) rename ExportDialog.ui => src/ExportDialog.ui (100%) rename ExportThread.cpp => src/ExportThread.cpp (100%) rename ExportThread.h => src/ExportThread.h (100%) rename GlobalString.cpp => src/GlobalString.cpp (100%) rename GlobalString.h => src/GlobalString.h (100%) rename IconLoader.cpp => src/IconLoader.cpp (100%) rename IconLoader.h => src/IconLoader.h (100%) rename ImportDialog.cpp => src/ImportDialog.cpp (100%) rename ImportDialog.h => src/ImportDialog.h (100%) rename ImportDialog.ui => src/ImportDialog.ui (100%) rename JsonEditorDialog.cpp => src/JsonEditorDialog.cpp (100%) rename JsonEditorDialog.h => src/JsonEditorDialog.h (100%) rename JsonEditorDialog.ui => src/JsonEditorDialog.ui (100%) rename MapLocationDialog.cpp => src/MapLocationDialog.cpp (100%) rename MapLocationDialog.h => src/MapLocationDialog.h (100%) rename MapLocationDialog.ui => src/MapLocationDialog.ui (100%) rename MessageThread.cpp => src/MessageThread.cpp (100%) rename MessageThread.h => src/MessageThread.h (100%) rename OptionsDialog.cpp => src/OptionsDialog.cpp (100%) rename OptionsDialog.h => src/OptionsDialog.h (100%) rename OptionsDialog.ui => src/OptionsDialog.ui (100%) rename PictureDialog.cpp => src/PictureDialog.cpp (100%) rename PictureDialog.h => src/PictureDialog.h (100%) rename PictureDialog.ui => src/PictureDialog.ui (100%) rename PictureExport.cpp => src/PictureExport.cpp (100%) rename PictureExport.h => src/PictureExport.h (100%) rename PictureWidget.cpp => src/PictureWidget.cpp (100%) rename PictureWidget.h => src/PictureWidget.h (100%) rename PlayerListDialog.cpp => src/PlayerListDialog.cpp (100%) rename PlayerListDialog.h => src/PlayerListDialog.h (100%) rename PlayerListDialog.ui => src/PlayerListDialog.ui (100%) rename ProfileDatabase.cpp => src/ProfileDatabase.cpp (100%) rename ProfileDatabase.h => src/ProfileDatabase.h (100%) rename ProfileInterface.cpp => src/ProfileInterface.cpp (100%) rename ProfileInterface.h => src/ProfileInterface.h (100%) rename ProfileInterface.ui => src/ProfileInterface.ui (100%) rename ProfileLoader.cpp => src/ProfileLoader.cpp (100%) rename ProfileLoader.h => src/ProfileLoader.h (100%) rename ProfileWidget.cpp => src/ProfileWidget.cpp (100%) rename ProfileWidget.h => src/ProfileWidget.h (100%) rename RagePhoto.cpp => src/RagePhoto.cpp (100%) rename RagePhoto.h => src/RagePhoto.h (100%) rename SavegameCopy.cpp => src/SavegameCopy.cpp (100%) rename SavegameCopy.h => src/SavegameCopy.h (100%) rename SavegameData.cpp => src/SavegameData.cpp (100%) rename SavegameData.h => src/SavegameData.h (100%) rename SavegameDialog.cpp => src/SavegameDialog.cpp (100%) rename SavegameDialog.h => src/SavegameDialog.h (100%) rename SavegameDialog.ui => src/SavegameDialog.ui (100%) rename SavegameWidget.cpp => src/SavegameWidget.cpp (100%) rename SavegameWidget.h => src/SavegameWidget.h (100%) rename SavegameWidget.ui => src/SavegameWidget.ui (100%) rename SidebarGenerator.cpp => src/SidebarGenerator.cpp (100%) rename SidebarGenerator.h => src/SidebarGenerator.h (100%) rename SnapmaticEditor.cpp => src/SnapmaticEditor.cpp (100%) rename SnapmaticEditor.h => src/SnapmaticEditor.h (100%) rename SnapmaticEditor.ui => src/SnapmaticEditor.ui (100%) rename SnapmaticPicture.cpp => src/SnapmaticPicture.cpp (100%) rename SnapmaticPicture.h => src/SnapmaticPicture.h (100%) rename SnapmaticWidget.cpp => src/SnapmaticWidget.cpp (100%) rename SnapmaticWidget.h => src/SnapmaticWidget.h (100%) rename SnapmaticWidget.ui => src/SnapmaticWidget.ui (100%) rename StandardPaths.cpp => src/StandardPaths.cpp (100%) rename StandardPaths.h => src/StandardPaths.h (100%) rename StringParser.cpp => src/StringParser.cpp (100%) rename StringParser.h => src/StringParser.h (100%) rename TelemetryClass.cpp => src/TelemetryClass.cpp (100%) rename TelemetryClass.h => src/TelemetryClass.h (100%) rename TranslationClass.cpp => src/TranslationClass.cpp (100%) rename TranslationClass.h => src/TranslationClass.h (100%) rename UserInterface.cpp => src/UserInterface.cpp (100%) rename UserInterface.h => src/UserInterface.h (100%) rename UserInterface.ui => src/UserInterface.ui (100%) rename {anpro => src/anpro}/QrCode.cpp (100%) rename {anpro => src/anpro}/QrCode.h (100%) rename {anpro => src/anpro}/imagecropper.cpp (100%) rename {anpro => src/anpro}/imagecropper.h (100%) rename {anpro => src/anpro}/imagecropper_e.h (100%) rename {anpro => src/anpro}/imagecropper_p.h (100%) rename config.h => src/config.h (97%) rename main.cpp => src/main.cpp (100%) rename {pcg => src/pcg}/LICENSE.txt (100%) rename {pcg => src/pcg}/pcg_basic.c (100%) rename {pcg => src/pcg}/pcg_basic.h (100%) rename {tmext => src/tmext}/TelemetryClassAuthenticator.cpp (100%) rename {tmext => src/tmext}/TelemetryClassAuthenticator.h (100%) rename {uimod => src/uimod}/JSHighlighter.cpp (100%) rename {uimod => src/uimod}/JSHighlighter.h (100%) rename {uimod => src/uimod}/UiModLabel.cpp (100%) rename {uimod => src/uimod}/UiModLabel.h (100%) rename {uimod => src/uimod}/UiModWidget.cpp (100%) rename {uimod => src/uimod}/UiModWidget.h (100%) rename wrapper.h => src/wrapper.h (100%) diff --git a/.ci/app.rc b/.ci/app.rc deleted file mode 100644 index f247bab..0000000 --- a/.ci/app.rc +++ /dev/null @@ -1,33 +0,0 @@ -IDI_ICON1 ICON DISCARDABLE "5sync.ico" -#define RT_MANIFEST 24 -#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest" -#include -VS_VERSION_INFO VERSIONINFO -FILEVERSION MAJOR_VER, MINOR_VER, PATCH_VER, INT_BUILD_VER -PRODUCTVERSION MAJOR_VER, MINOR_VER, PATCH_VER, INT_BUILD_VER -FILEFLAGSMASK 0x3fL -FILEFLAGS 0 -FILEOS VOS_NT_WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0809, 1200 - END - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Syping" - VALUE "FileDescription", "gta5view" - VALUE "FileVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER" - VALUE "InternalName", "gta5view" - VALUE "LegalCopyright", "Copyright © 2016-2022 Syping" - VALUE "OriginalFilename", "gta5view.exe" - VALUE "ProductName", "gta5view" - VALUE "ProductVersion", "MAJOR_VER.MINOR_VER.PATCH_VERSTR_BUILD_VER" - END - END -END diff --git a/.ci/ci.sh b/.ci/ci.sh deleted file mode 100755 index 8cc49f6..0000000 --- a/.ci/ci.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash - -if [ $(git name-rev --tags --name-only $(git rev-parse HEAD)) == "undefined" ]; then - export APPLICATION_VERSION=$(lua -e 'for line in io.lines("config.h") do local m = string.match(line, "#define GTA5SYNC_APPVER \"(.+)\"$"); if m then print(m); os.exit(0) end end') -else - export APPLICATION_VERSION=$(git name-rev --tags --name-only $(git rev-parse HEAD)) -fi -export PACKAGE_VERSION=$(grep -oE '^[^\-]*' <<< $APPLICATION_VERSION) -export PACKAGE_BUILD=$(grep -oP '\-\K.+' <<< $APPLICATION_VERSION) -export EXECUTABLE_VERSION=${PACKAGE_VERSION}${PACKAGE_BUILD}${EXECUTABLE_TAG} - -export APPLICATION_MAJOR_VERSION=$(cut -d. -f1 <<< $APPLICATION_VERSION) -export APPLICATION_MINOR_VERSION=$(cut -d. -f2 <<< $APPLICATION_VERSION) -export APPLICATION_PATCH_VERSION=$(cut -d. -f3 <<< $APPLICATION_VERSION) - -if [ "${PACKAGE_BUILD}" == "" ]; then - export PACKAGE_BUILD=1 -else - export APPLICATION_BUILD_INT_VERSION=$(grep -oE '[1-9]*$' <<< $PACKAGE_BUILD) - export APPLICATION_BUILD_STR_VERSION=-${PACKAGE_BUILD} -fi - -cat ".ci/app.rc" | sed \ - -e "s/MAJOR_VER/$APPLICATION_MAJOR_VERSION/g" \ - -e "s/MINOR_VER/$APPLICATION_MINOR_VERSION/g" \ - -e "s/PATCH_VER/$APPLICATION_PATCH_VERSION/g" \ - -e "s/INT_BUILD_VER/0/g" \ - -e "s/STR_BUILD_VER/$APPLICATION_BUILD_STR_VERSION/g" \ - -e "s/STR_BUILD_VER/$APPLICATION_BUILD_STR_VERSION/g" \ - > "res/app.rc" - -if [ "${BUILD_TYPE}" == "ALPHA" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Alpha" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Alpha\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Alpha" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Alpha" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Alpha\\\\\\\"" -elif [ "${BUILD_TYPE}" == "BETA" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Beta" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Beta\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Beta" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Beta" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Beta\\\\\\\"" -elif [ "${BUILD_TYPE}" == "DEV" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Developer" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Developer\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Development" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Developer" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Developer\\\\\\\"" -elif [ "${BUILD_TYPE}" == "DAILY" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Daily Build" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Daily Build\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Daily" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Daily Build" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Daily Build\\\\\\\"" -elif [ "${BUILD_TYPE}" == "RC" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Release Candidate" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Release Candidate\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Release Candidate" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Release Candidate" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Release Candidate\\\\\\\"" -elif [ "${BUILD_TYPE}" == "REL" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Release" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Release\\\\\\\"" -elif [ "${BUILD_TYPE}" == "Release" ]; then - export CMAKE_BUILD_TYPE="-DGTA5VIEW_BUILDTYPE=Release" - export QMAKE_BUILD_TYPE="DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Release\\\\\\\"" -fi - -export PROJECT_DIR=$(pwd) - -.ci/${BUILD_SCRIPT} diff --git a/.ci/debian_build.sh b/.ci/debian_build.sh deleted file mode 100755 index 57aa9c9..0000000 --- a/.ci/debian_build.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -# Creating folders -cd ${PROJECT_DIR} && \ -echo "gta5view build version is ${APPLICATION_VERSION}" && \ -mkdir -p build && \ -mkdir -p assets && \ -chmod -x res/gta5sync_*.qm res/*.desktop res/*gta5view*.png && \ -cd build && \ -mkdir -p qt5 && \ -cd qt5 && \ -echo "Grand Theft Auto V Snapmatic and Savegame viewer/editor" > ./description-pak && \ -cd .. && \ - -# Set compiler -export CC=clang && \ -export CXX=clang++ && \ - -# Prepare checkinstall step -mkdir -p /usr/share/gta5view && \ - -# Starting build -cd qt5 && \ -cmake \ - "-DCMAKE_INSTALL_PREFIX=/usr" \ - "${CMAKE_BUILD_TYPE}" \ - "-DFORCE_QT_VERSION=5" \ - "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ - "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ - "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ - "-DWITH_DONATE=ON" \ - "-DWITH_TELEMETRY=ON" \ - "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ - "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ - "-DQCONF_BUILD=ON" \ - ../../ && \ -make -j 4 && \ -checkinstall -D --default --nodoc --install=no --pkgname=gta5view --pkgversion=${PACKAGE_VERSION} --pkgrelease=${PACKAGE_BUILD} --pkggroup=utility --maintainer="Syping \" --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5svg5,libqt5widgets5,qttranslations5-l10n --conflicts=gta5view-qt4,gta5view-qt5 --replaces=gta5view-qt4,gta5view-qt5 --pakdir=${PROJECT_DIR}/assets diff --git a/.ci/debian_ci.sh b/.ci/debian_ci.sh deleted file mode 100755 index bc14a86..0000000 --- a/.ci/debian_ci.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# Install packages -.ci/debian_install.sh && \ - -# Build gta5view -.ci/debian_build.sh && \ -cd ${PROJECT_DIR} diff --git a/.ci/debian_docker.sh b/.ci/debian_docker.sh deleted file mode 100755 index 80f6c42..0000000 --- a/.ci/debian_docker.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -if [ "${DOCKER_USER}" != "" ]; then - DOCKER_IMAGE=${DOCKER_USER}/debian:${DEBIAN_VERSION} -else - DOCKER_IMAGE=debian:${DEBIAN_VERSION} -fi -PROJECT_DIR_DOCKER=/gta5view - -cd ${PROJECT_DIR} && \ -docker pull ${DOCKER_IMAGE} && \ -docker run --rm \ - -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export APT_INSTALL=${APT_INSTALL} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/debian_install.sh && .ci/debian_build.sh" diff --git a/.ci/debian_install.sh b/.ci/debian_install.sh deleted file mode 100755 index 12356e9..0000000 --- a/.ci/debian_install.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -# Source OS Release -source /etc/os-release - -# When Debian add backports -if [ "${ID}" == "debian" ]; then - echo "deb http://deb.debian.org/debian ${VERSION_CODENAME}-backports main" >> /etc/apt/sources.list -fi - -# Install packages -apt-get update -qq && \ -apt-get install -qq ${APT_INSTALL} checkinstall cmake dpkg-dev fakeroot g++ gcc qtbase5-dev qt5-qmake qttranslations5-l10n libqt5svg5-dev diff --git a/.ci/dropbox_uploader.sh b/.ci/dropbox_uploader.sh deleted file mode 100755 index ca8ee36..0000000 --- a/.ci/dropbox_uploader.sh +++ /dev/null @@ -1,1763 +0,0 @@ -#!/usr/bin/env bash -# -# Dropbox Uploader -# -# Copyright (C) 2010-2017 Andrea Fabrizi -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# - -#Default configuration file -CONFIG_FILE=~/.dropbox_uploader - -#Default chunk size in Mb for the upload process -#It is recommended to increase this value only if you have enough free space on your /tmp partition -#Lower values may increase the number of http requests -CHUNK_SIZE=50 - -#Curl location -#If not set, curl will be searched into the $PATH -#CURL_BIN="/usr/bin/curl" - -#Default values -TMP_DIR="/tmp" -DEBUG=0 -QUIET=0 -SHOW_PROGRESSBAR=0 -SKIP_EXISTING_FILES=0 -ERROR_STATUS=0 -EXCLUDE=() - -#Don't edit these... -API_LONGPOLL_FOLDER="https://notify.dropboxapi.com/2/files/list_folder/longpoll" -API_CHUNKED_UPLOAD_START_URL="https://content.dropboxapi.com/2/files/upload_session/start" -API_CHUNKED_UPLOAD_FINISH_URL="https://content.dropboxapi.com/2/files/upload_session/finish" -API_CHUNKED_UPLOAD_APPEND_URL="https://content.dropboxapi.com/2/files/upload_session/append_v2" -API_UPLOAD_URL="https://content.dropboxapi.com/2/files/upload" -API_DOWNLOAD_URL="https://content.dropboxapi.com/2/files/download" -API_DELETE_URL="https://api.dropboxapi.com/2/files/delete" -API_MOVE_URL="https://api.dropboxapi.com/2/files/move" -API_COPY_URL="https://api.dropboxapi.com/2/files/copy" -API_METADATA_URL="https://api.dropboxapi.com/2/files/get_metadata" -API_LIST_FOLDER_URL="https://api.dropboxapi.com/2/files/list_folder" -API_LIST_FOLDER_CONTINUE_URL="https://api.dropboxapi.com/2/files/list_folder/continue" -API_ACCOUNT_INFO_URL="https://api.dropboxapi.com/2/users/get_current_account" -API_ACCOUNT_SPACE_URL="https://api.dropboxapi.com/2/users/get_space_usage" -API_MKDIR_URL="https://api.dropboxapi.com/2/files/create_folder" -API_SHARE_URL="https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings" -API_SHARE_LIST="https://api.dropboxapi.com/2/sharing/list_shared_links" -API_SAVEURL_URL="https://api.dropboxapi.com/2/files/save_url" -API_SAVEURL_JOBSTATUS_URL="https://api.dropboxapi.com/2/files/save_url/check_job_status" -API_SEARCH_URL="https://api.dropboxapi.com/2/files/search" -APP_CREATE_URL="https://www.dropbox.com/developers/apps" -RESPONSE_FILE="$TMP_DIR/du_resp_$RANDOM" -CHUNK_FILE="$TMP_DIR/du_chunk_$RANDOM" -TEMP_FILE="$TMP_DIR/du_tmp_$RANDOM" -BIN_DEPS="sed basename date grep stat dd mkdir" -VERSION="1.0" - -umask 077 - -#Check the shell -if [ -z "$BASH_VERSION" ]; then - echo -e "Error: this script requires the BASH shell!" - exit 1 -fi - -shopt -s nullglob #Bash allows filename patterns which match no files to expand to a null string, rather than themselves -shopt -s dotglob #Bash includes filenames beginning with a "." in the results of filename expansion - -#Check temp folder -if [[ ! -d "$TMP_DIR" ]]; then - echo -e "Error: the temporary folder $TMP_DIR doesn't exists!" - echo -e "Please edit this script and set the TMP_DIR variable to a valid temporary folder to use." - exit 1 -fi - -#Look for optional config file parameter -while getopts ":qpskdhf:x:" opt; do - case $opt in - - f) - CONFIG_FILE=$OPTARG - ;; - - d) - DEBUG=1 - ;; - - q) - QUIET=1 - ;; - - p) - SHOW_PROGRESSBAR=1 - ;; - - k) - CURL_ACCEPT_CERTIFICATES="-k" - ;; - - s) - SKIP_EXISTING_FILES=1 - ;; - - h) - HUMAN_READABLE_SIZE=1 - ;; - - x) - EXCLUDE+=( $OPTARG ) - ;; - - \?) - echo "Invalid option: -$OPTARG" >&2 - exit 1 - ;; - - :) - echo "Option -$OPTARG requires an argument." >&2 - exit 1 - ;; - - esac -done - -if [[ $DEBUG != 0 ]]; then - echo $VERSION - uname -a 2> /dev/null - cat /etc/issue 2> /dev/null - set -x - RESPONSE_FILE="$TMP_DIR/du_resp_debug" -fi - -if [[ $CURL_BIN == "" ]]; then - BIN_DEPS="$BIN_DEPS curl" - CURL_BIN="curl" -fi - -#Dependencies check -which $BIN_DEPS > /dev/null -if [[ $? != 0 ]]; then - for i in $BIN_DEPS; do - which $i > /dev/null || - NOT_FOUND="$i $NOT_FOUND" - done - echo -e "Error: Required program could not be found: $NOT_FOUND" - exit 1 -fi - -#Check if readlink is installed and supports the -m option -#It's not necessary, so no problem if it's not installed -which readlink > /dev/null -if [[ $? == 0 && $(readlink -m "//test" 2> /dev/null) == "/test" ]]; then - HAVE_READLINK=1 -else - HAVE_READLINK=0 -fi - -#Forcing to use the builtin printf, if it's present, because it's better -#otherwise the external printf program will be used -#Note that the external printf command can cause character encoding issues! -builtin printf "" 2> /dev/null -if [[ $? == 0 ]]; then - PRINTF="builtin printf" - PRINTF_OPT="-v o" -else - PRINTF=$(which printf) - if [[ $? != 0 ]]; then - echo -e "Error: Required program could not be found: printf" - fi - PRINTF_OPT="" -fi - -#Print the message based on $QUIET variable -function print -{ - if [[ $QUIET == 0 ]]; then - echo -ne "$1"; - fi -} - -#Returns unix timestamp -function utime -{ - date '+%s' -} - -#Remove temporary files -function remove_temp_files -{ - if [[ $DEBUG == 0 ]]; then - rm -fr "$RESPONSE_FILE" - rm -fr "$CHUNK_FILE" - rm -fr "$TEMP_FILE" - fi -} - -#Converts bytes to human readable format -function convert_bytes -{ - if [[ $HUMAN_READABLE_SIZE == 1 && "$1" != "" ]]; then - if (($1 > 1073741824));then - echo $(($1/1073741824)).$(($1%1073741824/100000000))"G"; - elif (($1 > 1048576));then - echo $(($1/1048576)).$(($1%1048576/100000))"M"; - elif (($1 > 1024));then - echo $(($1/1024)).$(($1%1024/100))"K"; - else - echo $1; - fi - else - echo $1; - fi -} - -#Returns the file size in bytes -function file_size -{ - #Generic GNU - SIZE=$(stat --format="%s" "$1" 2> /dev/null) - if [ $? -eq 0 ]; then - echo $SIZE - return - fi - - #Some embedded linux devices - SIZE=$(stat -c "%s" "$1" 2> /dev/null) - if [ $? -eq 0 ]; then - echo $SIZE - return - fi - - #BSD, OSX and other OSs - SIZE=$(stat -f "%z" "$1" 2> /dev/null) - if [ $? -eq 0 ]; then - echo $SIZE - return - fi - - echo "0" -} - - -#Usage -function usage -{ - echo -e "Dropbox Uploader v$VERSION" - echo -e "Andrea Fabrizi - andrea.fabrizi@gmail.com\n" - echo -e "Usage: $0 [PARAMETERS] COMMAND..." - echo -e "\nCommands:" - - echo -e "\t upload " - echo -e "\t download [LOCAL_FILE/DIR]" - echo -e "\t delete " - echo -e "\t move " - echo -e "\t copy " - echo -e "\t mkdir " - echo -e "\t list [REMOTE_DIR]" - echo -e "\t monitor [REMOTE_DIR] [TIMEOUT]" - echo -e "\t share " - echo -e "\t saveurl " - echo -e "\t search " - echo -e "\t info" - echo -e "\t space" - echo -e "\t unlink" - - echo -e "\nOptional parameters:" - echo -e "\t-f Load the configuration file from a specific file" - echo -e "\t-s Skip already existing files when download/upload. Default: Overwrite" - echo -e "\t-d Enable DEBUG mode" - echo -e "\t-q Quiet mode. Don't show messages" - echo -e "\t-h Show file sizes in human readable format" - echo -e "\t-p Show cURL progress meter" - echo -e "\t-k Doesn't check for SSL certificates (insecure)" - echo -e "\t-x Ignores/excludes directories or files from syncing. -x filename -x directoryname. example: -x .git" - - echo -en "\nFor more info and examples, please see the README file.\n\n" - remove_temp_files - exit 1 -} - -#Check the curl exit code -function check_http_response -{ - CODE=$? - - #Checking curl exit code - case $CODE in - - #OK - 0) - - ;; - - #Proxy error - 5) - print "\nError: Couldn't resolve proxy. The given proxy host could not be resolved.\n" - - remove_temp_files - exit 1 - ;; - - #Missing CA certificates - 60|58|77) - print "\nError: cURL is not able to performs peer SSL certificate verification.\n" - print "Please, install the default ca-certificates bundle.\n" - print "To do this in a Debian/Ubuntu based system, try:\n" - print " sudo apt-get install ca-certificates\n\n" - print "If the problem persists, try to use the -k option (insecure).\n" - - remove_temp_files - exit 1 - ;; - - 6) - print "\nError: Couldn't resolve host.\n" - - remove_temp_files - exit 1 - ;; - - 7) - print "\nError: Couldn't connect to host.\n" - - remove_temp_files - exit 1 - ;; - - esac - - #Checking response file for generic errors - if grep -q "HTTP/1.1 400" "$RESPONSE_FILE"; then - ERROR_MSG=$(sed -n -e 's/{"error": "\([^"]*\)"}/\1/p' "$RESPONSE_FILE") - - case $ERROR_MSG in - *access?attempt?failed?because?this?app?is?not?configured?to?have*) - echo -e "\nError: The Permission type/Access level configured doesn't match the DropBox App settings!\nPlease run \"$0 unlink\" and try again." - exit 1 - ;; - esac - - fi - -} - -#Urlencode -function urlencode -{ - #The printf is necessary to correctly decode unicode sequences - local string=$($PRINTF "${1}") - local strlen=${#string} - local encoded="" - - for (( pos=0 ; pos /dev/null - check_http_response - - local TYPE=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - - case $TYPE in - - file) - echo "FILE" - ;; - - folder) - echo "DIR" - ;; - - deleted) - echo "ERR" - ;; - - *) - echo "ERR" - ;; - - esac -} - -#Generic upload wrapper around db_upload_file and db_upload_dir functions -#$1 = Local source file/dir -#$2 = Remote destination file/dir -function db_upload -{ - local SRC=$(normalize_path "$1") - local DST=$(normalize_path "$2") - - for j in "${EXCLUDE[@]}" - do : - if [[ $(echo "$SRC" | grep "$j" | wc -l) -gt 0 ]]; then - print "Skipping excluded file/dir: "$j - return - fi - done - - #Checking if the file/dir exists - if [[ ! -e $SRC && ! -d $SRC ]]; then - print " > No such file or directory: $SRC\n" - ERROR_STATUS=1 - return - fi - - #Checking if the file/dir has read permissions - if [[ ! -r $SRC ]]; then - print " > Error reading file $SRC: permission denied\n" - ERROR_STATUS=1 - return - fi - - TYPE=$(db_stat "$DST") - - #If DST it's a file, do nothing, it's the default behaviour - if [[ $TYPE == "FILE" ]]; then - DST="$DST" - - #if DST doesn't exists and doesn't ends with a /, it will be the destination file name - elif [[ $TYPE == "ERR" && "${DST: -1}" != "/" ]]; then - DST="$DST" - - #if DST doesn't exists and ends with a /, it will be the destination folder - elif [[ $TYPE == "ERR" && "${DST: -1}" == "/" ]]; then - local filename=$(basename "$SRC") - DST="$DST/$filename" - - #If DST it's a directory, it will be the destination folder - elif [[ $TYPE == "DIR" ]]; then - local filename=$(basename "$SRC") - DST="$DST/$filename" - fi - - #It's a directory - if [[ -d $SRC ]]; then - db_upload_dir "$SRC" "$DST" - - #It's a file - elif [[ -e $SRC ]]; then - db_upload_file "$SRC" "$DST" - - #Unsupported object... - else - print " > Skipping not regular file \"$SRC\"\n" - fi -} - -#Generic upload wrapper around db_chunked_upload_file and db_simple_upload_file -#The final upload function will be choosen based on the file size -#$1 = Local source file -#$2 = Remote destination file -function db_upload_file -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - shopt -s nocasematch - - #Checking not allowed file names - basefile_dst=$(basename "$FILE_DST") - if [[ $basefile_dst == "thumbs.db" || \ - $basefile_dst == "desktop.ini" || \ - $basefile_dst == ".ds_store" || \ - $basefile_dst == "icon\r" || \ - $basefile_dst == ".dropbox" || \ - $basefile_dst == ".dropbox.attr" \ - ]]; then - print " > Skipping not allowed file name \"$FILE_DST\"\n" - return - fi - - shopt -u nocasematch - - #Checking file size - FILE_SIZE=$(file_size "$FILE_SRC") - - #Checking if the file already exists - TYPE=$(db_stat "$FILE_DST") - if [[ $TYPE != "ERR" && $SKIP_EXISTING_FILES == 1 ]]; then - print " > Skipping already existing file \"$FILE_DST\"\n" - return - fi - - # Checking if the file has the correct check sum - if [[ $TYPE != "ERR" ]]; then - sha_src=$(db_sha_local "$FILE_SRC") - sha_dst=$(db_sha "$FILE_DST") - if [[ $sha_src == $sha_dst && $sha_src != "ERR" ]]; then - print "> Skipping file \"$FILE_SRC\", file exists with the same hash\n" - return - fi - fi - - if [[ $FILE_SIZE -gt 157286000 ]]; then - #If the file is greater than 150Mb, the chunked_upload API will be used - db_chunked_upload_file "$FILE_SRC" "$FILE_DST" - else - db_simple_upload_file "$FILE_SRC" "$FILE_DST" - fi - -} - -#Simple file upload -#$1 = Local source file -#$2 = Remote destination file -function db_simple_upload_file -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then - CURL_PARAMETERS="--progress-bar" - LINE_CR="\n" - else - CURL_PARAMETERS="-L -s" - LINE_CR="" - fi - - print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\"... $LINE_CR" - $CURL_BIN $CURL_ACCEPT_CERTIFICATES $CURL_PARAMETERS -X POST -i --globoff -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"path\": \"$FILE_DST\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}" --header "Content-Type: application/octet-stream" --data-binary @"$FILE_SRC" "$API_UPLOAD_URL" - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - print "An error occurred requesting /upload\n" - ERROR_STATUS=1 - fi -} - -#Chunked file upload -#$1 = Local source file -#$2 = Remote destination file -function db_chunked_upload_file -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - - if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then - VERBOSE=1 - CURL_PARAMETERS="--progress-bar" - else - VERBOSE=0 - CURL_PARAMETERS="-L -s" - fi - - - - local FILE_SIZE=$(file_size "$FILE_SRC") - local OFFSET=0 - local UPLOAD_ID="" - local UPLOAD_ERROR=0 - local CHUNK_PARAMS="" - - ## Ceil division - let NUMBEROFCHUNK=($FILE_SIZE/1024/1024+$CHUNK_SIZE-1)/$CHUNK_SIZE - - if [[ $VERBOSE == 1 ]]; then - print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\" by $NUMBEROFCHUNK chunks ...\n" - else - print " > Uploading \"$FILE_SRC\" to \"$FILE_DST\" by $NUMBEROFCHUNK chunks " - fi - - #Starting a new upload session - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"close\": false}" --header "Content-Type: application/octet-stream" --data-binary @/dev/null "$API_CHUNKED_UPLOAD_START_URL" 2> /dev/null - check_http_response - - SESSION_ID=$(sed -n 's/{"session_id": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - - chunkNumber=1 - #Uploading chunks... - while ([[ $OFFSET != "$FILE_SIZE" ]]); do - - let OFFSET_MB=$OFFSET/1024/1024 - - #Create the chunk - dd if="$FILE_SRC" of="$CHUNK_FILE" bs=1048576 skip=$OFFSET_MB count=$CHUNK_SIZE 2> /dev/null - local CHUNK_REAL_SIZE=$(file_size "$CHUNK_FILE") - - if [[ $VERBOSE == 1 ]]; then - print " >> Uploading chunk $chunkNumber of $NUMBEROFCHUNK\n" - fi - - #Uploading the chunk... - echo > "$RESPONSE_FILE" - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST $CURL_PARAMETERS --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"cursor\": {\"session_id\": \"$SESSION_ID\",\"offset\": $OFFSET},\"close\": false}" --header "Content-Type: application/octet-stream" --data-binary @"$CHUNK_FILE" "$API_CHUNKED_UPLOAD_APPEND_URL" - #check_http_response not needed, because we have to retry the request in case of error - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - let OFFSET=$OFFSET+$CHUNK_REAL_SIZE - UPLOAD_ERROR=0 - if [[ $VERBOSE != 1 ]]; then - print "." - fi - ((chunkNumber=chunkNumber+1)) - else - if [[ $VERBOSE != 1 ]]; then - print "*" - fi - let UPLOAD_ERROR=$UPLOAD_ERROR+1 - - #On error, the upload is retried for max 3 times - if [[ $UPLOAD_ERROR -gt 2 ]]; then - print " FAILED\n" - print "An error occurred requesting /chunked_upload\n" - ERROR_STATUS=1 - return - fi - fi - - done - - UPLOAD_ERROR=0 - - #Commit the upload - while (true); do - - echo > "$RESPONSE_FILE" - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"cursor\": {\"session_id\": \"$SESSION_ID\",\"offset\": $OFFSET},\"commit\": {\"path\": \"$FILE_DST\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}}" --header "Content-Type: application/octet-stream" --data-binary @/dev/null "$API_CHUNKED_UPLOAD_FINISH_URL" 2> /dev/null - #check_http_response not needed, because we have to retry the request in case of error - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - UPLOAD_ERROR=0 - break - else - print "*" - let UPLOAD_ERROR=$UPLOAD_ERROR+1 - - #On error, the commit is retried for max 3 times - if [[ $UPLOAD_ERROR -gt 2 ]]; then - print " FAILED\n" - print "An error occurred requesting /commit_chunked_upload\n" - ERROR_STATUS=1 - return - fi - fi - - done - - print " DONE\n" -} - -#Directory upload -#$1 = Local source dir -#$2 = Remote destination dir -function db_upload_dir -{ - local DIR_SRC=$(normalize_path "$1") - local DIR_DST=$(normalize_path "$2") - - #Creatig remote directory - db_mkdir "$DIR_DST" - - for file in "$DIR_SRC/"*; do - db_upload "$file" "$DIR_DST" - done -} - -#Generic download wrapper -#$1 = Remote source file/dir -#$2 = Local destination file/dir -function db_download -{ - local SRC=$(normalize_path "$1") - local DST=$(normalize_path "$2") - - TYPE=$(db_stat "$SRC") - - #It's a directory - if [[ $TYPE == "DIR" ]]; then - - #If the DST folder is not specified, I assume that is the current directory - if [[ $DST == "" ]]; then - DST="." - fi - - #Checking if the destination directory exists - if [[ ! -d $DST ]]; then - local basedir="" - else - local basedir=$(basename "$SRC") - fi - - local DEST_DIR=$(normalize_path "$DST/$basedir") - print " > Downloading folder \"$SRC\" to \"$DEST_DIR\"... \n" - - if [[ ! -d "$DEST_DIR" ]]; then - print " > Creating local directory \"$DEST_DIR\"... " - mkdir -p "$DEST_DIR" - - #Check - if [[ $? == 0 ]]; then - print "DONE\n" - else - print "FAILED\n" - ERROR_STATUS=1 - return - fi - fi - - if [[ $SRC == "/" ]]; then - SRC_REQ="" - else - SRC_REQ="$SRC" - fi - - OUT_FILE=$(db_list_outfile "$SRC_REQ") - if [ $? -ne 0 ]; then - # When db_list_outfile fail, the error message is OUT_FILE - print "$OUT_FILE\n" - ERROR_STATUS=1 - return - fi - - #For each entry... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - #Removing unneeded / - FILE=${FILE##*/} - - if [[ $TYPE == "file" ]]; then - db_download_file "$SRC/$FILE" "$DEST_DIR/$FILE" - elif [[ $TYPE == "folder" ]]; then - db_download "$SRC/$FILE" "$DEST_DIR" - fi - - done < $OUT_FILE - - rm -fr $OUT_FILE - - #It's a file - elif [[ $TYPE == "FILE" ]]; then - - #Checking DST - if [[ $DST == "" ]]; then - DST=$(basename "$SRC") - fi - - #If the destination is a directory, the file will be download into - if [[ -d $DST ]]; then - DST="$DST/$SRC" - fi - - db_download_file "$SRC" "$DST" - - #Doesn't exists - else - print " > No such file or directory: $SRC\n" - ERROR_STATUS=1 - return - fi -} - -#Simple file download -#$1 = Remote source file -#$2 = Local destination file -function db_download_file -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - if [[ $SHOW_PROGRESSBAR == 1 && $QUIET == 0 ]]; then - CURL_PARAMETERS="-L --progress-bar" - LINE_CR="\n" - else - CURL_PARAMETERS="-L -s" - LINE_CR="" - fi - - #Checking if the file already exists - if [[ -e $FILE_DST && $SKIP_EXISTING_FILES == 1 ]]; then - print " > Skipping already existing file \"$FILE_DST\"\n" - return - fi - - # Checking if the file has the correct check sum - if [[ $TYPE != "ERR" ]]; then - sha_src=$(db_sha "$FILE_SRC") - sha_dst=$(db_sha_local "$FILE_DST") - if [[ $sha_src == $sha_dst && $sha_src != "ERR" ]]; then - print "> Skipping file \"$FILE_SRC\", file exists with the same hash\n" - return - fi - fi - - #Creating the empty file, that for two reasons: - #1) In this way I can check if the destination file is writable or not - #2) Curl doesn't automatically creates files with 0 bytes size - dd if=/dev/zero of="$FILE_DST" count=0 2> /dev/null - if [[ $? != 0 ]]; then - print " > Error writing file $FILE_DST: permission denied\n" - ERROR_STATUS=1 - return - fi - - print " > Downloading \"$FILE_SRC\" to \"$FILE_DST\"... $LINE_CR" - $CURL_BIN $CURL_ACCEPT_CERTIFICATES $CURL_PARAMETERS -X POST --globoff -D "$RESPONSE_FILE" -o "$FILE_DST" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Dropbox-API-Arg: {\"path\": \"$FILE_SRC\"}" "$API_DOWNLOAD_URL" - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - rm -fr "$FILE_DST" - ERROR_STATUS=1 - return - fi -} - -#Saveurl -#$1 = URL -#$2 = Remote file destination -function db_saveurl -{ - local URL="$1" - local FILE_DST=$(normalize_path "$2") - local FILE_NAME=$(basename "$URL") - - print " > Downloading \"$URL\" to \"$FILE_DST\"..." - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST/$FILE_NAME\", \"url\": \"$URL\"}" "$API_SAVEURL_URL" 2> /dev/null - check_http_response - - JOB_ID=$(sed -n 's/.*"async_job_id": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - if [[ $JOB_ID == "" ]]; then - print " > Error getting the job id\n" - return - fi - - #Checking the status - while (true); do - - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"async_job_id\": \"$JOB_ID\"}" "$API_SAVEURL_JOBSTATUS_URL" 2> /dev/null - check_http_response - - STATUS=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - case $STATUS in - - in_progress) - print "+" - ;; - - complete) - print " DONE\n" - break - ;; - - failed) - print " ERROR\n" - MESSAGE=$(sed -n 's/.*"error_summary": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - print " > Error: $MESSAGE\n" - break - ;; - - esac - - sleep 2 - - done -} - -#Prints account info -function db_account_info -{ - print "Dropbox Uploader v$VERSION\n\n" - print " > Getting info... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" "$API_ACCOUNT_INFO_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - - name=$(sed -n 's/.*"display_name": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo -e "\n\nName:\t\t$name" - - uid=$(sed -n 's/.*"account_id": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo -e "UID:\t\t$uid" - - email=$(sed -n 's/.*"email": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo -e "Email:\t\t$email" - - country=$(sed -n 's/.*"country": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo -e "Country:\t$country" - - echo "" - - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#Prints account space usage info -function db_account_space -{ - print "Dropbox Uploader v$VERSION\n\n" - print " > Getting space usage info... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" "$API_ACCOUNT_SPACE_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - - quota=$(sed -n 's/.*"allocated": \([0-9]*\).*/\1/p' "$RESPONSE_FILE") - let quota_mb=$quota/1024/1024 - echo -e "\n\nQuota:\t$quota_mb Mb" - - used=$(sed -n 's/.*"used": \([0-9]*\).*/\1/p' "$RESPONSE_FILE") - let used_mb=$used/1024/1024 - echo -e "Used:\t$used_mb Mb" - - let free_mb=$((quota-used))/1024/1024 - echo -e "Free:\t$free_mb Mb" - - echo "" - - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#Account unlink -function db_unlink -{ - echo -ne "Are you sure you want unlink this script from your Dropbox account? [y/n]" - read -r answer - if [[ $answer == "y" ]]; then - rm -fr "$CONFIG_FILE" - echo -ne "DONE\n" - fi -} - -#Delete a remote file -#$1 = Remote file to delete -function db_delete -{ - local FILE_DST=$(normalize_path "$1") - - print " > Deleting \"$FILE_DST\"... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\"}" "$API_DELETE_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#Move/Rename a remote file -#$1 = Remote file to rename or move -#$2 = New file name or location -function db_move -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - TYPE=$(db_stat "$FILE_DST") - - #If the destination it's a directory, the source will be moved into it - if [[ $TYPE == "DIR" ]]; then - local filename=$(basename "$FILE_SRC") - FILE_DST=$(normalize_path "$FILE_DST/$filename") - fi - - print " > Moving \"$FILE_SRC\" to \"$FILE_DST\" ... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"from_path\": \"$FILE_SRC\", \"to_path\": \"$FILE_DST\"}" "$API_MOVE_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#Copy a remote file to a remote location -#$1 = Remote file to rename or move -#$2 = New file name or location -function db_copy -{ - local FILE_SRC=$(normalize_path "$1") - local FILE_DST=$(normalize_path "$2") - - TYPE=$(db_stat "$FILE_DST") - - #If the destination it's a directory, the source will be copied into it - if [[ $TYPE == "DIR" ]]; then - local filename=$(basename "$FILE_SRC") - FILE_DST=$(normalize_path "$FILE_DST/$filename") - fi - - print " > Copying \"$FILE_SRC\" to \"$FILE_DST\" ... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"from_path\": \"$FILE_SRC\", \"to_path\": \"$FILE_DST\"}" "$API_COPY_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#Create a new directory -#$1 = Remote directory to create -function db_mkdir -{ - local DIR_DST=$(normalize_path "$1") - - print " > Creating Directory \"$DIR_DST\"... " - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\"}" "$API_MKDIR_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - elif grep -q "^HTTP/1.1 403 Forbidden" "$RESPONSE_FILE"; then - print "ALREADY EXISTS\n" - else - print "FAILED\n" - ERROR_STATUS=1 - fi -} - -#List a remote folder and returns the path to the file containing the output -#$1 = Remote directory -#$2 = Cursor (Optional) -function db_list_outfile -{ - - local DIR_DST="$1" - local HAS_MORE="false" - local CURSOR="" - - if [[ -n "$2" ]]; then - CURSOR="$2" - HAS_MORE="true" - fi - - OUT_FILE="$TMP_DIR/du_tmp_out_$RANDOM" - - while (true); do - - if [[ $HAS_MORE == "true" ]]; then - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"cursor\": \"$CURSOR\"}" "$API_LIST_FOLDER_CONTINUE_URL" 2> /dev/null - else - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\",\"include_media_info\": false,\"include_deleted\": false,\"include_has_explicit_shared_members\": false}" "$API_LIST_FOLDER_URL" 2> /dev/null - fi - - check_http_response - - HAS_MORE=$(sed -n 's/.*"has_more": *\([a-z]*\).*/\1/p' "$RESPONSE_FILE") - CURSOR=$(sed -n 's/.*"cursor": *"\([^"]*\)".*/\1/p' "$RESPONSE_FILE") - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - - #Extracting directory content [...] - #and replacing "}, {" with "}\n{" - #I don't like this piece of code... but seems to be the only way to do this with SED, writing a portable code... - local DIR_CONTENT=$(sed -n 's/.*: \[{\(.*\)/\1/p' "$RESPONSE_FILE" | sed 's/}, *{/}\ - {/g') - - #Converting escaped quotes to unicode format - echo "$DIR_CONTENT" | sed 's/\\"/\\u0022/' > "$TEMP_FILE" - - #Extracting files and subfolders - while read -r line; do - - local FILE=$(echo "$line" | sed -n 's/.*"path_display": *"\([^"]*\)".*/\1/p') - local TYPE=$(echo "$line" | sed -n 's/.*".tag": *"\([^"]*\).*/\1/p') - local SIZE=$(convert_bytes $(echo "$line" | sed -n 's/.*"size": *\([0-9]*\).*/\1/p')) - - echo -e "$FILE:$TYPE;$SIZE" >> "$OUT_FILE" - - done < "$TEMP_FILE" - - if [[ $HAS_MORE == "false" ]]; then - break - fi - - else - return - fi - - done - - echo $OUT_FILE -} - -#List remote directory -#$1 = Remote directory -function db_list -{ - local DIR_DST=$(normalize_path "$1") - - print " > Listing \"$DIR_DST\"... " - - if [[ "$DIR_DST" == "/" ]]; then - DIR_DST="" - fi - - OUT_FILE=$(db_list_outfile "$DIR_DST") - if [ -z "$OUT_FILE" ]; then - print "FAILED\n" - ERROR_STATUS=1 - return - else - print "DONE\n" - fi - - #Looking for the biggest file size - #to calculate the padding to use - local padding=0 - while read -r line; do - local FILE=${line%:*} - local META=${line##*:} - local SIZE=${META#*;} - - if [[ ${#SIZE} -gt $padding ]]; then - padding=${#SIZE} - fi - done < "$OUT_FILE" - - #For each entry, printing directories... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - #Removing unneeded / - FILE=${FILE##*/} - - if [[ $TYPE == "folder" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [D] %-${padding}s %s\n" "$SIZE" "$FILE" - fi - - done < "$OUT_FILE" - - #For each entry, printing files... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - #Removing unneeded / - FILE=${FILE##*/} - - if [[ $TYPE == "file" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [F] %-${padding}s %s\n" "$SIZE" "$FILE" - fi - - done < "$OUT_FILE" - - rm -fr "$OUT_FILE" -} - -#Longpoll remote directory only once -#$1 = Timeout -#$2 = Remote directory -function db_monitor_nonblock -{ - local TIMEOUT=$1 - local DIR_DST=$(normalize_path "$2") - - if [[ "$DIR_DST" == "/" ]]; then - DIR_DST="" - fi - - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$DIR_DST\",\"include_media_info\": false,\"include_deleted\": false,\"include_has_explicit_shared_members\": false}" "$API_LIST_FOLDER_URL" 2> /dev/null - check_http_response - - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - - local CURSOR=$(sed -n 's/.*"cursor": *"\([^"]*\)".*/\1/p' "$RESPONSE_FILE") - - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Content-Type: application/json" --data "{\"cursor\": \"$CURSOR\",\"timeout\": ${TIMEOUT}}" "$API_LONGPOLL_FOLDER" 2> /dev/null - check_http_response - - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - local CHANGES=$(sed -n 's/.*"changes" *: *\([a-z]*\).*/\1/p' "$RESPONSE_FILE") - else - ERROR_MSG=$(grep "Error in call" "$RESPONSE_FILE") - print "FAILED to longpoll (http error): $ERROR_MSG\n" - ERROR_STATUS=1 - return 1 - fi - - if [[ -z "$CHANGES" ]]; then - print "FAILED to longpoll (unexpected response)\n" - ERROR_STATUS=1 - return 1 - fi - - if [ "$CHANGES" == "true" ]; then - - OUT_FILE=$(db_list_outfile "$DIR_DST" "$CURSOR") - - if [ -z "$OUT_FILE" ]; then - print "FAILED to list changes\n" - ERROR_STATUS=1 - return - fi - - #For each entry, printing directories... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - #Removing unneeded / - FILE=${FILE##*/} - - if [[ $TYPE == "folder" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [D] %s\n" "$FILE" - elif [[ $TYPE == "file" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [F] %s %s\n" "$SIZE" "$FILE" - elif [[ $TYPE == "deleted" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [-] %s\n" "$FILE" - fi - - done < "$OUT_FILE" - - rm -fr "$OUT_FILE" - fi - - else - ERROR_STATUS=1 - return 1 - fi - -} - -#Longpoll continuously remote directory -#$1 = Timeout -#$2 = Remote directory -function db_monitor -{ - local TIMEOUT=$1 - local DIR_DST=$(normalize_path "$2") - - while (true); do - db_monitor_nonblock "$TIMEOUT" "$2" - done -} - -#Share remote file -#$1 = Remote file -function db_share -{ - local FILE_DST=$(normalize_path "$1") - - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\",\"settings\": {\"requested_visibility\": \"public\"}}" "$API_SHARE_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print " > Share link: " - SHARE_LINK=$(sed -n 's/.*"url": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo "$SHARE_LINK" - else - get_Share "$FILE_DST" - fi -} - -#Query existing shared link -#$1 = Remote file -function get_Share -{ - local FILE_DST=$(normalize_path "$1") - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE_DST\",\"direct_only\": true}" "$API_SHARE_LIST" - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print " > Share link: " - SHARE_LINK=$(sed -n 's/.*"url": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo "$SHARE_LINK" - else - print "FAILED\n" - MESSAGE=$(sed -n 's/.*"error_summary": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - print " > Error: $MESSAGE\n" - ERROR_STATUS=1 - fi -} - -#Search on Dropbox -#$1 = query -function db_search -{ - local QUERY="$1" - - print " > Searching for \"$QUERY\"... " - - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"\",\"query\": \"$QUERY\",\"start\": 0,\"max_results\": 1000,\"mode\": \"filename\"}" "$API_SEARCH_URL" 2> /dev/null - check_http_response - - #Check - if grep -q "^HTTP/1.1 200 OK" "$RESPONSE_FILE"; then - print "DONE\n" - else - print "FAILED\n" - ERROR_STATUS=1 - fi - - #Extracting directory content [...] - #and replacing "}, {" with "}\n{" - #I don't like this piece of code... but seems to be the only way to do this with SED, writing a portable code... - local DIR_CONTENT=$(sed 's/}, *{/}\ -{/g' "$RESPONSE_FILE") - - #Converting escaped quotes to unicode format - echo "$DIR_CONTENT" | sed 's/\\"/\\u0022/' > "$TEMP_FILE" - - #Extracting files and subfolders - rm -fr "$RESPONSE_FILE" - while read -r line; do - - local FILE=$(echo "$line" | sed -n 's/.*"path_display": *"\([^"]*\)".*/\1/p') - local TYPE=$(echo "$line" | sed -n 's/.*".tag": *"\([^"]*\).*/\1/p') - local SIZE=$(convert_bytes $(echo "$line" | sed -n 's/.*"size": *\([0-9]*\).*/\1/p')) - - echo -e "$FILE:$TYPE;$SIZE" >> "$RESPONSE_FILE" - - done < "$TEMP_FILE" - - #Looking for the biggest file size - #to calculate the padding to use - local padding=0 - while read -r line; do - local FILE=${line%:*} - local META=${line##*:} - local SIZE=${META#*;} - - if [[ ${#SIZE} -gt $padding ]]; then - padding=${#SIZE} - fi - done < "$RESPONSE_FILE" - - #For each entry, printing directories... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - if [[ $TYPE == "folder" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [D] %-${padding}s %s\n" "$SIZE" "$FILE" - fi - - done < "$RESPONSE_FILE" - - #For each entry, printing files... - while read -r line; do - - local FILE=${line%:*} - local META=${line##*:} - local TYPE=${META%;*} - local SIZE=${META#*;} - - if [[ $TYPE == "file" ]]; then - FILE=$(echo -e "$FILE") - $PRINTF " [F] %-${padding}s %s\n" "$SIZE" "$FILE" - fi - - done < "$RESPONSE_FILE" - -} - -#Query the sha256-dropbox-sum of a remote file -#see https://www.dropbox.com/developers/reference/content-hash for more information -#$1 = Remote file -function db_sha -{ - local FILE=$(normalize_path "$1") - - if [[ $FILE == "/" ]]; then - echo "ERR" - return - fi - - #Checking if it's a file or a directory and get the sha-sum - $CURL_BIN $CURL_ACCEPT_CERTIFICATES -X POST -L -s --show-error --globoff -i -o "$RESPONSE_FILE" --header "Authorization: Bearer $OAUTH_ACCESS_TOKEN" --header "Content-Type: application/json" --data "{\"path\": \"$FILE\"}" "$API_METADATA_URL" 2> /dev/null - check_http_response - - local TYPE=$(sed -n 's/{".tag": *"*\([^"]*\)"*.*/\1/p' "$RESPONSE_FILE") - if [[ $TYPE == "folder" ]]; then - echo "ERR" - return - fi - - local SHA256=$(sed -n 's/.*"content_hash": "\([^"]*\).*/\1/p' "$RESPONSE_FILE") - echo "$SHA256" -} - -#Query the sha256-dropbox-sum of a local file -#see https://www.dropbox.com/developers/reference/content-hash for more information -#$1 = Local file -function db_sha_local -{ - local FILE=$(normalize_path "$1") - local FILE_SIZE=$(file_size "$FILE") - local OFFSET=0 - local SKIP=0 - local SHA_CONCAT="" - - which shasum > /dev/null - if [[ $? != 0 ]]; then - echo "ERR" - return - fi - - while ([[ $OFFSET -lt "$FILE_SIZE" ]]); do - dd if="$FILE" of="$CHUNK_FILE" bs=4194304 skip=$SKIP count=1 2> /dev/null - local SHA=$(shasum -a 256 "$CHUNK_FILE" | awk '{print $1}') - SHA_CONCAT="${SHA_CONCAT}${SHA}" - - let OFFSET=$OFFSET+4194304 - let SKIP=$SKIP+1 - done - - shaHex=$(echo $SHA_CONCAT | sed 's/\([0-9A-F]\{2\}\)/\\x\1/gI') - echo -ne $shaHex | shasum -a 256 | awk '{print $1}' -} - -################ -#### SETUP #### -################ - -#CHECKING FOR AUTH FILE -if [[ -e $CONFIG_FILE ]]; then - - #Loading data... and change old format config if necesary. - source "$CONFIG_FILE" 2>/dev/null || { - sed -i'' 's/:/=/' "$CONFIG_FILE" && source "$CONFIG_FILE" 2>/dev/null - } - - #Checking if it's still a v1 API configuration file - if [[ $APPKEY != "" || $APPSECRET != "" ]]; then - echo -ne "The config file contains the old deprecated v1 oauth tokens.\n" - echo -ne "Please run again the script and follow the configuration wizard. The old configuration file has been backed up to $CONFIG_FILE.old\n" - mv "$CONFIG_FILE" "$CONFIG_FILE".old - exit 1 - fi - - #Checking loaded data - if [[ $OAUTH_ACCESS_TOKEN = "" ]]; then - echo -ne "Error loading data from $CONFIG_FILE...\n" - echo -ne "It is recommended to run $0 unlink\n" - remove_temp_files - exit 1 - fi - -#NEW SETUP... -else - - echo -ne "\n This is the first time you run this script, please follow the instructions:\n\n" - echo -ne " 1) Open the following URL in your Browser, and log in using your account: $APP_CREATE_URL\n" - echo -ne " 2) Click on \"Create App\", then select \"Dropbox API app\"\n" - echo -ne " 3) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder\n" - echo -ne " 4) Enter the \"App Name\" that you prefer (e.g. MyUploader$RANDOM$RANDOM$RANDOM)\n\n" - - echo -ne " Now, click on the \"Create App\" button.\n\n" - - echo -ne " When your new App is successfully created, please click on the Generate button\n" - echo -ne " under the 'Generated access token' section, then copy and paste the new access token here:\n\n" - - echo -ne " # Access token: " - read -r OAUTH_ACCESS_TOKEN - - echo -ne "\n > The access token is $OAUTH_ACCESS_TOKEN. Looks ok? [y/N]: " - read -r answer - if [[ $answer != "y" ]]; then - remove_temp_files - exit 1 - fi - - echo "OAUTH_ACCESS_TOKEN=$OAUTH_ACCESS_TOKEN" > "$CONFIG_FILE" - echo " The configuration has been saved." - - remove_temp_files - exit 0 -fi - -################ -#### START #### -################ - -COMMAND="${*:$OPTIND:1}" -ARG1="${*:$OPTIND+1:1}" -ARG2="${*:$OPTIND+2:1}" - -let argnum=$#-$OPTIND - -#CHECKING PARAMS VALUES -case $COMMAND in - - upload) - - if [[ $argnum -lt 2 ]]; then - usage - fi - - FILE_DST="${*:$#:1}" - - for (( i=OPTIND+1; i<$#; i++ )); do - FILE_SRC="${*:$i:1}" - db_upload "$FILE_SRC" "/$FILE_DST" - done - - ;; - - download) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - FILE_SRC="$ARG1" - FILE_DST="$ARG2" - - db_download "/$FILE_SRC" "$FILE_DST" - - ;; - - saveurl) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - URL=$ARG1 - FILE_DST="$ARG2" - - db_saveurl "$URL" "/$FILE_DST" - - ;; - - share) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - FILE_DST="$ARG1" - - db_share "/$FILE_DST" - - ;; - - info) - - db_account_info - - ;; - - space) - - db_account_space - - ;; - - delete|remove) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - FILE_DST="$ARG1" - - db_delete "/$FILE_DST" - - ;; - - move|rename) - - if [[ $argnum -lt 2 ]]; then - usage - fi - - FILE_SRC="$ARG1" - FILE_DST="$ARG2" - - db_move "/$FILE_SRC" "/$FILE_DST" - - ;; - - copy) - - if [[ $argnum -lt 2 ]]; then - usage - fi - - FILE_SRC="$ARG1" - FILE_DST="$ARG2" - - db_copy "/$FILE_SRC" "/$FILE_DST" - - ;; - - mkdir) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - DIR_DST="$ARG1" - - db_mkdir "/$DIR_DST" - - ;; - - search) - - if [[ $argnum -lt 1 ]]; then - usage - fi - - QUERY=$ARG1 - - db_search "$QUERY" - - ;; - - list) - - DIR_DST="$ARG1" - - #Checking DIR_DST - if [[ $DIR_DST == "" ]]; then - DIR_DST="/" - fi - - db_list "/$DIR_DST" - - ;; - - monitor) - - DIR_DST="$ARG1" - TIMEOUT=$ARG2 - - #Checking DIR_DST - if [[ $DIR_DST == "" ]]; then - DIR_DST="/" - fi - - print " > Monitoring \"$DIR_DST\" for changes...\n" - - if [[ -n $TIMEOUT ]]; then - db_monitor_nonblock $TIMEOUT "/$DIR_DST" - else - db_monitor 60 "/$DIR_DST" - fi - - ;; - - unlink) - - db_unlink - - ;; - - *) - - if [[ $COMMAND != "" ]]; then - print "Error: Unknown command: $COMMAND\n\n" - ERROR_STATUS=1 - fi - usage - - ;; - -esac - -remove_temp_files - -if [[ $ERROR_STATUS -ne 0 ]]; then - echo "Some error occured. Please check the log." -fi - -exit $ERROR_STATUS diff --git a/.ci/gta5view.nsi b/.ci/gta5view.nsi deleted file mode 100644 index 56ea8fa..0000000 --- a/.ci/gta5view.nsi +++ /dev/null @@ -1,364 +0,0 @@ -###################################################################### - -!define APP_NAME "gta5view" -!define APP_EXT ".g5e" -!define COMP_NAME "Syping" -!define WEB_SITE "https://gta5view.syping.de/" -!define VERSION "1.10.1.1" -!define COPYRIGHT "Copyright © 2016-2022 Syping" -!define DESCRIPTION "Open Source Snapmatic and Savegame viewer/editor for GTA V" -!define INSTALLER_NAME "gta5view_setup.exe" -!define MAIN_APP_EXE "gta5view.exe" -!define INSTALL_TYPE "SetShellVarContext all" -!define REG_ROOT "HKLM" -!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}" -!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" -!define LICENSE_TXT "../LICENSE" - -###################################################################### - -VIProductVersion "${VERSION}" -VIAddVersionKey "ProductName" "${APP_NAME}" -VIAddVersionKey "ProductVersion" "${VERSION}" -VIAddVersionKey "CompanyName" "${COMP_NAME}" -VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" -VIAddVersionKey "FileDescription" "${DESCRIPTION}" -VIAddVersionKey "FileVersion" "${VERSION}" - -###################################################################### - -!include "x64.nsh" -SetCompressor LZMA -Name "${APP_NAME}" -Caption "${APP_NAME}" -OutFile "${INSTALLER_NAME}" -#BrandingText "${APP_NAME}" -XPStyle on -Unicode true -InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "" -InstallDir "$PROGRAMFILES64\Syping\gta5view" - -###################################################################### - -!include "MUI2.nsh" - -!define MUI_ABORTWARNING -!define MUI_UNABORTWARNING - -!define MUI_LANGDLL_REGISTRY_ROOT "${REG_ROOT}" -!define MUI_LANGDLL_REGISTRY_KEY "${UNINSTALL_PATH}" -!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" - -!insertmacro MUI_PAGE_WELCOME - -!ifdef LICENSE_TXT -!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}" -!endif - -!insertmacro MUI_PAGE_DIRECTORY - -!ifdef REG_START_MENU -!define MUI_STARTMENUPAGE_NODISABLE -!define MUI_STARTMENUPAGE_DEFAULTFOLDER "gta5view" -!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}" -!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}" -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}" -!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder -!endif - -!insertmacro MUI_PAGE_INSTFILES - -!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}" -!insertmacro MUI_PAGE_FINISH - -!insertmacro MUI_UNPAGE_CONFIRM - -!insertmacro MUI_UNPAGE_INSTFILES - -!insertmacro MUI_UNPAGE_FINISH - -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "French" -!insertmacro MUI_LANGUAGE "German" -!insertmacro MUI_LANGUAGE "Korean" -!insertmacro MUI_LANGUAGE "Russian" -!insertmacro MUI_LANGUAGE "Ukrainian" -!insertmacro MUI_LANGUAGE "TradChinese" - -!insertmacro MUI_RESERVEFILE_LANGDLL - -###################################################################### - -Function .onInit -!insertmacro MUI_LANGDLL_DISPLAY -!ifdef WIN32 - MessageBox MB_OK|MB_ICONSTOP "Windows 32-Bit is not supported anymore!" - Quit -!endif -SetRegView 64 -FunctionEnd - -###################################################################### - -Section -MainProgram -${INSTALL_TYPE} -SetOverwrite ifnewer -SetOutPath "$INSTDIR" -File "../build/gta5view.exe" -File "/opt/llvm-mingw/x86_64-w64-mingw32/bin/libc++.dll" -File "/opt/llvm-mingw/x86_64-w64-mingw32/bin/libunwind.dll" -File "/usr/local/lib/x86_64-w64-mingw32/openssl/bin/libcrypto-1_1-x64.dll" -File "/usr/local/lib/x86_64-w64-mingw32/openssl/bin/libssl-1_1-x64.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/bin/Qt5Core.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/bin/Qt5Gui.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/bin/Qt5Network.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/bin/Qt5Svg.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/bin/Qt5Widgets.dll" -SetOutPath "$INSTDIR\lang" -File "../build/gta5sync_en_US.qm" -File "../build/gta5sync_de.qm" -File "../build/gta5sync_fr.qm" -File "../build/gta5sync_ko.qm" -File "../build/gta5sync_ru.qm" -File "../build/gta5sync_uk.qm" -File "../build/gta5sync_zh_TW.qm" -File "../build/qtbase_en_GB.qm" -File "../res/qt5/qtbase_de.qm" -File "../res/qt5/qtbase_fr.qm" -File "../res/qt5/qtbase_ko.qm" -File "../res/qt5/qtbase_ru.qm" -File "../res/qt5/qtbase_uk.qm" -File "../res/qt5/qtbase_zh_TW.qm" -SetOutPath "$INSTDIR\resources" -File "../res/add.svgz" -File "../res/avatararea.png" -File "../res/avatarareaimport.png" -File "../res/back.svgz" -File "../res/flag-de.png" -File "../res/flag-fr.png" -File "../res/flag-gb.png" -File "../res/flag-kr.png" -File "../res/flag-ru.png" -File "../res/flag-tw.png" -File "../res/flag-ua.png" -File "../res/flag-us.png" -File "../res/gta5view-16.png" -File "../res/gta5view-24.png" -File "../res/gta5view-32.png" -File "../res/gta5view-40.png" -File "../res/gta5view-48.png" -File "../res/gta5view-64.png" -File "../res/gta5view-96.png" -File "../res/gta5view-128.png" -File "../res/gta5view-256.png" -File "../res/mapcayoperico.jpg" -File "../res/mappreview.jpg" -File "../res/next.svgz" -File "../res/pointmaker-8.png" -File "../res/pointmaker-16.png" -File "../res/pointmaker-24.png" -File "../res/pointmaker-32.png" -File "../res/savegame.svgz" -File "../res/watermark_1b.png" -File "../res/watermark_2b.png" -File "../res/watermark_2r.png" -SetOutPath "$INSTDIR\imageformats" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qgif.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qicns.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qico.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qjpeg.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qsvg.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qtga.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qtiff.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qwbmp.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/imageformats/qwebp.dll" -SetOutPath "$INSTDIR\platforms" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/platforms/qwindows.dll" -SetOutPath "$INSTDIR\styles" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/styles/qcleanlooksstyle.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/styles/qplastiquestyle.dll" -File "/usr/local/lib/x86_64-w64-mingw32/qt5/plugins/styles/qwindowsvistastyle.dll" -SectionEnd - -###################################################################### - -Section -Icons_Reg -SetOutPath "$INSTDIR" -WriteUninstaller "$INSTDIR\uninstall.exe" - -!ifdef REG_START_MENU -!insertmacro MUI_STARTMENU_WRITE_BEGIN Application -CreateDirectory "$SMPROGRAMS\$SM_Folder" -CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}" -CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe" - -!ifdef WEB_SITE -WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}" -CreateShortCut "$SMPROGRAMS\$SM_Folder\gta5view Website.lnk" "$INSTDIR\${APP_NAME} website.url" -!endif -!insertmacro MUI_STARTMENU_WRITE_END -!endif - -!ifndef REG_START_MENU -CreateDirectory "$SMPROGRAMS\gta5view" -CreateShortCut "$SMPROGRAMS\gta5view\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}" -CreateShortCut "$SMPROGRAMS\gta5view\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe" - -!ifdef WEB_SITE -WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}" -CreateShortCut "$SMPROGRAMS\gta5view\gta5view Website.lnk" "$INSTDIR\${APP_NAME} website.url" -!endif -!endif - -WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}" -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}" -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe" -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}" -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}" -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}" - -!ifdef WEB_SITE -WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}" -!endif -SectionEnd - -###################################################################### - -Section -ShellAssoc -WriteRegStr ${REG_ROOT} "Software\Classes\${APP_NAME}\DefaultIcon" "" "$INSTDIR\${MAIN_APP_EXE},0" -WriteRegStr ${REG_ROOT} "Software\Classes\${APP_NAME}\shell\open\command" "" '"$INSTDIR\${MAIN_APP_EXE}" "%1"' -WriteRegStr ${REG_ROOT} "Software\Classes\${APP_EXT}" "" "${APP_NAME}" -WriteRegStr ${REG_ROOT} "Software\Classes\${APP_EXT}" "Content Type" "application/x-gta5view-export" -System::Call 'SHELL32::SHChangeNotify(i0x8000000,i0,p0,p0)' -SectionEnd - -###################################################################### - -Section -un.ShellAssoc -ClearErrors -ReadRegStr $0 ${REG_ROOT} "Software\Classes\${APP_EXT}" "" -DeleteRegKey ${REG_ROOT} "Software\Classes\${APP_NAME}" -${IfNot} ${Errors} -${AndIf} $0 == "${APP_NAME}" -DeleteRegValue ${REG_ROOT} "Software\Classes\${APP_EXT}" "" -DeleteRegKey /IfEmpty ${REG_ROOT} "Software\Classes\${APP_EXT}" -${EndIf} -System::Call 'SHELL32::SHChangeNotify(i0x8000000,i0,p0,p0)' -SectionEnd - -###################################################################### - -Section Uninstall -${INSTALL_TYPE} -Delete "$INSTDIR\gta5view.exe" -Delete "$INSTDIR\libc++.dll" -Delete "$INSTDIR\libunwind.dll" -Delete "$INSTDIR\libcrypto-1_1-x64.dll" -Delete "$INSTDIR\libssl-1_1-x64.dll" -Delete "$INSTDIR\Qt5Core.dll" -Delete "$INSTDIR\Qt5Gui.dll" -Delete "$INSTDIR\Qt5Network.dll" -Delete "$INSTDIR\Qt5Svg.dll" -Delete "$INSTDIR\Qt5Widgets.dll" -Delete "$INSTDIR\lang\gta5sync_en_US.qm" -Delete "$INSTDIR\lang\gta5sync_de.qm" -Delete "$INSTDIR\lang\gta5sync_fr.qm" -Delete "$INSTDIR\lang\gta5sync_ko.qm" -Delete "$INSTDIR\lang\gta5sync_ru.qm" -Delete "$INSTDIR\lang\gta5sync_uk.qm" -Delete "$INSTDIR\lang\gta5sync_zh_TW.qm" -Delete "$INSTDIR\lang\qtbase_en_GB.qm" -Delete "$INSTDIR\lang\qtbase_de.qm" -Delete "$INSTDIR\lang\qtbase_fr.qm" -Delete "$INSTDIR\lang\qtbase_ko.qm" -Delete "$INSTDIR\lang\qtbase_ru.qm" -Delete "$INSTDIR\lang\qtbase_uk.qm" -Delete "$INSTDIR\lang\qtbase_zh_TW.qm" -Delete "$INSTDIR\resources\add.svgz" -Delete "$INSTDIR\resources\avatararea.png" -Delete "$INSTDIR\resources\avatarareaimport.png" -Delete "$INSTDIR\resources\back.svgz" -Delete "$INSTDIR\resources\flag-de.png" -Delete "$INSTDIR\resources\flag-fr.png" -Delete "$INSTDIR\resources\flag-gb.png" -Delete "$INSTDIR\resources\flag-kr.png" -Delete "$INSTDIR\resources\flag-ru.png" -Delete "$INSTDIR\resources\flag-tw.png" -Delete "$INSTDIR\resources\flag-ua.png" -Delete "$INSTDIR\resources\flag-us.png" -Delete "$INSTDIR\resources\gta5view-16.png" -Delete "$INSTDIR\resources\gta5view-24.png" -Delete "$INSTDIR\resources\gta5view-32.png" -Delete "$INSTDIR\resources\gta5view-40.png" -Delete "$INSTDIR\resources\gta5view-48.png" -Delete "$INSTDIR\resources\gta5view-64.png" -Delete "$INSTDIR\resources\gta5view-96.png" -Delete "$INSTDIR\resources\gta5view-128.png" -Delete "$INSTDIR\resources\gta5view-256.png" -Delete "$INSTDIR\resources\mapcayoperico.jpg" -Delete "$INSTDIR\resources\mappreview.jpg" -Delete "$INSTDIR\resources\next.svgz" -Delete "$INSTDIR\resources\pointmaker-8.png" -Delete "$INSTDIR\resources\pointmaker-16.png" -Delete "$INSTDIR\resources\pointmaker-24.png" -Delete "$INSTDIR\resources\pointmaker-32.png" -Delete "$INSTDIR\resources\savegame.svgz" -Delete "$INSTDIR\resources\watermark_1b.png" -Delete "$INSTDIR\resources\watermark_2b.png" -Delete "$INSTDIR\resources\watermark_2r.png" -Delete "$INSTDIR\imageformats\qgif.dll" -Delete "$INSTDIR\imageformats\qicns.dll" -Delete "$INSTDIR\imageformats\qico.dll" -Delete "$INSTDIR\imageformats\qjpeg.dll" -Delete "$INSTDIR\imageformats\qsvg.dll" -Delete "$INSTDIR\imageformats\qtga.dll" -Delete "$INSTDIR\imageformats\qtiff.dll" -Delete "$INSTDIR\imageformats\qwbmp.dll" -Delete "$INSTDIR\imageformats\qwebp.dll" -Delete "$INSTDIR\platforms\qwindows.dll" -Delete "$INSTDIR\styles\qcleanlooksstyle.dll" -Delete "$INSTDIR\styles\qplastiquestyle.dll" -Delete "$INSTDIR\styles\qwindowsvistastyle.dll" -RmDir "$INSTDIR\lang" -RmDir "$INSTDIR\imageformats" -RmDir "$INSTDIR\platforms" -RmDir "$INSTDIR\styles" - -Delete "$INSTDIR\uninstall.exe" -!ifdef WEB_SITE -Delete "$INSTDIR\${APP_NAME} website.url" -!endif - -RmDir "$INSTDIR" - -!ifdef REG_START_MENU -!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder -Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" -Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" -!ifdef WEB_SITE -Delete "$SMPROGRAMS\$SM_Folder\gta5view Website.lnk" -!endif -RmDir "$SMPROGRAMS\$SM_Folder" -!endif - -!ifndef REG_START_MENU -Delete "$SMPROGRAMS\gta5view\${APP_NAME}.lnk" -Delete "$SMPROGRAMS\gta5view\Uninstall ${APP_NAME}.lnk" -!ifdef WEB_SITE -Delete "$SMPROGRAMS\gta5view\gta5view Website.lnk" -!endif -RmDir "$SMPROGRAMS\gta5view" -!endif - -DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}" -DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}" -SectionEnd - -###################################################################### - -Function un.onInit -!insertmacro MUI_UNGETLANGUAGE -SetRegView 64 -FunctionEnd - -###################################################################### diff --git a/.ci/osx_build.sh b/.ci/osx_build.sh deleted file mode 100755 index c8545c4..0000000 --- a/.ci/osx_build.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -# Creating folders -cd ${PROJECT_DIR} && \ -echo "gta5view build version is ${APPLICATION_VERSION}" && \ -echo "gta5view image name is gta5view-osx_${APPLICATION_VERSION}.dmg" && \ -mkdir -p build && \ -mkdir -p assets && \ -cd build && \ - -/usr/local/bin/cmake \ - "-DCMAKE_PREFIX_PATH=/usr/local/opt/qt" \ - "${CMAKE_BUILD_TYPE}" \ - "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ - "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ - "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ - "-DWITH_DONATE=ON" \ - "-DWITH_TELEMETRY=ON" \ - "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ - "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ - ../ && \ -make -j 4 && \ -/usr/local/opt/qt/bin/macdeployqt gta5view.app -dmg && \ -cp -Rf gta5view.dmg ../assets/gta5view-osx_${APPLICATION_VERSION}.dmg diff --git a/.ci/osx_ci.sh b/.ci/osx_ci.sh deleted file mode 100755 index 59a722e..0000000 --- a/.ci/osx_ci.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# Install packages -.ci/osx_install.sh && \ - -# Build gta5view -.ci/osx_build.sh && \ -cd ${PROJECT_DIR} diff --git a/.ci/osx_install.sh b/.ci/osx_install.sh deleted file mode 100755 index 9c5c5f3..0000000 --- a/.ci/osx_install.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -# Install packages -brew upgrade cmake qt diff --git a/.ci/windows_build.sh b/.ci/windows_build.sh deleted file mode 100755 index 4b85c38..0000000 --- a/.ci/windows_build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -# Prepare environment variable -export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ - -# Creating folders -cd ${PROJECT_DIR} && \ -echo "gta5view build version is ${APPLICATION_VERSION}" && \ -echo "gta5view executable is ${GTA5VIEW_EXECUTABLE}" && \ -mkdir -p build && \ -mkdir -p assets && \ - -# Starting build -cd build && \ -mingw64-qt-cmake \ - "${CMAKE_BUILD_TYPE}" \ - "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ - "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ - "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ - "-DWITH_DONATE=ON" \ - "-DWITH_TELEMETRY=ON" \ - "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ - "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ - .. && \ -make -j 4 && \ -x86_64-w64-mingw32-strip -s gta5view.exe && \ -cp -Rf *.exe ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} && \ -cd ${PROJECT_DIR}/assets diff --git a/.ci/windows_docker.sh b/.ci/windows_docker.sh deleted file mode 100755 index 54862f1..0000000 --- a/.ci/windows_docker.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -DOCKER_IMAGE=sypingauto/gta5view-build:1.10-static -PROJECT_DIR_DOCKER=/gta5view - -cd ${PROJECT_DIR} && \ -docker pull ${DOCKER_IMAGE} && \ -docker run --rm \ - -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/windows_build.sh" && \ - -# Prepare environment variable -export GTA5VIEW_EXECUTABLE=gta5view-${EXECUTABLE_VERSION}${EXECUTABLE_ARCH}.exe && \ - -# Upload Assets to Dropbox -if [ "${PACKAGE_CODE}" == "gta5-mods" ]; then - ${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gta5-mods/${PACKAGE_VERSION} - ${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gta5-mods/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ - rm -rf ${GTA5VIEW_EXECUTABLE} -elif [ "${PACKAGE_CODE}" == "gtainside" ]; then - ${PROJECT_DIR}/.ci/dropbox_uploader.sh mkdir gtainside/${PACKAGE_VERSION} - ${PROJECT_DIR}/.ci/dropbox_uploader.sh upload ${PROJECT_DIR}/assets/${GTA5VIEW_EXECUTABLE} gtainside/${PACKAGE_VERSION}/${GTA5VIEW_EXECUTABLE} && \ - rm -rf ${GTA5VIEW_EXECUTABLE} -fi diff --git a/.ci/wininstall_build.sh b/.ci/wininstall_build.sh deleted file mode 100755 index 8ecbe4e..0000000 --- a/.ci/wininstall_build.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Creating folders -cd ${PROJECT_DIR} && \ -echo "gta5view build version is ${APPLICATION_VERSION}" && \ -mkdir -p build && \ -mkdir -p assets && \ - -# Starting build -cd build && \ -mingw64-qt-cmake \ - "${CMAKE_BUILD_TYPE}" \ - "-DGTA5VIEW_BUILDCODE=${PACKAGE_CODE}" \ - "-DGTA5VIEW_APPVER=${APPLICATION_VERSION}" \ - "-DGTA5VIEW_COMMIT=${APPLICATION_COMMIT}" \ - "-DWITH_DONATE=ON" \ - "-DWITH_TELEMETRY=ON" \ - "-DDONATE_ADDRESSES=$(cat ${PROJECT_DIR}/.ci/donate.txt)" \ - "-DTELEMETRY_WEBURL=https://dev.syping.de/gta5view-userstats/" \ - "-DQCONF_BUILD=ON" \ - "-DGTA5VIEW_INLANG=RUNDIR:SEPARATOR:lang" \ - "-DGTA5VIEW_LANG=RUNDIR:SEPARATOR:lang" \ - "-DGTA5VIEW_PLUG=RUNDIR:SEPARATOR:plugins" \ - .. && \ -make -j 4 && \ -x86_64-w64-mingw32-strip -s gta5view.exe && \ -cd ${PROJECT_DIR}/assets && \ -makensis "-XTarget amd64-unicode" -NOCD ${PROJECT_DIR}/.ci/gta5view.nsi && \ -mv -f gta5view_setup.exe gta5view-${EXECUTABLE_VERSION}_setup.exe diff --git a/.ci/wininstall_docker.sh b/.ci/wininstall_docker.sh deleted file mode 100755 index 7a51180..0000000 --- a/.ci/wininstall_docker.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -DOCKER_IMAGE=sypingauto/gta5view-build:1.10-shared -PROJECT_DIR_DOCKER=/gta5view - -cd ${PROJECT_DIR} && \ -docker pull ${DOCKER_IMAGE} && \ -docker run --rm \ - -v "${PROJECT_DIR}:${PROJECT_DIR_DOCKER}" \ - ${DOCKER_IMAGE} \ - /bin/bash -c "export PROJECT_DIR=${PROJECT_DIR_DOCKER} && export QT_SELECT=${QT_SELECT} && export APPLICATION_VERSION=${APPLICATION_VERSION} && export APPLICATION_COMMIT=${APPLICATION_COMMIT} && export BUILD_TYPE=${BUILD_TYPE} && export QMAKE_FLAGS_QT4=${QMAKE_FLAGS_QT4} && export QMAKE_FLAGS_QT5=${QMAKE_FLAGS_QT5} && export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} && export QMAKE_BUILD_TYPE=${QMAKE_BUILD_TYPE} && export PACKAGE_VERSION=${PACKAGE_VERSION} && export PACKAGE_BUILD=${PACKAGE_BUILD} && export PACKAGE_CODE=${PACKAGE_CODE} && export EXECUTABLE_VERSION=${EXECUTABLE_VERSION} && export EXECUTABLE_ARCH=${EXECUTABLE_ARCH} && cd ${PROJECT_DIR_DOCKER} && .ci/wininstall_build.sh" diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index ba4a1c5..0000000 --- a/.drone.yml +++ /dev/null @@ -1,36 +0,0 @@ -kind: pipeline -type: docker - -environment: - BUILD_TYPE: "REL" - -steps: -- name: Windows Installer - image: sypingauto/gta5view-build:1.10-shared - environment: - BUILD_SCRIPT: "wininstall_build.sh" - QT_SELECT: "qt5-x86_64-w64-mingw32" - TCA_PASS: - from_secret: tca_pass - commands: - - .drone/drone.sh - volumes: - - name: gta5view - path: /srv/gta5view -- name: Windows Portable - image: sypingauto/gta5view-build:1.10-static - environment: - BUILD_SCRIPT: "windows_build.sh" - QT_SELECT: "qt5-x86_64-w64-mingw32" - TCA_PASS: - from_secret: tca_pass - commands: - - .drone/drone.sh - volumes: - - name: gta5view - path: /srv/gta5view - -volumes: -- name: gta5view - host: - path: /srv/gta5view diff --git a/.drone/TelemetryClassAuthenticator.cpp.enc b/.drone/TelemetryClassAuthenticator.cpp.enc deleted file mode 100644 index e905d2fc4dc990d5410ea3484df32f50ccdd0f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2960 zcmV;B3vcvOVQh3|WM5x6&9k@{P^B9aTrX|NBcAY5C*03wvb4B055V7zKYOyhL1+K6 zhXarHUWpsEDJ+G*PD&j9_IJMolSLfJ4bDU|J1>^?C;Jx){px?Fuqc>&_*ry)Ur03@ z?EVuZQv&j?wkzvg@s0C}9PbjzVuAa}UchPb8#3XQWOoD4517VcK7d&zuy>4>tuxU> zluc?J1hX6g3LZ$VGYl4Q+B;R1#wf;erqB1Jd8c2nw=Ng8=ID zwP2sEY-D0ak3ooz+Hf@3|8I%c81saJN{wNVXpZ48AqDZ0HdfAQQ8V)g8i$`c#5zrm zoqdW}iTrG|U^{8dO+eOG0bUwvo0Elnd1@)5v`zt#6;Q+H9P&JL1T*OMn=!HW$m0CU zH^+@*%gNYtayhO0BjdBjp~@M@$V@B$d|XAEY@giK2h)L0=w;{r2Gu$xlxeMKi6-36 z*I2_i6z#-Dvjkgtb@^%s^0yEhZ8pC*dXSN*6q&38sqj|HT})Y_#6*@?sLP!-NUO>^ zV6x;IO(M0m768|t%~+^E_S|IX^PTH7hMDLkku4Kep}fQ;@&pxRNqXH!I>9C!5vhXX znQ$>QY|^!{`Q@2M`EV-mysaPZ2eg11;mzI>)$D~B7WlS#`3pA*Fl*%aL)-PBncOSANNWng1GG=^m;&X#9wApnLYvdHNC7fX{uU#r4N0-AGd z#5-a_aYz5Wn$Wtp`>3O=S$t6UYqfECbbPTb{|%fqLWt+ zLf{tKgAdvMIn!R%O5QWq>p+dB&anbh^Ny=YwQ1U$R(Jy&LpA}QUhmr(rekGI?#iHSCBL{TS3S_wA@b+ss|OxkNa?RbO@=wUfK}Tfs%!fFmGlJD+;Emh6IIY{1{ff*YBrRGs+cXZD|}P$ zKaARDGq`mQ%v#^Rb++gW=86o}uZFa=vSVOZsCP!n|IE{X$3+fau8v;zIzLR5s)GC) zd-#YR2=&z0J#+y%7PMao-w$T71GetyZV(-0iulPGKJU4_B>#RgJ|&9{OwOL`55o5` zg=k%i_IZcanQ{WQhL$cnQRf)zaJB5&Hl>6EC32%1sxVv_ph6rIhaRs6_Rx8stlF4W z0Q?R(b`V5qt?YovX242ng+$ksRfh^bc3;^H{IBZHQJfbVXn_;ez#H{OM5Jn*GRsX>;|n=&KjIR!dPy`NX69yh?nLWP*t!Fdd!4Lx-0eMdU+AU zs~)_lq{AwuGWIxHKC8bZ#WE>)?TrRR7{$8 zh_z0(S9?P@)zvEy`w_kVmL~Qvy`>5YEOj|$z;rjHQ~!jt(Cs1DSu)M(v_q`}H)q|G zNIRs(0TMU1Lx4v&Jq1m|a`3W0*GLvN26R?DBMHgiCIEo{{Nc+F#$9p3K-JuKT)`Gv zdXL-IM1E>pC^akK-fi#Bc;{=o