mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-04 12:11:33 +02:00
Compare commits
150 Commits
stable-3.3
...
v3.2.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5447b5beb | ||
|
|
94946c76db | ||
|
|
0fd793d4a6 | ||
|
|
bb07a790d9 | ||
|
|
af12973a5f | ||
|
|
61cd31b44a | ||
|
|
d6c1fc85fb | ||
|
|
9c79aabdef | ||
|
|
ad74cf9a83 | ||
|
|
29faf92d73 | ||
|
|
21100f7cbc | ||
|
|
4a44ac168c | ||
|
|
82ab76c4e4 | ||
|
|
568e25a817 | ||
|
|
0b90bc0464 | ||
|
|
aa1d76b780 | ||
|
|
ed19515885 | ||
|
|
4e0f7d443f | ||
|
|
fd89e9a1e2 | ||
|
|
690d9803af | ||
|
|
58cd94e636 | ||
|
|
bd337320e3 | ||
|
|
8b6c86a305 | ||
|
|
b16cc929de | ||
|
|
6a6c22d34d | ||
|
|
81e3474f84 | ||
|
|
9b8b1bf5c8 | ||
|
|
385468d4b2 | ||
|
|
4585411400 | ||
|
|
1f3e1dce1c | ||
|
|
cdb2647cbf | ||
|
|
871b07ca70 | ||
|
|
9ce279b68a | ||
|
|
b009c287c4 | ||
|
|
4bbd96de14 | ||
|
|
aa5c1837fc | ||
|
|
e44d6555fa | ||
|
|
ad5d8430e9 | ||
|
|
5743354315 | ||
|
|
a79d9f58ca | ||
|
|
958e4e08d9 | ||
|
|
edf1615942 | ||
|
|
60f66a63ae | ||
|
|
e9749e31a4 | ||
|
|
678466109f | ||
|
|
490d682934 | ||
|
|
1bcf989189 | ||
|
|
33fc880b44 | ||
|
|
83e5d2025b | ||
|
|
8ca35d977e | ||
|
|
9bd0af6ef2 | ||
|
|
29da163107 | ||
|
|
f027f7c9f9 | ||
|
|
f3b8d29bc7 | ||
|
|
16a58db75d | ||
|
|
22c3ce1c1e | ||
|
|
1646e7b461 | ||
|
|
f53d24a703 | ||
|
|
fb260d6560 | ||
|
|
4658c0ba84 | ||
|
|
0d77d7d850 | ||
|
|
24f80f14bd | ||
|
|
095ca9e6d2 | ||
|
|
35cb8dac79 | ||
|
|
cd682817cb | ||
|
|
04afaa1fe6 | ||
|
|
60f3b7781e | ||
|
|
c626033445 | ||
|
|
76687ce8fd | ||
|
|
7c987281cc | ||
|
|
91dd481f1a | ||
|
|
7b725f04e0 | ||
|
|
0b776d2be2 | ||
|
|
7960aca617 | ||
|
|
da4b016b7c | ||
|
|
c82491ebe3 | ||
|
|
025e4a600a | ||
|
|
cb52e36e08 | ||
|
|
f8b7d5bc84 | ||
|
|
0b703ed518 | ||
|
|
19aa80116f | ||
|
|
faa5b2ef54 | ||
|
|
0778b2178f | ||
|
|
4f0a8995c2 | ||
|
|
b5e5985fcb | ||
|
|
705990291b | ||
|
|
364e02bdb0 | ||
|
|
981d94c139 | ||
|
|
14ccfe831a | ||
|
|
0e31d6fe57 | ||
|
|
79128c51b7 | ||
|
|
abf75cc80d | ||
|
|
dd3e6a6ad0 | ||
|
|
aaf4b1d2be | ||
|
|
9c6c6d82f0 | ||
|
|
a559513912 | ||
|
|
741231f3df | ||
|
|
6cb5bdf2d1 | ||
|
|
104941e4bb | ||
|
|
d7fb1ebc51 | ||
|
|
c4fec24b23 | ||
|
|
59595152c7 | ||
|
|
5644fcb332 | ||
|
|
d4322ed003 | ||
|
|
046e19465f | ||
|
|
28ccaff866 | ||
|
|
0a36214189 | ||
|
|
5901a0f983 | ||
|
|
7825cf7f86 | ||
|
|
d65611bcb7 | ||
|
|
c5f17a7f77 | ||
|
|
4637ce7526 | ||
|
|
c3ed9a9d65 | ||
|
|
6da0650c61 | ||
|
|
031f7c48a3 | ||
|
|
abb57d6202 | ||
|
|
1e309b71a6 | ||
|
|
5a159d49d0 | ||
|
|
1cc082cec5 | ||
|
|
149bfa9001 | ||
|
|
f660f923a3 | ||
|
|
f7c4030463 | ||
|
|
55c0cbde36 | ||
|
|
3deb08a7fc | ||
|
|
594b13ed6a | ||
|
|
9cda48e0a6 | ||
|
|
03117c0dcf | ||
|
|
96dab4ff84 | ||
|
|
7dfb6c300f | ||
|
|
9a75fa5db5 | ||
|
|
2272cb6c3a | ||
|
|
e909add969 | ||
|
|
33ea9ba00e | ||
|
|
f86fcc94d8 | ||
|
|
443d8baf3a | ||
|
|
c2e217352f | ||
|
|
555c157cda | ||
|
|
03466431be | ||
|
|
9b8115558d | ||
|
|
8344969549 | ||
|
|
eed7fd73a3 | ||
|
|
4c50ba294e | ||
|
|
ec5be0f29a | ||
|
|
f79f4f6783 | ||
|
|
89919b6b33 | ||
|
|
86e0ad4ec6 | ||
|
|
328877c70b | ||
|
|
14fbf1b106 | ||
|
|
5f6236bd73 | ||
|
|
a3968bcc87 |
18
.drone.yml
18
.drone.yml
@@ -3,7 +3,7 @@ name: qt-5.12
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: cmake
|
- name: cmake
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -11,7 +11,7 @@ steps:
|
|||||||
- cd /drone/build
|
- cd /drone/build
|
||||||
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
- cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
||||||
- name: compile
|
- name: compile
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -19,7 +19,7 @@ steps:
|
|||||||
- cd /drone/build
|
- cd /drone/build
|
||||||
- make -j$(nproc)
|
- make -j$(nproc)
|
||||||
- name: test
|
- name: test
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -47,7 +47,7 @@ name: qt-5.12-clang
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: cmake
|
- name: cmake
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -55,7 +55,7 @@ steps:
|
|||||||
- cd /drone/build
|
- cd /drone/build
|
||||||
- cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
- cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_BUILD_TYPE=Debug -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DSANITIZE_ADDRESS=ON ../src
|
||||||
- name: compile
|
- name: compile
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -63,7 +63,7 @@ steps:
|
|||||||
- cd /drone/build
|
- cd /drone/build
|
||||||
- ninja
|
- ninja
|
||||||
- name: test
|
- name: test
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -73,7 +73,7 @@ steps:
|
|||||||
- chown -R test:test .
|
- chown -R test:test .
|
||||||
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
|
- su -c 'ASAN_OPTIONS=detect_leaks=0 ctest --output-on-failure' test
|
||||||
- name: clang-tidy
|
- name: clang-tidy
|
||||||
image: nextcloudci/client-5.12:client-5.12-11
|
image: ghcr.io/nextcloud/continuous-integration-client:client-5.12-18
|
||||||
volumes:
|
volumes:
|
||||||
- name: build
|
- name: build
|
||||||
path: /drone/build
|
path: /drone/build
|
||||||
@@ -98,7 +98,7 @@ name: AppImage
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: build
|
||||||
image: nextcloudci/client-5.12:client-5.12-9
|
image: ghcr.io/nextcloud/continuous-integration-client-appimage:client-appimage-1
|
||||||
environment:
|
environment:
|
||||||
CI_UPLOAD_GIT_TOKEN:
|
CI_UPLOAD_GIT_TOKEN:
|
||||||
from_secret: CI_UPLOAD_GIT_TOKEN
|
from_secret: CI_UPLOAD_GIT_TOKEN
|
||||||
@@ -120,7 +120,7 @@ name: Debian
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: build
|
||||||
image: nextcloudci/client-debian-ci:client-debian-ci-2
|
image: ghcr.io/nextcloud/continuous-integration-client-debian:client-debian-3
|
||||||
commands:
|
commands:
|
||||||
- /bin/bash -c "./admin/linux/debian/drone-build.sh" || echo "[WARNING] Debian build failed but this is a non-blocking CI event"
|
- /bin/bash -c "./admin/linux/debian/drone-build.sh" || echo "[WARNING] Debian build failed but this is a non-blocking CI event"
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
||||||
Name[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
|
||||||
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
||||||
GenericName[bg_BG]=Синхронизиране на папка
|
GenericName[bg_BG]=Синхронизиране на папка
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[br]=@APPLICATION_ICON_NAME@
|
Icon[br]=@APPLICATION_ICON_NAME@
|
||||||
Name[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
|
||||||
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
||||||
GenericName[br]=Tuliad kemprenan
|
GenericName[br]=Tuliad kemprenan
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# 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@ per a escriptori
|
||||||
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
Comment[ca]=Client de sincronització d'escriptori del @APPLICATION_NAME@
|
||||||
GenericName[ca]=Sincronització de carpetes
|
GenericName[ca]=Sincronització de carpetes
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
|
Icon[cs_CZ]=@APPLICATION_ICON_NAME@
|
||||||
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Name[cs_CZ]=@APPLICATION_NAME@ 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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[cy_GB]=@APPLICATION_ICON_NAME@
|
Icon[cy_GB]=@APPLICATION_ICON_NAME@
|
||||||
Name[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
|
||||||
Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
||||||
GenericName[cy_GB]=Cydweddu Ffolder
|
GenericName[cy_GB]=Cydweddu Ffolder
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[da]=@APPLICATION_ICON_NAME@
|
Icon[da]=@APPLICATION_ICON_NAME@
|
||||||
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
Name[da]=Skrivebordsklient til @APPLICATION_NAME@
|
||||||
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
Comment[da]=Klient til @APPLICATION_NAME@-skrivebordssynkronisering
|
||||||
GenericName[da]=Mappesynkronisering
|
GenericName[da]=Mappesynkronisering
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,7 +21,7 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[de]=@APPLICATION_ICON_NAME@
|
Icon[de_DE]=@APPLICATION_ICON_NAME@
|
||||||
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
||||||
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisierung
|
||||||
GenericName[de]=Ordner-Synchronisation
|
GenericName[de_DE]=Ordnersynchronisierung
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[el]=@APPLICATION_ICON_NAME@
|
Icon[el]=@APPLICATION_ICON_NAME@
|
||||||
Name[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
|
||||||
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
||||||
GenericName[el]=Συγχρονισμός φακέλου
|
GenericName[el]=Συγχρονισμός φακέλου
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[en_GB]=@APPLICATION_ICON_NAME@
|
Icon[en_GB]=@APPLICATION_ICON_NAME@
|
||||||
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
|
|
||||||
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
||||||
GenericName[en_GB]=Folder Sync
|
GenericName[en_GB]=Folder Sync
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[eo]=@APPLICATION_ICON_NAME@
|
Icon[eo]=@APPLICATION_ICON_NAME@
|
||||||
Name[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
|
||||||
Comment[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
Comment[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
||||||
GenericName[eo]=Dosieruja sinkronigo
|
GenericName[eo]=Dosieruja sinkronigo
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[es_AR]=@APPLICATION_ICON_NAME@
|
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
|
Comment[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
||||||
GenericName[es_AR]=Sincronización de carpetas
|
GenericName[es_AR]=Sincronización de carpetas
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_CL]=Sincronización de carpeta
|
GenericName[es_CL]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_CO]=Sincronización de carpeta
|
GenericName[es_CO]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_CR]=Sincronización de carpeta
|
GenericName[es_CR]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[es_DO]=@APPLICATION_ICON_NAME@
|
Icon[es_DO]=@APPLICATION_ICON_NAME@
|
||||||
Name[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_DO]=Sincronización de carpeta
|
GenericName[es_DO]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_EC]=Sincronización de carpeta
|
GenericName[es_EC]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_GT]=Sincronización de carpeta
|
GenericName[es_GT]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_MX]=Sincronización de carpeta
|
GenericName[es_MX]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Name[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Comment[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
Comment[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
||||||
GenericName[es_SV]=Sincronización de carpeta
|
GenericName[es_SV]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[es]=@APPLICATION_ICON_NAME@
|
Icon[es]=@APPLICATION_ICON_NAME@
|
||||||
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
Name[es]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
Comment[es]=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName[es]=Sincronización de carpetas
|
GenericName[es]=Sincronización de carpetas
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[et_EE]=@APPLICATION_ICON_NAME@
|
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
|
Comment[et_EE]=@APPLICATION_NAME@ töölaua sünkroniseerimise klient
|
||||||
GenericName[et_EE]=Kausta Sünkroonimine
|
GenericName[et_EE]=Kausta Sünkroonimine
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[eu]=@APPLICATION_ICON_NAME@
|
Icon[eu]=@APPLICATION_ICON_NAME@
|
||||||
Name[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
Name[eu]=@APPLICATION_NAME@ Mahaigaina
|
||||||
Comment[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
Comment[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
||||||
GenericName[eu]=Karpeta-sinkronizazioa
|
GenericName[eu]=Karpeta-sinkronizazioa
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[fi_FI]=@APPLICATION_ICON_NAME@
|
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
|
Comment[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
||||||
GenericName[fi_FI]=Kansio synkronointi
|
GenericName[fi_FI]=Kansio synkronointi
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[fr]=@APPLICATION_ICON_NAME@
|
Icon[fr]=@APPLICATION_ICON_NAME@
|
||||||
Name[fr]=Client de synchro @APPLICATION_NAME@
|
Name[fr]=@APPLICATION_NAME@ Bureau
|
||||||
Comment[fr]=Client de synchronisation @APPLICATION_NAME@
|
Comment[fr]=Client de synchronisation @APPLICATION_NAME@
|
||||||
GenericName[fr]=Synchronisation du dossier
|
GenericName[fr]=Synchronisation du dossier
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[gl]=@APPLICATION_ICON_NAME@
|
Icon[gl]=@APPLICATION_ICON_NAME@
|
||||||
Name[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
|
||||||
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
||||||
GenericName[gl]=Sincronización de cartafol
|
GenericName[gl]=Sincronización de cartafol
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[he]=@APPLICATION_ICON_NAME@
|
Icon[he]=@APPLICATION_ICON_NAME@
|
||||||
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
|
||||||
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
||||||
GenericName[he]=סנכרון תיקיות
|
GenericName[he]=סנכרון תיקיות
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[hr]=@APPLICATION_ICON_NAME@
|
Icon[hr]=@APPLICATION_ICON_NAME@
|
||||||
Name[hr]=@APPLICATION_NAME@ klijent za sink. računala
|
|
||||||
Comment[hr]=@APPLICATION_NAME@ klijent za sinkronizaciju računala
|
Comment[hr]=@APPLICATION_NAME@ klijent za sinkronizaciju računala
|
||||||
GenericName[hr]=Sinkronizacija mapa
|
GenericName[hr]=Sinkronizacija mapa
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[hu_HU]=@APPLICATION_ICON_NAME@
|
Icon[hu_HU]=@APPLICATION_ICON_NAME@
|
||||||
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
|
Name[hu_HU]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
|
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
|
||||||
GenericName[hu_HU]=Mappaszinkronizálás
|
GenericName[hu_HU]=Mappaszinkronizálás
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[is]=@APPLICATION_ICON_NAME@
|
Icon[is]=@APPLICATION_ICON_NAME@
|
||||||
Name[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
|
|
||||||
Comment[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
|
Comment[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
|
||||||
GenericName[is]=Samstilling á möppum
|
GenericName[is]=Samstilling á möppum
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[it]=@APPLICATION_ICON_NAME@
|
Icon[it]=@APPLICATION_ICON_NAME@
|
||||||
Name[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
|
Name[it]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
|
Comment[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
|
||||||
GenericName[it]=Sincronizzazione cartelle
|
GenericName[it]=Sincronizzazione cartelle
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ja_JP]=@APPLICATION_ICON_NAME@
|
Icon[ja_JP]=@APPLICATION_ICON_NAME@
|
||||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ
|
||||||
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||||
GenericName[ja_JP]=フォルダーを同期する
|
GenericName[ja_JP]=フォルダーを同期する
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ko]=@APPLICATION_ICON_NAME@
|
Icon[ko]=@APPLICATION_ICON_NAME@
|
||||||
Name[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
|
||||||
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||||
GenericName[ko]=폴더 동기화
|
GenericName[ko]=폴더 동기화
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[lt_LT]=@APPLICATION_ICON_NAME@
|
Icon[lt_LT]=@APPLICATION_ICON_NAME@
|
||||||
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
|
||||||
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
||||||
GenericName[lt_LT]=Aplankų sinchronizavimas
|
GenericName[lt_LT]=Aplankų sinchronizavimas
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[lv]=@APPLICATION_ICON_NAME@
|
Icon[lv]=@APPLICATION_ICON_NAME@
|
||||||
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
|
||||||
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
||||||
GenericName[lv]=Mapju Sinhronizēšana
|
GenericName[lv]=Mapju Sinhronizēšana
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[mk]=@APPLICATION_ICON_NAME@
|
Icon[mk]=@APPLICATION_ICON_NAME@
|
||||||
Name[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
|
||||||
Comment[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
Comment[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
||||||
GenericName[mk]=Папка за синхронизација
|
GenericName[mk]=Папка за синхронизација
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[nb_NO]=@APPLICATION_ICON_NAME@
|
Icon[nb_NO]=@APPLICATION_ICON_NAME@
|
||||||
Name[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
|
||||||
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
||||||
GenericName[nb_NO]=Mappe synkroinisering
|
GenericName[nb_NO]=Mappe synkroinisering
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[nl]=@APPLICATION_ICON_NAME@
|
Icon[nl]=@APPLICATION_ICON_NAME@
|
||||||
Name[nl]=@APPLICATION_NAME@ desktop sync client
|
Name[nl]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
|
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
|
||||||
GenericName[nl]=Map synchronisatie
|
GenericName[nl]=Map synchronisatie
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[oc]=@APPLICATION_ICON_NAME@
|
Icon[oc]=@APPLICATION_ICON_NAME@
|
||||||
Name[oc]=@APPLICATION_NAME@ client de sincronizacion
|
|
||||||
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
|
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
|
||||||
GenericName[oc]=Sincro. dossièr
|
GenericName[oc]=Sincro. dossièr
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[pl]=@APPLICATION_ICON_NAME@
|
Icon[pl]=@APPLICATION_ICON_NAME@
|
||||||
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
Name[pl]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
Comment[pl]=Desktopowy klient synchronizacji @APPLICATION_NAME@
|
||||||
GenericName[pl]=Katalog synchronizacji
|
GenericName[pl]=Katalog synchronizacji
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[pt_BR]=@APPLICATION_ICON_NAME@
|
Icon[pt_BR]=@APPLICATION_ICON_NAME@
|
||||||
Name[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
Name[pt_BR]=@APPLICATION_NAME@ Desktop
|
||||||
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
||||||
GenericName[pt_BR]=Sincronizar pasta
|
GenericName[pt_BR]=Sincronizar pasta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[pt_PT]=@APPLICATION_ICON_NAME@
|
Icon[pt_PT]=@APPLICATION_ICON_NAME@
|
||||||
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
|
|
||||||
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
|
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
|
||||||
GenericName[pt_PT]=Sincronização de Pasta
|
GenericName[pt_PT]=Sincronização de Pasta
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ro]=@APPLICATION_ICON_NAME@
|
Icon[ro]=@APPLICATION_ICON_NAME@
|
||||||
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 director
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[ru]=@APPLICATION_ICON_NAME@
|
Icon[ru]=@APPLICATION_ICON_NAME@
|
||||||
Name[ru]=@APPLICATION_NAME@ для ПК
|
|
||||||
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
|
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
|
||||||
GenericName[ru]=Синхронизация папок
|
GenericName[ru]=Синхронизация папок
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sc]=@NÙMENE_ICONA_APLICATZIONE@
|
Icon[sc]=@NÙMENE_ICONA_APLICATZIONE@
|
||||||
Name[sc]=@NÙMENE_APLICATZIONE@ cliente sicronizadore de iscrivania
|
|
||||||
Comment[sc]=@NÙMENE_APLICATZIONE@ cliente de sincronizatzione iscrivania
|
Comment[sc]=@NÙMENE_APLICATZIONE@ cliente de sincronizatzione iscrivania
|
||||||
GenericName[sc]=Sincronizadore de cartellas
|
GenericName[sc]=Sincronizadore de cartellas
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
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@ Desktop
|
||||||
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]=Synchronizácia priečinkov
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sl]=@APPLICATION_ICON_NAME@
|
Icon[sl]=@APPLICATION_ICON_NAME@
|
||||||
Name[sl]=@APPLICATION_NAME@ program za usklajevanje
|
Name[sl]=Namizni program @APPLICATION_NAME@
|
||||||
Comment[sl]=@APPLICATION_NAME@ program za usklajevanje
|
Comment[sl]=Program za usklajevanje @APPLICATION_NAME@
|
||||||
GenericName[sl]=Usklajevanje map
|
GenericName[sl]=Usklajevanje map
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sr]=@APPLICATION_ICON_NAME@
|
Icon[sr]=@APPLICATION_ICON_NAME@
|
||||||
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
|
||||||
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
||||||
GenericName[sr]=Синхронизација фасцикли
|
GenericName[sr]=Синхронизација фасцикли
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sv]=@APPLICATION_ICON_NAME@
|
Icon[sv]=@APPLICATION_ICON_NAME@
|
||||||
Name[sv]=@APPLICATION_NAME@ desktopssynkklient
|
|
||||||
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
|
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
|
||||||
GenericName[sv]=Mappsynkronisering
|
GenericName[sv]=Mappsynkronisering
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[sw]=@APPLICATION_ICON_NAME@
|
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
|
Comment[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
||||||
GenericName[sw]=Fanana Kabrasha
|
GenericName[sw]=Fanana Kabrasha
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[tr]=@APPLICATION_ICON_NAME@
|
Icon[tr]=@APPLICATION_ICON_NAME@
|
||||||
Name[tr]=@APPLICATION_NAME@ masaüstü eşiteme istemcisi
|
Name[tr]=@APPLICATION_NAME@ Masaüstü
|
||||||
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
||||||
GenericName[tr]=Klasör Eşitleme
|
GenericName[tr]=Klasör eşitleme
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[uk]=@APPLICATION_ICON_NAME@
|
Icon[uk]=@APPLICATION_ICON_NAME@
|
||||||
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
|
||||||
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
||||||
GenericName[uk]=Синхронізація тек
|
GenericName[uk]=Синхронізація тек
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[zh_CN]=@APPLICATION_ICON_NAME@
|
Icon[zh_CN]=@APPLICATION_ICON_NAME@
|
||||||
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
Name[zh_CN]=@APPLICATION_NAME@ 桌面
|
||||||
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
||||||
GenericName[zh_CN]=文件夹同步
|
GenericName[zh_CN]=文件夹同步
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[zh_HK]=@APPLICATION_ICON_NAME@
|
Icon[zh_HK]=@APPLICATION_ICON_NAME@
|
||||||
Name[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
|
Name[zh_HK]=@APPLICATION_NAME@ 桌面電腦
|
||||||
Comment[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
|
Comment[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
|
||||||
GenericName[zh_HK]=資料夾同步
|
GenericName[zh_HK]=資料夾同步
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Categories=Utility;X-SuSE-SyncUtility;
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=@APPLICATION_EXECUTABLE@
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
Name=@APPLICATION_NAME@ desktop sync client
|
Name=@APPLICATION_NAME@ Desktop
|
||||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_ICON_NAME@
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
|||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Icon[zh_TW]=@APPLICATION_ICON_NAME@
|
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]=資料夾同步
|
||||||
|
|||||||
@@ -10,13 +10,7 @@ endif()
|
|||||||
|
|
||||||
set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
|
include(${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake)
|
||||||
set(OEM_THEME_DIR "" CACHE STRING "Define directory containing a custom theme")
|
|
||||||
if ( EXISTS ${OEM_THEME_DIR}/OEM.cmake )
|
|
||||||
include ( ${OEM_THEME_DIR}/OEM.cmake )
|
|
||||||
else ()
|
|
||||||
include ( ${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Default suffix if the theme doesn't define one
|
# Default suffix if the theme doesn't define one
|
||||||
if(NOT DEFINED APPLICATION_VIRTUALFILE_SUFFIX)
|
if(NOT DEFINED APPLICATION_VIRTUALFILE_SUFFIX)
|
||||||
|
|||||||
@@ -9,13 +9,8 @@ endif(CPACK_GENERATOR MATCHES "NSIS")
|
|||||||
|
|
||||||
set( CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@ )
|
set( CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@ )
|
||||||
set( CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@ )
|
set( CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@ )
|
||||||
set( OEM_THEME_DIR @OEM_THEME_DIR@ )
|
|
||||||
|
|
||||||
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
|
include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake")
|
||||||
include ( ${OEM_THEME_DIR}/OEM.cmake )
|
|
||||||
else ()
|
|
||||||
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set( CRASHREPORTER_EXECUTABLE @CRASHREPORTER_EXECUTABLE@)
|
set( CRASHREPORTER_EXECUTABLE @CRASHREPORTER_EXECUTABLE@)
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,7 @@ include( InstallRequiredSystemLibraries )
|
|||||||
|
|
||||||
set( CPACK_PACKAGE_CONTACT "Dominik Schmidt <domme@tomahawk-player.org>" )
|
set( CPACK_PACKAGE_CONTACT "Dominik Schmidt <domme@tomahawk-player.org>" )
|
||||||
|
|
||||||
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
|
include("${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake")
|
||||||
include ( "${OEM_THEME_DIR}/OEM.cmake" )
|
|
||||||
else ()
|
|
||||||
include ( "${CMAKE_SOURCE_DIR}/NEXTCLOUD.cmake" )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include( VERSION.cmake )
|
include( VERSION.cmake )
|
||||||
set( CPACK_PACKAGE_VERSION_MAJOR ${MIRALL_VERSION_MAJOR} )
|
set( CPACK_PACKAGE_VERSION_MAJOR ${MIRALL_VERSION_MAJOR} )
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 3 )
|
set( MIRALL_VERSION_MAJOR 3 )
|
||||||
set( MIRALL_VERSION_MINOR 2 )
|
set( MIRALL_VERSION_MINOR 2 )
|
||||||
set( MIRALL_VERSION_PATCH 0 )
|
set( MIRALL_VERSION_PATCH 4 )
|
||||||
set( MIRALL_VERSION_YEAR 2021 )
|
set( MIRALL_VERSION_YEAR 2021 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ mkdir /app
|
|||||||
mkdir /build
|
mkdir /build
|
||||||
|
|
||||||
#Set Qt-5.12
|
#Set Qt-5.12
|
||||||
export QT_BASE_DIR=/opt/qt5.12.9
|
export QT_BASE_DIR=/opt/qt5.12.10
|
||||||
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
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ OBS_PROJECT_BETA=home:ivaradi:beta
|
|||||||
OBS_PACKAGE=nextcloud-desktop
|
OBS_PACKAGE=nextcloud-desktop
|
||||||
|
|
||||||
if test "${DRONE_TARGET_BRANCH}" = "stable-2.6"; then
|
if test "${DRONE_TARGET_BRANCH}" = "stable-2.6"; then
|
||||||
UBUNTU_DISTRIBUTIONS="bionic focal groovy hirsute"
|
UBUNTU_DISTRIBUTIONS="bionic focal groovy hirsute impish"
|
||||||
DEBIAN_DISTRIBUTIONS="buster stretch testing"
|
DEBIAN_DISTRIBUTIONS="buster stretch testing"
|
||||||
else
|
else
|
||||||
UBUNTU_DISTRIBUTIONS="focal groovy hirsute"
|
UBUNTU_DISTRIBUTIONS="focal groovy hirsute impish"
|
||||||
DEBIAN_DISTRIBUTIONS="testing"
|
DEBIAN_DISTRIBUTIONS="testing"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ for distribution in ${UBUNTU_DISTRIBUTIONS} ${DEBIAN_DISTRIBUTIONS}; do
|
|||||||
dpkg-genchanges -S -sa > "../nextcloud-desktop_${fullver}_source.changes"
|
dpkg-genchanges -S -sa > "../nextcloud-desktop_${fullver}_source.changes"
|
||||||
|
|
||||||
if test -f ~/.has_ppa_keys; then
|
if test -f ~/.has_ppa_keys; then
|
||||||
debsign -k7D14AA7B -S
|
debsign -k2265D8767D14AA7B -S
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
cd ..
|
cd ..
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
# Check if varialbe MAC_INSTALLER_BACKGROUND_FILE is defined. That might come
|
# Check if varialbe MAC_INSTALLER_BACKGROUND_FILE is defined.
|
||||||
# from the OEM.cmake for branded clients or from NEXTCLOUD.cmake for the non
|
|
||||||
# branded client.
|
|
||||||
# Make sure that the MAC_INSTALLER_BACKGROUND_FILE contains the full path, ie.
|
# Make sure that the MAC_INSTALLER_BACKGROUND_FILE contains the full path, ie.
|
||||||
# includes CMAKE_SOURCE_DIR or so.
|
# includes CMAKE_SOURCE_DIR or so.
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,9 @@
|
|||||||
<Property Id="INSTALLDIR">
|
<Property Id="INSTALLDIR">
|
||||||
<RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" />
|
<RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" />
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property Id="WINDOWSRELEASEID">
|
||||||
|
<RegistrySearch Id="RegistryWindowsReleaseId" Type="raw" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion" Name="ReleaseId"/>
|
||||||
|
</Property>
|
||||||
|
|
||||||
<!-- Detect legacy NSIS installation -->
|
<!-- Detect legacy NSIS installation -->
|
||||||
<Property Id="NSIS_UNINSTALLEXE">
|
<Property Id="NSIS_UNINSTALLEXE">
|
||||||
@@ -77,8 +80,8 @@
|
|||||||
<!-- Uninstall: Remove sync folders from Explorer's Navigation Pane, only effective for the current user (home users) -->
|
<!-- Uninstall: Remove sync folders from Explorer's Navigation Pane, only effective for the current user (home users) -->
|
||||||
<Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
|
<Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
|
||||||
|
|
||||||
<!-- Schedule Reboot for the Shell Extensions -->
|
<!-- Schedule Reboot for the Shell Extensions (in silent installation mode only, or if SCHEDULE_REBOOT argument is set-->
|
||||||
<ScheduleReboot After="InstallFinalize">NOT (DO_NOT_SCHEDULE_REBOOT=1)</ScheduleReboot>
|
<ScheduleReboot After="InstallFinalize">(SCHEDULE_REBOOT=1) OR NOT (UILevel=2)</ScheduleReboot>
|
||||||
</InstallExecuteSequence>
|
</InstallExecuteSequence>
|
||||||
|
|
||||||
<!-- "Add or Remove" Programs Entries -->
|
<!-- "Add or Remove" Programs Entries -->
|
||||||
@@ -214,6 +217,6 @@
|
|||||||
<Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition>
|
<Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition>
|
||||||
</Feature>
|
</Feature>
|
||||||
</Feature>
|
</Feature>
|
||||||
|
<Condition Message="This application only runs on Windows 10, version 1709 or higher!">(VersionNT>=603 AND WINDOWSRELEASEID>=1709)</Condition>
|
||||||
</Product>
|
</Product>
|
||||||
</Wix>
|
</Wix>
|
||||||
|
|||||||
@@ -41,16 +41,16 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'Nextcloud Client Manual'
|
project = u'Nextcloud Client Manual'
|
||||||
copyright = u'2013-2020, The Nextcloud developers'
|
copyright = u'2013-2021, The Nextcloud developers'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '3.0'
|
version = '3.2'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '3.0'
|
release = '3.2.4'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ You can download the latest version of the Nextcloud Desktop Synchronization
|
|||||||
Client from the `Nextcloud download page`_.
|
Client from the `Nextcloud download page`_.
|
||||||
There are clients for Linux, macOs, and Microsoft Windows.
|
There are clients for Linux, macOs, and Microsoft Windows.
|
||||||
|
|
||||||
|
The currently supported server releases are the latest three stable versions
|
||||||
|
at time of publication. It means that the |version| release series is supporting
|
||||||
|
server major version 19, 20 and 21.
|
||||||
|
|
||||||
Installation on Mac OS X and Windows is the same as for any software
|
Installation on Mac OS X and Windows is the same as for any software
|
||||||
application: download the program and then double-click it to launch the
|
application: download the program and then double-click it to launch the
|
||||||
installation, and then follow the installation wizard. After it is installed and
|
installation, and then follow the installation wizard. After it is installed and
|
||||||
|
|||||||
@@ -18,10 +18,8 @@ Improvements and New Features
|
|||||||
The |version| release of the Nextcloud desktop sync client has many new features and
|
The |version| release of the Nextcloud desktop sync client has many new features and
|
||||||
improvements.
|
improvements.
|
||||||
|
|
||||||
* Show server notifications on the client
|
* Virtual Files on Windows
|
||||||
* Improved sync speed
|
* Support for the user status from the server
|
||||||
* Improved handling of Win32 file locks and network files
|
* Many improvements to the sync engine
|
||||||
* Improved user notifications about ignored files and conflicts
|
* Make the end-to-end encryption work more reliable
|
||||||
* Add warnings for old server versions
|
* Improve sync performance
|
||||||
* Update of QtKeyChain to support Windows credential store
|
|
||||||
* Packaging of dolphin overlay icon module for bleeding edge distributions
|
|
||||||
|
|||||||
53344
src/3rdparty/sqlite3/sqlite3.c
vendored
53344
src/3rdparty/sqlite3/sqlite3.c
vendored
File diff suppressed because it is too large
Load Diff
2338
src/3rdparty/sqlite3/sqlite3.h
vendored
2338
src/3rdparty/sqlite3/sqlite3.h
vendored
File diff suppressed because it is too large
Load Diff
@@ -480,6 +480,14 @@ bool FileSystem::isLnkFile(const QString &filename)
|
|||||||
return filename.endsWith(QLatin1String(".lnk"));
|
return filename.endsWith(QLatin1String(".lnk"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FileSystem::isExcludeFile(const QString &filename)
|
||||||
|
{
|
||||||
|
return filename.compare(QStringLiteral(".sync-exclude.lst"), Qt::CaseInsensitive) == 0
|
||||||
|
|| filename.compare(QStringLiteral("exclude.lst"), Qt::CaseInsensitive) == 0
|
||||||
|
|| filename.endsWith(QStringLiteral("/.sync-exclude.lst"), Qt::CaseInsensitive)
|
||||||
|
|| filename.endsWith(QStringLiteral("/exclude.lst"), Qt::CaseInsensitive);
|
||||||
|
}
|
||||||
|
|
||||||
bool FileSystem::isJunction(const QString &filename)
|
bool FileSystem::isJunction(const QString &filename)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
|||||||
@@ -153,6 +153,11 @@ namespace FileSystem {
|
|||||||
*/
|
*/
|
||||||
bool OCSYNC_EXPORT isLnkFile(const QString &filename);
|
bool OCSYNC_EXPORT isLnkFile(const QString &filename);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the file is an exclude file (contains patterns to exclude from sync)
|
||||||
|
*/
|
||||||
|
bool OCSYNC_EXPORT isExcludeFile(const QString &filename);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the file is a junction (windows only)
|
* Returns whether the file is a junction (windows only)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -676,6 +676,26 @@ QByteArray Utility::conflictFileBaseNameFromPattern(const QByteArray &conflictNa
|
|||||||
return conflictName.left(tagStart) + conflictName.mid(tagEnd);
|
return conflictName.left(tagStart) + conflictName.mid(tagEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Utility::isPathWindowsDrivePartitionRoot(const QString &path)
|
||||||
|
{
|
||||||
|
Q_UNUSED(path)
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
// should be 2 or 3 characters length
|
||||||
|
if (!(path.size() >= 2 && path.size() <= 3)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// must mutch a pattern "[A-Za-z]:"
|
||||||
|
if (!(path.at(1) == QLatin1Char(':') && path.at(0).isLetter())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// final check - last character should be either slash/backslash, or, it should be missing
|
||||||
|
return path.size() < 3 || path.at(2) == QLatin1Char('/') || path.at(2) == QLatin1Char('\\');
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
QString Utility::sanitizeForFileName(const QString &name)
|
QString Utility::sanitizeForFileName(const QString &name)
|
||||||
{
|
{
|
||||||
const auto invalid = QStringLiteral(R"(/?<>\:*|")");
|
const auto invalid = QStringLiteral(R"(/?<>\:*|")");
|
||||||
|
|||||||
@@ -235,6 +235,11 @@ namespace Utility {
|
|||||||
*/
|
*/
|
||||||
OCSYNC_EXPORT QByteArray conflictFileBaseNameFromPattern(const QByteArray &conflictName);
|
OCSYNC_EXPORT QByteArray conflictFileBaseNameFromPattern(const QByteArray &conflictName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether the path is a root of a Windows drive partition ([c:/, d:/, e:/, etc.)
|
||||||
|
*/
|
||||||
|
OCSYNC_EXPORT bool isPathWindowsDrivePartitionRoot(const QString &path);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
OCSYNC_EXPORT bool registryKeyExists(HKEY hRootKey, const QString &subKey);
|
OCSYNC_EXPORT bool registryKeyExists(HKEY hRootKey, const QString &subKey);
|
||||||
OCSYNC_EXPORT QVariant registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName);
|
OCSYNC_EXPORT QVariant registryGetKeyValue(HKEY hRootKey, const QString &subKey, const QString &valueName);
|
||||||
|
|||||||
@@ -9,16 +9,11 @@ IF(BUILD_UPDATER)
|
|||||||
add_subdirectory(updater)
|
add_subdirectory(updater)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(MIRALL_RC_SRC ../../resources.qrc)
|
configure_file(${CMAKE_SOURCE_DIR}/theme.qrc.in ${CMAKE_SOURCE_DIR}/theme.qrc)
|
||||||
if (EXISTS "${OEM_THEME_DIR}/theme.qrc")
|
|
||||||
list(APPEND MIRALL_RC_SRC ${OEM_THEME_DIR}/theme.qrc)
|
|
||||||
set(theme_dir ${OEM_THEME_DIR}/theme)
|
|
||||||
else()
|
|
||||||
list(APPEND MIRALL_RC_SRC ../../theme.qrc)
|
|
||||||
set(theme_dir ${CMAKE_SOURCE_DIR}/theme)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#set (QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/src/gui/tray" CACHE STRING "Extra qml module import paths" FORCE)
|
set(MIRALL_RC_SRC ../../resources.qrc)
|
||||||
|
list(APPEND MIRALL_RC_SRC ${CMAKE_SOURCE_DIR}/theme.qrc)
|
||||||
|
set(theme_dir ${CMAKE_SOURCE_DIR}/theme)
|
||||||
|
|
||||||
set(client_UI_SRCS
|
set(client_UI_SRCS
|
||||||
accountsettings.ui
|
accountsettings.ui
|
||||||
@@ -223,8 +218,6 @@ set( final_src
|
|||||||
${MIRALL_RC_SRC}
|
${MIRALL_RC_SRC}
|
||||||
${client_SRCS}
|
${client_SRCS}
|
||||||
${client_UI_SRCS}
|
${client_UI_SRCS}
|
||||||
${client_version}
|
|
||||||
${client_manifest}
|
|
||||||
${guiMoc}
|
${guiMoc}
|
||||||
${client_I18N}
|
${client_I18N}
|
||||||
${3rdparty_SRC}
|
${3rdparty_SRC}
|
||||||
@@ -248,12 +241,81 @@ if (NOT DEFINED APPLICATION_ICON_NAME)
|
|||||||
set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME})
|
set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Generate png icons from svg
|
||||||
|
find_program(INKSCAPE
|
||||||
|
NAMES inkscape inkscape.exe
|
||||||
|
REQUIRED
|
||||||
|
HINTS "C:\\Program Files\\Inkscape\\bin" "/usr/bin" ENV INKSCAPE_DIR)
|
||||||
|
# REQUIRED keyword is only supported on CMake 3.18 and above
|
||||||
|
if (NOT INKSCAPE)
|
||||||
|
message(FATAL_ERROR "Could not find inkscape. Set INKSCAPE_DIR to the path of executable.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(generate_sized_png_from_svg icon_path size)
|
||||||
|
get_filename_component(icon_name_dir ${icon_path} DIRECTORY)
|
||||||
|
get_filename_component(icon_name_wle ${icon_path} NAME_WLE)
|
||||||
|
|
||||||
|
if (EXISTS "${icon_name_dir}/${size}-${icon_name_wle}.png")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(icon_output_name "${size}-${icon_name_wle}.png")
|
||||||
|
message(STATUS "Generate ${icon_output_name}")
|
||||||
|
execute_process(COMMAND
|
||||||
|
"${INKSCAPE}" -w ${size} -h ${size} "${icon_path}" -o "${icon_output_name}"
|
||||||
|
WORKING_DIRECTORY "${icon_name_dir}"
|
||||||
|
RESULT_VARIABLE
|
||||||
|
INKSCAPE_SIDEBAR_ERROR
|
||||||
|
OUTPUT_QUIET
|
||||||
|
ERROR_QUIET)
|
||||||
|
|
||||||
|
if (INKSCAPE_SIDEBAR_ERROR)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"inkscape could not generate icon: ${INKSCAPE_SIDEBAR_ERROR}")
|
||||||
|
else()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if ((APPLICATION_ICON_SET MATCHES "PNG")
|
||||||
|
AND
|
||||||
|
(NOT EXISTS "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg"))
|
||||||
|
# We may have no svg application icon in when customers use PNG
|
||||||
|
# icons in brander, but theme.qrc expects a svg icon.
|
||||||
|
file(TOUCH "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set(MACOS_SIDEBAR_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-sidebar.svg")
|
||||||
|
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 16)
|
||||||
|
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 32)
|
||||||
|
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 64)
|
||||||
|
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 128)
|
||||||
|
generate_sized_png_from_svg(${MACOS_SIDEBAR_ICON_SVG} 256)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(STARTMENU_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-w10startmenu.svg")
|
||||||
|
generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 70)
|
||||||
|
generate_sized_png_from_svg(${STARTMENU_ICON_SVG} 150)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(APP_ICON_SVG "${theme_dir}/colored/${APPLICATION_ICON_NAME}-icon.svg")
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 16)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 24)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 32)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 48)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 64)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 128)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 256)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 512)
|
||||||
|
generate_sized_png_from_svg(${APP_ICON_SVG} 1024)
|
||||||
|
|
||||||
file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*")
|
file(GLOB_RECURSE OWNCLOUD_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon*")
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
|
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
|
||||||
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
|
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
|
||||||
endif()
|
endif()
|
||||||
ecm_add_app_icon(final_src ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
|
ecm_add_app_icon(APP_ICON ICONS "${OWNCLOUD_ICONS}" SIDEBAR_ICONS "${OWNCLOUD_SIDEBAR_ICONS}" OUTFILE_BASENAME "${APPLICATION_ICON_NAME}")
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
|
||||||
@@ -315,13 +377,13 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# we may not add MACOSX_BUNDLE here, if not building one
|
# we may not add MACOSX_BUNDLE here, if not building one
|
||||||
add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp)
|
add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp ${client_version} ${client_manifest} ${APP_ICON})
|
||||||
else()
|
else()
|
||||||
# set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
|
# set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
|
||||||
set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns")
|
set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns")
|
||||||
|
|
||||||
# we must add MACOSX_BUNDLE only if building a bundle
|
# we must add MACOSX_BUNDLE only if building a bundle
|
||||||
add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp)
|
add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp ${APP_ICON})
|
||||||
|
|
||||||
set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations)
|
set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations)
|
||||||
install(FILES ${client_I18N} DESTINATION ${QM_DIR})
|
install(FILES ${client_I18N} DESTINATION ${QM_DIR})
|
||||||
|
|||||||
@@ -571,6 +571,9 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
|
|||||||
const auto mode = bestAvailableVfsMode();
|
const auto mode = bestAvailableVfsMode();
|
||||||
if (mode == Vfs::WindowsCfApi || ConfigFile().showExperimentalOptions()) {
|
if (mode == Vfs::WindowsCfApi || ConfigFile().showExperimentalOptions()) {
|
||||||
ac = menu->addAction(tr("Enable virtual file support %1 …").arg(mode == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
|
ac = menu->addAction(tr("Enable virtual file support %1 …").arg(mode == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
|
||||||
|
// TODO: remove when UX decision is made
|
||||||
|
ac->setEnabled(!Utility::isPathWindowsDrivePartitionRoot(folder->path()));
|
||||||
|
//
|
||||||
connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableVfsCurrentFolder);
|
connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableVfsCurrentFolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -536,6 +536,21 @@ void FolderWizardSelectiveSync::initializePage()
|
|||||||
initialBlacklist = QStringList("/");
|
initialBlacklist = QStringList("/");
|
||||||
}
|
}
|
||||||
_selectiveSync->setFolderInfo(targetPath, alias, initialBlacklist);
|
_selectiveSync->setFolderInfo(targetPath, alias, initialBlacklist);
|
||||||
|
|
||||||
|
if (_virtualFilesCheckBox) {
|
||||||
|
// TODO: remove when UX decision is made
|
||||||
|
if (Utility::isPathWindowsDrivePartitionRoot(wizard()->field(QStringLiteral("sourceFolder")).toString())) {
|
||||||
|
_virtualFilesCheckBox->setChecked(false);
|
||||||
|
_virtualFilesCheckBox->setEnabled(false);
|
||||||
|
_virtualFilesCheckBox->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter."));
|
||||||
|
} else {
|
||||||
|
_virtualFilesCheckBox->setChecked(bestAvailableVfsMode() == Vfs::WindowsCfApi);
|
||||||
|
_virtualFilesCheckBox->setEnabled(true);
|
||||||
|
_virtualFilesCheckBox->setText(tr("Use virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
|
||||||
|
}
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
QWizardPage::initializePage();
|
QWizardPage::initializePage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,9 +86,6 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
|
|||||||
// We currently don't distinguish between new and existing CLSIDs, if it's there we just
|
// We currently don't distinguish between new and existing CLSIDs, if it's there we just
|
||||||
// save over it. We at least need to update the tile in case we are suddently using multiple accounts.
|
// save over it. We at least need to update the tile in case we are suddently using multiple accounts.
|
||||||
foreach (Folder *folder, _folderMan->map()) {
|
foreach (Folder *folder, _folderMan->map()) {
|
||||||
if (folder->vfs().mode() == Vfs::WindowsCfApi) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!folder->navigationPaneClsid().isNull()) {
|
if (!folder->navigationPaneClsid().isNull()) {
|
||||||
// If it already exists, unmark it for removal, this is a valid sync root.
|
// If it already exists, unmark it for removal, this is a valid sync root.
|
||||||
entriesToRemove.removeOne(folder->navigationPaneClsid());
|
entriesToRemove.removeOne(folder->navigationPaneClsid());
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "configfile.h"
|
#include "configfile.h"
|
||||||
|
|
||||||
|
#include <QSysInfo>
|
||||||
|
|
||||||
namespace OCC {
|
namespace OCC {
|
||||||
|
|
||||||
Q_LOGGING_CATEGORY(lcUpdater, "nextcloud.gui.updater", QtInfoMsg)
|
Q_LOGGING_CATEGORY(lcUpdater, "nextcloud.gui.updater", QtInfoMsg)
|
||||||
@@ -88,6 +90,9 @@ QUrlQuery Updater::getQueryParams()
|
|||||||
}
|
}
|
||||||
query.addQueryItem(QStringLiteral("version"), clientVersion());
|
query.addQueryItem(QStringLiteral("version"), clientVersion());
|
||||||
query.addQueryItem(QStringLiteral("platform"), platform);
|
query.addQueryItem(QStringLiteral("platform"), platform);
|
||||||
|
query.addQueryItem(QStringLiteral("osRelease"), QSysInfo::productType());
|
||||||
|
query.addQueryItem(QStringLiteral("osVersion"), QSysInfo::productVersion());
|
||||||
|
query.addQueryItem(QStringLiteral("kernelVersion"), QSysInfo::kernelVersion());
|
||||||
query.addQueryItem(QStringLiteral("oem"), theme->appName());
|
query.addQueryItem(QStringLiteral("oem"), theme->appName());
|
||||||
query.addQueryItem(QStringLiteral("buildArch"), QSysInfo::buildCpuArchitecture());
|
query.addQueryItem(QStringLiteral("buildArch"), QSysInfo::buildCpuArchitecture());
|
||||||
query.addQueryItem(QStringLiteral("currentArch"), QSysInfo::currentCpuArchitecture());
|
query.addQueryItem(QStringLiteral("currentArch"), QSysInfo::currentCpuArchitecture());
|
||||||
|
|||||||
@@ -221,6 +221,24 @@ void OwncloudAdvancedSetupPage::fetchUserData()
|
|||||||
_ui.userNameLabel->setText(userName);
|
_ui.userNameLabel->setText(userName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OwncloudAdvancedSetupPage::refreshVirtualFilesAvailibility(const QString &path)
|
||||||
|
{
|
||||||
|
// TODO: remove when UX decision is made
|
||||||
|
if (!_ui.rVirtualFileSync->isVisible()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Utility::isPathWindowsDrivePartitionRoot(path)) {
|
||||||
|
_ui.rVirtualFileSync->setText(tr("Virtual files are not supported for Windows partition roots as local folder. Please choose a valid subfolder under drive letter."));
|
||||||
|
setRadioChecked(_ui.rSyncEverything);
|
||||||
|
_ui.rVirtualFileSync->setEnabled(false);
|
||||||
|
} else {
|
||||||
|
_ui.rVirtualFileSync->setText(tr("Use &virtual files instead of downloading content immediately %1").arg(bestAvailableVfsMode() == Vfs::WindowsCfApi ? QString() : tr("(experimental)")));
|
||||||
|
_ui.rVirtualFileSync->setEnabled(true);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
void OwncloudAdvancedSetupPage::setServerAddressLabelUrl(const QUrl &url)
|
void OwncloudAdvancedSetupPage::setServerAddressLabelUrl(const QUrl &url)
|
||||||
{
|
{
|
||||||
if (!url.isValid()) {
|
if (!url.isValid()) {
|
||||||
@@ -411,6 +429,9 @@ void OwncloudAdvancedSetupPage::slotSelectFolder()
|
|||||||
{
|
{
|
||||||
QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath());
|
QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath());
|
||||||
if (!dir.isEmpty()) {
|
if (!dir.isEmpty()) {
|
||||||
|
// TODO: remove when UX decision is made
|
||||||
|
refreshVirtualFilesAvailibility(dir);
|
||||||
|
|
||||||
setLocalFolderPushButtonPath(dir);
|
setLocalFolderPushButtonPath(dir);
|
||||||
wizard()->setProperty("localFolder", dir);
|
wizard()->setProperty("localFolder", dir);
|
||||||
updateStatus();
|
updateStatus();
|
||||||
|
|||||||
@@ -84,6 +84,9 @@ private:
|
|||||||
void fetchUserAvatar();
|
void fetchUserAvatar();
|
||||||
void fetchUserData();
|
void fetchUserData();
|
||||||
|
|
||||||
|
// TODO: remove when UX decision is made
|
||||||
|
void refreshVirtualFilesAvailibility(const QString &path);
|
||||||
|
|
||||||
Ui_OwncloudAdvancedSetupPage _ui;
|
Ui_OwncloudAdvancedSetupPage _ui;
|
||||||
bool _checking = false;
|
bool _checking = false;
|
||||||
bool _created = false;
|
bool _created = false;
|
||||||
|
|||||||
@@ -116,7 +116,10 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
|||||||
void OwncloudWizard::centerWindow()
|
void OwncloudWizard::centerWindow()
|
||||||
{
|
{
|
||||||
const auto wizardWindow = window();
|
const auto wizardWindow = window();
|
||||||
const auto screenGeometry = QGuiApplication::screenAt(wizardWindow->pos())->geometry();
|
const auto screen = QGuiApplication::screenAt(wizardWindow->pos())
|
||||||
|
? QGuiApplication::screenAt(wizardWindow->pos())
|
||||||
|
: QGuiApplication::primaryScreen();
|
||||||
|
const auto screenGeometry = screen->geometry();
|
||||||
const auto windowGeometry = wizardWindow->geometry();
|
const auto windowGeometry = wizardWindow->geometry();
|
||||||
const auto newWindowPosition = screenGeometry.center() - QPoint(windowGeometry.width() / 2, windowGeometry.height() / 2);
|
const auto newWindowPosition = screenGeometry.center() - QPoint(windowGeometry.width() / 2, windowGeometry.height() / 2);
|
||||||
wizardWindow->move(newWindowPosition);
|
wizardWindow->move(newWindowPosition);
|
||||||
|
|||||||
@@ -706,8 +706,8 @@ QByteArray decryptStringAsymmetric(EVP_PKEY *privateKey, const QByteArray& data)
|
|||||||
QByteArray out(outlen, '\0');
|
QByteArray out(outlen, '\0');
|
||||||
|
|
||||||
if (EVP_PKEY_decrypt(ctx, unsignedData(out), &outlen, (unsigned char *)data.constData(), data.size()) <= 0) {
|
if (EVP_PKEY_decrypt(ctx, unsignedData(out), &outlen, (unsigned char *)data.constData(), data.size()) <= 0) {
|
||||||
qCInfo(lcCseDecryption()) << "Could not decrypt the data.";
|
const auto error = handleErrors();
|
||||||
ERR_print_errors_fp(stdout); // This line is not printing anything.
|
qCCritical(lcCseDecryption()) << "Could not decrypt the data." << error;
|
||||||
return {};
|
return {};
|
||||||
} else {
|
} else {
|
||||||
qCInfo(lcCseDecryption()) << "data decrypted successfully";
|
qCInfo(lcCseDecryption()) << "data decrypted successfully";
|
||||||
|
|||||||
@@ -513,7 +513,8 @@ void ProcessDirectoryJob::processFileAnalyzeRemoteInfo(
|
|||||||
if (!localEntry.isValid()
|
if (!localEntry.isValid()
|
||||||
&& item->_type == ItemTypeFile
|
&& item->_type == ItemTypeFile
|
||||||
&& opts._vfs->mode() != Vfs::Off
|
&& opts._vfs->mode() != Vfs::Off
|
||||||
&& _pinState != PinState::AlwaysLocal) {
|
&& _pinState != PinState::AlwaysLocal
|
||||||
|
&& !FileSystem::isExcludeFile(item->_file)) {
|
||||||
item->_type = ItemTypeVirtualFile;
|
item->_type = ItemTypeVirtualFile;
|
||||||
if (isVfsWithSuffix())
|
if (isVfsWithSuffix())
|
||||||
addVirtualFileSuffix(tmp_path._original);
|
addVirtualFileSuffix(tmp_path._original);
|
||||||
@@ -1045,7 +1046,7 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo(
|
|||||||
} else {
|
} else {
|
||||||
// We must query the server to know if the etag has not changed
|
// We must query the server to know if the etag has not changed
|
||||||
_pendingAsyncJobs++;
|
_pendingAsyncJobs++;
|
||||||
QString serverOriginalPath = _discoveryData->adjustRenamedPath(originalPath, SyncFileItem::Down);
|
QString serverOriginalPath = _discoveryData->_remoteFolder +_discoveryData->adjustRenamedPath(originalPath, SyncFileItem::Down);
|
||||||
if (base.isVirtualFile() && isVfsWithSuffix())
|
if (base.isVirtualFile() && isVfsWithSuffix())
|
||||||
chopVirtualFileSuffix(serverOriginalPath);
|
chopVirtualFileSuffix(serverOriginalPath);
|
||||||
auto job = new RequestEtagJob(_discoveryData->_account, serverOriginalPath, this);
|
auto job = new RequestEtagJob(_discoveryData->_account, serverOriginalPath, this);
|
||||||
|
|||||||
@@ -344,11 +344,13 @@ void GETFileJob::slotReadyRead()
|
|||||||
|
|
||||||
void GETFileJob::cancel()
|
void GETFileJob::cancel()
|
||||||
{
|
{
|
||||||
if (reply()->isRunning()) {
|
const auto networkReply = reply();
|
||||||
reply()->abort();
|
if (networkReply && networkReply->isRunning()) {
|
||||||
|
networkReply->abort();
|
||||||
|
}
|
||||||
|
if (_device && _device->isOpen()) {
|
||||||
|
_device->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
emit canceled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GETFileJob::onTimedOut()
|
void GETFileJob::onTimedOut()
|
||||||
@@ -427,6 +429,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
|||||||
}
|
}
|
||||||
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
||||||
updateMetadata(false);
|
updateMetadata(false);
|
||||||
|
|
||||||
|
if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) {
|
||||||
|
// make sure ReadOnly flag is preserved for placeholder, similarly to regular files
|
||||||
|
FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (vfs->mode() == Vfs::Off && _item->_type == ItemTypeVirtualFile) {
|
if (vfs->mode() == Vfs::Off && _item->_type == ItemTypeVirtualFile) {
|
||||||
@@ -434,6 +442,11 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
|||||||
_item->_type = ItemTypeFile;
|
_item->_type = ItemTypeFile;
|
||||||
}
|
}
|
||||||
if (_item->_type == ItemTypeVirtualFile) {
|
if (_item->_type == ItemTypeVirtualFile) {
|
||||||
|
if (propagator()->localFileNameClash(_item->_file)) {
|
||||||
|
done(SyncFileItem::NormalError, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
qCDebug(lcPropagateDownload) << "creating virtual file" << _item->_file;
|
qCDebug(lcPropagateDownload) << "creating virtual file" << _item->_file;
|
||||||
auto r = vfs->createPlaceholder(*_item);
|
auto r = vfs->createPlaceholder(*_item);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
@@ -441,6 +454,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
updateMetadata(false);
|
updateMetadata(false);
|
||||||
|
|
||||||
|
if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) {
|
||||||
|
// make sure ReadOnly flag is preserved for placeholder, similarly to regular files
|
||||||
|
FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ public:
|
|||||||
void setExpectedContentLength(qint64 size) { _expectedContentLength = size; }
|
void setExpectedContentLength(qint64 size) { _expectedContentLength = size; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void canceled();
|
|
||||||
void finishedSignal();
|
void finishedSignal();
|
||||||
void downloadProgress(qint64, qint64);
|
void downloadProgress(qint64, qint64);
|
||||||
private slots:
|
private slots:
|
||||||
|
|||||||
@@ -795,8 +795,55 @@ void SyncEngine::slotPropagationFinished(bool success)
|
|||||||
_anotherSyncNeeded = ImmediateFollowUp;
|
_anotherSyncNeeded = ImmediateFollowUp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove this when the file restoration problem is fixed for a user
|
||||||
|
bool shouldStartSyncAgain = false;
|
||||||
|
const auto checkAndOverrideSetDataFingerprint = [this, &shouldStartSyncAgain] {
|
||||||
|
const int dataFingerprintOverrideThreshold = 9;
|
||||||
|
const QString dataFingerprintOverrideHostHash = QStringLiteral("63debc9ef6d217649ea70632ca573a1db7a237ba61c48cdd2bf797f7060233db");
|
||||||
|
const auto accountHost = account()->url().host();
|
||||||
|
const auto accountDisplayName = account()->displayName();
|
||||||
|
|
||||||
|
if (_dataFingerprintSetFailCount >= 0) {
|
||||||
|
qCWarning(lcEngine) << "setDataFingerprint has failed for account" << accountDisplayName << "on host" << accountHost << "due to sync errors. Checking the possibility for override...";
|
||||||
|
|
||||||
|
if (_dataFingerprintSetFailCount > 0) {
|
||||||
|
if (_dataFingerprintSetFailCount >= dataFingerprintOverrideThreshold) {
|
||||||
|
qCWarning(lcEngine) << "All sync attempts failed for account" << accountDisplayName << "on host" << accountHost << "setting the dataFingerprint anyway.";
|
||||||
|
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
|
||||||
|
// this mechanism should only run once per app launch
|
||||||
|
_dataFingerprintSetFailCount = -1;
|
||||||
|
} else {
|
||||||
|
++_dataFingerprintSetFailCount;
|
||||||
|
// request to start sync again as it won't happen by itself unless the file has changed on the server or in the local folder
|
||||||
|
shouldStartSyncAgain = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// only compare hash once
|
||||||
|
// if it matches - we don't need to calculate it again while _dataFingerprintSetFailCount is greater than 0
|
||||||
|
const auto accountHostHash = QString::fromUtf8(QCryptographicHash::hash(accountHost.toUtf8(), QCryptographicHash::Sha256).toHex());
|
||||||
|
|
||||||
|
if (accountHostHash == dataFingerprintOverrideHostHash) {
|
||||||
|
qCInfo(lcEngine) << "accountHostHash" << accountHostHash << "equals to dataFingerprintOverrideHostHash" << dataFingerprintOverrideHostHash << "_dataFingerprintSetFailCount" << _dataFingerprintSetFailCount;
|
||||||
|
++_dataFingerprintSetFailCount;
|
||||||
|
// request to start sync again as it won't happen by itself unless the file has changed on the server or in the local folder
|
||||||
|
shouldStartSyncAgain = true;
|
||||||
|
} else {
|
||||||
|
qCInfo(lcEngine) << "accountHostHash" << accountHostHash << "differs from dataFingerprintOverrideHostHash" << dataFingerprintOverrideHostHash;
|
||||||
|
// give up on calculating the has next time, as it's not the host we are looking for
|
||||||
|
_dataFingerprintSetFailCount = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qCWarning(lcEngine) << "setDataFingerprint was overridden already for account" << accountDisplayName << "on host" << accountHost << "but is failing again! Or, it's not the host that we are looking for.";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//
|
||||||
|
|
||||||
if (success && _discoveryPhase) {
|
if (success && _discoveryPhase) {
|
||||||
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
|
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
|
||||||
|
} else if (_discoveryPhase) {
|
||||||
|
// TODO: Remove this when the file restoration problem is fixed for a user
|
||||||
|
checkAndOverrideSetDataFingerprint();
|
||||||
}
|
}
|
||||||
|
|
||||||
conflictRecordMaintenance();
|
conflictRecordMaintenance();
|
||||||
@@ -812,6 +859,12 @@ void SyncEngine::slotPropagationFinished(bool success)
|
|||||||
emit transmissionProgress(*_progressInfo);
|
emit transmissionProgress(*_progressInfo);
|
||||||
|
|
||||||
finalize(success);
|
finalize(success);
|
||||||
|
|
||||||
|
if (shouldStartSyncAgain) {
|
||||||
|
// TODO: Remove this when the file restoration problem is fixed for a user
|
||||||
|
qCWarning(lcEngine) << "Starting sync again for account" << account()->displayName() << "on host" << account()->url().host() << "due to setDataFingerprint override is running.";
|
||||||
|
startSync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncEngine::finalize(bool success)
|
void SyncEngine::finalize(bool success)
|
||||||
|
|||||||
@@ -289,6 +289,9 @@ private:
|
|||||||
LocalDiscoveryStyle _lastLocalDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
LocalDiscoveryStyle _lastLocalDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
||||||
LocalDiscoveryStyle _localDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
LocalDiscoveryStyle _localDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
||||||
std::set<QString> _localDiscoveryPaths;
|
std::set<QString> _localDiscoveryPaths;
|
||||||
|
|
||||||
|
// TODO: Remove this when the file restoration problem is fixed for a user
|
||||||
|
int _dataFingerprintSetFailCount = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QLocalSocket>
|
#include <QLocalSocket>
|
||||||
#include <QLoggingCategory>
|
#include <QLoggingCategory>
|
||||||
|
#include <QUuid>
|
||||||
|
|
||||||
#include <sddl.h>
|
#include <sddl.h>
|
||||||
#include <cfapi.h>
|
#include <cfapi.h>
|
||||||
@@ -58,6 +59,11 @@ void cfApiSendTransferInfo(const CF_CONNECTION_KEY &connectionKey, const CF_TRAN
|
|||||||
qCCritical(lcCfApiWrapper) << "Couldn't send transfer info" << QString::number(transferKey.QuadPart, 16) << ":" << cfExecuteresult << QString::fromWCharArray(_com_error(cfExecuteresult).ErrorMessage());
|
qCCritical(lcCfApiWrapper) << "Couldn't send transfer info" << QString::number(transferKey.QuadPart, 16) << ":" << cfExecuteresult << QString::fromWCharArray(_com_error(cfExecuteresult).ErrorMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto isDownloadFinished = ((offset + currentBlockLength) == totalLength);
|
||||||
|
if (isDownloadFinished) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// refresh Windows Copy Dialog progress
|
// refresh Windows Copy Dialog progress
|
||||||
LARGE_INTEGER progressTotal;
|
LARGE_INTEGER progressTotal;
|
||||||
progressTotal.QuadPart = totalLength;
|
progressTotal.QuadPart = totalLength;
|
||||||
@@ -141,6 +147,22 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QLocalSocket signalSocket;
|
||||||
|
const QString signalSocketName = requestId + ":cancellation";
|
||||||
|
signalSocket.connectToServer(signalSocketName);
|
||||||
|
const auto cancellationSocketConnectResult = signalSocket.waitForConnected();
|
||||||
|
if (!cancellationSocketConnectResult) {
|
||||||
|
qCWarning(lcCfApiWrapper) << "Couldn't connect the socket" << signalSocketName
|
||||||
|
<< signalSocket.error() << signalSocket.errorString();
|
||||||
|
sendTransferError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto hydrationRequestCancelled = false;
|
||||||
|
QObject::connect(&signalSocket, &QLocalSocket::readyRead, &loop, [&] {
|
||||||
|
hydrationRequestCancelled = true;
|
||||||
|
});
|
||||||
|
|
||||||
// CFAPI expects sent blocks to be of a multiple of a block size.
|
// CFAPI expects sent blocks to be of a multiple of a block size.
|
||||||
// Only the last sent block is allowed to be of a different size than
|
// Only the last sent block is allowed to be of a different size than
|
||||||
// a multiple of a block size
|
// a multiple of a block size
|
||||||
@@ -165,6 +187,11 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
|
|||||||
};
|
};
|
||||||
|
|
||||||
QObject::connect(&socket, &QLocalSocket::readyRead, &loop, [&] {
|
QObject::connect(&socket, &QLocalSocket::readyRead, &loop, [&] {
|
||||||
|
if (hydrationRequestCancelled) {
|
||||||
|
qCDebug(lcCfApiWrapper) << "Don't transfer data because request" << requestId << "was cancelled";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const auto receivedData = socket.readAll();
|
const auto receivedData = socket.readAll();
|
||||||
if (receivedData.isEmpty()) {
|
if (receivedData.isEmpty()) {
|
||||||
qCWarning(lcCfApiWrapper) << "Unexpected empty data received" << requestId;
|
qCWarning(lcCfApiWrapper) << "Unexpected empty data received" << requestId;
|
||||||
@@ -176,24 +203,32 @@ void CALLBACK cfApiFetchDataCallback(const CF_CALLBACK_INFO *callbackInfo, const
|
|||||||
alignAndSendData(receivedData);
|
alignAndSendData(receivedData);
|
||||||
});
|
});
|
||||||
|
|
||||||
QObject::connect(vfs, &OCC::VfsCfApi::hydrationRequestFinished, &loop, [&](const QString &id, int s) {
|
QObject::connect(vfs, &OCC::VfsCfApi::hydrationRequestFinished, &loop, [&](const QString &id) {
|
||||||
qDebug(lcCfApiWrapper) << "Hydration finished for request" << id;
|
qDebug(lcCfApiWrapper) << "Hydration finished for request" << id;
|
||||||
if (requestId == id) {
|
if (requestId == id) {
|
||||||
const auto status = static_cast<OCC::HydrationJob::Status>(s);
|
|
||||||
qCInfo(lcCfApiWrapper) << "Hydration done for" << path << requestId << status;
|
|
||||||
if (status != OCC::HydrationJob::Success) {
|
|
||||||
sendTransferError();
|
|
||||||
}
|
|
||||||
loop.quit();
|
loop.quit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
if (!protrudingData.isEmpty()) {
|
if (!hydrationRequestCancelled && !protrudingData.isEmpty()) {
|
||||||
qDebug(lcCfApiWrapper) << "Send remaining protruding data. Size:" << protrudingData.size();
|
qDebug(lcCfApiWrapper) << "Send remaining protruding data. Size:" << protrudingData.size();
|
||||||
sendTransferInfo(protrudingData, dataOffset);
|
sendTransferInfo(protrudingData, dataOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int hydrationJobResult = OCC::HydrationJob::Status::Error;
|
||||||
|
const auto invokeFinalizeResult = QMetaObject::invokeMethod(
|
||||||
|
vfs, [=] { vfs->finalizeHydrationJob(requestId); }, Qt::BlockingQueuedConnection,
|
||||||
|
&hydrationJobResult);
|
||||||
|
if (!invokeFinalizeResult) {
|
||||||
|
qCritical(lcCfApiWrapper) << "Failed to finalize hydration job for" << path << requestId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (static_cast<OCC::HydrationJob::Status>(hydrationJobResult) == OCC::HydrationJob::Success) {
|
||||||
|
sendTransferError();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK cfApiCancelFetchData(const CF_CALLBACK_INFO *callbackInfo, const CF_CALLBACK_PARAMETERS * /*callbackParameters*/)
|
void CALLBACK cfApiCancelFetchData(const CF_CALLBACK_INFO *callbackInfo, const CF_CALLBACK_PARAMETERS * /*callbackParameters*/)
|
||||||
@@ -213,7 +248,6 @@ void CALLBACK cfApiCancelFetchData(const CF_CALLBACK_INFO *callbackInfo, const C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CF_CALLBACK_REGISTRATION cfApiCallbacks[] = {
|
CF_CALLBACK_REGISTRATION cfApiCallbacks[] = {
|
||||||
{ CF_CALLBACK_TYPE_FETCH_DATA, cfApiFetchDataCallback },
|
{ CF_CALLBACK_TYPE_FETCH_DATA, cfApiFetchDataCallback },
|
||||||
{ CF_CALLBACK_TYPE_CANCEL_FETCH_DATA, cfApiCancelFetchData },
|
{ CF_CALLBACK_TYPE_CANCEL_FETCH_DATA, cfApiCancelFetchData },
|
||||||
@@ -288,8 +322,6 @@ CF_SET_PIN_FLAGS pinRecurseModeToCfSetPinFlags(OCC::CfApiWrapper::SetPinRecurseM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
OCC::CfApiWrapper::ConnectionKey::ConnectionKey()
|
OCC::CfApiWrapper::ConnectionKey::ConnectionKey()
|
||||||
: _data(new CF_CONNECTION_KEY, [](void *p) { delete reinterpret_cast<CF_CONNECTION_KEY *>(p); })
|
: _data(new CF_CONNECTION_KEY, [](void *p) { delete reinterpret_cast<CF_CONNECTION_KEY *>(p); })
|
||||||
{
|
{
|
||||||
@@ -467,14 +499,17 @@ OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString &pa
|
|||||||
const auto version = std::wstring(providerVersion.toStdWString().data());
|
const auto version = std::wstring(providerVersion.toStdWString().data());
|
||||||
|
|
||||||
CF_SYNC_REGISTRATION info;
|
CF_SYNC_REGISTRATION info;
|
||||||
|
info.StructSize = sizeof(info) + (name.length() + version.length()) * sizeof(wchar_t);
|
||||||
info.ProviderName = name.data();
|
info.ProviderName = name.data();
|
||||||
info.ProviderVersion = version.data();
|
info.ProviderVersion = version.data();
|
||||||
info.SyncRootIdentity = nullptr;
|
info.SyncRootIdentity = nullptr;
|
||||||
info.SyncRootIdentityLength = 0;
|
info.SyncRootIdentityLength = 0;
|
||||||
info.FileIdentity = nullptr;
|
info.FileIdentity = nullptr;
|
||||||
info.FileIdentityLength = 0;
|
info.FileIdentityLength = 0;
|
||||||
|
info.ProviderId = QUuid::createUuid();
|
||||||
|
|
||||||
CF_SYNC_POLICIES policies;
|
CF_SYNC_POLICIES policies;
|
||||||
|
policies.StructSize = sizeof(policies);
|
||||||
policies.Hydration.Primary = CF_HYDRATION_POLICY_FULL;
|
policies.Hydration.Primary = CF_HYDRATION_POLICY_FULL;
|
||||||
policies.Hydration.Modifier = CF_HYDRATION_POLICY_MODIFIER_NONE;
|
policies.Hydration.Modifier = CF_HYDRATION_POLICY_MODIFIER_NONE;
|
||||||
policies.Population.Primary = CF_POPULATION_POLICY_ALWAYS_FULL;
|
policies.Population.Primary = CF_POPULATION_POLICY_ALWAYS_FULL;
|
||||||
@@ -670,7 +705,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::updatePlaceholderInfo(const FileHa
|
|||||||
|
|
||||||
const qint64 result = CfUpdatePlaceholder(handle.get(), &metadata,
|
const qint64 result = CfUpdatePlaceholder(handle.get(), &metadata,
|
||||||
fileIdentity.data(), sizeToDWORD(fileIdentitySize),
|
fileIdentity.data(), sizeToDWORD(fileIdentitySize),
|
||||||
nullptr, 0, CF_UPDATE_FLAG_NONE, nullptr, nullptr);
|
nullptr, 0, CF_UPDATE_FLAG_MARK_IN_SYNC, nullptr, nullptr);
|
||||||
|
|
||||||
if (result != S_OK) {
|
if (result != S_OK) {
|
||||||
qCWarning(lcCfApiWrapper) << "Couldn't update placeholder info for" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
|
qCWarning(lcCfApiWrapper) << "Couldn't update placeholder info for" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
|
||||||
@@ -694,7 +729,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::convertToPlaceholder(const FileHan
|
|||||||
|
|
||||||
const auto fileIdentity = QString::fromUtf8(fileId).toStdWString();
|
const auto fileIdentity = QString::fromUtf8(fileId).toStdWString();
|
||||||
const auto fileIdentitySize = (fileIdentity.length() + 1) * sizeof(wchar_t);
|
const auto fileIdentitySize = (fileIdentity.length() + 1) * sizeof(wchar_t);
|
||||||
const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_NONE, nullptr, nullptr);
|
const qint64 result = CfConvertToPlaceholder(handle.get(), fileIdentity.data(), sizeToDWORD(fileIdentitySize), CF_CONVERT_FLAG_MARK_IN_SYNC, nullptr, nullptr);
|
||||||
Q_ASSERT(result == S_OK);
|
Q_ASSERT(result == S_OK);
|
||||||
if (result != S_OK) {
|
if (result != S_OK) {
|
||||||
qCCritical(lcCfApiWrapper) << "Couldn't convert to placeholder" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
|
qCCritical(lcCfApiWrapper) << "Couldn't convert to placeholder" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "common/syncjournaldb.h"
|
#include "common/syncjournaldb.h"
|
||||||
#include "propagatedownload.h"
|
#include "propagatedownload.h"
|
||||||
|
#include "vfs/cfapi/vfs_cfapi.h"
|
||||||
|
|
||||||
#include <QLocalServer>
|
#include <QLocalServer>
|
||||||
#include <QLocalSocket>
|
#include <QLocalSocket>
|
||||||
@@ -25,7 +26,6 @@ Q_LOGGING_CATEGORY(lcHydration, "nextcloud.sync.vfs.hydrationjob", QtInfoMsg)
|
|||||||
OCC::HydrationJob::HydrationJob(QObject *parent)
|
OCC::HydrationJob::HydrationJob(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
connect(this, &HydrationJob::finished, this, &HydrationJob::deleteLater);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OCC::AccountPtr OCC::HydrationJob::account() const
|
OCC::AccountPtr OCC::HydrationJob::account() const
|
||||||
@@ -104,90 +104,133 @@ void OCC::HydrationJob::start()
|
|||||||
Q_ASSERT(_localPath.endsWith('/'));
|
Q_ASSERT(_localPath.endsWith('/'));
|
||||||
Q_ASSERT(!_folderPath.startsWith('/'));
|
Q_ASSERT(!_folderPath.startsWith('/'));
|
||||||
|
|
||||||
_server = new QLocalServer(this);
|
const auto startServer = [this](const QString &serverName) -> QLocalServer * {
|
||||||
const auto listenResult = _server->listen(_requestId);
|
const auto server = new QLocalServer(this);
|
||||||
if (!listenResult) {
|
const auto listenResult = server->listen(serverName);
|
||||||
qCCritical(lcHydration) << "Couldn't get server to listen" << _requestId << _localPath << _folderPath;
|
if (!listenResult) {
|
||||||
emitFinished(Error);
|
qCCritical(lcHydration) << "Couldn't get server to listen" << serverName
|
||||||
|
<< _localPath << _folderPath;
|
||||||
|
if (!_isCancelled) {
|
||||||
|
emitFinished(Error);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
qCInfo(lcHydration) << "Server ready, waiting for connections" << serverName
|
||||||
|
<< _localPath << _folderPath;
|
||||||
|
return server;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Start cancellation server
|
||||||
|
_signalServer = startServer(_requestId + ":cancellation");
|
||||||
|
Q_ASSERT(_signalServer);
|
||||||
|
if (!_signalServer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
connect(_signalServer, &QLocalServer::newConnection, this, &HydrationJob::onCancellationServerNewConnection);
|
||||||
|
|
||||||
qCInfo(lcHydration) << "Server ready, waiting for connections" << _requestId << _localPath << _folderPath;
|
// Start transfer data server
|
||||||
connect(_server, &QLocalServer::newConnection, this, &HydrationJob::onNewConnection);
|
_transferDataServer = startServer(_requestId);
|
||||||
|
Q_ASSERT(_transferDataServer);
|
||||||
|
if (!_transferDataServer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
connect(_transferDataServer, &QLocalServer::newConnection, this, &HydrationJob::onNewConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::cancel()
|
void OCC::HydrationJob::cancel()
|
||||||
{
|
{
|
||||||
if (!_job) {
|
Q_ASSERT(_signalSocket);
|
||||||
return;
|
|
||||||
|
_isCancelled = true;
|
||||||
|
if (_job) {
|
||||||
|
_job->cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
_job->cancel();
|
_signalSocket->write("cancelled");
|
||||||
|
_signalSocket->close();
|
||||||
|
_transferDataSocket->close();
|
||||||
|
|
||||||
|
emitFinished(Cancelled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::emitFinished(Status status)
|
void OCC::HydrationJob::emitFinished(Status status)
|
||||||
{
|
{
|
||||||
_status = status;
|
_status = status;
|
||||||
|
_signalSocket->close();
|
||||||
|
|
||||||
if (status == Success) {
|
if (status == Success) {
|
||||||
connect(_socket, &QLocalSocket::disconnected, this, [=]{
|
connect(_transferDataSocket, &QLocalSocket::disconnected, this, [=] {
|
||||||
_socket->close();
|
_transferDataSocket->close();
|
||||||
emit finished(this);
|
emit finished(this);
|
||||||
});
|
});
|
||||||
_socket->disconnectFromServer();
|
_transferDataSocket->disconnectFromServer();
|
||||||
} else {
|
return;
|
||||||
_socket->close();
|
|
||||||
emit finished(this);
|
|
||||||
}
|
}
|
||||||
|
_transferDataSocket->close();
|
||||||
|
|
||||||
|
emit finished(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::emitCanceled()
|
void OCC::HydrationJob::onCancellationServerNewConnection()
|
||||||
{
|
{
|
||||||
connect(_socket, &QLocalSocket::disconnected, this, [=] {
|
Q_ASSERT(!_signalSocket);
|
||||||
_socket->close();
|
|
||||||
});
|
|
||||||
_socket->disconnectFromServer();
|
|
||||||
|
|
||||||
emit canceled(this);
|
qCInfo(lcHydration) << "Got new connection on cancellation server" << _requestId << _folderPath;
|
||||||
|
_signalSocket = _signalServer->nextPendingConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::onNewConnection()
|
void OCC::HydrationJob::onNewConnection()
|
||||||
{
|
{
|
||||||
Q_ASSERT(!_socket);
|
Q_ASSERT(!_transferDataSocket);
|
||||||
Q_ASSERT(!_job);
|
Q_ASSERT(!_job);
|
||||||
|
|
||||||
qCInfo(lcHydration) << "Got new connection starting GETFileJob" << _requestId << _folderPath;
|
qCInfo(lcHydration) << "Got new connection starting GETFileJob" << _requestId << _folderPath;
|
||||||
_socket = _server->nextPendingConnection();
|
_transferDataSocket = _transferDataServer->nextPendingConnection();
|
||||||
_job = new GETFileJob(_account, _remotePath + _folderPath, _socket, {}, {}, 0, this);
|
_job = new GETFileJob(_account, _remotePath + _folderPath, _transferDataSocket, {}, {}, 0, this);
|
||||||
connect(_job, &GETFileJob::finishedSignal, this, &HydrationJob::onGetFinished);
|
connect(_job, &GETFileJob::finishedSignal, this, &HydrationJob::onGetFinished);
|
||||||
connect(_job, &GETFileJob::canceled, this, &HydrationJob::onGetCanceled);
|
|
||||||
_job->start();
|
_job->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::onGetCanceled()
|
void OCC::HydrationJob::finalize(OCC::VfsCfApi *vfs)
|
||||||
{
|
{
|
||||||
qCInfo(lcHydration) << "GETFileJob canceled" << _requestId << _folderPath << _job->reply()->error();
|
// Mark the file as hydrated in the sync journal
|
||||||
emitCanceled();
|
SyncJournalFileRecord record;
|
||||||
|
_journal->getFileRecord(_folderPath, &record);
|
||||||
|
Q_ASSERT(record.isValid());
|
||||||
|
if (!record.isValid()) {
|
||||||
|
qCWarning(lcHydration) << "Couldn't find record to update after hydration" << _requestId << _folderPath;
|
||||||
|
// emitFinished(Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_isCancelled) {
|
||||||
|
// Remove placeholder file because there might be already pumped
|
||||||
|
// some data into it
|
||||||
|
QFile::remove(_localPath + _folderPath);
|
||||||
|
// Create a new placeholder file
|
||||||
|
const auto item = SyncFileItem::fromSyncJournalFileRecord(record);
|
||||||
|
vfs->createPlaceholder(*item);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
record._type = ItemTypeFile;
|
||||||
|
_journal->setFileRecord(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OCC::HydrationJob::onGetFinished()
|
void OCC::HydrationJob::onGetFinished()
|
||||||
{
|
{
|
||||||
qCInfo(lcHydration) << "GETFileJob finished" << _requestId << _folderPath << _job->reply()->error();
|
qCInfo(lcHydration) << "GETFileJob finished" << _requestId << _folderPath << _job->reply()->error();
|
||||||
|
|
||||||
if (_job->reply()->error()) {
|
const auto isGetJobResultError = _job->reply()->error();
|
||||||
emitFinished(Error);
|
// GETFileJob deletes itself after this signal was handled
|
||||||
|
_job = nullptr;
|
||||||
|
if (_isCancelled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SyncJournalFileRecord record;
|
if (isGetJobResultError) {
|
||||||
_journal->getFileRecord(_folderPath, &record);
|
|
||||||
Q_ASSERT(record.isValid());
|
|
||||||
if (!record.isValid()) {
|
|
||||||
qCWarning(lcHydration) << "Couldn't find record to update after hydration" << _requestId << _folderPath;
|
|
||||||
emitFinished(Error);
|
emitFinished(Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
record._type = ItemTypeFile;
|
|
||||||
_journal->setFileRecord(record);
|
|
||||||
emitFinished(Success);
|
emitFinished(Success);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class QLocalSocket;
|
|||||||
namespace OCC {
|
namespace OCC {
|
||||||
class GETFileJob;
|
class GETFileJob;
|
||||||
class SyncJournalDb;
|
class SyncJournalDb;
|
||||||
|
class VfsCfApi;
|
||||||
|
|
||||||
class OWNCLOUDSYNC_EXPORT HydrationJob : public QObject
|
class OWNCLOUDSYNC_EXPORT HydrationJob : public QObject
|
||||||
{
|
{
|
||||||
@@ -31,6 +32,7 @@ public:
|
|||||||
enum Status {
|
enum Status {
|
||||||
Success = 0,
|
Success = 0,
|
||||||
Error,
|
Error,
|
||||||
|
Cancelled,
|
||||||
};
|
};
|
||||||
Q_ENUM(Status)
|
Q_ENUM(Status)
|
||||||
|
|
||||||
@@ -58,29 +60,31 @@ public:
|
|||||||
|
|
||||||
void start();
|
void start();
|
||||||
void cancel();
|
void cancel();
|
||||||
|
void finalize(OCC::VfsCfApi *vfs);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void finished(HydrationJob *job);
|
void finished(HydrationJob *job);
|
||||||
void canceled(HydrationJob *job);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void emitFinished(Status status);
|
void emitFinished(Status status);
|
||||||
void emitCanceled();
|
|
||||||
|
|
||||||
void onNewConnection();
|
void onNewConnection();
|
||||||
|
void onCancellationServerNewConnection();
|
||||||
void onGetFinished();
|
void onGetFinished();
|
||||||
void onGetCanceled();
|
|
||||||
|
|
||||||
AccountPtr _account;
|
AccountPtr _account;
|
||||||
QString _remotePath;
|
QString _remotePath;
|
||||||
QString _localPath;
|
QString _localPath;
|
||||||
SyncJournalDb *_journal = nullptr;
|
SyncJournalDb *_journal = nullptr;
|
||||||
|
bool _isCancelled = false;
|
||||||
|
|
||||||
QString _requestId;
|
QString _requestId;
|
||||||
QString _folderPath;
|
QString _folderPath;
|
||||||
|
|
||||||
QLocalServer *_server = nullptr;
|
QLocalServer *_transferDataServer = nullptr;
|
||||||
QLocalSocket *_socket = nullptr;
|
QLocalServer *_signalServer = nullptr;
|
||||||
|
QLocalSocket *_transferDataSocket = nullptr;
|
||||||
|
QLocalSocket *_signalSocket = nullptr;
|
||||||
GETFileJob *_job = nullptr;
|
GETFileJob *_job = nullptr;
|
||||||
Status _status = Success;
|
Status _status = Success;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ Result<void, QString> VfsCfApi::dehydratePlaceholder(const SyncFileItem &item)
|
|||||||
{
|
{
|
||||||
const auto previousPin = pinState(item._file);
|
const auto previousPin = pinState(item._file);
|
||||||
|
|
||||||
if (!QFile::remove(_setupParams.filesystemPath + item._file)) {
|
if (!FileSystem::remove(_setupParams.filesystemPath + item._file)) {
|
||||||
return QStringLiteral("Couldn't remove %1 to fulfill dehydration").arg(item._file);
|
return QStringLiteral("Couldn't remove %1 to fulfill dehydration").arg(item._file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +186,8 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
|
|||||||
|
|
||||||
const auto isWindowsShortcut = !isDirectory && FileSystem::isLnkFile(stat->path);
|
const auto isWindowsShortcut = !isDirectory && FileSystem::isLnkFile(stat->path);
|
||||||
|
|
||||||
|
const auto isExcludeFile = !isDirectory && FileSystem::isExcludeFile(stat->path);
|
||||||
|
|
||||||
// It's a dir with a reparse point due to the placeholder info (hence the cloud tag)
|
// It's a dir with a reparse point due to the placeholder info (hence the cloud tag)
|
||||||
// if we don't remove the reparse point flag the discovery will end up thinking
|
// if we don't remove the reparse point flag the discovery will end up thinking
|
||||||
// it is a file... let's prevent it
|
// it is a file... let's prevent it
|
||||||
@@ -197,7 +199,7 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
|
|||||||
} else if (isSparseFile && isPinned) {
|
} else if (isSparseFile && isPinned) {
|
||||||
stat->type = ItemTypeVirtualFileDownload;
|
stat->type = ItemTypeVirtualFileDownload;
|
||||||
return true;
|
return true;
|
||||||
} else if (!isSparseFile && isUnpinned && !isWindowsShortcut){
|
} else if (!isSparseFile && isUnpinned && !isWindowsShortcut && !isExcludeFile) {
|
||||||
stat->type = ItemTypeVirtualFileDehydration;
|
stat->type = ItemTypeVirtualFileDehydration;
|
||||||
return true;
|
return true;
|
||||||
} else if (isSparseFile) {
|
} else if (isSparseFile) {
|
||||||
@@ -266,16 +268,28 @@ Vfs::AvailabilityResult VfsCfApi::availability(const QString &folderPath)
|
|||||||
return AvailabilityError::NoSuchItem;
|
return AvailabilityError::NoSuchItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VfsCfApi::cancelHydration(const QString &requestId, const QString & /*path*/)
|
HydrationJob *VfsCfApi::findHydrationJob(const QString &requestId) const
|
||||||
{
|
{
|
||||||
// Find matching hydration job for request id
|
// Find matching hydration job for request id
|
||||||
const auto hydrationJobsIter = std::find_if(d->hydrationJobs.cbegin(), d->hydrationJobs.cend(), [&](const HydrationJob *job) {
|
const auto hydrationJobsIter = std::find_if(d->hydrationJobs.cbegin(), d->hydrationJobs.cend(), [&](const HydrationJob *job) {
|
||||||
return job->requestId() == requestId;
|
return job->requestId() == requestId;
|
||||||
});
|
});
|
||||||
|
|
||||||
// If found, cancel it
|
|
||||||
if (hydrationJobsIter != d->hydrationJobs.cend()) {
|
if (hydrationJobsIter != d->hydrationJobs.cend()) {
|
||||||
(*hydrationJobsIter)->cancel();
|
return *hydrationJobsIter;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VfsCfApi::cancelHydration(const QString &requestId, const QString & /*path*/)
|
||||||
|
{
|
||||||
|
// Find matching hydration job for request id
|
||||||
|
const auto hydrationJob = findHydrationJob(requestId);
|
||||||
|
// If found, cancel it
|
||||||
|
if (hydrationJob) {
|
||||||
|
qCInfo(lcCfApi) << "Cancel hydration";
|
||||||
|
hydrationJob->cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +360,6 @@ void VfsCfApi::scheduleHydrationJob(const QString &requestId, const QString &fol
|
|||||||
job->setRequestId(requestId);
|
job->setRequestId(requestId);
|
||||||
job->setFolderPath(folderPath);
|
job->setFolderPath(folderPath);
|
||||||
connect(job, &HydrationJob::finished, this, &VfsCfApi::onHydrationJobFinished);
|
connect(job, &HydrationJob::finished, this, &VfsCfApi::onHydrationJobFinished);
|
||||||
connect(job, &HydrationJob::canceled, this, &VfsCfApi::onHydrationJobCanceled);
|
|
||||||
d->hydrationJobs << job;
|
d->hydrationJobs << job;
|
||||||
job->start();
|
job->start();
|
||||||
emit hydrationRequestReady(requestId);
|
emit hydrationRequestReady(requestId);
|
||||||
@@ -356,30 +369,27 @@ void VfsCfApi::onHydrationJobFinished(HydrationJob *job)
|
|||||||
{
|
{
|
||||||
Q_ASSERT(d->hydrationJobs.contains(job));
|
Q_ASSERT(d->hydrationJobs.contains(job));
|
||||||
qCInfo(lcCfApi) << "Hydration job finished" << job->requestId() << job->folderPath() << job->status();
|
qCInfo(lcCfApi) << "Hydration job finished" << job->requestId() << job->folderPath() << job->status();
|
||||||
emit hydrationRequestFinished(job->requestId(), job->status());
|
emit hydrationRequestFinished(job->requestId());
|
||||||
d->hydrationJobs.removeAll(job);
|
|
||||||
if (d->hydrationJobs.isEmpty()) {
|
|
||||||
emit doneHydrating();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VfsCfApi::onHydrationJobCanceled(HydrationJob *job)
|
int VfsCfApi::finalizeHydrationJob(const QString &requestId)
|
||||||
{
|
{
|
||||||
const auto folderRelativePath = job->folderPath();
|
qCDebug(lcCfApi) << "Finalize hydration job" << requestId;
|
||||||
SyncJournalFileRecord record;
|
// Find matching hydration job for request id
|
||||||
if (!params().journal->getFileRecord(folderRelativePath, &record)) {
|
const auto hydrationJob = findHydrationJob(requestId);
|
||||||
qCWarning(lcCfApi) << "Could not read file record from journal for canceled hydration request.";
|
|
||||||
return;
|
// If found, finalize it
|
||||||
|
if (hydrationJob) {
|
||||||
|
hydrationJob->finalize(this);
|
||||||
|
d->hydrationJobs.removeAll(hydrationJob);
|
||||||
|
hydrationJob->deleteLater();
|
||||||
|
if (d->hydrationJobs.isEmpty()) {
|
||||||
|
emit doneHydrating();
|
||||||
|
}
|
||||||
|
return hydrationJob->status();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove placeholder file because there might be already pumped
|
return HydrationJob::Status::Error;
|
||||||
// some data into it
|
|
||||||
const auto folderPath = job->localPath();
|
|
||||||
QFile::remove(folderPath + folderRelativePath);
|
|
||||||
|
|
||||||
// Create a new placeholder file
|
|
||||||
const auto item = SyncFileItem::fromSyncJournalFileRecord(record);
|
|
||||||
createPlaceholder(*item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VfsCfApi::HydratationAndPinStates VfsCfApi::computeRecursiveHydrationAndPinStates(const QString &folderPath, const Optional<PinState> &basePinState)
|
VfsCfApi::HydratationAndPinStates VfsCfApi::computeRecursiveHydrationAndPinStates(const QString &folderPath, const Optional<PinState> &basePinState)
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ public:
|
|||||||
|
|
||||||
void cancelHydration(const QString &requestId, const QString &path);
|
void cancelHydration(const QString &requestId, const QString &path);
|
||||||
|
|
||||||
|
int finalizeHydrationJob(const QString &requestId);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void requestHydration(const QString &requestId, const QString &path);
|
void requestHydration(const QString &requestId, const QString &path);
|
||||||
void fileStatusChanged(const QString &systemFileName, SyncFileStatus fileStatus) override;
|
void fileStatusChanged(const QString &systemFileName, SyncFileStatus fileStatus) override;
|
||||||
@@ -62,7 +64,7 @@ public slots:
|
|||||||
signals:
|
signals:
|
||||||
void hydrationRequestReady(const QString &requestId);
|
void hydrationRequestReady(const QString &requestId);
|
||||||
void hydrationRequestFailed(const QString &requestId);
|
void hydrationRequestFailed(const QString &requestId);
|
||||||
void hydrationRequestFinished(const QString &requestId, int status);
|
void hydrationRequestFinished(const QString &requestId);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void startImpl(const VfsSetupParams ¶ms) override;
|
void startImpl(const VfsSetupParams ¶ms) override;
|
||||||
@@ -70,7 +72,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
void scheduleHydrationJob(const QString &requestId, const QString &folderPath);
|
void scheduleHydrationJob(const QString &requestId, const QString &folderPath);
|
||||||
void onHydrationJobFinished(HydrationJob *job);
|
void onHydrationJobFinished(HydrationJob *job);
|
||||||
void onHydrationJobCanceled(HydrationJob *job);
|
HydrationJob *findHydrationJob(const QString &requestId) const;
|
||||||
|
|
||||||
struct HasHydratedDehydrated {
|
struct HasHydratedDehydrated {
|
||||||
bool hasHydrated = false;
|
bool hasHydrated = false;
|
||||||
|
|||||||
@@ -190,7 +190,6 @@
|
|||||||
<file>theme/colored/add.svg</file>
|
<file>theme/colored/add.svg</file>
|
||||||
<file>theme/colored/delete.svg</file>
|
<file>theme/colored/delete.svg</file>
|
||||||
<file>theme/colored/Nextcloud-icon.svg</file>
|
<file>theme/colored/Nextcloud-icon.svg</file>
|
||||||
<file>theme/colored/Nextcloud-sidebar.svg</file>
|
|
||||||
<file>theme/add.svg</file>
|
<file>theme/add.svg</file>
|
||||||
<file>theme/share.svg</file>
|
<file>theme/share.svg</file>
|
||||||
<file>theme/reply.svg</file>
|
<file>theme/reply.svg</file>
|
||||||
|
|||||||
202
theme.qrc.in
Normal file
202
theme.qrc.in
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/client">
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-16.png">theme/colored/16-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-24.png">theme/colored/24-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-32.png">theme/colored/32-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-48.png">theme/colored/48-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-64.png">theme/colored/64-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-128.png">theme/colored/128-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-256.png">theme/colored/256-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-512.png">theme/colored/512-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file alias="theme/colored/@APPLICATION_ICON_NAME@-icon-1024.png">theme/colored/1024-@APPLICATION_ICON_NAME@-icon.png</file>
|
||||||
|
<file>theme/colored/state-error-32.png</file>
|
||||||
|
<file>theme/colored/state-error-64.png</file>
|
||||||
|
<file>theme/colored/state-error-128.png</file>
|
||||||
|
<file>theme/colored/state-error-256.png</file>
|
||||||
|
<file>theme/colored/state-ok-32.png</file>
|
||||||
|
<file>theme/colored/state-ok-64.png</file>
|
||||||
|
<file>theme/colored/state-ok-128.png</file>
|
||||||
|
<file>theme/colored/state-ok-256.png</file>
|
||||||
|
<file>theme/colored/state-pause-32.png</file>
|
||||||
|
<file>theme/colored/state-pause-64.png</file>
|
||||||
|
<file>theme/colored/state-pause-128.png</file>
|
||||||
|
<file>theme/colored/state-pause-256.png</file>
|
||||||
|
<file>theme/colored/state-sync-32.png</file>
|
||||||
|
<file>theme/colored/state-sync-64.png</file>
|
||||||
|
<file>theme/colored/state-sync-128.png</file>
|
||||||
|
<file>theme/colored/state-sync-256.png</file>
|
||||||
|
<file>theme/colored/wizard_logo.png</file>
|
||||||
|
<file>theme/colored/wizard_logo@2x.png</file>
|
||||||
|
<file>theme/colored/wizard_logo.svg</file>
|
||||||
|
<file>theme/white/state-error-32.png</file>
|
||||||
|
<file>theme/white/state-error-64.png</file>
|
||||||
|
<file>theme/white/state-error-128.png</file>
|
||||||
|
<file>theme/white/state-error-256.png</file>
|
||||||
|
<file>theme/white/state-ok-32.png</file>
|
||||||
|
<file>theme/white/state-ok-64.png</file>
|
||||||
|
<file>theme/white/state-ok-128.png</file>
|
||||||
|
<file>theme/white/state-ok-256.png</file>
|
||||||
|
<file>theme/white/state-pause-32.png</file>
|
||||||
|
<file>theme/white/state-pause-64.png</file>
|
||||||
|
<file>theme/white/state-pause-128.png</file>
|
||||||
|
<file>theme/white/state-pause-256.png</file>
|
||||||
|
<file>theme/white/state-sync-32.png</file>
|
||||||
|
<file>theme/white/state-sync-64.png</file>
|
||||||
|
<file>theme/white/state-sync-128.png</file>
|
||||||
|
<file>theme/white/state-sync-256.png</file>
|
||||||
|
<file>theme/black/state-error-32.png</file>
|
||||||
|
<file>theme/black/state-error-64.png</file>
|
||||||
|
<file>theme/black/state-error-128.png</file>
|
||||||
|
<file>theme/black/state-error-256.png</file>
|
||||||
|
<file>theme/black/state-ok-32.png</file>
|
||||||
|
<file>theme/black/state-ok-64.png</file>
|
||||||
|
<file>theme/black/state-ok-128.png</file>
|
||||||
|
<file>theme/black/state-ok-256.png</file>
|
||||||
|
<file>theme/black/state-pause-32.png</file>
|
||||||
|
<file>theme/black/state-pause-64.png</file>
|
||||||
|
<file>theme/black/state-pause-128.png</file>
|
||||||
|
<file>theme/black/state-pause-256.png</file>
|
||||||
|
<file>theme/black/state-sync-32.png</file>
|
||||||
|
<file>theme/black/state-sync-64.png</file>
|
||||||
|
<file>theme/black/state-sync-128.png</file>
|
||||||
|
<file>theme/black/state-sync-256.png</file>
|
||||||
|
<file>theme/colored/state-error.svg</file>
|
||||||
|
<file>theme/colored/state-error-16.png</file>
|
||||||
|
<file>theme/colored/state-offline.svg</file>
|
||||||
|
<file>theme/colored/state-offline-16.png</file>
|
||||||
|
<file>theme/colored/state-offline-32.png</file>
|
||||||
|
<file>theme/colored/state-offline-64.png</file>
|
||||||
|
<file>theme/colored/state-offline-128.png</file>
|
||||||
|
<file>theme/colored/state-offline-256.png</file>
|
||||||
|
<file>theme/colored/state-ok.svg</file>
|
||||||
|
<file>theme/colored/state-ok-16.png</file>
|
||||||
|
<file>theme/colored/state-pause.svg</file>
|
||||||
|
<file>theme/colored/state-pause-16.png</file>
|
||||||
|
<file>theme/colored/state-sync.svg</file>
|
||||||
|
<file>theme/colored/state-sync-16.png</file>
|
||||||
|
<file>theme/colored/state-warning.svg</file>
|
||||||
|
<file>theme/colored/state-warning-16.png</file>
|
||||||
|
<file>theme/colored/state-warning-32.png</file>
|
||||||
|
<file>theme/colored/state-warning-64.png</file>
|
||||||
|
<file>theme/colored/state-warning-128.png</file>
|
||||||
|
<file>theme/colored/state-warning-256.png</file>
|
||||||
|
<file>theme/black/folder.png</file>
|
||||||
|
<file>theme/black/folder@2x.png</file>
|
||||||
|
<file>theme/white/folder.png</file>
|
||||||
|
<file>theme/white/folder@2x.png</file>
|
||||||
|
<file>theme/colored/folder.png</file>
|
||||||
|
<file>theme/colored/folder@2x.png</file>
|
||||||
|
<file>theme/black/control-next.svg</file>
|
||||||
|
<file>theme/black/control-prev.svg</file>
|
||||||
|
<file>theme/black/state-error.svg</file>
|
||||||
|
<file>theme/black/state-error-16.png</file>
|
||||||
|
<file>theme/black/state-offline.svg</file>
|
||||||
|
<file>theme/black/state-offline-16.png</file>
|
||||||
|
<file>theme/black/state-offline-32.png</file>
|
||||||
|
<file>theme/black/state-offline-64.png</file>
|
||||||
|
<file>theme/black/state-offline-128.png</file>
|
||||||
|
<file>theme/black/state-offline-256.png</file>
|
||||||
|
<file>theme/black/state-ok.svg</file>
|
||||||
|
<file>theme/black/state-ok-16.png</file>
|
||||||
|
<file>theme/black/state-pause.svg</file>
|
||||||
|
<file>theme/black/state-pause-16.png</file>
|
||||||
|
<file>theme/black/state-sync.svg</file>
|
||||||
|
<file>theme/black/state-sync-16.png</file>
|
||||||
|
<file>theme/black/state-warning.svg</file>
|
||||||
|
<file>theme/black/state-warning-16.png</file>
|
||||||
|
<file>theme/black/state-warning-32.png</file>
|
||||||
|
<file>theme/black/state-warning-64.png</file>
|
||||||
|
<file>theme/black/state-warning-128.png</file>
|
||||||
|
<file>theme/black/state-warning-256.png</file>
|
||||||
|
<file>theme/white/control-next.svg</file>
|
||||||
|
<file>theme/white/control-prev.svg</file>
|
||||||
|
<file>theme/white/state-error.svg</file>
|
||||||
|
<file>theme/white/state-error-16.png</file>
|
||||||
|
<file>theme/white/state-offline.svg</file>
|
||||||
|
<file>theme/white/state-offline-16.png</file>
|
||||||
|
<file>theme/white/state-offline-32.png</file>
|
||||||
|
<file>theme/white/state-offline-64.png</file>
|
||||||
|
<file>theme/white/state-offline-128.png</file>
|
||||||
|
<file>theme/white/state-offline-256.png</file>
|
||||||
|
<file>theme/white/state-ok.svg</file>
|
||||||
|
<file>theme/white/state-ok-16.png</file>
|
||||||
|
<file>theme/white/state-pause.svg</file>
|
||||||
|
<file>theme/white/state-pause-16.png</file>
|
||||||
|
<file>theme/white/state-sync.svg</file>
|
||||||
|
<file>theme/white/state-sync-16.png</file>
|
||||||
|
<file>theme/white/state-warning.svg</file>
|
||||||
|
<file>theme/white/state-warning-16.png</file>
|
||||||
|
<file>theme/white/state-warning-32.png</file>
|
||||||
|
<file>theme/white/state-warning-64.png</file>
|
||||||
|
<file>theme/white/state-warning-128.png</file>
|
||||||
|
<file>theme/white/state-warning-256.png</file>
|
||||||
|
<file>theme/white/wizard-files.png</file>
|
||||||
|
<file>theme/white/wizard-files@2x.png</file>
|
||||||
|
<file>theme/white/wizard-groupware.png</file>
|
||||||
|
<file>theme/white/wizard-groupware@2x.png</file>
|
||||||
|
<file>theme/white/wizard-nextcloud.png</file>
|
||||||
|
<file>theme/white/wizard-nextcloud@2x.png</file>
|
||||||
|
<file>theme/white/wizard-talk.png</file>
|
||||||
|
<file>theme/white/wizard-talk@2x.png</file>
|
||||||
|
<file>theme/black/wizard-files.png</file>
|
||||||
|
<file>theme/black/wizard-files@2x.png</file>
|
||||||
|
<file>theme/black/wizard-groupware.png</file>
|
||||||
|
<file>theme/black/wizard-groupware@2x.png</file>
|
||||||
|
<file>theme/black/wizard-nextcloud.png</file>
|
||||||
|
<file>theme/black/wizard-nextcloud@2x.png</file>
|
||||||
|
<file>theme/black/wizard-talk.png</file>
|
||||||
|
<file>theme/black/wizard-talk@2x.png</file>
|
||||||
|
<file>theme/black/wizard-files.png</file>
|
||||||
|
<file>theme/colored/wizard-files.png</file>
|
||||||
|
<file>theme/colored/wizard-files@2x.png</file>
|
||||||
|
<file>theme/colored/wizard-groupware.png</file>
|
||||||
|
<file>theme/colored/wizard-groupware@2x.png</file>
|
||||||
|
<file>theme/colored/wizard-nextcloud.png</file>
|
||||||
|
<file>theme/colored/wizard-nextcloud@2x.png</file>
|
||||||
|
<file>theme/colored/wizard-talk.png</file>
|
||||||
|
<file>theme/colored/wizard-talk@2x.png</file>
|
||||||
|
<file>theme/sync-arrow.svg</file>
|
||||||
|
<file>theme/white/external.png</file>
|
||||||
|
<file>theme/white/external@2x.png</file>
|
||||||
|
<file>theme/black/external.png</file>
|
||||||
|
<file>theme/black/external@2x.png</file>
|
||||||
|
<file>theme/colored/external.png</file>
|
||||||
|
<file>theme/colored/external@2x.png</file>
|
||||||
|
<file>theme/white/folder.svg</file>
|
||||||
|
<file>theme/white/more-apps.svg</file>
|
||||||
|
<file>theme/white/talk-app.svg</file>
|
||||||
|
<file>theme/white/caret-down.svg</file>
|
||||||
|
<file>theme/black/caret-down.svg</file>
|
||||||
|
<file>theme/white/user.svg</file>
|
||||||
|
<file>theme/black/user.svg</file>
|
||||||
|
<file>theme/white/add.svg</file>
|
||||||
|
<file>theme/black/add.svg</file>
|
||||||
|
<file>theme/black/activity.svg</file>
|
||||||
|
<file>theme/black/bell.svg</file>
|
||||||
|
<file>theme/black/state-info.svg</file>
|
||||||
|
<file>theme/close.svg</file>
|
||||||
|
<file>theme/files.svg</file>
|
||||||
|
<file>theme/public.svg</file>
|
||||||
|
<file>theme/settings.svg</file>
|
||||||
|
<file>theme/confirm.svg</file>
|
||||||
|
<file>theme/copy.svg</file>
|
||||||
|
<file>theme/more.svg</file>
|
||||||
|
<file>theme/change.svg</file>
|
||||||
|
<file>theme/lock-http.svg</file>
|
||||||
|
<file>theme/lock-https.svg</file>
|
||||||
|
<file>theme/lock-broken.svg</file>
|
||||||
|
<file>theme/network.svg</file>
|
||||||
|
<file>theme/account.svg</file>
|
||||||
|
<file>theme/colored/add.svg</file>
|
||||||
|
<file>theme/colored/delete.svg</file>
|
||||||
|
<file>theme/colored/@APPLICATION_ICON_NAME@-icon.svg</file>
|
||||||
|
<file>theme/add.svg</file>
|
||||||
|
<file>theme/share.svg</file>
|
||||||
|
<file>theme/reply.svg</file>
|
||||||
|
<file>theme/magnifying-glass.svg</file>
|
||||||
|
<file>theme/colored/user-status-online.svg</file>
|
||||||
|
<file>theme/colored/user-status-invisible.svg</file>
|
||||||
|
<file>theme/colored/user-status-away.svg</file>
|
||||||
|
<file>theme/colored/user-status-dnd.svg</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 715 B |
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 968 B |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user