mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-11 02:57:42 +02:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0b32c19e4 |
52
.drone.yml
52
.drone.yml
@@ -22,7 +22,7 @@ steps:
|
|||||||
source /opt/qt57/bin/qt57-env.sh &&
|
source /opt/qt57/bin/qt57-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -59,7 +59,7 @@ steps:
|
|||||||
source /opt/qt58/bin/qt58-env.sh &&
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -96,7 +96,7 @@ steps:
|
|||||||
source /opt/qt59/bin/qt59-env.sh &&
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -137,7 +137,7 @@ steps:
|
|||||||
source /opt/qt510/bin/qt510-env.sh &&
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -178,7 +178,7 @@ steps:
|
|||||||
source /opt/qt511/bin/qt511-env.sh &&
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -219,7 +219,7 @@ steps:
|
|||||||
source /opt/qt511/bin/qt511-env.sh &&
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -237,17 +237,13 @@ name: qt-5.12
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build and test
|
- name: build and test
|
||||||
image: nextcloudci/client-5.12:client-5.12-5
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=gcc-7 &&
|
export CC=gcc-7 &&
|
||||||
export CXX=g++-7 &&
|
export CXX=g++-7 &&
|
||||||
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
export QTDIR=\$QT_BASE_DIR &&
|
|
||||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
|
||||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
|
||||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
cd qtkeychain &&
|
cd qtkeychain &&
|
||||||
@@ -261,14 +257,10 @@ steps:
|
|||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=gcc-7 &&
|
export CC=gcc-7 &&
|
||||||
export CXX=g++-7 &&
|
export CXX=g++-7 &&
|
||||||
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
export QTDIR=\$QT_BASE_DIR &&
|
|
||||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
|
||||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
|
||||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -286,17 +278,13 @@ name: qt-5.12-clang
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build and test
|
- name: build and test
|
||||||
image: nextcloudci/client-5.12:client-5.12-5
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=clang-6.0 &&
|
export CC=clang-6.0 &&
|
||||||
export CXX=clang++-6.0 &&
|
export CXX=clang++-6.0 &&
|
||||||
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
export QTDIR=\$QT_BASE_DIR &&
|
|
||||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
|
||||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
|
||||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
cd qtkeychain &&
|
cd qtkeychain &&
|
||||||
@@ -310,14 +298,10 @@ steps:
|
|||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
export CC=clang-6.0 &&
|
export CC=clang-6.0 &&
|
||||||
export CXX=clang++-6.0 &&
|
export CXX=clang++-6.0 &&
|
||||||
export QT_BASE_DIR=/opt/qt5.12.5 &&
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
export QTDIR=\$QT_BASE_DIR &&
|
|
||||||
export PATH=\$QT_BASE_DIR/bin:\$PATH &&
|
|
||||||
export LD_LIBRARY_PATH=\$QT_BASE_DIR/lib/x86_64-linux-gnu:\$QT_BASE_DIR/lib:/usr/local/lib:\$LD_LIBRARY_PATH &&
|
|
||||||
export PKG_CONFIG_PATH=\$QT_BASE_DIR/lib/pkgconfig:\$PKG_CONFIG_PATH &&
|
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DBUILD_UPDATER=ON -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 -DSANITIZE_ADDRESS=ON ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
@@ -335,10 +319,9 @@ name: AppImage
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: build
|
||||||
image: nextcloudci/client-5.12:client-5.12-5
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
commands:
|
commands:
|
||||||
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
||||||
- /bin/bash -c "./admin/linux/upload-appimage.sh"
|
|
||||||
trigger:
|
trigger:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
@@ -361,9 +344,10 @@ steps:
|
|||||||
from_secret: DEBIAN_SECRET_IV
|
from_secret: DEBIAN_SECRET_IV
|
||||||
trigger:
|
trigger:
|
||||||
branch:
|
branch:
|
||||||
- stable-2.6
|
- master
|
||||||
event:
|
event:
|
||||||
- tag
|
- pull_request
|
||||||
|
- push
|
||||||
---
|
---
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
name: Documentation
|
name: Documentation
|
||||||
|
|||||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,3 +1,9 @@
|
|||||||
|
[submodule "src/3rdparty/qtmacgoodies"]
|
||||||
|
path = src/3rdparty/qtmacgoodies
|
||||||
|
url = https://github.com/camilasan/qtmacgoodies.git
|
||||||
|
[submodule "binary"]
|
||||||
|
path = binary
|
||||||
|
url = git://github.com/owncloud/owncloud-client-binary.git
|
||||||
[submodule "src/3rdparty/libcrashreporter-qt"]
|
[submodule "src/3rdparty/libcrashreporter-qt"]
|
||||||
path = src/3rdparty/libcrashreporter-qt
|
path = src/3rdparty/libcrashreporter-qt
|
||||||
url = git://github.com/dschmidt/libcrashreporter-qt.git
|
url = git://github.com/dschmidt/libcrashreporter-qt.git
|
||||||
|
|||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
||||||
Name[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
Name[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
Comment[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
GenericName[bg_BG]=Синхронизиране на папка
|
GenericName[bg_BG]=Синхронизиране на папка
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[br]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
|
||||||
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
|
||||||
GenericName[br]=Tuliad kemprenan
|
|
||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ca]=@APPLICATION_ICON_NAME@
|
Icon[ca]=@APPLICATION_ICON_NAME@
|
||||||
Name[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
Name[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
GenericName[ca]=Directori de sincronització
|
GenericName[ca]=Directori de sincronització
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
|
Icon[cs_CZ]=@NAZEV_IKONY_APLIKACE@
|
||||||
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
GenericName[cs_CZ]=Synchronizace složek
|
GenericName[cs_CZ]=Synchronizace složek
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[cy_GB]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
|
||||||
Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
|
||||||
GenericName[cy_GB]=Cydweddu Ffolder
|
|
||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[de]=@APPLICATION_ICON_NAME@
|
Icon[de]=@APPLICATION_ICON_NAME@
|
||||||
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
||||||
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
||||||
GenericName[de]=Synchronisierungsordner
|
GenericName[de]=Synchronisationsordner
|
||||||
|
|||||||
@@ -198,7 +198,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[el]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
|
||||||
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
|
||||||
GenericName[el]=Συγχρονισμός φακέλου
|
GenericName[el]=Συγχρονισμός φακέλου
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[es_AR]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
|
||||||
Comment[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
|
||||||
GenericName[es_AR]=Sincronización de carpetas
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[et_EE]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[et_EE]=@APPLICATION_NAME@ töölaua sünkimise klient
|
|
||||||
Comment[et_EE]=@APPLICATION_NAME@ töölaua sünkroniseerimise klient
|
|
||||||
GenericName[et_EE]=Kausta Sünkroonimine
|
|
||||||
@@ -1,201 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Comment[fa]=@ APPLICATION_NAME @ مشتری هماهنگ سازی دسکتاپ
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[fi_FI]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
|
||||||
Comment[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
|
||||||
GenericName[fi_FI]=Kansio synkronointi
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[oc]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[oc]=@APPLICATION_NAME@ client de sincronizacion
|
|
||||||
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
|
|
||||||
GenericName[oc]=Sincro. dossièr
|
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[ro]=@APPLICATION_ICON_NAME@
|
Icon[ro]=@APPLICATION_ICON_NAME@
|
||||||
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||||
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||||
GenericName[ro]=Sincronizare director
|
GenericName[ro]=Sincronizare dosare
|
||||||
|
|||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
||||||
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
GenericName[sk_SK]=Synchronizácia priečinkov
|
GenericName[sk_SK]=Synchnonizácia priečinkov
|
||||||
|
|||||||
@@ -199,6 +199,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sl]=@APPLICATION_ICON_NAME@
|
Icon[sl]=@APPLICATION_ICON_NAME@
|
||||||
Name[sl]=@APPLICATION_NAME@ program za usklajevanje
|
Name[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
||||||
Comment[sl]=@APPLICATION_NAME@ program za usklajevanje
|
Comment[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
||||||
GenericName[sl]=Usklajevanje map
|
GenericName[sl]=Usklajevanje map
|
||||||
|
|||||||
@@ -199,6 +199,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sv]=@APPLICATION_ICON_NAME@
|
Icon[sv]=@APPLICATION_ICON_NAME@
|
||||||
Name[sv]=@APPLICATION_NAME@ desktopssynkklient
|
|
||||||
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
|
|
||||||
GenericName[sv]=Mappsynkronisering
|
GenericName[sv]=Mappsynkronisering
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Utility;X-SuSE-SyncUtility;
|
|
||||||
Type=Application
|
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
|
||||||
GenericName=Folder Sync
|
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
|
||||||
X-GNOME-Autostart-Delay=3
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
Icon[sw]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
|
||||||
Comment[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
|
||||||
GenericName[sw]=Fanana Kabrasha
|
|
||||||
@@ -201,4 +201,4 @@ X-GNOME-Autostart-Delay=3
|
|||||||
Icon[uk]=@APPLICATION_ICON_NAME@
|
Icon[uk]=@APPLICATION_ICON_NAME@
|
||||||
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
||||||
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
||||||
GenericName[uk]=Синхронізація тек
|
GenericName[uk]=Синхронізація каталогів
|
||||||
|
|||||||
@@ -198,7 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[zh_TW]=@APPLICATION_ICON_NAME@
|
|
||||||
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
GenericName[zh_TW]=資料夾同步
|
GenericName[zh_TW]=資料夾同步
|
||||||
|
|||||||
@@ -123,15 +123,6 @@ if(NO_MSG_HANDLER)
|
|||||||
add_definitions(-DNO_MSG_HANDLER=1)
|
add_definitions(-DNO_MSG_HANDLER=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# this option builds the updater
|
|
||||||
option(BUILD_UPDATER "BUILD_UPDATER" OFF)
|
|
||||||
if(BUILD_UPDATER)
|
|
||||||
message("Compiling with updater")
|
|
||||||
add_definitions(-DBUILD_UPDATER=1)
|
|
||||||
else()
|
|
||||||
message("Compiling without updater")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# this option builds the shell integration
|
# this option builds the shell integration
|
||||||
option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON)
|
option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON)
|
||||||
|
|
||||||
@@ -181,9 +172,9 @@ if(APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_CLIENT)
|
if(BUILD_CLIENT)
|
||||||
if(APPLE AND BUILD_UPDATER)
|
if(APPLE)
|
||||||
find_package(Sparkle)
|
find_package(Sparkle)
|
||||||
endif()
|
endif(APPLE)
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
find_package(INotify REQUIRED)
|
find_package(INotify REQUIRED)
|
||||||
@@ -212,24 +203,14 @@ if( WIN32 )
|
|||||||
add_definitions( -D__USE_MINGW_ANSI_STDIO=1 )
|
add_definitions( -D__USE_MINGW_ANSI_STDIO=1 )
|
||||||
add_definitions( -DNOMINMAX )
|
add_definitions( -DNOMINMAX )
|
||||||
# Get APIs from from Vista onwards.
|
# Get APIs from from Vista onwards.
|
||||||
add_definitions( -D_WIN32_WINNT=0x0601 )
|
add_definitions( -D_WIN32_WINNT=0x0600)
|
||||||
add_definitions( -DWINVER=0x0601 )
|
add_definitions( -DWINVER=0x0600)
|
||||||
if( MSVC )
|
|
||||||
# Use automatic overload for suitable CRT safe-functions
|
|
||||||
# See https://docs.microsoft.com/de-de/cpp/c-runtime-library/security-features-in-the-crt?view=vs-2019
|
|
||||||
add_definitions( -D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 )
|
|
||||||
# Also: Disable compiler warnings because we don't use Windows CRT safe-functions explicitly and don't intend to
|
|
||||||
# as this is a pure cross-platform source the only alternative would be a ton of ifdefs with calls to the _s version
|
|
||||||
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
|
||||||
endif( MSVC )
|
|
||||||
endif( WIN32 )
|
endif( WIN32 )
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(SanitizerFlags)
|
|
||||||
|
|
||||||
# Handle Translations, pick all client_* files from trans directory.
|
# Handle Translations, pick all client_* files from trans directory.
|
||||||
file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts)
|
file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts)
|
||||||
set(TRANSLATIONS ${TRANS_FILES})
|
set(TRANSLATIONS ${TRANS_FILES})
|
||||||
|
|||||||
124
ChangeLog
124
ChangeLog
@@ -1,127 +1,3 @@
|
|||||||
ChangeLog
|
|
||||||
====================
|
|
||||||
For details check https://nextcloud.com/blog/category/release.
|
|
||||||
|
|
||||||
2.6 Series ChangeLog
|
|
||||||
====================
|
|
||||||
|
|
||||||
version 2.6.4 (release 2020-03-04)
|
|
||||||
* Fix Explorer pinning: Add fallbacks for Shell commands (fixes #1599)
|
|
||||||
* WebFlowCredentials: Make username comparison case-insensitive (fix #1741)
|
|
||||||
* ActivityListModel: Show full date and time as a Tooltip only
|
|
||||||
* Disable HTTP/2 for now due to Qt bug, allow enabling it via env var
|
|
||||||
* Fix Explorer integration re-save and hide option on non-Windows
|
|
||||||
* l10n: Changes to improve source strings
|
|
||||||
* Updater: Add query-parameter 'updatesegment' to the update check
|
|
||||||
* Allow Desktop translation merging and custom backport branches
|
|
||||||
|
|
||||||
version 2.6.3 (release 2020-02-17)
|
|
||||||
* Add UserInfo class and fetch quota via API instead of PropfindJob
|
|
||||||
* l10n: Changed grammar and triple dots to ellipsis
|
|
||||||
* l10n: Changed spelling of "user name" to "username"
|
|
||||||
* Start the client in background if activated by D-Bus
|
|
||||||
* Do not install files related to cloud providers under Xenial
|
|
||||||
* Make sure that the libcloudprovider integration is using a valid D-Bus path
|
|
||||||
* Changed product name to Nextcloud
|
|
||||||
* Update autoupdate.rst
|
|
||||||
* Use system proxy by default if no config file is present
|
|
||||||
* Install libcloudproviders files by default on debian
|
|
||||||
* Windows 7 is out of support
|
|
||||||
* BugFix: Handle broken shared file error gracefully
|
|
||||||
* Fix Explorer integration on Windows and the crash on other systems
|
|
||||||
* Welcome to 2020
|
|
||||||
* Updated year in legalnotice.cpp
|
|
||||||
* apply http2 qt resend patch from owncloud
|
|
||||||
|
|
||||||
version 2.6.2 (release 2019-12-24)
|
|
||||||
* Revert DEFAULT_REMOTE_POLL_INTERVAL back from 5 seconds to 30 seconds
|
|
||||||
* Use user-provided username in displayName() - Fix #836
|
|
||||||
* Fix typo
|
|
||||||
* Build with libcloudproviders on debian and in the AppImage
|
|
||||||
* Fix tests for Windows platform
|
|
||||||
* Merge the list of ignored files/symlinks into one Activity notification.
|
|
||||||
* Fix clang's variadic macro warnings
|
|
||||||
* Add libdbus-1-dev to the build dependencies
|
|
||||||
* Compare QDateTime objects more efficient
|
|
||||||
* Improve the translation of "Share via …"
|
|
||||||
* Upgrade for Qt 5.12.5 in docker-ci
|
|
||||||
* Bump Qt 5.12.5 image
|
|
||||||
* Add timestamp to Mac installer code signing
|
|
||||||
* MacOS build: Avoid the Get-Task-Allow Entitlement (Notarization)
|
|
||||||
* Build for Debian stable and oldstable
|
|
||||||
* Happy new year
|
|
||||||
* Fall back to old login flow on GS as this is not yet ready
|
|
||||||
* [stable-2.6] macOS build: Avoid the Get-Task-Allow Entitlement (Notarization)
|
|
||||||
* Fix remote wipe keychain storage (issue #1592)
|
|
||||||
* Fix copyright year in MacOSXBundleInfo.plist.in for 2019
|
|
||||||
* Fix macOS GUI (Qt 5.12)
|
|
||||||
* Windows: Workaround for storing >= 4k (4096 bit) client-cert SSL keys
|
|
||||||
* Fix Activity List: Add check to avoid first empty entry
|
|
||||||
* Fix macOS GUI (Qt 5.12) No. 2 (continuation of #1651)
|
|
||||||
* Show date and time in activity log (fixes issue #1683)
|
|
||||||
* Login Flow v2 enhancements
|
|
||||||
* Activity List: Fix crash and folder opening
|
|
||||||
* Fix issue #1237: White text on almost-white background
|
|
||||||
* Heavy refactoring: Windows workaround for >= 4k (4096 bit) client-cert SSL keys and large certs
|
|
||||||
* Fix date in ActivityWidget and remove unnecessary string conversion
|
|
||||||
|
|
||||||
version 2.6.1 (release 2019-11-04)
|
|
||||||
* Changed max GUI bandwidth limits
|
|
||||||
* Add sync date next to "Synchronized with local folder"
|
|
||||||
* Slideshow buttons
|
|
||||||
* Fix qt warning about registering a URL sheme first.
|
|
||||||
* Issue #1216: added sync-exclude entry for emacs recovery files
|
|
||||||
* Race condition in the remote size loading logic
|
|
||||||
* Review of msvc/gcc warnings -> code cleanup, prevention of implicit casts, variadic macros
|
|
||||||
* Fix double slashes
|
|
||||||
* Fixing E2E CSR transmission failure for new connections
|
|
||||||
* Fixed missing 'translatable' exclusions, added missing window titles
|
|
||||||
* Checks if exclude file is empty before creating the regular expressions.
|
|
||||||
* Add server info to menu
|
|
||||||
* Fixed grammar
|
|
||||||
* Prevent jumping of tray menu
|
|
||||||
* Don't run connection wizard when quitting the application
|
|
||||||
* Avoiding copying in range-based loops
|
|
||||||
* Add a 'Content-Length: 0' header to initial POST requests
|
|
||||||
* Remote wipe.
|
|
||||||
* Pick from upstream: Update qtmacgoodies for an OSX crash fix #6930
|
|
||||||
* fix for issue no. #1351
|
|
||||||
* Merge the list of ignored files/symlinks into one Activity notification.
|
|
||||||
* Update submodules for Qt 5.12.5 (qtmacgoodies)
|
|
||||||
* Fix duplicate items in Apps menu (a bug introduced in #1477)
|
|
||||||
* Fix #1182
|
|
||||||
* Fix remote wipe when a proxy is configured.
|
|
||||||
* Fix updater message: Download link instead of "use the system's update
|
|
||||||
|
|
||||||
version 2.6.0 Login flow v2 (release 2019-09-27)
|
|
||||||
* Reinstate Debian build in the new Drone config
|
|
||||||
* Typo
|
|
||||||
* Marking unused strings as unstranslatable
|
|
||||||
* Fixes #607
|
|
||||||
* Fixes issue #878
|
|
||||||
* Fixes issue #1187
|
|
||||||
* Displays FileIgnored activities with an info icon
|
|
||||||
* Minor text change in the link to help in the tab 'General'.
|
|
||||||
* Update Qt 5.5 compatibility patch for Xenial
|
|
||||||
* Remove Ubuntu Cosmic and add Eoan package
|
|
||||||
* Add proper CA to client side certificate connection
|
|
||||||
* Remove dependency on libgnome-keyring0 on Eoan
|
|
||||||
* Read .sync_exclude.lst in each subdirectory
|
|
||||||
* Updates ChangeLog.
|
|
||||||
* Login flow v2
|
|
||||||
* Adds SSL client cert storage to webflow + Login Flow v2
|
|
||||||
* Windows: Workaround for CredWriteW used by QtKeychain
|
|
||||||
* Integrated registry check on windows when hasDarkSystray is called.
|
|
||||||
* Logo update
|
|
||||||
* Updated .gitignore to integrate unwanted files when working with VSC …
|
|
||||||
* Full-Scaled new logo in Windows 10 start menu tile
|
|
||||||
* Qt5.5 compatiblity patch for login flow V2 + UI improvement (Use newer digest algorithms in TLS error dialog)
|
|
||||||
* Fix for #1382 "linux client crashes for no discernable reason"
|
|
||||||
* UI improvement: Message box: Delete / Keep all files
|
|
||||||
* Improve wording of the context menu in the file manager extension.
|
|
||||||
* Changes wording in the share context menu.
|
|
||||||
* Fix White Window issue on Windows by upgrading to Qt 5.12.5
|
|
||||||
|
|
||||||
2.5 Series ChangeLog
|
2.5 Series ChangeLog
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE STRING
|
|||||||
set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" )
|
set( APPLICATION_HELP_URL "" CACHE STRING "URL for the help menu" )
|
||||||
set( APPLICATION_ICON_NAME "Nextcloud" )
|
set( APPLICATION_ICON_NAME "Nextcloud" )
|
||||||
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered the server can only connect to this instance" )
|
set( APPLICATION_SERVER_URL "" CACHE STRING "URL for the server to use. If entered the server can only connect to this instance" )
|
||||||
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
|
|
||||||
|
|
||||||
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
||||||
set( LINUX_APPLICATION_ID "${APPLICATION_REV_DOMAIN}.${LINUX_PACKAGE_SHORTNAME}")
|
|
||||||
|
|
||||||
set( THEME_CLASS "NextcloudTheme" )
|
set( THEME_CLASS "NextcloudTheme" )
|
||||||
|
set( APPLICATION_REV_DOMAIN "com.nextcloud.desktopclient" )
|
||||||
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
|
set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" )
|
||||||
|
|
||||||
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
|
set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-background.png" CACHE STRING "The MacOSX installer background image")
|
||||||
@@ -24,9 +23,6 @@ option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
|||||||
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" )
|
#set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE STRING "URL for crash reporter" )
|
||||||
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
||||||
|
|
||||||
## Updater options
|
|
||||||
option( BUILD_UPDATER "Build updater" OFF )
|
|
||||||
|
|
||||||
option( WITH_PROVIDERS "Build with providers list" ON )
|
option( WITH_PROVIDERS "Build with providers list" ON )
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,14 +61,14 @@ For more info: [Wiki/Daily Builds](https://github.com/nextcloud/desktop/wiki/Dai
|
|||||||
### :bomb: Reporting issues
|
### :bomb: Reporting issues
|
||||||
|
|
||||||
- If you find any bugs or have any suggestion for improvement, please
|
- If you find any bugs or have any suggestion for improvement, please
|
||||||
file an issue at https://github.com/nextcloud/desktop/issues. Do not
|
file an issue at https://github.com/nextcloud/client/issues. Do not
|
||||||
contact the authors directly by mail, as this increases the chance
|
contact the authors directly by mail, as this increases the chance
|
||||||
of your report being lost. :boom:
|
of your report being lost. :boom:
|
||||||
|
|
||||||
### :smiley: :trophy: Pull requests
|
### :smiley: :trophy: Pull requests
|
||||||
|
|
||||||
- If you created a patch :heart_eyes:, please submit a [Pull
|
- If you created a patch :heart_eyes:, please submit a [Pull
|
||||||
Request](https://github.com/nextcloud/desktop/pulls).
|
Request](https://github.com/nextcloud/client/pulls).
|
||||||
- How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
|
- How to create a pull request? This guide will help you get started: [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) :heart:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 2 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 6 )
|
set( MIRALL_VERSION_MINOR 6 )
|
||||||
set( MIRALL_VERSION_PATCH 5 )
|
set( MIRALL_VERSION_PATCH 0 )
|
||||||
set( MIRALL_VERSION_YEAR 2020 )
|
set( MIRALL_VERSION_YEAR 2019 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ RUN apt-get update -q && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --
|
|||||||
libsqlite3-dev \
|
libsqlite3-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
libcmocka-dev \
|
libcmocka-dev \
|
||||||
libcloudproviders-dev \
|
|
||||||
qt5-default \
|
qt5-default \
|
||||||
qttools5-dev-tools \
|
qttools5-dev-tools \
|
||||||
libqt5webkit5-dev \
|
libqt5webkit5-dev \
|
||||||
|
|||||||
@@ -6,26 +6,23 @@ mkdir /app
|
|||||||
mkdir /build
|
mkdir /build
|
||||||
|
|
||||||
#Set Qt-5.12
|
#Set Qt-5.12
|
||||||
export QT_BASE_DIR=/opt/qt5.12.8
|
export QT_BASE_DIR=/opt/qt512
|
||||||
export QTDIR=$QT_BASE_DIR
|
export QTDIR=$QT_BASE_DIR
|
||||||
export PATH=$QT_BASE_DIR/bin:$PATH
|
export PATH=$QT_BASE_DIR/bin:$PATH
|
||||||
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
||||||
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
|
export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
|
||||||
|
|
||||||
#Set APPID for .desktop file processing
|
|
||||||
export LINUX_APPLICATION_ID=com.nextcloud.desktopclient.nextcloud
|
|
||||||
|
|
||||||
#set defaults
|
#set defaults
|
||||||
export SUFFIX=${DRONE_PULL_REQUEST:=master}
|
export SUFFIX=${DRONE_PULL_REQUEST:=master}
|
||||||
if [ $SUFFIX != "master" ]; then
|
if [ $SUFFIX != "master" ]; then
|
||||||
SUFFIX="PR-$SUFFIX"
|
SUFFIX="PR-$SUFFIX"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#QtKeyChain master
|
#QtKeyChain 0.9.1
|
||||||
cd /build
|
cd /build
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git
|
git clone https://github.com/frankosterfeld/qtkeychain.git
|
||||||
cd qtkeychain
|
cd qtkeychain
|
||||||
git checkout master
|
git checkout v0.9.1
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
|
cmake -D CMAKE_INSTALL_PREFIX=/usr ../
|
||||||
@@ -38,7 +35,6 @@ mkdir build-client
|
|||||||
cd build-client
|
cd build-client
|
||||||
cmake -D CMAKE_INSTALL_PREFIX=/usr \
|
cmake -D CMAKE_INSTALL_PREFIX=/usr \
|
||||||
-D NO_SHIBBOLETH=1 \
|
-D NO_SHIBBOLETH=1 \
|
||||||
-D BUILD_UPDATER=ON \
|
|
||||||
-D QTKEYCHAIN_LIBRARY=/app/usr/lib/x86_64-linux-gnu/libqt5keychain.so \
|
-D QTKEYCHAIN_LIBRARY=/app/usr/lib/x86_64-linux-gnu/libqt5keychain.so \
|
||||||
-D QTKEYCHAIN_INCLUDE_DIR=/app/usr/include/qt5keychain/ \
|
-D QTKEYCHAIN_INCLUDE_DIR=/app/usr/include/qt5keychain/ \
|
||||||
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
|
-DMIRALL_VERSION_SUFFIX=PR-$DRONE_PULL_REQUEST \
|
||||||
@@ -66,12 +62,11 @@ rm -rf ./usr/share/caja-python/
|
|||||||
rm -rf ./usr/share/nautilus-python/
|
rm -rf ./usr/share/nautilus-python/
|
||||||
rm -rf ./usr/share/nemo-python/
|
rm -rf ./usr/share/nemo-python/
|
||||||
|
|
||||||
# Move sync exclude to right location
|
# Move sync exlucde to right location
|
||||||
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
|
mv ./etc/Nextcloud/sync-exclude.lst ./usr/bin/
|
||||||
rm -rf ./etc
|
rm -rf ./etc
|
||||||
|
|
||||||
DESKTOP_FILE=/app/usr/share/applications/${LINUX_APPLICATION_ID}.desktop
|
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' usr/share/applications/nextcloud.desktop # Bug in desktop file?
|
||||||
sed -i -e 's|Icon=nextcloud|Icon=Nextcloud|g' ${DESKTOP_FILE} # Bug in desktop file?
|
|
||||||
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
|
cp ./usr/share/icons/hicolor/512x512/apps/Nextcloud.png . # Workaround for linuxeployqt bug, FIXME
|
||||||
|
|
||||||
|
|
||||||
@@ -92,12 +87,17 @@ chmod a+x linuxdeployqt*.AppImage
|
|||||||
rm ./linuxdeployqt-continuous-x86_64.AppImage
|
rm ./linuxdeployqt-continuous-x86_64.AppImage
|
||||||
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
|
||||||
export LD_LIBRARY_PATH=/app/usr/lib/
|
export LD_LIBRARY_PATH=/app/usr/lib/
|
||||||
./squashfs-root/AppRun ${DESKTOP_FILE} -bundle-non-qt-libs
|
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -bundle-non-qt-libs
|
||||||
|
|
||||||
# Set origin
|
# Set origin
|
||||||
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
|
./squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/' /app/usr/lib/libnextcloudsync.so.0
|
||||||
|
|
||||||
# Build AppImage
|
# Build AppImage
|
||||||
./squashfs-root/AppRun ${DESKTOP_FILE} -appimage
|
./squashfs-root/AppRun /app/usr/share/applications/nextcloud.desktop -appimage
|
||||||
|
|
||||||
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
mv Nextcloud*.AppImage Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
||||||
|
|
||||||
|
curl --upload-file $(readlink -f ./Nextcloud*.AppImage) https://transfer.sh/Nextcloud-${SUFFIX}-${DRONE_COMMIT}-x86_64.AppImage
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Get the AppImage at the link above!"
|
||||||
|
|||||||
@@ -7,10 +7,9 @@ Build-Depends: cmake,
|
|||||||
cdbs,
|
cdbs,
|
||||||
dh-python,
|
dh-python,
|
||||||
extra-cmake-modules (>= 5.16),
|
extra-cmake-modules (>= 5.16),
|
||||||
|
kdelibs5-dev,
|
||||||
libkf5kio-dev,
|
libkf5kio-dev,
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
libcloudproviders-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
nextcloud-client (2.3.3-1.0~focal1) focal; urgency=medium
|
|
||||||
|
|
||||||
* Debian build support for the forked client.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.1-1.0~focal1) focal; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.0-1.0~focal1) focal; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.4~focal1) focal; urgency=medium
|
|
||||||
|
|
||||||
* The locale-specific icon names are correct too
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
Source: nextcloud-client
|
|
||||||
Section: contrib/devel
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
|
||||||
Build-Depends: cmake,
|
|
||||||
debhelper,
|
|
||||||
cdbs,
|
|
||||||
dh-python,
|
|
||||||
extra-cmake-modules (>= 5.16),
|
|
||||||
libkf5kio-dev,
|
|
||||||
libcmocka-dev,
|
|
||||||
libcloudproviders-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
|
||||||
libinotify-dev [kfreebsd-any],
|
|
||||||
libqt5svg5-dev,
|
|
||||||
libqt5webkit5-dev,
|
|
||||||
libsqlite3-dev,
|
|
||||||
libssl-dev (>= 1.1.0),
|
|
||||||
zlib1g-dev,
|
|
||||||
optipng,
|
|
||||||
pkg-kde-tools,
|
|
||||||
python3-sphinx,
|
|
||||||
python3-all,
|
|
||||||
qt5keychain-dev,
|
|
||||||
qtwebengine5-dev,
|
|
||||||
qtdeclarative5-dev,
|
|
||||||
qttools5-dev,
|
|
||||||
qttools5-dev-tools,
|
|
||||||
xvfb
|
|
||||||
Standards-Version: 3.9.8
|
|
||||||
Homepage: https://github.com/nextcloud/client_theming
|
|
||||||
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
|
||||||
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
|
||||||
|
|
||||||
Package: nextcloud-client
|
|
||||||
Architecture: any
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
|
||||||
Description: Nextcloud desktop sync client
|
|
||||||
Use the desktop client to keep your files synchronized
|
|
||||||
between your Nextcloud server and your desktop. Select
|
|
||||||
one or more directories on your local machine and always
|
|
||||||
have access to your latest files wherever you are.
|
|
||||||
|
|
||||||
Package: libnextcloudsync0
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library
|
|
||||||
Used by the Nextcloud desktop client as the synchronization engine.
|
|
||||||
|
|
||||||
Package: libnextcloudsync-dev
|
|
||||||
Architecture: any
|
|
||||||
Section: contrib/libdevel
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library development files
|
|
||||||
The headers and development library for the Nextcloud sync library.
|
|
||||||
|
|
||||||
Package: nextcloud-client-l10n
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}
|
|
||||||
Description: Nextcloud client internatialization files
|
|
||||||
The translation files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nautilus
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-nautilus, nautilus, ${misc:Depends}
|
|
||||||
Description: Nautilus plugin for Nextcloud
|
|
||||||
This package contains a Nautilus plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nemo
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo | nemo-python, nemo, ${misc:Depends}
|
|
||||||
Description: Nemo plugin for Nextcloud
|
|
||||||
This package contains a Nemo plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-caja
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-caja, caja, ${misc:Depends}
|
|
||||||
Description: Caja plugin for Nextcloud
|
|
||||||
This package contains a Caja plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-dolphin
|
|
||||||
Architecture: any
|
|
||||||
Depends: dolphin (>= 4:15.12.1), libnextcloudsync0 (= ${binary:Version}), nextcloud-client, ${misc:Depends}, ${shlibs:Depends}
|
|
||||||
Description: Dolphin plugin for Nextcloud
|
|
||||||
This package contains a Dolphin plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
nextcloud-client (2.3.3-1.0~groovy1) groovy; urgency=medium
|
|
||||||
|
|
||||||
* Debian build support for the forked client.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.1-1.0~groovy1) groovy; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.0-1.0~groovy1) groovy; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.4~groovy1) groovy; urgency=medium
|
|
||||||
|
|
||||||
* The locale-specific icon names are correct too
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
Source: nextcloud-client
|
|
||||||
Section: contrib/devel
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
|
||||||
Build-Depends: cmake,
|
|
||||||
debhelper,
|
|
||||||
cdbs,
|
|
||||||
dh-python,
|
|
||||||
extra-cmake-modules (>= 5.16),
|
|
||||||
libkf5kio-dev,
|
|
||||||
libcmocka-dev,
|
|
||||||
libcloudproviders-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
|
||||||
libinotify-dev [kfreebsd-any],
|
|
||||||
libqt5svg5-dev,
|
|
||||||
libqt5webkit5-dev,
|
|
||||||
libsqlite3-dev,
|
|
||||||
libssl-dev (>= 1.1.0),
|
|
||||||
zlib1g-dev,
|
|
||||||
optipng,
|
|
||||||
pkg-kde-tools,
|
|
||||||
python3-sphinx,
|
|
||||||
python3-all,
|
|
||||||
qt5keychain-dev,
|
|
||||||
qtwebengine5-dev,
|
|
||||||
qtdeclarative5-dev,
|
|
||||||
qttools5-dev,
|
|
||||||
qttools5-dev-tools,
|
|
||||||
xvfb
|
|
||||||
Standards-Version: 3.9.8
|
|
||||||
Homepage: https://github.com/nextcloud/client_theming
|
|
||||||
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
|
||||||
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
|
||||||
|
|
||||||
Package: nextcloud-client
|
|
||||||
Architecture: any
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
|
||||||
Description: Nextcloud desktop sync client
|
|
||||||
Use the desktop client to keep your files synchronized
|
|
||||||
between your Nextcloud server and your desktop. Select
|
|
||||||
one or more directories on your local machine and always
|
|
||||||
have access to your latest files wherever you are.
|
|
||||||
|
|
||||||
Package: libnextcloudsync0
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library
|
|
||||||
Used by the Nextcloud desktop client as the synchronization engine.
|
|
||||||
|
|
||||||
Package: libnextcloudsync-dev
|
|
||||||
Architecture: any
|
|
||||||
Section: contrib/libdevel
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library development files
|
|
||||||
The headers and development library for the Nextcloud sync library.
|
|
||||||
|
|
||||||
Package: nextcloud-client-l10n
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}
|
|
||||||
Description: Nextcloud client internatialization files
|
|
||||||
The translation files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nautilus
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-nautilus, nautilus, ${misc:Depends}
|
|
||||||
Description: Nautilus plugin for Nextcloud
|
|
||||||
This package contains a Nautilus plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nemo
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo | nemo-python, nemo, ${misc:Depends}
|
|
||||||
Description: Nemo plugin for Nextcloud
|
|
||||||
This package contains a Nemo plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-caja
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python3-caja, caja, ${misc:Depends}
|
|
||||||
Description: Caja plugin for Nextcloud
|
|
||||||
This package contains a Caja plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-dolphin
|
|
||||||
Architecture: any
|
|
||||||
Depends: dolphin (>= 4:15.12.1), libnextcloudsync0 (= ${binary:Version}), nextcloud-client, ${misc:Depends}, ${shlibs:Depends}
|
|
||||||
Description: Dolphin plugin for Nextcloud
|
|
||||||
This package contains a Dolphin plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
nextcloud-client (2.3.3-1.0~oldstable1) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* Debian build support for the forked client.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.1-1.0) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.3.0-1.0) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* New upstream version
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.4) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* The locale-specific icon names are correct too
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.3) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* Caja syncstate plugin is built.
|
|
||||||
* The syncstate plugin has application-specific name
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Fri, 27 Jan 2017 19:34:18 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.2) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* Fixed appname in the Nemo syncstate extension.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 19 Jan 2017 16:46:50 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.1) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* Added Nautilus and Nemo syncstate extensions.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 17 Jan 2017 19:55:32 +0100
|
|
||||||
|
|
||||||
nextcloud-client (2.2.4-1.0) oldstable; urgency=medium
|
|
||||||
|
|
||||||
* Initial release.
|
|
||||||
|
|
||||||
-- István Váradi <ivaradi@varadiistvan.hu> Wed, 14 Dec 2016 20:07:46 +0100
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
Source: nextcloud-client
|
|
||||||
Section: contrib/devel
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: István Váradi <ivaradi@varadiistvan.hu>
|
|
||||||
Build-Depends: cmake,
|
|
||||||
debhelper,
|
|
||||||
cdbs,
|
|
||||||
dh-python,
|
|
||||||
extra-cmake-modules (>= 5.16),
|
|
||||||
kdelibs5-dev,
|
|
||||||
kio-dev,
|
|
||||||
libcmocka-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
|
||||||
libinotify-dev [kfreebsd-any],
|
|
||||||
libqt5webkit5-dev,
|
|
||||||
libqt5svg5-dev,
|
|
||||||
libsqlite3-dev,
|
|
||||||
libssl-dev (>= 1.1.0),
|
|
||||||
zlib1g-dev,
|
|
||||||
optipng,
|
|
||||||
pkg-kde-tools,
|
|
||||||
python-sphinx | python3-sphinx,
|
|
||||||
python3-all,
|
|
||||||
qt5keychain-dev,
|
|
||||||
qtwebengine5-dev,
|
|
||||||
qtdeclarative5-dev,
|
|
||||||
qttools5-dev,
|
|
||||||
qttools5-dev-tools,
|
|
||||||
xvfb
|
|
||||||
Standards-Version: 3.9.8
|
|
||||||
Homepage: https://github.com/nextcloud/client_theming
|
|
||||||
#Vcs-Git: git://anonscm.debian.org/collab-maint/nextcloud-client.git
|
|
||||||
#Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/nextcloud-client.git
|
|
||||||
|
|
||||||
Package: nextcloud-client
|
|
||||||
Architecture: any
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, nextcloud-client-l10n
|
|
||||||
Recommends: libgnome-keyring0
|
|
||||||
Description: Nextcloud desktop sync client
|
|
||||||
Use the desktop client to keep your files synchronized
|
|
||||||
between your Nextcloud server and your desktop. Select
|
|
||||||
one or more directories on your local machine and always
|
|
||||||
have access to your latest files wherever you are.
|
|
||||||
|
|
||||||
Package: libnextcloudsync0
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library
|
|
||||||
Used by the Nextcloud desktop client as the synchronization engine.
|
|
||||||
|
|
||||||
Package: libnextcloudsync-dev
|
|
||||||
Architecture: any
|
|
||||||
Section: contrib/libdevel
|
|
||||||
Depends: libnextcloudsync0 (=${binary:Version}), ${misc:Depends}
|
|
||||||
Description: Nextcloud sync library development files
|
|
||||||
The headers and development library for the Nextcloud sync library.
|
|
||||||
|
|
||||||
Package: nextcloud-client-l10n
|
|
||||||
Architecture: all
|
|
||||||
Depends: ${misc:Depends}
|
|
||||||
Description: Nextcloud client internatialization files
|
|
||||||
The translation files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nautilus
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nautilus, nautilus, ${misc:Depends}
|
|
||||||
Description: Nautilus plugin for Nextcloud
|
|
||||||
This package contains a Nautilus plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-nemo
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-nemo, nemo, ${misc:Depends}
|
|
||||||
Description: Nemo plugin for Nextcloud
|
|
||||||
This package contains a Nemo plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
|
|
||||||
Package: nextcloud-client-caja
|
|
||||||
Architecture: all
|
|
||||||
Depends: nextcloud-client (>=${binary:Version}), libnextcloudsync0, python-caja, caja, ${misc:Depends}
|
|
||||||
Description: Caja plugin for Nextcloud
|
|
||||||
This package contains a Caja plugin to display
|
|
||||||
synchronization status icons for Nextcloud files.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/share/applications
|
|
||||||
usr/share/icons
|
|
||||||
debian/101-sync-inotify.conf etc/sysctl.d
|
|
||||||
@@ -9,10 +9,7 @@ Build-Depends: cmake,
|
|||||||
extra-cmake-modules (>= 5.16),
|
extra-cmake-modules (>= 5.16),
|
||||||
kdelibs5-dev,
|
kdelibs5-dev,
|
||||||
kio-dev,
|
kio-dev,
|
||||||
libavcodec58,
|
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
libcloudproviders-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5webkit5-dev,
|
libqt5webkit5-dev,
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
usr/share/applications
|
|
||||||
usr/share/icons
|
|
||||||
debian/101-sync-inotify.conf etc/sysctl.d
|
|
||||||
@@ -10,8 +10,6 @@ Build-Depends: cmake,
|
|||||||
kdelibs5-dev,
|
kdelibs5-dev,
|
||||||
libkf5kio-dev,
|
libkf5kio-dev,
|
||||||
libcmocka-dev,
|
libcmocka-dev,
|
||||||
libcloudproviders-dev,
|
|
||||||
libdbus-1-dev,
|
|
||||||
libhttp-dav-perl,
|
libhttp-dav-perl,
|
||||||
libinotify-dev [kfreebsd-any],
|
libinotify-dev [kfreebsd-any],
|
||||||
libqt5svg5-dev,
|
libqt5svg5-dev,
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
usr/bin
|
usr/bin
|
||||||
usr/share/applications
|
usr/share/applications
|
||||||
usr/share/cloud-providers/
|
|
||||||
usr/share/dbus-1/services/
|
|
||||||
usr/share/icons
|
usr/share/icons
|
||||||
debian/101-sync-inotify.conf etc/sysctl.d
|
debian/101-sync-inotify.conf etc/sysctl.d
|
||||||
|
|||||||
@@ -3,19 +3,12 @@
|
|||||||
set -xe
|
set -xe
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
env
|
|
||||||
|
|
||||||
PPA=ppa:nextcloud-devs/client
|
PPA=ppa:nextcloud-devs/client
|
||||||
PPA_ALPHA=ppa:nextcloud-devs/client-alpha
|
|
||||||
PPA_BETA=ppa:nextcloud-devs/client-beta
|
PPA_BETA=ppa:nextcloud-devs/client-beta
|
||||||
|
|
||||||
OBS_PROJECT=home:ivaradi
|
OBS_PROJECT=home:ivaradi
|
||||||
OBS_PROJECT_ALPHA=home:ivaradi:alpha
|
|
||||||
OBS_PROJECT_BETA=home:ivaradi:beta
|
OBS_PROJECT_BETA=home:ivaradi:beta
|
||||||
OBS_PACKAGE=nextcloud-desktop
|
OBS_PACKAGE=nextcloud-client
|
||||||
|
|
||||||
UBUNTU_DISTRIBUTIONS="xenial bionic eoan focal groovy"
|
|
||||||
DEBIAN_DISTRIBUTIONS="buster stretch"
|
|
||||||
|
|
||||||
pull_request=${DRONE_PULL_REQUEST:=master}
|
pull_request=${DRONE_PULL_REQUEST:=master}
|
||||||
|
|
||||||
@@ -38,15 +31,13 @@ fi
|
|||||||
set -x
|
set -x
|
||||||
|
|
||||||
cd "${DRONE_WORKSPACE}"
|
cd "${DRONE_WORKSPACE}"
|
||||||
read basever revdate kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog stable)
|
read basever kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog stable)
|
||||||
|
|
||||||
cd "${DRONE_DIR}"
|
cd "${DRONE_DIR}"
|
||||||
|
|
||||||
echo "$kind" > kind
|
echo "$kind" > kind
|
||||||
|
|
||||||
if test "$kind" = "alpha"; then
|
if test "$kind" = "beta"; then
|
||||||
repo=nextcloud-devs/client-alpha
|
|
||||||
elif test "$kind" = "beta"; then
|
|
||||||
repo=nextcloud-devs/client-beta
|
repo=nextcloud-devs/client-beta
|
||||||
else
|
else
|
||||||
repo=nextcloud-devs/client
|
repo=nextcloud-devs/client
|
||||||
@@ -54,80 +45,79 @@ fi
|
|||||||
|
|
||||||
origsourceopt=""
|
origsourceopt=""
|
||||||
|
|
||||||
cp -a ${DRONE_WORKSPACE} nextcloud-desktop_${basever}-${revdate}
|
if ! wget http://ppa.launchpad.net/${repo}/ubuntu/pool/main/n/nextcloud-client/nextcloud-client_${basever}.orig.tar.bz2; then
|
||||||
tar cjf nextcloud-desktop_${basever}-${revdate}.orig.tar.bz2 --exclude .git --exclude binary nextcloud-desktop_${basever}-${revdate}
|
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
||||||
|
tar cjf nextcloud-client_${basever}.orig.tar.bz2 --exclude .git nextcloud-client_${basever}
|
||||||
|
origsourceopt="-sa"
|
||||||
|
fi
|
||||||
|
|
||||||
cd "${DRONE_WORKSPACE}"
|
for distribution in xenial bionic disco eoan stable; do
|
||||||
git config --global user.email "drone@noemail.invalid"
|
rm -rf nextcloud-client_${basever}
|
||||||
git config --global user.name "Drone User"
|
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
||||||
|
|
||||||
for distribution in ${UBUNTU_DISTRIBUTIONS} ${DEBIAN_DISTRIBUTIONS}; do
|
cd nextcloud-client_${basever}
|
||||||
git checkout -- .
|
|
||||||
git clean -xdf
|
|
||||||
|
|
||||||
git fetch origin debian/dist/${distribution}/${DRONE_TARGET_BRANCH}
|
cp -a admin/linux/debian/debian .
|
||||||
git checkout origin/debian/dist/${distribution}/${DRONE_TARGET_BRANCH}
|
if test -d admin/linux/debian/debian.${distribution}; then
|
||||||
|
tar cf - -C admin/linux/debian/debian.${distribution} . | tar xf - -C debian
|
||||||
|
fi
|
||||||
|
|
||||||
git merge ${DRONE_COMMIT}
|
admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog ${distribution}
|
||||||
|
cp /tmp/tmpchangelog debian/changelog
|
||||||
|
if test -f admin/linux/debian/debian.${distribution}/changelog; then
|
||||||
|
cat admin/linux/debian/debian.${distribution}/changelog >> debian/changelog
|
||||||
|
else
|
||||||
|
cat admin/linux/debian/debian/changelog >> debian/changelog
|
||||||
|
fi
|
||||||
|
|
||||||
admin/linux/debian/scripts/git2changelog.py /tmp/tmpchangelog ${distribution} ${revdate}
|
for p in debian/post-patches/*.patch; do
|
||||||
cat /tmp/tmpchangelog debian/changelog > debian/changelog.new
|
if test -f "${p}"; then
|
||||||
mv debian/changelog.new debian/changelog
|
echo "Applying ${p}"
|
||||||
|
patch -p1 < "${p}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
fullver=`head -1 debian/changelog | sed "s:nextcloud-desktop (\([^)]*\)).*:\1:"`
|
fullver=`head -1 debian/changelog | sed "s:nextcloud-client (\([^)]*\)).*:\1:"`
|
||||||
|
|
||||||
EDITOR=true dpkg-source --commit . local-changes
|
EDITOR=true dpkg-source --commit . local-changes
|
||||||
|
|
||||||
dpkg-source --build .
|
dpkg-source --build .
|
||||||
dpkg-genchanges -S -sa > "../nextcloud-desktop_${fullver}_source.changes"
|
dpkg-genchanges -S ${origsourceopt} > "../nextcloud-client_${fullver}_source.changes"
|
||||||
|
|
||||||
if test -f ~/.has_ppa_keys; then
|
if test -f ~/.has_ppa_keys; then
|
||||||
debsign -k7D14AA7B -S
|
debsign -k7D14AA7B -S
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
cd ..
|
||||||
done
|
done
|
||||||
cd ..
|
|
||||||
ls -al
|
|
||||||
|
|
||||||
if test "${pull_request}" = "master"; then
|
if test "${pull_request}" = "master"; then
|
||||||
if test "$kind" = "alpha"; then
|
kind=`cat kind`
|
||||||
PPA=$PPA_ALPHA
|
|
||||||
OBS_PROJECT=$OBS_PROJECT_ALPHA
|
if test "$kind" = "beta"; then
|
||||||
elif test "$kind" = "beta"; then
|
|
||||||
PPA=$PPA_BETA
|
PPA=$PPA_BETA
|
||||||
OBS_PROJECT=$OBS_PROJECT_BETA
|
OBS_PROJECT=$OBS_PROJECT_BETA
|
||||||
fi
|
fi
|
||||||
|
OBS_SUBDIR="${OBS_PROJECT}/${OBS_PACKAGE}"
|
||||||
|
|
||||||
if test -f ~/.has_ppa_keys; then
|
if test -f ~/.has_ppa_keys; then
|
||||||
for distribution in ${UBUNTU_DISTRIBUTIONS}; do
|
for changes in nextcloud-client_*~+([a-z])1_source.changes; do
|
||||||
changes=$(ls -1 nextcloud-desktop_*~${distribution}1_source.changes)
|
dput $PPA $changes > /dev/null
|
||||||
if test -f "${changes}"; then
|
|
||||||
dput $PPA "${changes}" > /dev/null
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
for distribution in ${DEBIAN_DISTRIBUTIONS}; do
|
mkdir osc
|
||||||
pkgsuffix=".${distribution}"
|
cd osc
|
||||||
pkgvertag="~${distribution}1"
|
osc co ${OBS_PROJECT} ${OBS_PACKAGE}
|
||||||
|
if test "$(ls ${OBS_SUBDIR})"; then
|
||||||
|
osc delete ${OBS_SUBDIR}/*
|
||||||
|
fi
|
||||||
|
cp ../nextcloud-client*.orig.tar.* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[0-9.][0-9].dsc ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[0-9.][0-9].debian.tar* ${OBS_SUBDIR}/
|
||||||
|
cp ../nextcloud-client_*[0-9.][0-9]_source.changes ${OBS_SUBDIR}/
|
||||||
|
osc add ${OBS_SUBDIR}/*
|
||||||
|
|
||||||
package="${OBS_PACKAGE}${pkgsuffix}"
|
cd ${OBS_SUBDIR}
|
||||||
OBS_SUBDIR="${OBS_PROJECT}/${package}"
|
osc commit -m "Travis update"
|
||||||
|
|
||||||
mkdir -p osc
|
|
||||||
pushd osc
|
|
||||||
osc co ${OBS_PROJECT} ${package}
|
|
||||||
if test "$(ls ${OBS_SUBDIR})"; then
|
|
||||||
osc delete ${OBS_SUBDIR}/*
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp ../nextcloud-desktop*.orig.tar.* ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}.dsc ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}.debian.tar* ${OBS_SUBDIR}/
|
|
||||||
cp ../nextcloud-desktop_*[0-9.][0-9]${pkgvertag}_source.changes ${OBS_SUBDIR}/
|
|
||||||
osc add ${OBS_SUBDIR}/*
|
|
||||||
|
|
||||||
cd ${OBS_SUBDIR}
|
|
||||||
osc commit -m "Travis update"
|
|
||||||
popd
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -6,7 +6,3 @@
|
|||||||
[versionhack]
|
[versionhack]
|
||||||
commit = bc7e65b39552ac458b2adacf76cbf98735ec29a0
|
commit = bc7e65b39552ac458b2adacf76cbf98735ec29a0
|
||||||
tag = v2.4.0-beta
|
tag = v2.4.0-beta
|
||||||
|
|
||||||
[base]
|
|
||||||
commit = b45f5fd1a947dc21eb11c69049a99616a2ec950e
|
|
||||||
version = 2.6.4
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
#!//usr/bin/env python2.7
|
#!//usr/bin/env python2.7
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
@@ -8,11 +7,6 @@ import datetime
|
|||||||
import os
|
import os
|
||||||
import ConfigParser
|
import ConfigParser
|
||||||
|
|
||||||
try:
|
|
||||||
long
|
|
||||||
except NameError:
|
|
||||||
long = int
|
|
||||||
|
|
||||||
distribution="yakkety"
|
distribution="yakkety"
|
||||||
|
|
||||||
versionTagRE = re.compile("^v([0-9]+((\.[0-9]+)+))(-(.+))?$")
|
versionTagRE = re.compile("^v([0-9]+((\.[0-9]+)+))(-(.+))?$")
|
||||||
@@ -28,37 +22,39 @@ def getCommitVersion(commit):
|
|||||||
major=None
|
major=None
|
||||||
minor=None
|
minor=None
|
||||||
patch=None
|
patch=None
|
||||||
try:
|
for line in subprocess.check_output(["git", "show",
|
||||||
for line in subprocess.check_output(["git", "show",
|
commit + ":VERSION.cmake"]).splitlines():
|
||||||
commit + ":VERSION.cmake"]).splitlines():
|
m = re.match("set\( MIRALL_VERSION_([A-Z]+) +([0-9])+ *\)", line)
|
||||||
m = re.match("set\( MIRALL_VERSION_([A-Z]+) +([0-9])+ *\)", line)
|
if m is not None:
|
||||||
if m is not None:
|
kind=m.group(1)
|
||||||
kind=m.group(1)
|
version=m.group(2)
|
||||||
version=m.group(2)
|
if kind=="MAJOR":
|
||||||
if kind=="MAJOR":
|
major=version
|
||||||
major=version
|
elif kind=="MINOR":
|
||||||
elif kind=="MINOR":
|
minor=version
|
||||||
minor=version
|
elif kind=="PATCH":
|
||||||
elif kind=="PATCH":
|
patch=version
|
||||||
patch=version
|
if major and minor and patch:
|
||||||
if major and minor and patch:
|
return major + "." + minor + "." + patch
|
||||||
return major + "." + minor + "." + patch
|
else:
|
||||||
else:
|
|
||||||
return None
|
|
||||||
except:
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def collectEntries(baseCommit, baseVersion, kind, finalRevDate, config):
|
def collectEntries(baseCommit, baseVersion, kind):
|
||||||
|
scriptdir = os.path.dirname(__file__)
|
||||||
|
configPath = os.path.join(scriptdir, "git2changelog.cfg")
|
||||||
|
|
||||||
newVersionCommit = None
|
newVersionCommit = None
|
||||||
newVersionTag = None
|
newVersionTag = None
|
||||||
newVersionOrigTag = None
|
newVersionOrigTag = None
|
||||||
|
|
||||||
if config is not None and config.has_section("versionhack"):
|
if os.path.exists(configPath):
|
||||||
if config.has_option("versionhack", "commit") and \
|
config = ConfigParser.SafeConfigParser()
|
||||||
config.has_option("versionhack", "tag"):
|
config.read(configPath)
|
||||||
newVersionCommit = config.get("versionhack", "commit")
|
if config.has_section("versionhack"):
|
||||||
newVersionTag = config.get("versionhack", "tag")
|
if config.has_option("versionhack", "commit") and \
|
||||||
|
config.has_option("versionhack", "tag"):
|
||||||
|
newVersionCommit = config.get("versionhack", "commit")
|
||||||
|
newVersionTag = config.get("versionhack", "tag")
|
||||||
|
|
||||||
entries = []
|
entries = []
|
||||||
|
|
||||||
@@ -77,11 +73,9 @@ def collectEntries(baseCommit, baseVersion, kind, finalRevDate, config):
|
|||||||
words = line.split("\t")
|
words = line.split("\t")
|
||||||
(commit, name, email, date, revdate) = words[0:5]
|
(commit, name, email, date, revdate) = words[0:5]
|
||||||
subject = "\t".join(words[5:])
|
subject = "\t".join(words[5:])
|
||||||
|
|
||||||
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
||||||
revdate += "." + commit
|
|
||||||
|
|
||||||
kind = "alpha"
|
kind = "beta"
|
||||||
|
|
||||||
if commit==newVersionCommit:
|
if commit==newVersionCommit:
|
||||||
result = processVersionTag(newVersionTag)
|
result = processVersionTag(newVersionTag)
|
||||||
@@ -113,63 +107,38 @@ def collectEntries(baseCommit, baseVersion, kind, finalRevDate, config):
|
|||||||
entries.append((commit, name, email, date, revdate, subject,
|
entries.append((commit, name, email, date, revdate, subject,
|
||||||
baseVersion, kind))
|
baseVersion, kind))
|
||||||
|
|
||||||
if entries:
|
|
||||||
(commit, name, email, date, revdate, subject, baseVersion, kind) = entries[-1]
|
|
||||||
if finalRevDate is None:
|
|
||||||
revdate = datetime.datetime.now().strftime("%Y%m%d.%H%M%S")+ "." + commit
|
|
||||||
else:
|
|
||||||
revdate = finalRevDate
|
|
||||||
entries[-1] = (commit, name, email, date, revdate, subject, baseVersion, kind)
|
|
||||||
|
|
||||||
entries.reverse()
|
entries.reverse()
|
||||||
|
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
def genChangeLogEntries(f, entries, distribution):
|
def genChangeLogEntries(f, entries, distribution):
|
||||||
latestBaseVersion = None
|
latestBaseVersion = None
|
||||||
latestRevDate = None
|
|
||||||
latestKind = None
|
latestKind = None
|
||||||
for (commit, name, email, date, revdate, subject, baseVersion, kind) in entries:
|
for (commit, name, email, date, revdate, subject, baseVersion, kind) in entries:
|
||||||
if latestBaseVersion is None:
|
if latestBaseVersion is None:
|
||||||
latestBaseVersion = baseVersion
|
latestBaseVersion = baseVersion
|
||||||
latestRevDate = revdate
|
|
||||||
latestKind = kind
|
latestKind = kind
|
||||||
upstreamVersion = baseVersion + "-" + revdate
|
upstreamVersion = baseVersion + "-" + revdate
|
||||||
if distribution=="stable":
|
if distribution=="stable":
|
||||||
version = upstreamVersion
|
version = upstreamVersion
|
||||||
else:
|
else:
|
||||||
version = upstreamVersion + "-1.0~" + distribution + "1"
|
version = upstreamVersion + "~" + distribution + "1"
|
||||||
print("nextcloud-desktop (%s) %s; urgency=medium" % (version, distribution), file=f)
|
print >> f, "nextcloud-client (%s) %s; urgency=medium" % (version, distribution)
|
||||||
print(file=f)
|
print >> f
|
||||||
print(" * " + subject, file=f)
|
print >> f, " * " + subject
|
||||||
print(file=f)
|
print >> f
|
||||||
print(" -- %s <%s> %s" % (name, email, date), file=f)
|
print >> f, " -- %s <%s> %s" % (name, email, date)
|
||||||
print(file=f)
|
print >> f
|
||||||
return (latestBaseVersion, latestRevDate, latestKind)
|
return (latestBaseVersion, latestKind)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
scriptdir = os.path.dirname(__file__)
|
|
||||||
configPath = os.path.join(scriptdir, "git2changelog.cfg")
|
|
||||||
|
|
||||||
baseCommit = "f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1"
|
|
||||||
baseVersion = "2.4.0"
|
|
||||||
|
|
||||||
config = None
|
|
||||||
if os.path.exists(configPath):
|
|
||||||
config = ConfigParser.SafeConfigParser()
|
|
||||||
config.read(configPath)
|
|
||||||
|
|
||||||
if config.has_section("base"):
|
|
||||||
if config.has_option("base", "commit") and \
|
|
||||||
config.has_option("base", "version"):
|
|
||||||
baseCommit = config.get("base", "commit")
|
|
||||||
baseVersion = config.get("base", "version")
|
|
||||||
|
|
||||||
distribution = sys.argv[2]
|
distribution = sys.argv[2]
|
||||||
finalRevDate = sys.argv[3] if len(sys.argv)>3 else None
|
|
||||||
|
|
||||||
entries = collectEntries(baseCommit, baseVersion, "alpha", finalRevDate, config)
|
#entries = collectEntries("8aade24147b5313f8241a8b42331442b7f40eef9", "2.2.4", "release")
|
||||||
|
entries = collectEntries("f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1", "2.4.0", "beta")
|
||||||
|
|
||||||
|
|
||||||
with open(sys.argv[1], "wt") as f:
|
with open(sys.argv[1], "wt") as f:
|
||||||
(baseVersion, revdate, kind) = genChangeLogEntries(f, entries, distribution)
|
(baseVersion, kind) = genChangeLogEntries(f, entries, distribution)
|
||||||
print(baseVersion, revdate, kind)
|
print baseVersion, kind
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
set -xe
|
|
||||||
|
|
||||||
cd /build
|
|
||||||
|
|
||||||
# Upload AppImage
|
|
||||||
APPIMAGE=$(readlink -f ./Nextcloud*.AppImage)
|
|
||||||
BASENAME=$(basename ${APPIMAGE})
|
|
||||||
|
|
||||||
if curl --max-time 900 --upload-file ${APPIMAGE} https://transfer.sh/${BASENAME}
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
echo "Get the AppImage at the link above!"
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
echo "Upload failed, however this is an optional step."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Don't let the Drone build fail
|
|
||||||
exit 0
|
|
||||||
@@ -49,7 +49,7 @@ fi
|
|||||||
if [ ! -z "$identity" ]; then
|
if [ ! -z "$identity" ]; then
|
||||||
echo "Will try to sign the installer"
|
echo "Will try to sign the installer"
|
||||||
pushd $install_path
|
pushd $install_path
|
||||||
productsign --timestamp --sign "$identity" "$installer_file" "$installer_file.new"
|
productsign --sign "$identity" "$installer_file" "$installer_file.new"
|
||||||
mv "$installer_file".new "$installer_file"
|
mv "$installer_file".new "$installer_file"
|
||||||
popd
|
popd
|
||||||
else
|
else
|
||||||
|
|||||||
364
admin/osx/macdeployqt.py
Executable file
364
admin/osx/macdeployqt.py
Executable file
@@ -0,0 +1,364 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
# This file is part of ownCloud.
|
||||||
|
# It was inspired in large part by the macdeploy script in Clementine
|
||||||
|
# and Tomahawk
|
||||||
|
#
|
||||||
|
# ownCloud 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.
|
||||||
|
#
|
||||||
|
# ownCLoud 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 ownCloud. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import commands
|
||||||
|
import sys
|
||||||
|
from glob import glob
|
||||||
|
from distutils.version import LooseVersion
|
||||||
|
|
||||||
|
def QueryQMake(attrib):
|
||||||
|
return subprocess.check_output([qmake_path, '-query', attrib]).rstrip('\n')
|
||||||
|
|
||||||
|
FRAMEWORK_SEARCH_PATH=[
|
||||||
|
'/Library/Frameworks',
|
||||||
|
os.path.join(os.environ['HOME'], 'Library/Frameworks')
|
||||||
|
]
|
||||||
|
|
||||||
|
LIBRARY_SEARCH_PATH=['/usr/local/lib', '/usr/local/Qt-5.6.2/lib', '.']
|
||||||
|
|
||||||
|
QT_PLUGINS = [
|
||||||
|
'sqldrivers/libqsqlite.dylib',
|
||||||
|
'platforms/libqcocoa.dylib',
|
||||||
|
'imageformats/libqgif.dylib',
|
||||||
|
'imageformats/libqico.dylib',
|
||||||
|
'imageformats/libqjpeg.dylib',
|
||||||
|
'imageformats/libqsvg.dylib',
|
||||||
|
]
|
||||||
|
|
||||||
|
QT_PLUGINS_SEARCH_PATH=[
|
||||||
|
# os.path.join(os.environ['QTDIR'], 'plugins'),
|
||||||
|
# '/usr/local/Cellar/qt/5.2.1/plugins',
|
||||||
|
'/usr/local/Qt-5.6.2/plugins',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotFindQtPluginErrorFindFrameworkError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class InstallNameToolError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotFindQtPluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CouldNotFindScriptPluginError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class CouldNotFindFrameworkError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
print 'Usage: %s <bundle.app> <path-to-qmake>' % sys.argv[0]
|
||||||
|
exit()
|
||||||
|
|
||||||
|
def is_exe(fpath):
|
||||||
|
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
|
||||||
|
|
||||||
|
bundle_dir = sys.argv[1]
|
||||||
|
qmake_path = sys.argv[2]
|
||||||
|
|
||||||
|
bundle_name = os.path.basename(bundle_dir).split('.')[0]
|
||||||
|
|
||||||
|
commands = []
|
||||||
|
|
||||||
|
binary_dir = os.path.join(bundle_dir, 'Contents', 'MacOS')
|
||||||
|
frameworks_dir = os.path.join(bundle_dir, 'Contents', 'Frameworks')
|
||||||
|
commands.append(['mkdir', '-p', frameworks_dir])
|
||||||
|
resources_dir = os.path.join(bundle_dir, 'Contents', 'Resources')
|
||||||
|
commands.append(['mkdir', '-p', resources_dir])
|
||||||
|
plugins_dir = os.path.join(bundle_dir, 'Contents', 'PlugIns')
|
||||||
|
binaries = [i for i in glob(os.path.join(bundle_dir, 'Contents', 'MacOS', "*")) if is_exe(i)];
|
||||||
|
|
||||||
|
qt_version = QueryQMake('QT_VERSION')
|
||||||
|
print "Using Qt", qt_version
|
||||||
|
|
||||||
|
fixed_libraries = []
|
||||||
|
fixed_frameworks = []
|
||||||
|
|
||||||
|
def WriteQtConf():
|
||||||
|
print "Writing qt.conf..."
|
||||||
|
with open(os.path.join(resources_dir, 'qt.conf'), 'w') as f:
|
||||||
|
f.write("[Paths]\nPlugins = PlugIns\n");
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def GetBrokenLibraries(binary):
|
||||||
|
#print "Checking libs for binary: %s" % binary
|
||||||
|
output = subprocess.Popen(['otool', '-L', binary], stdout=subprocess.PIPE).communicate()[0]
|
||||||
|
broken_libs = {
|
||||||
|
'frameworks': [],
|
||||||
|
'libs': []}
|
||||||
|
for line in [x.split(' ')[0].lstrip() for x in output.split('\n')[1:]]:
|
||||||
|
#print "Checking line: %s" % line
|
||||||
|
if not line: # skip empty lines
|
||||||
|
continue
|
||||||
|
if os.path.basename(binary) == os.path.basename(line):
|
||||||
|
#print "mnope %s-%s" % (os.path.basename(binary), os.path.basename(line))
|
||||||
|
continue
|
||||||
|
if re.match(r'^\s*/System/', line):
|
||||||
|
continue # System framework
|
||||||
|
elif re.match(r'^\s*/usr/lib/', line):
|
||||||
|
#print "unix style system lib"
|
||||||
|
continue # unix style system library
|
||||||
|
elif re.match(r'Breakpad', line):
|
||||||
|
continue # Manually added by cmake.
|
||||||
|
elif re.match(r'^\s*@executable_path', line) or re.match(r'^\s*@loader_path', line):
|
||||||
|
# Potentially already fixed library
|
||||||
|
if '.framework' in line:
|
||||||
|
relative_path = os.path.join(*line.split('/')[3:])
|
||||||
|
if not os.path.exists(os.path.join(frameworks_dir, relative_path)):
|
||||||
|
broken_libs['frameworks'].append(relative_path)
|
||||||
|
else:
|
||||||
|
relative_path = os.path.join(*line.split('/')[1:])
|
||||||
|
#print "RELPATH %s %s" % (relative_path, os.path.join(binary_dir, relative_path))
|
||||||
|
if not os.path.exists(os.path.join(binary_dir, relative_path)):
|
||||||
|
broken_libs['libs'].append(relative_path)
|
||||||
|
elif re.search(r'\w+\.framework', line):
|
||||||
|
broken_libs['frameworks'].append(line)
|
||||||
|
else:
|
||||||
|
broken_libs['libs'].append(line)
|
||||||
|
|
||||||
|
return broken_libs
|
||||||
|
|
||||||
|
def FindFramework(path):
|
||||||
|
search_pathes = FRAMEWORK_SEARCH_PATH
|
||||||
|
search_pathes.insert(0, QueryQMake('QT_INSTALL_LIBS'))
|
||||||
|
for search_path in search_pathes:
|
||||||
|
# The following two lines are needed for a custom built Qt from version 5.5 on, possibly not for the one from the Qt SDK.
|
||||||
|
# Looks like the upstream macdeployqt also had an issue there https://bugreports.qt.io/browse/QTBUG-47868
|
||||||
|
if path.find( "\@rpath/"):
|
||||||
|
path = path.replace("@rpath/", "")
|
||||||
|
abs_path = os.path.join(search_path, path)
|
||||||
|
if os.path.exists(abs_path):
|
||||||
|
return abs_path
|
||||||
|
|
||||||
|
raise CouldNotFindFrameworkError(path)
|
||||||
|
|
||||||
|
def FindLibrary(path):
|
||||||
|
if os.path.exists(path):
|
||||||
|
return path
|
||||||
|
search_pathes = LIBRARY_SEARCH_PATH
|
||||||
|
search_pathes.insert(0, QueryQMake('QT_INSTALL_LIBS'))
|
||||||
|
for search_path in search_pathes:
|
||||||
|
abs_path = os.path.join(search_path, path)
|
||||||
|
if os.path.exists(abs_path):
|
||||||
|
return abs_path
|
||||||
|
else: # try harder---look for lib name in library folders
|
||||||
|
newpath = os.path.join(search_path,os.path.basename(path))
|
||||||
|
if os.path.exists(newpath):
|
||||||
|
return newpath
|
||||||
|
|
||||||
|
return ""
|
||||||
|
#raise CouldNotFindFrameworkError(path)
|
||||||
|
|
||||||
|
def FixAllLibraries(broken_libs):
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFramework(framework)
|
||||||
|
for lib in broken_libs['libs']:
|
||||||
|
FixLibrary(lib)
|
||||||
|
|
||||||
|
def FixFramework(path):
|
||||||
|
if path in fixed_libraries:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
fixed_libraries.append(path)
|
||||||
|
abs_path = FindFramework(path)
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyFramework(abs_path)
|
||||||
|
id = os.sep.join(new_path.split(os.sep)[3:])
|
||||||
|
FixFrameworkId(new_path, id)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
def FixLibrary(path):
|
||||||
|
if path in fixed_libraries or FindSystemLibrary(os.path.basename(path)) is not None:
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
fixed_libraries.append(path)
|
||||||
|
abs_path = FindLibrary(path)
|
||||||
|
if abs_path == "":
|
||||||
|
print "Could not resolve %s, not fixing!" % path
|
||||||
|
return
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyLibrary(abs_path)
|
||||||
|
FixLibraryId(new_path)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
def FixPlugin(abs_path, subdir):
|
||||||
|
broken_libs = GetBrokenLibraries(abs_path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
|
||||||
|
new_path = CopyPlugin(abs_path, subdir)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, new_path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, new_path)
|
||||||
|
|
||||||
|
def FixBinary(path):
|
||||||
|
broken_libs = GetBrokenLibraries(path)
|
||||||
|
FixAllLibraries(broken_libs)
|
||||||
|
for framework in broken_libs['frameworks']:
|
||||||
|
FixFrameworkInstallPath(framework, path)
|
||||||
|
for library in broken_libs['libs']:
|
||||||
|
FixLibraryInstallPath(library, path)
|
||||||
|
|
||||||
|
def CopyLibrary(path):
|
||||||
|
new_path = os.path.join(binary_dir, os.path.basename(path))
|
||||||
|
args = ['ditto', '--arch=x86_64', path, new_path]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['chmod', 'u+w', new_path]
|
||||||
|
commands.append(args)
|
||||||
|
return new_path
|
||||||
|
|
||||||
|
def CopyPlugin(path, subdir):
|
||||||
|
new_path = os.path.join(plugins_dir, subdir, os.path.basename(path))
|
||||||
|
args = ['mkdir', '-p', os.path.dirname(new_path)]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ditto', '--arch=x86_64', path, new_path]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['chmod', 'u+w', new_path]
|
||||||
|
commands.append(args)
|
||||||
|
return new_path
|
||||||
|
|
||||||
|
def CopyFramework(source_dylib):
|
||||||
|
parts = source_dylib.split(os.sep)
|
||||||
|
print "CopyFramework:", source_dylib
|
||||||
|
for i, part in enumerate(parts):
|
||||||
|
matchObj = re.match(r'(\w+\.framework)', part)
|
||||||
|
if matchObj:
|
||||||
|
framework = matchObj.group(1)
|
||||||
|
dylib_name = parts[-1]
|
||||||
|
source_path = os.path.join('/', *parts[:i+1])
|
||||||
|
dest_path = os.path.join(frameworks_dir, framework)
|
||||||
|
dest_dylib_path = os.path.join(frameworks_dir, *parts[i:-1])
|
||||||
|
break
|
||||||
|
# if os.path.exists(dest_path):
|
||||||
|
# print dest_path, "already exists, skipping copy..."
|
||||||
|
# return os.path.join(dest_dylib_path, dylib_name)
|
||||||
|
|
||||||
|
args = ['mkdir', '-p', dest_dylib_path]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ditto', '--arch=x86_64', source_dylib, dest_dylib_path]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['chmod', 'u+w', os.path.join(dest_dylib_path, parts[-1])]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ln', '-s', '5', os.path.join(dest_path, 'Versions', 'Current')]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ln', '-s', os.path.join('Versions', 'Current', dylib_name), os.path.join(dest_path, dylib_name)]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ln', '-s', os.path.join('Versions', 'Current', 'Resources'), os.path.join(dest_path, 'Resources')]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['cp', '-r', os.path.join(source_path, 'Versions', '5', 'Resources'), os.path.join(dest_path, 'Versions', '5')]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['ln', '-s', os.path.join('Versions', 'Current', 'Helpers'), os.path.join(dest_path, 'Helpers')]
|
||||||
|
commands.append(args)
|
||||||
|
args = ['cp', '-r', os.path.join(source_path, 'Versions', '5', 'Helpers'), os.path.join(dest_path, 'Versions', '5')]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
return os.path.join(dest_dylib_path, dylib_name)
|
||||||
|
|
||||||
|
def FixId(path, library_name):
|
||||||
|
id = '@executable_path/../Frameworks/%s' % library_name
|
||||||
|
args = ['install_name_tool', '-id', id, path]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
def FixLibraryId(path):
|
||||||
|
library_name = os.path.basename(path)
|
||||||
|
FixId(path, library_name)
|
||||||
|
|
||||||
|
def FixFrameworkId(path, id):
|
||||||
|
FixId(path, id)
|
||||||
|
|
||||||
|
def FixInstallPath(library_path, library, new_path):
|
||||||
|
args = ['install_name_tool', '-change', library_path, new_path, library]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
def FindSystemLibrary(library_name):
|
||||||
|
for path in ['/lib', '/usr/lib']:
|
||||||
|
full_path = os.path.join(path, library_name)
|
||||||
|
if os.path.exists(full_path):
|
||||||
|
return full_path
|
||||||
|
return None
|
||||||
|
|
||||||
|
def FixLibraryInstallPath(library_path, library):
|
||||||
|
system_library = FindSystemLibrary(os.path.basename(library_path))
|
||||||
|
if system_library is None:
|
||||||
|
new_path = '@executable_path/../MacOS/%s' % os.path.basename(library_path)
|
||||||
|
FixInstallPath(library_path, library, new_path)
|
||||||
|
else:
|
||||||
|
FixInstallPath(library_path, library, system_library)
|
||||||
|
|
||||||
|
def FixFrameworkInstallPath(library_path, library):
|
||||||
|
parts = library_path.split(os.sep)
|
||||||
|
for i, part in enumerate(parts):
|
||||||
|
if re.match(r'\w+\.framework', part):
|
||||||
|
full_path = os.path.join(*parts[i:])
|
||||||
|
break
|
||||||
|
new_path = '@executable_path/../Frameworks/%s' % full_path
|
||||||
|
FixInstallPath(library_path, library, new_path)
|
||||||
|
|
||||||
|
def FindQtPlugin(name):
|
||||||
|
search_path = QT_PLUGINS_SEARCH_PATH
|
||||||
|
search_path.insert(0, QueryQMake('QT_INSTALL_PLUGINS'))
|
||||||
|
for path in search_path:
|
||||||
|
if os.path.exists(path):
|
||||||
|
if os.path.exists(os.path.join(path, name)):
|
||||||
|
return os.path.join(path, name)
|
||||||
|
raise CouldNotFindQtPluginError(name)
|
||||||
|
|
||||||
|
for binary in binaries:
|
||||||
|
FixBinary(binary)
|
||||||
|
|
||||||
|
for plugin in QT_PLUGINS:
|
||||||
|
FixPlugin(FindQtPlugin(plugin), os.path.dirname(plugin))
|
||||||
|
|
||||||
|
if LooseVersion(qt_version) >= LooseVersion("5.10.0"):
|
||||||
|
args = ['plutil', '-insert', 'LSMinimumSystemVersion', '-string', '10.10.0', os.path.join(bundle_dir, 'Contents', 'Info.plist')]
|
||||||
|
commands.append(args)
|
||||||
|
else:
|
||||||
|
args = ['plutil', '-insert', 'LSMinimumSystemVersion', '-string', '10.7.0', os.path.join(bundle_dir, 'Contents', 'Info.plist')]
|
||||||
|
commands.append(args)
|
||||||
|
|
||||||
|
if len(sys.argv) <= 2:
|
||||||
|
print 'Will run %d commands:' % len(commands)
|
||||||
|
for command in commands:
|
||||||
|
print ' '.join(command)
|
||||||
|
|
||||||
|
for command in commands:
|
||||||
|
p = subprocess.Popen(command)
|
||||||
|
os.waitpid(p.pid, 0)
|
||||||
|
|
||||||
|
WriteQtConf()
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -9,11 +9,6 @@ import os
|
|||||||
import polib
|
import polib
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
|
||||||
try:
|
|
||||||
unicode
|
|
||||||
except NameError:
|
|
||||||
unicode = str
|
|
||||||
|
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option("-o", "--output", dest="output",
|
parser.add_option("-o", "--output", dest="output",
|
||||||
help="Directory for localized output", default="../Shared/installer/nightly_localized.nsi")
|
help="Directory for localized output", default="../Shared/installer/nightly_localized.nsi")
|
||||||
@@ -170,7 +165,7 @@ for language,translations in translationCache.iteritems():
|
|||||||
for label,value in translations.iteritems():
|
for label,value in translations.iteritems():
|
||||||
NSINewLines.append( tostr('StrCpy $%s "%s"\n' % (label,value)) )
|
NSINewLines.append( tostr('StrCpy $%s "%s"\n' % (label,value)) )
|
||||||
if language.upper() == options.lang.upper():
|
if language.upper() == options.lang.upper():
|
||||||
NSIDeclarations.append( tostr('Var %s\n' % label) )
|
NSIDeclarations.append( tostr('Var %s\n' % label) )
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
NSIWorkingFile = open('%s/%s.nsh' % (options.output, language),"w")
|
NSIWorkingFile = open('%s/%s.nsh' % (options.output, language),"w")
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 9.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 151 KiB |
1
binary
Submodule
1
binary
Submodule
Submodule binary added at 3425fab2c6
@@ -10,7 +10,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|||||||
|
|
||||||
# Put the include dirs which are in the source or build tree
|
# Put the include dirs which are in the source or build tree
|
||||||
# before all other include dirs, so the headers in the sources
|
# before all other include dirs, so the headers in the sources
|
||||||
# are preferred over the already installed ones
|
# are prefered over the already installed ones
|
||||||
# since cmake 2.4.1
|
# since cmake 2.4.1
|
||||||
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,9 @@
|
|||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>@MIRALL_VERSION_STRING@</string>
|
<string>@MIRALL_VERSION_STRING@</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>(C) 2014-2020 @APPLICATION_VENDOR@</string>
|
<string>(C) 2014-2018 @APPLICATION_VENDOR@</string>
|
||||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSRequiresAquaSystemAppearance</key>
|
|
||||||
<false/>
|
|
||||||
<key>SUShowReleaseNotes</key>
|
<key>SUShowReleaseNotes</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>SUPublicDSAKeyFile</key>
|
<key>SUPublicDSAKeyFile</key>
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
# Enable address sanitizer (gcc/clang only)
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
||||||
set(SANITIZERS)
|
|
||||||
set(SANITIZER_EXTRA_FLAGS " -g")
|
|
||||||
|
|
||||||
macro(add_sanitizer_option variable flag help)
|
|
||||||
option(${variable} "Enable ${help}" OFF)
|
|
||||||
if(${variable})
|
|
||||||
list(APPEND SANITIZERS ${flag})
|
|
||||||
string(REPLACE ";" " " optional_args "${ARGN}")
|
|
||||||
if(optional_args)
|
|
||||||
string(APPEND SANITIZER_EXTRA_FLAGS " ${optional_args}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(${variable})
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
add_sanitizer_option(SANITIZE_ADDRESS "address"
|
|
||||||
"AddressSanitizer (detects memory violations, buffer overflows, memory leaks)")
|
|
||||||
add_sanitizer_option(SANITIZE_LEAK "leak"
|
|
||||||
"standalone LeakSanitizer (detects memory leaks only)")
|
|
||||||
add_sanitizer_option(SANITIZE_MEMORY "memory"
|
|
||||||
"MemorySanitizer (detects reads in uninitialized memory)")
|
|
||||||
add_sanitizer_option(SANITIZE_UNDEFINED "undefined"
|
|
||||||
"UndefinedBehaviorSanitizer (detects undefined behavior)"
|
|
||||||
"-fno-sanitize=vptr")
|
|
||||||
add_sanitizer_option(SANITIZE_THREAD "thread"
|
|
||||||
"ThreadSanitizer (detects data races)")
|
|
||||||
|
|
||||||
if(SANITIZERS)
|
|
||||||
string(REPLACE ";" "," SANITIZER_FLAGS "${SANITIZERS}")
|
|
||||||
set(SANITIZER_FLAGS "-fsanitize=${SANITIZER_FLAGS}${SANITIZER_EXTRA_FLAGS}")
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS " ${SANITIZER_FLAGS}")
|
|
||||||
string(APPEND CMAKE_C_FLAGS " ${SANITIZER_FLAGS}")
|
|
||||||
string(APPEND CMAKE_EXE_LINKER_FLAGS " ${SANITIZER_FLAGS}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
@@ -3,11 +3,7 @@
|
|||||||
# For details see the accompanying COPYING* file.
|
# For details see the accompanying COPYING* file.
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long -Wno-gnu-zero-variadic-macro-arguments")
|
||||||
# Use this only for Clang
|
|
||||||
if (CMAKE_CXX_COMPILER MATCHES "Clang")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-long-long -Wno-gnu-zero-variadic-macro-arguments")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Fix sqlite compilation on macOS
|
# Fix sqlite compilation on macOS
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types-discards-qualifiers")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-incompatible-pointer-types-discards-qualifiers")
|
||||||
|
|||||||
@@ -8,12 +8,12 @@
|
|||||||
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
#cmakedefine CRASHREPORTER_EXECUTABLE "@CRASHREPORTER_EXECUTABLE@"
|
||||||
#define SOCKETAPI_TEAM_IDENTIFIER_PREFIX "@SOCKETAPI_TEAM_IDENTIFIER_PREFIX@"
|
#define SOCKETAPI_TEAM_IDENTIFIER_PREFIX "@SOCKETAPI_TEAM_IDENTIFIER_PREFIX@"
|
||||||
|
|
||||||
|
#cmakedefine APPLICATION_DOMAIN @APPLICATION_DOMAIN@
|
||||||
#cmakedefine THEME_CLASS @THEME_CLASS@
|
#cmakedefine THEME_CLASS @THEME_CLASS@
|
||||||
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
#cmakedefine THEME_INCLUDE @THEME_INCLUDE@
|
||||||
|
|
||||||
#cmakedefine APPLICATION_NAME "@APPLICATION_NAME@"
|
#cmakedefine APPLICATION_NAME "@APPLICATION_NAME@"
|
||||||
#cmakedefine APPLICATION_VENDOR "@APPLICATION_VENDOR@"
|
#cmakedefine APPLICATION_VENDOR "@APPLICATION_VENDOR@"
|
||||||
#cmakedefine APPLICATION_DOMAIN "@APPLICATION_DOMAIN@"
|
|
||||||
#cmakedefine APPLICATION_REV_DOMAIN "@APPLICATION_REV_DOMAIN@"
|
#cmakedefine APPLICATION_REV_DOMAIN "@APPLICATION_REV_DOMAIN@"
|
||||||
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
||||||
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
||||||
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
||||||
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
||||||
#cmakedefine LINUX_APPLICATION_ID "@LINUX_APPLICATION_ID@"
|
|
||||||
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
||||||
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
||||||
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
|
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ To prevent automatic updates and disallow manual overrides:
|
|||||||
|
|
||||||
1. Edit this Registry key:
|
1. Edit this Registry key:
|
||||||
|
|
||||||
``HKEY_LOCAL_MACHINE\Software\Policies\Nextcloud GmbH\Nextcloud``
|
``HKEY_LOCAL_MACHINE\Software\Policies\Nextcloud\Nextcloud``
|
||||||
|
|
||||||
2. Add the key ``skipUpdateCheck`` (of type DWORD).
|
2. Add the key ``skipUpdateCheck`` (of type DWORD).
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ download page.
|
|||||||
System Requirements
|
System Requirements
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
- Windows 8.1+
|
- Windows 7+
|
||||||
- macOS 10.7+ (**64-bit only**)
|
- macOS 10.7+ (**64-bit only**)
|
||||||
- CentOS 6 & 7 (64-bit only)
|
- CentOS 6 & 7 (64-bit only)
|
||||||
- Debian 8.0 & 9.0
|
- Debian 8.0 & 9.0
|
||||||
@@ -36,7 +36,8 @@ System Requirements
|
|||||||
- openSUSE Leap 42.2 & 42.3
|
- openSUSE Leap 42.2 & 42.3
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
For Linux distributions, we support, if technically feasible, the latest 2 versions per platform and the previous LTS.
|
For Linux distributions, we support, if technically feasible, the latest 2 versions per platform and the previous `LTS`_.
|
||||||
|
>>>>>>> b2da03441... update supported linux platforms
|
||||||
|
|
||||||
Installation Wizard
|
Installation Wizard
|
||||||
-------------------
|
-------------------
|
||||||
|
|||||||
@@ -467,7 +467,6 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements;
|
CODE_SIGN_ENTITLEMENTS = FinderSyncExt/FinderSyncExt.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "-";
|
CODE_SIGN_IDENTITY = "-";
|
||||||
CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
|
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ public:
|
|||||||
|
|
||||||
auto menuaction = new QAction(parentWidget);
|
auto menuaction = new QAction(parentWidget);
|
||||||
menuaction->setText(helper->contextMenuTitle());
|
menuaction->setText(helper->contextMenuTitle());
|
||||||
menuaction->setIcon(QIcon::fromTheme(helper->contextMenuIconName()));
|
|
||||||
menuaction->setMenu(menu);
|
menuaction->setMenu(menu);
|
||||||
return { menuaction };
|
return { menuaction };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include "ownclouddolphinpluginhelper.h"
|
#include "ownclouddolphinpluginhelper.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
OwncloudDolphinPluginHelper* OwncloudDolphinPluginHelper::instance()
|
OwncloudDolphinPluginHelper* OwncloudDolphinPluginHelper::instance()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include <QLocalSocket>
|
#include <QLocalSocket>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include "ownclouddolphinpluginhelper_export.h"
|
#include "ownclouddolphinpluginhelper_export.h"
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QObject {
|
class OWNCLOUDDOLPHINPLUGINHELPER_EXPORT OwncloudDolphinPluginHelper : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -36,15 +35,11 @@ public:
|
|||||||
|
|
||||||
QString contextMenuTitle() const
|
QString contextMenuTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("CONTEXT_MENU_TITLE", APPLICATION_NAME);
|
return _strings.value("CONTEXT_MENU_TITLE", "ownCloud");
|
||||||
}
|
}
|
||||||
QString shareActionTitle() const
|
QString shareActionTitle() const
|
||||||
{
|
{
|
||||||
return _strings.value("SHARE_MENU_TITLE", "Share …");
|
return _strings.value("SHARE_MENU_TITLE", "Share...");
|
||||||
}
|
|
||||||
QString contextMenuIconName() const
|
|
||||||
{
|
|
||||||
return _strings.value("CONTEXT_MENU_ICON", APPLICATION_ICON_NAME);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
QString copyPrivateLinkTitle() const { return _strings["COPY_PRIVATE_LINK_MENU_TITLE"]; }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[D-BUS Service]
|
[D-BUS Service]
|
||||||
Name=@LIBCLOUDPROVIDERS_DBUS_BUS_NAME@
|
Name=@LIBCLOUDPROVIDERS_DBUS_BUS_NAME@
|
||||||
Exec=@APPLICATION_EXECUTABLE@ --background
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
|
||||||
|
|||||||
@@ -191,12 +191,11 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
def check_registered_paths(self, filename):
|
def check_registered_paths(self, filename):
|
||||||
topLevelFolder = False
|
topLevelFolder = False
|
||||||
internalFile = False
|
internalFile = False
|
||||||
absfilename = os.path.realpath(filename)
|
|
||||||
for reg_path in socketConnect.registered_paths:
|
for reg_path in socketConnect.registered_paths:
|
||||||
if absfilename == reg_path:
|
if filename == reg_path:
|
||||||
topLevelFolder = True
|
topLevelFolder = True
|
||||||
break
|
break
|
||||||
if absfilename.startswith(reg_path):
|
if filename.startswith(reg_path):
|
||||||
internalFile = True
|
internalFile = True
|
||||||
# you can't have a registered path below another so it is save to break here
|
# you can't have a registered path below another so it is save to break here
|
||||||
break
|
break
|
||||||
@@ -209,7 +208,6 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
all_internal_files = True
|
all_internal_files = True
|
||||||
for i, file_uri in enumerate(files):
|
for i, file_uri in enumerate(files):
|
||||||
filename = get_local_path(file_uri.get_uri())
|
filename = get_local_path(file_uri.get_uri())
|
||||||
filename = os.path.realpath(filename)
|
|
||||||
|
|
||||||
# Check if its a folder (ends with an /), if yes add a "/"
|
# Check if its a folder (ends with an /), if yes add a "/"
|
||||||
# otherwise it will not find the entry in the table
|
# otherwise it will not find the entry in the table
|
||||||
@@ -298,7 +296,6 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
state = entry['state']
|
state = entry['state']
|
||||||
state_ok = state.startswith('OK')
|
state_ok = state.startswith('OK')
|
||||||
state_sync = state.startswith('SYNC')
|
state_sync = state.startswith('SYNC')
|
||||||
isDir = os.path.isdir(filename + os.sep)
|
|
||||||
if state_ok:
|
if state_ok:
|
||||||
shareable = True
|
shareable = True
|
||||||
elif state_sync and isDir:
|
elif state_sync and isDir:
|
||||||
@@ -449,7 +446,6 @@ class SyncStateExtension(GObject.GObject, Nautilus.InfoProvider):
|
|||||||
return
|
return
|
||||||
|
|
||||||
filename = get_local_path(item.get_uri())
|
filename = get_local_path(item.get_uri())
|
||||||
filename = os.path.realpath(filename)
|
|
||||||
if item.is_directory():
|
if item.is_directory():
|
||||||
filename += os.sep
|
filename += os.sep
|
||||||
|
|
||||||
|
|||||||
@@ -81,15 +81,15 @@ IFACEMETHODIMP OCContextMenu::Initialize(
|
|||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORMATETC fe = { CF_HDROP, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
||||||
STGMEDIUM stm;
|
STGMEDIUM stm;
|
||||||
|
|
||||||
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
||||||
// Get an HDROP handle.
|
// Get an HDROP handle.
|
||||||
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
||||||
if (hDrop) {
|
if (hDrop) {
|
||||||
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, nullptr, 0);
|
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
|
||||||
for (UINT i = 0; i < nFiles; ++i) {
|
for (int i = 0; i < nFiles; ++i) {
|
||||||
// Get the path of the file.
|
// Get the path of the file.
|
||||||
wchar_t buffer[MAX_PATH];
|
wchar_t buffer[MAX_PATH];
|
||||||
|
|
||||||
@@ -182,38 +182,20 @@ IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
|||||||
{
|
{
|
||||||
std::wstring command;
|
std::wstring command;
|
||||||
|
|
||||||
CMINVOKECOMMANDINFOEX *piciEx = nullptr;
|
|
||||||
if (pici->cbSize == sizeof(CMINVOKECOMMANDINFOEX))
|
|
||||||
piciEx = (CMINVOKECOMMANDINFOEX*)pici;
|
|
||||||
|
|
||||||
// For the Unicode case, if the high-order word is not zero, the
|
// For the Unicode case, if the high-order word is not zero, the
|
||||||
// command's verb string is in lpcmi->lpVerbW.
|
// command's verb string is in lpcmi->lpVerbW.
|
||||||
if (piciEx
|
if (HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW))
|
||||||
&& (piciEx->fMask & CMIC_MASK_UNICODE)
|
{
|
||||||
&& HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW)) {
|
command = ((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW;
|
||||||
|
} else {
|
||||||
command = piciEx->lpVerbW;
|
|
||||||
|
|
||||||
// Verify that we handle the verb
|
|
||||||
bool handled = false;
|
|
||||||
for (auto &item : m_info.menuItems) {
|
|
||||||
if (item.command == command) {
|
|
||||||
handled = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!handled)
|
|
||||||
return E_FAIL;
|
|
||||||
} else if (IS_INTRESOURCE(pici->lpVerb)) {
|
|
||||||
// If the command cannot be identified through the verb string, then
|
// If the command cannot be identified through the verb string, then
|
||||||
// check the identifier offset.
|
// check the identifier offset.
|
||||||
|
|
||||||
auto offset = LOWORD(pici->lpVerb);
|
auto offset = LOWORD(pici->lpVerb);
|
||||||
if (offset >= m_info.menuItems.size())
|
if (offset >= m_info.menuItems.size())
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
command = m_info.menuItems[offset].command;
|
command = m_info.menuItems[offset].command;
|
||||||
} else {
|
|
||||||
return E_FAIL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
OCClientInterface::SendRequest(command.data(), m_selectedFiles);
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID
|
|||||||
HRESULT hr = CLASS_E_NOAGGREGATION;
|
HRESULT hr = CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
||||||
if (!pUnkOuter) {
|
if (pUnkOuter == NULL) {
|
||||||
hr = E_OUTOFMEMORY;
|
hr = E_OUTOFMEMORY;
|
||||||
|
|
||||||
// Create the COM component.
|
// Create the COM component.
|
||||||
|
|||||||
@@ -24,16 +24,16 @@ namespace {
|
|||||||
HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
|
HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
HKEY hKey = nullptr;
|
HKEY hKey = NULL;
|
||||||
|
|
||||||
// Creates the specified registry key. If the key already exists, the
|
// Creates the specified registry key. If the key already exists, the
|
||||||
// function opens it.
|
// function opens it.
|
||||||
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||||
nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &hKey, nullptr));
|
NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL));
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
if (pszData)
|
if (pszData != NULL)
|
||||||
{
|
{
|
||||||
// Set the specified value of the key.
|
// Set the specified value of the key.
|
||||||
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
||||||
@@ -50,7 +50,7 @@ HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR
|
|||||||
HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR pszData, DWORD cbData)
|
HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR pszData, DWORD cbData)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
HKEY hKey = nullptr;
|
HKEY hKey = NULL;
|
||||||
|
|
||||||
// Try to open the specified registry key.
|
// Try to open the specified registry key.
|
||||||
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||||
@@ -59,8 +59,8 @@ HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR
|
|||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Get the data for the specified value name.
|
// Get the data for the specified value name.
|
||||||
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, nullptr,
|
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, NULL,
|
||||||
nullptr, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
NULL, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
||||||
|
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR
|
|||||||
|
|
||||||
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
||||||
{
|
{
|
||||||
if (!pszModule || !pszThreadModel)
|
if (pszModule == NULL || pszThreadModel == NULL)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,7 @@ HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CL
|
|||||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, pszFriendlyName);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszFriendlyName);
|
||||||
|
|
||||||
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
@@ -99,7 +99,7 @@ HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CL
|
|||||||
{
|
{
|
||||||
// Set the default value of the InprocServer32 key to the
|
// Set the default value of the InprocServer32 key to the
|
||||||
// path of the COM module.
|
// path of the COM module.
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, pszModule);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszModule);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Set the threading model of the component.
|
// Set the threading model of the component.
|
||||||
@@ -136,7 +136,7 @@ HRESULT OCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
|||||||
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||||
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
||||||
{
|
{
|
||||||
if (!pszFileType)
|
if (pszFileType == NULL)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -154,7 +154,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
if (*pszFileType == L'.')
|
if (*pszFileType == L'.')
|
||||||
{
|
{
|
||||||
wchar_t szDefaultVal[260];
|
wchar_t szDefaultVal[260];
|
||||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, nullptr, szDefaultVal,
|
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||||
sizeof(szDefaultVal));
|
sizeof(szDefaultVal));
|
||||||
|
|
||||||
// If the key exists and its default value is not empty, use the
|
// If the key exists and its default value is not empty, use the
|
||||||
@@ -171,7 +171,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
// Set the default value of the key.
|
// Set the default value of the key.
|
||||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, nullptr, szCLSID);
|
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, szCLSID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
@@ -180,7 +180,7 @@ HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
|||||||
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
||||||
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
||||||
{
|
{
|
||||||
if (!pszFileType)
|
if (pszFileType == NULL)
|
||||||
{
|
{
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
@@ -195,7 +195,7 @@ HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
|||||||
if (*pszFileType == L'.')
|
if (*pszFileType == L'.')
|
||||||
{
|
{
|
||||||
wchar_t szDefaultVal[260];
|
wchar_t szDefaultVal[260];
|
||||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, nullptr, szDefaultVal,
|
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||||
sizeof(szDefaultVal));
|
sizeof(szDefaultVal));
|
||||||
|
|
||||||
// If the key exists and its default value is not empty, use the
|
// If the key exists and its default value is not empty, use the
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ HRESULT RegDelnodeRecurse(HKEY hKeyRoot, LPTSTR lpSubKey)
|
|||||||
// Enumerate the keys
|
// Enumerate the keys
|
||||||
|
|
||||||
dwSize = MAX_PATH;
|
dwSize = MAX_PATH;
|
||||||
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, nullptr,
|
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,
|
||||||
nullptr, nullptr, &ftWrite);
|
NULL, NULL, &ftWrite);
|
||||||
|
|
||||||
if (lResult == ERROR_SUCCESS)
|
if (lResult == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
@@ -73,8 +73,8 @@ HRESULT RegDelnodeRecurse(HKEY hKeyRoot, LPTSTR lpSubKey)
|
|||||||
|
|
||||||
dwSize = MAX_PATH;
|
dwSize = MAX_PATH;
|
||||||
|
|
||||||
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, nullptr,
|
lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,
|
||||||
nullptr, nullptr, &ftWrite);
|
NULL, NULL, &ftWrite);
|
||||||
|
|
||||||
} while (lResult == ERROR_SUCCESS);
|
} while (lResult == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
// {841A0AAD-AA11-4B50-84D9-7F8E727D77D7}
|
// {841A0AAD-AA11-4B50-84D9-7F8E727D77D7}
|
||||||
static const GUID CLSID_FileContextMenuExt = { 0x841a0aad, 0xaa11, 0x4b50, { 0x84, 0xd9, 0x7f, 0x8e, 0x72, 0x7d, 0x77, 0xd7 } };
|
static const GUID CLSID_FileContextMenuExt = { 0x841a0aad, 0xaa11, 0x4b50, { 0x84, 0xd9, 0x7f, 0x8e, 0x72, 0x7d, 0x77, 0xd7 } };
|
||||||
|
|
||||||
HINSTANCE g_hInst = nullptr;
|
HINSTANCE g_hInst = NULL;
|
||||||
long g_cDllRef = 0;
|
long g_cDllRef = 0;
|
||||||
|
|
||||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||||
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||||
|
|
||||||
// Note: Here was a #define for windows target version
|
#define WINVER 0x0501
|
||||||
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
#define _WIN32_WINNT 0x0501
|
||||||
// Unnecessary because we define both in desktop/CMakeLists.txt
|
|
||||||
|
|
||||||
#include <SDKDDKVer.h>
|
#include <SDKDDKVer.h>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
#include "OCOverlayRegistrationHandler.h"
|
#include "OCOverlayRegistrationHandler.h"
|
||||||
#include "OCOverlayFactory.h"
|
#include "OCOverlayFactory.h"
|
||||||
|
|
||||||
HINSTANCE instanceHandle = nullptr;
|
HINSTANCE instanceHandle = NULL;
|
||||||
|
|
||||||
long dllReferenceCount = 0;
|
long dllReferenceCount = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ IFACEMETHODIMP OCOverlay::QueryInterface(REFIID riid, void **ppv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hr = E_NOINTERFACE;
|
hr = E_NOINTERFACE;
|
||||||
*ppv = nullptr;
|
*ppv = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ppv)
|
if (*ppv)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ IFACEMETHODIMP OCOverlayFactory::QueryInterface(REFIID riid, void **ppv)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hResult = E_NOINTERFACE;
|
hResult = E_NOINTERFACE;
|
||||||
*ppv = nullptr;
|
*ppv = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -70,7 +70,7 @@ IFACEMETHODIMP OCOverlayFactory::CreateInstance(
|
|||||||
{
|
{
|
||||||
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
if (pUnkOuter) { return hResult; }
|
if (pUnkOuter != NULL) { return hResult; }
|
||||||
|
|
||||||
hResult = E_OUTOFMEMORY;
|
hResult = E_OUTOFMEMORY;
|
||||||
OCOverlay *lrOverlay = new (std::nothrow) OCOverlay(_state);
|
OCOverlay *lrOverlay = new (std::nothrow) OCOverlay(_state);
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ using namespace std;
|
|||||||
HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PCWSTR friendlyName)
|
HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PCWSTR friendlyName)
|
||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY shellOverlayKey = nullptr;
|
HKEY shellOverlayKey = NULL;
|
||||||
// the key may not exist yet
|
// the key may not exist yet
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &shellOverlayKey, nullptr));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &shellOverlayKey, NULL));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
@@ -34,8 +34,8 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY syncExOverlayKey = nullptr;
|
HKEY syncExOverlayKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &syncExOverlayKey, nullptr));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &syncExOverlayKey, NULL));
|
||||||
|
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -44,7 +44,7 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
wchar_t stringCLSID[MAX_PATH];
|
wchar_t stringCLSID[MAX_PATH];
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
LPCTSTR value = stringCLSID;
|
LPCTSTR value = stringCLSID;
|
||||||
hResult = RegSetValueEx(syncExOverlayKey, nullptr, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
hResult = RegSetValueEx(syncExOverlayKey, NULL, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
@@ -55,14 +55,14 @@ HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PC
|
|||||||
HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY shellOverlayKey = nullptr;
|
HKEY shellOverlayKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
||||||
|
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY syncExOverlayKey = nullptr;
|
HKEY syncExOverlayKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -73,35 +73,35 @@ HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
|||||||
|
|
||||||
HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid)
|
HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid)
|
||||||
{
|
{
|
||||||
if (!modulePath) {
|
if (modulePath == NULL) {
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
wchar_t stringCLSID[MAX_PATH];
|
wchar_t stringCLSID[MAX_PATH];
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY hKey = nullptr;
|
HKEY hKey = NULL;
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY clsidKey = nullptr;
|
HKEY clsidKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &clsidKey, nullptr));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &clsidKey, NULL));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, nullptr, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, NULL, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
||||||
|
|
||||||
HKEY inprocessKey = nullptr;
|
HKEY inprocessKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE, nullptr, &inprocessKey, nullptr));
|
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &inprocessKey, NULL));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, nullptr, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, NULL, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
@@ -126,13 +126,13 @@ HRESULT OCOverlayRegistrationHandler::UnregisterCOMObject(const CLSID& clsid)
|
|||||||
|
|
||||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
HKEY hKey = nullptr;
|
HKEY hKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
||||||
if (!SUCCEEDED(hResult)) {
|
if (!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
HKEY clsidKey = nullptr;
|
HKEY clsidKey = NULL;
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
||||||
if(!SUCCEEDED(hResult)) {
|
if(!SUCCEEDED(hResult)) {
|
||||||
return hResult;
|
return hResult;
|
||||||
|
|||||||
@@ -13,10 +13,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define WINVER 0x0501
|
||||||
// Note: Here was a #define for windows target version
|
#define _WIN32_WINNT 0x0501
|
||||||
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
|
||||||
// Unnecessary because we define both in desktop/CMakeLists.txt
|
|
||||||
|
|
||||||
#include "CommunicationSocket.h"
|
#include "CommunicationSocket.h"
|
||||||
#include "RegistryUtil.h"
|
#include "RegistryUtil.h"
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ bool CommunicationSocket::Close()
|
|||||||
|
|
||||||
bool CommunicationSocket::Connect(const std::wstring &pipename)
|
bool CommunicationSocket::Connect(const std::wstring &pipename)
|
||||||
{
|
{
|
||||||
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, 0, nullptr);
|
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
|
|
||||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||||
return false;
|
return false;
|
||||||
@@ -87,7 +87,7 @@ bool CommunicationSocket::SendMsg(const wchar_t* message) const
|
|||||||
auto utf8_msg = StringUtil::toUtf8(message);
|
auto utf8_msg = StringUtil::toUtf8(message);
|
||||||
|
|
||||||
DWORD numBytesWritten = 0;
|
DWORD numBytesWritten = 0;
|
||||||
auto result = WriteFile( _pipe, utf8_msg.c_str(), DWORD(utf8_msg.size()), &numBytesWritten, nullptr);
|
auto result = WriteFile( _pipe, utf8_msg.c_str(), DWORD(utf8_msg.size()), &numBytesWritten, NULL);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
return true;
|
return true;
|
||||||
@@ -123,7 +123,7 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
|||||||
DWORD numBytesRead = 0;
|
DWORD numBytesRead = 0;
|
||||||
DWORD totalBytesAvailable = 0;
|
DWORD totalBytesAvailable = 0;
|
||||||
|
|
||||||
if (!PeekNamedPipe(_pipe, nullptr, 0, 0, &totalBytesAvailable, 0)) {
|
if (!PeekNamedPipe(_pipe, NULL, 0, 0, &totalBytesAvailable, 0)) {
|
||||||
Close();
|
Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -131,7 +131,7 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, nullptr)) {
|
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, NULL)) {
|
||||||
Close();
|
Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ bool FileUtil::IsChildFile(const wchar_t* rootFolder, vector<wstring>* files)
|
|||||||
|
|
||||||
bool FileUtil::IsChildFile(const wchar_t* rootFolder, const wchar_t* file)
|
bool FileUtil::IsChildFile(const wchar_t* rootFolder, const wchar_t* file)
|
||||||
{
|
{
|
||||||
const wstring f(file);
|
wstring* f = new wstring(file);
|
||||||
|
|
||||||
size_t found = f.find(rootFolder);
|
size_t found = f->find(rootFolder);
|
||||||
|
|
||||||
if(found != string::npos)
|
if(found != string::npos)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,9 +38,9 @@ bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, wstring
|
|||||||
{
|
{
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
|
||||||
HKEY rootKey = nullptr;
|
HKEY rootKey = NULL;
|
||||||
|
|
||||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, 0, KEY_READ, &rootKey));
|
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, NULL, KEY_READ, &rootKey));
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult))
|
if(!SUCCEEDED(hResult))
|
||||||
{
|
{
|
||||||
@@ -50,7 +50,7 @@ bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, wstring
|
|||||||
wchar_t value[SIZE];
|
wchar_t value[SIZE];
|
||||||
DWORD value_length = SIZE;
|
DWORD value_length = SIZE;
|
||||||
|
|
||||||
hResult = RegQueryValueEx(rootKey, (LPCWSTR)name, nullptr, nullptr, (LPBYTE)value, &value_length );
|
hResult = RegQueryValueEx(rootKey, (LPCWSTR)name, NULL, NULL, (LPBYTE)value, &value_length );
|
||||||
|
|
||||||
if(!SUCCEEDED(hResult))
|
if(!SUCCEEDED(hResult))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
// We don't keep track of all files and can't know which file is currently visible
|
// We don't keep track of all files and can't know which file is currently visible
|
||||||
// to the user, but at least reload the root dir so that any shortcut to the root
|
// to the user, but at least reload the root dir so that any shortcut to the root
|
||||||
// is updated without the user needing to refresh.
|
// is updated without the user needing to refresh.
|
||||||
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), nullptr);
|
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||||
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
||||||
wstring responsePath = response.substr(16); // length of UNREGISTER_PATH:
|
wstring responsePath = response.substr(16); // length of UNREGISTER_PATH:
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto& path : removedPaths)
|
for (auto& path : removedPaths)
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, path.data(), nullptr);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, path.data(), NULL);
|
||||||
} else if (StringUtil::begins_with(response, wstring(L"STATUS:")) ||
|
} else if (StringUtil::begins_with(response, wstring(L"STATUS:")) ||
|
||||||
StringUtil::begins_with(response, wstring(L"BROADCAST:"))) {
|
StringUtil::begins_with(response, wstring(L"BROADCAST:"))) {
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
it->second = state;
|
it->second = state;
|
||||||
}
|
}
|
||||||
if (updateView) {
|
if (updateView) {
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), nullptr);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,7 @@ void RemotePathChecker::workerThreadLoop()
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
// Let explorer know about each invalidated cache entry that needs to get its icon removed.
|
// Let explorer know about each invalidated cache entry that needs to get its icon removed.
|
||||||
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
||||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), nullptr);
|
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@ RemotePathChecker::RemotePathChecker()
|
|||||||
: _stop(false)
|
: _stop(false)
|
||||||
, _watchedDirectories(make_shared<const vector<wstring>>())
|
, _watchedDirectories(make_shared<const vector<wstring>>())
|
||||||
, _connected(false)
|
, _connected(false)
|
||||||
, _newQueries(CreateEvent(nullptr, FALSE, FALSE, nullptr))
|
, _newQueries(CreateEvent(NULL, FALSE, FALSE, NULL))
|
||||||
, _thread([this]{ this->workerThreadLoop(); })
|
, _thread([this]{ this->workerThreadLoop(); })
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define WINVER 0x0501
|
||||||
// Note: Here was a #define for windows target version
|
#define _WIN32_WINNT 0x0501
|
||||||
// e.g. WINVER / _WIN32_WINNT, see https://devblogs.microsoft.com/oldnewthing/20070411-00/?p=27283
|
|
||||||
// Unnecessary because we define both in desktop/CMakeLists.txt
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ void QProgressIndicator::setColor(const QColor & color)
|
|||||||
|
|
||||||
QSize QProgressIndicator::sizeHint() const
|
QSize QProgressIndicator::sizeHint() const
|
||||||
{
|
{
|
||||||
return {20, 20};
|
return QSize(20,20);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QProgressIndicator::heightForWidth(int w) const
|
int QProgressIndicator::heightForWidth(int w) const
|
||||||
|
|||||||
2
src/3rdparty/libcrashreporter-qt
vendored
2
src/3rdparty/libcrashreporter-qt
vendored
Submodule src/3rdparty/libcrashreporter-qt updated: a4409c5c1b...7df66f72aa
@@ -94,7 +94,7 @@ bool QtLockedFile::lock(LockMode mode, bool block)
|
|||||||
QString mut_name = QString::fromLatin1(MUTEX_PREFIX)
|
QString mut_name = QString::fromLatin1(MUTEX_PREFIX)
|
||||||
+ fi.absoluteFilePath().toLower();
|
+ fi.absoluteFilePath().toLower();
|
||||||
|
|
||||||
m_mutex_hnd = CreateMutexW(nullptr, FALSE, (TCHAR*)mut_name.utf16());
|
m_mutex_hnd = CreateMutexW(NULL, FALSE, (TCHAR*)mut_name.utf16());
|
||||||
|
|
||||||
if (m_mutex_hnd == 0) {
|
if (m_mutex_hnd == 0) {
|
||||||
qWarning("QtLockedFile::lock(): CreateMutex: %s",
|
qWarning("QtLockedFile::lock(): CreateMutex: %s",
|
||||||
@@ -118,7 +118,7 @@ bool QtLockedFile::lock(LockMode mode, bool block)
|
|||||||
if (res == WAIT_TIMEOUT) {
|
if (res == WAIT_TIMEOUT) {
|
||||||
if (i) {
|
if (i) {
|
||||||
// A failed nonblocking rw locking. Undo changes to semaphore.
|
// A failed nonblocking rw locking. Undo changes to semaphore.
|
||||||
if (ReleaseSemaphore(m_semaphore_hnd, i, nullptr) == 0) {
|
if (ReleaseSemaphore(m_semaphore_hnd, i, NULL) == 0) {
|
||||||
qWarning("QtLockedFile::unlock(): ReleaseSemaphore: %s",
|
qWarning("QtLockedFile::unlock(): ReleaseSemaphore: %s",
|
||||||
errorCodeToString(GetLastError()).toLatin1().constData());
|
errorCodeToString(GetLastError()).toLatin1().constData());
|
||||||
// Fall through
|
// Fall through
|
||||||
|
|||||||
1
src/3rdparty/qtmacgoodies
vendored
Submodule
1
src/3rdparty/qtmacgoodies
vendored
Submodule
Submodule src/3rdparty/qtmacgoodies added at ebc7ec6f68
@@ -123,7 +123,7 @@ bool QtLocalPeer::sendMessage(const QString &message, int timeout, bool block)
|
|||||||
Sleep(DWORD(ms));
|
Sleep(DWORD(ms));
|
||||||
#else
|
#else
|
||||||
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
|
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
|
||||||
nanosleep(&ts, nullptr);
|
nanosleep(&ts, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (!connOk)
|
if (!connOk)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ static QString instancesLockFilename(const QString &appSessionId)
|
|||||||
QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
|
QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
|
||||||
: QApplication(argc, argv),
|
: QApplication(argc, argv),
|
||||||
firstPeer(-1),
|
firstPeer(-1),
|
||||||
pidPeer(nullptr)
|
pidPeer(0)
|
||||||
{
|
{
|
||||||
this->appId = appId;
|
this->appId = appId;
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
|
|||||||
|
|
||||||
// This shared memory holds a zero-terminated array of active (or crashed) instances
|
// This shared memory holds a zero-terminated array of active (or crashed) instances
|
||||||
instances = new QSharedMemory(appSessionId, this);
|
instances = new QSharedMemory(appSessionId, this);
|
||||||
actWin = nullptr;
|
actWin = 0;
|
||||||
block = false;
|
block = false;
|
||||||
|
|
||||||
// First instance creates the shared memory, later instances attach to it
|
// First instance creates the shared memory, later instances attach to it
|
||||||
@@ -71,7 +71,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
|
|||||||
qWarning() << "Failed to initialize instances shared memory: "
|
qWarning() << "Failed to initialize instances shared memory: "
|
||||||
<< instances->errorString();
|
<< instances->errorString();
|
||||||
delete instances;
|
delete instances;
|
||||||
instances = nullptr;
|
instances = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
src/3rdparty/sqlite3/sqlite3.c
vendored
4
src/3rdparty/sqlite3/sqlite3.c
vendored
@@ -70201,7 +70201,7 @@ static int btreeOverwriteContent(
|
|||||||
){
|
){
|
||||||
int nData = pX->nData - iOffset;
|
int nData = pX->nData - iOffset;
|
||||||
if( nData<=0 ){
|
if( nData<=0 ){
|
||||||
/* Overwriting with zeros */
|
/* Overwritting with zeros */
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<iAmt && pDest[i]==0; i++){}
|
for(i=0; i<iAmt && pDest[i]==0; i++){}
|
||||||
if( i<iAmt ){
|
if( i<iAmt ){
|
||||||
@@ -91521,7 +91521,7 @@ static int vdbeSorterFlushPMA(VdbeSorter *pSorter){
|
|||||||
** the background thread from a sub-tasks previous turn is still running,
|
** the background thread from a sub-tasks previous turn is still running,
|
||||||
** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
|
** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
|
||||||
** fall back to using the final sub-task. The first (pSorter->nTask-1)
|
** fall back to using the final sub-task. The first (pSorter->nTask-1)
|
||||||
** sub-tasks are preferred as they use background threads - the final
|
** sub-tasks are prefered as they use background threads - the final
|
||||||
** sub-task uses the main thread. */
|
** sub-task uses the main thread. */
|
||||||
for(i=0; i<nWorker; i++){
|
for(i=0; i<nWorker; i++){
|
||||||
int iTest = (pSorter->iPrev + i + 1) % nWorker;
|
int iTest = (pSorter->iPrev + i + 1) % nWorker;
|
||||||
|
|||||||
@@ -29,17 +29,12 @@ if(NOT MSVC)
|
|||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Calling Qt's qCWarning(category, ...) with no params for "..." is a GNU
|
|
||||||
# extension (C++11 §16.3/4 forbids them). Silence clang's warnings.
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# Enable DEP & ASLR
|
# Enable DEP & ASLR
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /nxcompat /dynamicbase")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /nxcompat /dynamicbase")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
|
||||||
elseif(UNIX AND NOT APPLE)
|
elseif(UNIX AND NOT APPLE)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
|
||||||
@@ -52,8 +47,8 @@ include_directories(
|
|||||||
add_subdirectory(csync)
|
add_subdirectory(csync)
|
||||||
add_subdirectory(libsync)
|
add_subdirectory(libsync)
|
||||||
if (NOT BUILD_LIBRARIES_ONLY)
|
if (NOT BUILD_LIBRARIES_ONLY)
|
||||||
add_subdirectory(cmd)
|
|
||||||
add_subdirectory(gui)
|
add_subdirectory(gui)
|
||||||
|
add_subdirectory(cmd)
|
||||||
|
|
||||||
if (WITH_CRASHREPORTER)
|
if (WITH_CRASHREPORTER)
|
||||||
add_subdirectory(3rdparty/libcrashreporter-qt)
|
add_subdirectory(3rdparty/libcrashreporter-qt)
|
||||||
|
|||||||
@@ -32,17 +32,24 @@ if(NOT BUILD_LIBRARIES_ONLY)
|
|||||||
target_include_directories(${cmd_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer)
|
target_include_directories(${cmd_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# OSX: Copy nextcloudcmd to app bundle, src/gui will run macdeployqt
|
|
||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||||
add_custom_command(TARGET ${cmd_NAME} POST_BUILD
|
install(TARGETS ${cmd_NAME} DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS)
|
||||||
COMMAND "cp"
|
|
||||||
"$<TARGET_FILE:${cmd_NAME}>"
|
|
||||||
"${BIN_OUTPUT_DIRECTORY}/${OWNCLOUD_OSX_BUNDLE}/Contents/MacOS"
|
|
||||||
COMMENT "Copying nextcloudcmd..."
|
|
||||||
)
|
|
||||||
elseif(NOT BUILD_LIBRARIES_ONLY)
|
elseif(NOT BUILD_LIBRARIES_ONLY)
|
||||||
install(TARGETS ${cmd_NAME}
|
install(TARGETS ${cmd_NAME}
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# FIXME: The following lines are dup in src/gui and src/cmd because it needs to be done after both are installed
|
||||||
|
#FIXME: find a nice solution to make the second if(BUILD_OWNCLOUD_OSX_BUNDLE) unnecessary
|
||||||
|
# currently it needs to be done because the code right above needs to be executed no matter
|
||||||
|
# if building a bundle or not and the install_qt4_executable needs to be called afterwards
|
||||||
|
if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
|
||||||
|
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||||
|
install(CODE "
|
||||||
|
message(STATUS \"Deploying (Qt) dependencies and fixing library paths...\")
|
||||||
|
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
||||||
|
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE}/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app ${QT_QMAKE_EXECUTABLE})
|
||||||
|
" COMPONENT RUNTIME)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ struct CmdOptions
|
|||||||
|
|
||||||
// we can't use csync_set_userdata because the SyncEngine sets it already.
|
// we can't use csync_set_userdata because the SyncEngine sets it already.
|
||||||
// So we have to use a global variable
|
// So we have to use a global variable
|
||||||
CmdOptions *opts = nullptr;
|
CmdOptions *opts = 0;
|
||||||
|
|
||||||
class EchoDisabler
|
class EchoDisabler
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,50 +11,43 @@
|
|||||||
|
|
||||||
// For overloading macros by argument count
|
// For overloading macros by argument count
|
||||||
// See stackoverflow.com/questions/16683146/can-macros-be-overloaded-by-number-of-arguments
|
// See stackoverflow.com/questions/16683146/can-macros-be-overloaded-by-number-of-arguments
|
||||||
// Bugfix 08/09/2019: Broken arg expansion led to always collapsing to 1 arg (XXXX_1 overload result)
|
#define OC_ASSERT_CAT(A, B) A##B
|
||||||
// See also: https://stackoverflow.com/questions/9183993/msvc-variadic-macro-expansion
|
#define OC_ASSERT_SELECT(NAME, NUM) OC_ASSERT_CAT(NAME##_, NUM)
|
||||||
#define OC_ASSERT_GLUE(x, y) x y
|
|
||||||
|
|
||||||
#define OC_ASSERT_GET_COUNT(_1, _2, _3, COUNT, ...) COUNT
|
#define OC_ASSERT_GET_COUNT(_1, _2, _3, COUNT, ...) COUNT
|
||||||
#define OC_ASSERT_EXPAND_ARGS(args) OC_ASSERT_GET_COUNT args
|
#define OC_ASSERT_VA_SIZE(...) OC_ASSERT_GET_COUNT(__VA_ARGS__, 3, 2, 1, 0)
|
||||||
#define OC_ASSERT_VA_SIZE(...) OC_ASSERT_EXPAND_ARGS((__VA_ARGS__, 3, 2, 1, 0))
|
|
||||||
|
|
||||||
#define OC_ASSERT_SELECT2(NAME, COUNT) NAME##COUNT
|
#define OC_ASSERT_OVERLOAD(NAME, ...) OC_ASSERT_SELECT(NAME, OC_ASSERT_VA_SIZE(__VA_ARGS__)) \
|
||||||
#define OC_ASSERT_SELECT1(NAME, COUNT) OC_ASSERT_SELECT2(NAME, COUNT)
|
(__VA_ARGS__)
|
||||||
#define OC_ASSERT_SELECT(NAME, COUNT) OC_ASSERT_SELECT1(NAME, COUNT)
|
|
||||||
|
|
||||||
#define OC_ASSERT_OVERLOAD(NAME, ...) OC_ASSERT_GLUE(OC_ASSERT_SELECT(NAME, OC_ASSERT_VA_SIZE(__VA_ARGS__)), \
|
|
||||||
(__VA_ARGS__))
|
|
||||||
|
|
||||||
// Default assert: If the condition is false in debug builds, terminate.
|
// Default assert: If the condition is false in debug builds, terminate.
|
||||||
//
|
//
|
||||||
// Prints a message on failure, even in release builds.
|
// Prints a message on failure, even in release builds.
|
||||||
#define ASSERT1(cond) \
|
#define ASSERT(...) OC_ASSERT_OVERLOAD(ASSERT, __VA_ARGS__)
|
||||||
|
#define ASSERT_1(cond) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ASSERT2(cond, message) \
|
#define ASSERT_2(cond, message) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
OC_ASSERT_MSG("ASSERT: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ASSERT(...) OC_ASSERT_OVERLOAD(ASSERT, __VA_ARGS__)
|
|
||||||
|
|
||||||
// Enforce condition to be true, even in release builds.
|
// Enforce condition to be true, even in release builds.
|
||||||
//
|
//
|
||||||
// Prints 'message' and aborts execution if 'cond' is false.
|
// Prints 'message' and aborts execution if 'cond' is false.
|
||||||
#define ENFORCE1(cond) \
|
#define ENFORCE(...) OC_ASSERT_OVERLOAD(ENFORCE, __VA_ARGS__)
|
||||||
|
#define ENFORCE_1(cond) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
qFatal("ENFORCE: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
qFatal("ENFORCE: \"%s\" in file %s, line %d", #cond, __FILE__, __LINE__); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ENFORCE2(cond, message) \
|
#define ENFORCE_2(cond, message) \
|
||||||
if (!(cond)) { \
|
if (!(cond)) { \
|
||||||
qFatal("ENFORCE: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
qFatal("ENFORCE: \"%s\" in file %s, line %d with message: %s", #cond, __FILE__, __LINE__, message); \
|
||||||
} else { \
|
} else { \
|
||||||
}
|
}
|
||||||
#define ENFORCE(...) OC_ASSERT_OVERLOAD(ENFORCE, __VA_ARGS__)
|
|
||||||
|
|
||||||
// An assert that is only present in debug builds: typically used for
|
// An assert that is only present in debug builds: typically used for
|
||||||
// asserts that are too expensive for release mode.
|
// asserts that are too expensive for release mode.
|
||||||
|
|||||||
@@ -207,10 +207,7 @@ static inline uint64_t c_jhash64(const uint8_t *k, uint64_t length, uint64_t int
|
|||||||
/* handle the last 23 bytes */
|
/* handle the last 23 bytes */
|
||||||
c += length;
|
c += length;
|
||||||
switch(len) {
|
switch(len) {
|
||||||
// pragma only for GCC (and clang continues to pretend to be it by defining __GNUC__)
|
|
||||||
#if defined(__GNUC__) && !defined(__clang__)
|
|
||||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
||||||
#endif
|
|
||||||
case 23: c+=((uint64_t)k[22]<<56);
|
case 23: c+=((uint64_t)k[22]<<56);
|
||||||
case 22: c+=((uint64_t)k[21]<<48);
|
case 22: c+=((uint64_t)k[21]<<48);
|
||||||
case 21: c+=((uint64_t)k[20]<<40);
|
case 21: c+=((uint64_t)k[20]<<40);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ QByteArray contentChecksumType()
|
|||||||
|
|
||||||
static bool checksumComputationEnabled()
|
static bool checksumComputationEnabled()
|
||||||
{
|
{
|
||||||
static bool enabled = qEnvironmentVariableIsEmpty("OWNCLOUD_DISABLE_CHECKSUM_COMPUTATIONS");
|
static bool enabled = qgetenv("OWNCLOUD_DISABLE_CHECKSUM_COMPUTATIONS").isEmpty();
|
||||||
return enabled;
|
return enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,19 +255,21 @@ void ValidateChecksumHeader::slotChecksumCalculated(const QByteArray &checksumTy
|
|||||||
emit validated(checksumType, checksum);
|
emit validated(checksumType, checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSyncChecksumHook::CSyncChecksumHook() = default;
|
CSyncChecksumHook::CSyncChecksumHook()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray CSyncChecksumHook::hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void * /*this_obj*/)
|
QByteArray CSyncChecksumHook::hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void * /*this_obj*/)
|
||||||
{
|
{
|
||||||
QByteArray type = parseChecksumHeaderType(QByteArray(otherChecksumHeader));
|
QByteArray type = parseChecksumHeaderType(QByteArray(otherChecksumHeader));
|
||||||
if (type.isEmpty())
|
if (type.isEmpty())
|
||||||
return nullptr;
|
return NULL;
|
||||||
|
|
||||||
qCInfo(lcChecksums) << "Computing" << type << "checksum of" << path << "in the csync hook";
|
qCInfo(lcChecksums) << "Computing" << type << "checksum of" << path << "in the csync hook";
|
||||||
QByteArray checksum = ComputeChecksum::computeNow(QString::fromUtf8(path), type);
|
QByteArray checksum = ComputeChecksum::computeNow(QString::fromUtf8(path), type);
|
||||||
if (checksum.isNull()) {
|
if (checksum.isNull()) {
|
||||||
qCWarning(lcChecksums) << "Failed to compute checksum" << type << "for" << path;
|
qCWarning(lcChecksums) << "Failed to compute checksum" << type << "for" << path;
|
||||||
return nullptr;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return makeChecksumHeader(type, checksum);
|
return makeChecksumHeader(type, checksum);
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ bool FileSystem::rename(const QString &originFileName,
|
|||||||
if (!success) {
|
if (!success) {
|
||||||
wchar_t *string = 0;
|
wchar_t *string = 0;
|
||||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
nullptr, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
(LPWSTR)&string, 0, nullptr);
|
(LPWSTR)&string, 0, NULL);
|
||||||
|
|
||||||
error = QString::fromWCharArray(string);
|
error = QString::fromWCharArray(string);
|
||||||
LocalFree((HLOCAL)string);
|
LocalFree((HLOCAL)string);
|
||||||
@@ -216,8 +216,8 @@ bool FileSystem::uncheckedRenameReplace(const QString &originFileName,
|
|||||||
if (!ok) {
|
if (!ok) {
|
||||||
wchar_t *string = 0;
|
wchar_t *string = 0;
|
||||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||||
nullptr, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
(LPWSTR)&string, 0, nullptr);
|
(LPWSTR)&string, 0, NULL);
|
||||||
|
|
||||||
*errorString = QString::fromWCharArray(string);
|
*errorString = QString::fromWCharArray(string);
|
||||||
qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString;
|
qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString;
|
||||||
@@ -248,7 +248,7 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi
|
|||||||
DWORD creationDisp = OPEN_EXISTING;
|
DWORD creationDisp = OPEN_EXISTING;
|
||||||
|
|
||||||
// Create the file handle.
|
// Create the file handle.
|
||||||
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), nullptr, FALSE };
|
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE };
|
||||||
QString fName = longWinPath(file->fileName());
|
QString fName = longWinPath(file->fileName());
|
||||||
|
|
||||||
HANDLE fileHandle = CreateFileW(
|
HANDLE fileHandle = CreateFileW(
|
||||||
@@ -258,7 +258,7 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi
|
|||||||
&securityAtts,
|
&securityAtts,
|
||||||
creationDisp,
|
creationDisp,
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
FILE_ATTRIBUTE_NORMAL,
|
||||||
nullptr);
|
NULL);
|
||||||
|
|
||||||
// Bail out on error.
|
// Bail out on error.
|
||||||
if (fileHandle == INVALID_HANDLE_VALUE) {
|
if (fileHandle == INVALID_HANDLE_VALUE) {
|
||||||
@@ -352,8 +352,8 @@ QString FileSystem::fileSystemForPath(const QString &path)
|
|||||||
|
|
||||||
if (!GetVolumeInformationW(
|
if (!GetVolumeInformationW(
|
||||||
reinterpret_cast<LPCWSTR>(drive.utf16()),
|
reinterpret_cast<LPCWSTR>(drive.utf16()),
|
||||||
nullptr, 0,
|
NULL, 0,
|
||||||
nullptr, nullptr, nullptr,
|
NULL, NULL, NULL,
|
||||||
fileSystemBuffer, fileSystemBufferSize)) {
|
fileSystemBuffer, fileSystemBufferSize)) {
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
@@ -516,9 +516,9 @@ bool FileSystem::isFileLocked(const QString &fileName)
|
|||||||
wuri,
|
wuri,
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||||
nullptr, OPEN_EXISTING,
|
NULL, OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
|
||||||
nullptr);
|
NULL);
|
||||||
|
|
||||||
if (win_h == INVALID_HANDLE_VALUE) {
|
if (win_h == INVALID_HANDLE_VALUE) {
|
||||||
/* could not be opened, so locked? */
|
/* could not be opened, so locked? */
|
||||||
@@ -543,7 +543,7 @@ bool FileSystem::isJunction(const QString &filename)
|
|||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
WIN32_FIND_DATA findData;
|
WIN32_FIND_DATA findData;
|
||||||
HANDLE hFind = FindFirstFileEx((const wchar_t *)filename.utf16(), FindExInfoBasic, &findData, FindExSearchNameMatch, nullptr, 0);
|
HANDLE hFind = FindFirstFileEx((const wchar_t *)filename.utf16(), FindExInfoBasic, &findData, FindExSearchNameMatch, NULL, 0);
|
||||||
if (hFind != INVALID_HANDLE_VALUE) {
|
if (hFind != INVALID_HANDLE_VALUE) {
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ namespace FileSystem {
|
|||||||
*/
|
*/
|
||||||
bool OCSYNC_EXPORT rename(const QString &originFileName,
|
bool OCSYNC_EXPORT rename(const QString &originFileName,
|
||||||
const QString &destinationFileName,
|
const QString &destinationFileName,
|
||||||
QString *errorString = nullptr);
|
QString *errorString = NULL);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rename the file \a originFileName to \a destinationFileName, and
|
* Rename the file \a originFileName to \a destinationFileName, and
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace OCC {
|
|||||||
Q_LOGGING_CATEGORY(lcSql, "nextcloud.sync.database.sql", QtInfoMsg)
|
Q_LOGGING_CATEGORY(lcSql, "nextcloud.sync.database.sql", QtInfoMsg)
|
||||||
|
|
||||||
SqlDatabase::SqlDatabase()
|
SqlDatabase::SqlDatabase()
|
||||||
: _db(nullptr)
|
: _db(0)
|
||||||
, _errId(0)
|
, _errId(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ SqlDatabase::~SqlDatabase()
|
|||||||
|
|
||||||
bool SqlDatabase::isOpen()
|
bool SqlDatabase::isOpen()
|
||||||
{
|
{
|
||||||
return _db != nullptr;
|
return _db != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
||||||
@@ -68,7 +68,7 @@ bool SqlDatabase::openHelper(const QString &filename, int sqliteFlags)
|
|||||||
|
|
||||||
sqliteFlags |= SQLITE_OPEN_NOMUTEX;
|
sqliteFlags |= SQLITE_OPEN_NOMUTEX;
|
||||||
|
|
||||||
SQLITE_DO(sqlite3_open_v2(filename.toUtf8().constData(), &_db, sqliteFlags, nullptr));
|
SQLITE_DO(sqlite3_open_v2(filename.toUtf8().constData(), &_db, sqliteFlags, 0));
|
||||||
|
|
||||||
if (_errId != SQLITE_OK) {
|
if (_errId != SQLITE_OK) {
|
||||||
qCWarning(lcSql) << "Error:" << _error << "for" << filename;
|
qCWarning(lcSql) << "Error:" << _error << "for" << filename;
|
||||||
@@ -196,7 +196,7 @@ void SqlDatabase::close()
|
|||||||
SQLITE_DO(sqlite3_close(_db));
|
SQLITE_DO(sqlite3_close(_db));
|
||||||
if (_errId != SQLITE_OK)
|
if (_errId != SQLITE_OK)
|
||||||
qCWarning(lcSql) << "Closing database failed" << _error;
|
qCWarning(lcSql) << "Closing database failed" << _error;
|
||||||
_db = nullptr;
|
_db = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ bool SqlDatabase::transaction()
|
|||||||
if (!_db) {
|
if (!_db) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SQLITE_DO(sqlite3_exec(_db, "BEGIN", nullptr, nullptr, nullptr));
|
SQLITE_DO(sqlite3_exec(_db, "BEGIN", 0, 0, 0));
|
||||||
return _errId == SQLITE_OK;
|
return _errId == SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ bool SqlDatabase::commit()
|
|||||||
if (!_db) {
|
if (!_db) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
SQLITE_DO(sqlite3_exec(_db, "COMMIT", nullptr, nullptr, nullptr));
|
SQLITE_DO(sqlite3_exec(_db, "COMMIT", 0, 0, 0));
|
||||||
return _errId == SQLITE_OK;
|
return _errId == SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ int SqlQuery::prepare(const QByteArray &sql, bool allow_failure)
|
|||||||
int n = 0;
|
int n = 0;
|
||||||
int rc;
|
int rc;
|
||||||
do {
|
do {
|
||||||
rc = sqlite3_prepare_v2(_db, _sql.constData(), -1, &_stmt, nullptr);
|
rc = sqlite3_prepare_v2(_db, _sql.constData(), -1, &_stmt, 0);
|
||||||
if ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED)) {
|
if ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED)) {
|
||||||
n++;
|
n++;
|
||||||
OCC::Utility::usleep(SQLITE_SLEEP_TIME_USEC);
|
OCC::Utility::usleep(SQLITE_SLEEP_TIME_USEC);
|
||||||
@@ -281,8 +281,8 @@ int SqlQuery::prepare(const QByteArray &sql, bool allow_failure)
|
|||||||
*/
|
*/
|
||||||
static bool startsWithInsensitive(const QByteArray &a, const char *b)
|
static bool startsWithInsensitive(const QByteArray &a, const char *b)
|
||||||
{
|
{
|
||||||
size_t len = strlen(b);
|
int len = strlen(b);
|
||||||
return a.size() >= len && qstrnicmp(a.constData(), b, Utility::convertSizeToUint(len)) == 0;
|
return a.size() >= len && qstrnicmp(a.constData(), b, len) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqlQuery::isSelect()
|
bool SqlQuery::isSelect()
|
||||||
@@ -462,7 +462,7 @@ void SqlQuery::finish()
|
|||||||
if (!_stmt)
|
if (!_stmt)
|
||||||
return;
|
return;
|
||||||
SQLITE_DO(sqlite3_finalize(_stmt));
|
SQLITE_DO(sqlite3_finalize(_stmt));
|
||||||
_stmt = nullptr;
|
_stmt = 0;
|
||||||
if (_sqldb) {
|
if (_sqldb) {
|
||||||
_sqldb->_queries.remove(this);
|
_sqldb->_queries.remove(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ bool SyncJournalDb::updateMetadataTableStructure()
|
|||||||
commitInternal("update database structure: add filesize col");
|
commitInternal("update database structure: add filesize col");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true) {
|
if (1) {
|
||||||
SqlQuery query(_db);
|
SqlQuery query(_db);
|
||||||
query.prepare("CREATE INDEX IF NOT EXISTS metadata_inode ON metadata(inode);");
|
query.prepare("CREATE INDEX IF NOT EXISTS metadata_inode ON metadata(inode);");
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
@@ -671,7 +671,7 @@ bool SyncJournalDb::updateMetadataTableStructure()
|
|||||||
commitInternal("update database structure: add inode index");
|
commitInternal("update database structure: add inode index");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true) {
|
if (1) {
|
||||||
SqlQuery query(_db);
|
SqlQuery query(_db);
|
||||||
query.prepare("CREATE INDEX IF NOT EXISTS metadata_path ON metadata(path);");
|
query.prepare("CREATE INDEX IF NOT EXISTS metadata_path ON metadata(path);");
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
@@ -1857,12 +1857,12 @@ QByteArray SyncJournalDb::getChecksumType(int checksumTypeId)
|
|||||||
return {};
|
return {};
|
||||||
query.bindValue(1, checksumTypeId);
|
query.bindValue(1, checksumTypeId);
|
||||||
if (!query.exec()) {
|
if (!query.exec()) {
|
||||||
return nullptr;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!query.next()) {
|
if (!query.next()) {
|
||||||
qCWarning(lcDb) << "No checksum type mapping found for" << checksumTypeId;
|
qCWarning(lcDb) << "No checksum type mapping found for" << checksumTypeId;
|
||||||
return nullptr;
|
return 0;
|
||||||
}
|
}
|
||||||
return query.baValue(0);
|
return query.baValue(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,19 +87,32 @@ public:
|
|||||||
|
|
||||||
struct DownloadInfo
|
struct DownloadInfo
|
||||||
{
|
{
|
||||||
|
DownloadInfo()
|
||||||
|
: _errorCount(0)
|
||||||
|
, _valid(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
QString _tmpfile;
|
QString _tmpfile;
|
||||||
QByteArray _etag;
|
QByteArray _etag;
|
||||||
int _errorCount = 0;
|
int _errorCount;
|
||||||
bool _valid = false;
|
bool _valid;
|
||||||
};
|
};
|
||||||
struct UploadInfo
|
struct UploadInfo
|
||||||
{
|
{
|
||||||
int _chunk = 0;
|
UploadInfo()
|
||||||
int _transferid = 0;
|
: _chunk(0)
|
||||||
quint64 _size = 0; //currently unused
|
, _transferid(0)
|
||||||
qint64 _modtime = 0;
|
, _size(0)
|
||||||
int _errorCount = 0;
|
, _errorCount(0)
|
||||||
bool _valid = false;
|
, _valid(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
int _chunk;
|
||||||
|
int _transferid;
|
||||||
|
quint64 _size; //currently unused
|
||||||
|
qint64 _modtime;
|
||||||
|
int _errorCount;
|
||||||
|
bool _valid;
|
||||||
QByteArray _contentChecksum;
|
QByteArray _contentChecksum;
|
||||||
/**
|
/**
|
||||||
* Returns true if this entry refers to a chunked upload that can be continued.
|
* Returns true if this entry refers to a chunked upload that can be continued.
|
||||||
|
|||||||
@@ -81,22 +81,31 @@ public:
|
|||||||
InsufficientRemoteStorage
|
InsufficientRemoteStorage
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SyncJournalErrorBlacklistRecord()
|
||||||
|
: _retryCount(0)
|
||||||
|
, _errorCategory(Category::Normal)
|
||||||
|
, _lastTryModtime(0)
|
||||||
|
, _lastTryTime(0)
|
||||||
|
, _ignoreDuration(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// The number of times the operation was unsuccessful so far.
|
/// The number of times the operation was unsuccessful so far.
|
||||||
int _retryCount = 0;
|
int _retryCount;
|
||||||
|
|
||||||
/// The last error string.
|
/// The last error string.
|
||||||
QString _errorString;
|
QString _errorString;
|
||||||
/// The error category. Sometimes used for special actions.
|
/// The error category. Sometimes used for special actions.
|
||||||
Category _errorCategory = Category::Normal;
|
Category _errorCategory;
|
||||||
|
|
||||||
qint64 _lastTryModtime = 0;
|
qint64 _lastTryModtime;
|
||||||
QByteArray _lastTryEtag;
|
QByteArray _lastTryEtag;
|
||||||
|
|
||||||
/// The last time the operation was attempted (in s since epoch).
|
/// The last time the operation was attempted (in s since epoch).
|
||||||
qint64 _lastTryTime = 0;
|
qint64 _lastTryTime;
|
||||||
|
|
||||||
/// The number of seconds the file shall be ignored.
|
/// The number of seconds the file shall be ignored.
|
||||||
qint64 _ignoreDuration = 0;
|
qint64 _ignoreDuration;
|
||||||
|
|
||||||
QString _file;
|
QString _file;
|
||||||
QString _renameTarget;
|
QString _renameTarget;
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ qint64 Utility::freeDiskSpace(const QString &path)
|
|||||||
#elif defined(Q_OS_WIN)
|
#elif defined(Q_OS_WIN)
|
||||||
ULARGE_INTEGER freeBytes;
|
ULARGE_INTEGER freeBytes;
|
||||||
freeBytes.QuadPart = 0L;
|
freeBytes.QuadPart = 0L;
|
||||||
if (GetDiskFreeSpaceEx(reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, nullptr, nullptr)) {
|
if (GetDiskFreeSpaceEx(reinterpret_cast<const wchar_t *>(path.utf16()), &freeBytes, NULL, NULL)) {
|
||||||
return freeBytes.QuadPart;
|
return freeBytes.QuadPart;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -298,7 +298,7 @@ namespace {
|
|||||||
|
|
||||||
QString description(quint64 value) const
|
QString description(quint64 value) const
|
||||||
{
|
{
|
||||||
return QCoreApplication::translate("Utility", name, nullptr, value);
|
return QCoreApplication::translate("Utility", name, 0, value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// QTBUG-3945 and issue #4855: QT_TRANSLATE_NOOP does not work with plural form because lupdate
|
// QTBUG-3945 and issue #4855: QT_TRANSLATE_NOOP does not work with plural form because lupdate
|
||||||
@@ -313,7 +313,7 @@ namespace {
|
|||||||
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)", 0, _), 3600 * 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n hour(s)", 0, _), 3600 * 1000LL },
|
||||||
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)", 0, _), 60 * 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n minute(s)", 0, _), 60 * 1000LL },
|
||||||
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)", 0, _), 1000LL },
|
{ QT_TRANSLATE_NOOP("Utility", "%n second(s)", 0, _), 1000LL },
|
||||||
{ nullptr, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
@@ -392,30 +392,10 @@ QString Utility::platformName()
|
|||||||
|
|
||||||
void Utility::crash()
|
void Utility::crash()
|
||||||
{
|
{
|
||||||
volatile int *a = (int *)nullptr;
|
volatile int *a = (int *)(NULL);
|
||||||
*a = 1;
|
*a = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use this functions to retrieve uint/int (often required by Qt and WIN32) from size_t
|
|
||||||
// without compiler warnings about possible truncation
|
|
||||||
uint Utility::convertSizeToUint(size_t &convertVar)
|
|
||||||
{
|
|
||||||
if( convertVar > UINT_MAX ) {
|
|
||||||
//throw std::bad_cast();
|
|
||||||
convertVar = UINT_MAX; // intentionally default to wrong value here to not crash: exception handling TBD
|
|
||||||
}
|
|
||||||
return static_cast<uint>(convertVar);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint Utility::convertSizeToInt(size_t &convertVar)
|
|
||||||
{
|
|
||||||
if( convertVar > INT_MAX ) {
|
|
||||||
//throw std::bad_cast();
|
|
||||||
convertVar = INT_MAX; // intentionally default to wrong value here to not crash: exception handling TBD
|
|
||||||
}
|
|
||||||
return static_cast<int>(convertVar);
|
|
||||||
}
|
|
||||||
|
|
||||||
// read the output of the owncloud --version command from the owncloud
|
// read the output of the owncloud --version command from the owncloud
|
||||||
// version that is on disk. This works for most versions of the client,
|
// version that is on disk. This works for most versions of the client,
|
||||||
// because clients that do not yet know the --version flag return the
|
// because clients that do not yet know the --version flag return the
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user