mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-03 18:11:32 +02:00
Compare commits
122 Commits
v3.2.0-rc3
...
v3.2.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
5e6c31b262 | ||
|
|
8550bfa8f1 | ||
|
|
f6afb62a53 | ||
|
|
1ca0ea49dd | ||
|
|
29f4a3857b | ||
|
|
050bd49373 | ||
|
|
8986975a17 | ||
|
|
50de12b3c3 | ||
|
|
163015492a | ||
|
|
c8ac99c8cf | ||
|
|
e51dad79a2 | ||
|
|
d2b762aa66 | ||
|
|
98cfc362f7 | ||
|
|
835a61c5ee | ||
|
|
5eb6834167 | ||
|
|
4b58c2b7b7 | ||
|
|
82953d0601 | ||
|
|
de85b79bb8 | ||
|
|
cb8b6ccd9b | ||
|
|
13f4bb541d | ||
|
|
3906ae0922 | ||
|
|
7235c708dc | ||
|
|
d5b6d93978 | ||
|
|
4a7145f1f3 | ||
|
|
d6752c96b1 | ||
|
|
77681ff5b5 | ||
|
|
4c8378030d | ||
|
|
0a33e99053 | ||
|
|
454226b3ea | ||
|
|
e15045977e | ||
|
|
a599cd2c3f | ||
|
|
487f29cf80 | ||
|
|
2268facd9d | ||
|
|
57aeeca172 | ||
|
|
962bbf3043 | ||
|
|
6e147a7a8c | ||
|
|
b2377ff64f |
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
||||
Name[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
||||
Comment[bg_BG]=@APPLICATION_NAME@ десктоп клиент за синхронизиране
|
||||
GenericName[bg_BG]=Синхронизиране на папка
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[br]=@APPLICATION_ICON_NAME@
|
||||
Name[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
||||
Comment[br]=@APPLICATION_NAME@ burev kempreet an implijer
|
||||
GenericName[br]=Tuliad kemprenan
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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@
|
||||
GenericName[ca]=Sincronització de carpetes
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[cs_CZ]=Synchronizace složek
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[cy_GB]=@APPLICATION_ICON_NAME@
|
||||
Name[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
||||
Comment[cy_GB]=@APPLICATION_NAME@ cleient cydweddu bwrdd gwaith
|
||||
GenericName[cy_GB]=Cydweddu Ffolder
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[da]=@APPLICATION_ICON_NAME@
|
||||
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||
GenericName[da]=Mappesynkronisering
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[el]=@APPLICATION_ICON_NAME@
|
||||
Name[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
||||
Comment[el]=@APPLICATION_NAME@ πρόγραμμα συγχρονισμού
|
||||
GenericName[el]=Συγχρονισμός φακέλου
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[en_GB]=@APPLICATION_ICON_NAME@
|
||||
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
|
||||
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
||||
GenericName[en_GB]=Folder Sync
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[eo]=@APPLICATION_ICON_NAME@
|
||||
Name[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
||||
Comment[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
||||
GenericName[eo]=Dosieruja sinkronigo
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[es_AR]=@APPLICATION_ICON_NAME@
|
||||
Name[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
||||
Comment[es_AR]=@APPLICATION_NAME@ cliente de sincronización de escritorio
|
||||
GenericName[es_AR]=Sincronización de carpetas
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[es_DO]=Sincronización de carpeta
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -21,6 +21,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
|
||||
# Translations
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[es]=@APPLICATION_ICON_NAME@
|
||||
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
||||
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
||||
Name[es]=@APPLICATION_NAME@ Desktop
|
||||
Comment[es]=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName[es]=Sincronización de carpetas
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[et_EE]=@APPLICATION_ICON_NAME@
|
||||
Name[et_EE]=@APPLICATION_NAME@ töölaua sünkimise klient
|
||||
Comment[et_EE]=@APPLICATION_NAME@ töölaua sünkroniseerimise klient
|
||||
GenericName[et_EE]=Kausta Sünkroonimine
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[eu]=@APPLICATION_ICON_NAME@
|
||||
Name[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
||||
Name[eu]=@APPLICATION_NAME@ Mahaigaina
|
||||
Comment[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
||||
GenericName[eu]=Karpeta-sinkronizazioa
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[fi_FI]=@APPLICATION_ICON_NAME@
|
||||
Name[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
||||
Comment[fi_FI]=@APPLICATION_NAME@ työpöydän synkronointipääte
|
||||
GenericName[fi_FI]=Kansio synkronointi
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[fr]=@APPLICATION_ICON_NAME@
|
||||
Name[fr]=Client de synchro @APPLICATION_NAME@
|
||||
Comment[fr]=Client de synchronisation @APPLICATION_NAME@
|
||||
GenericName[fr]=Synchronisation du dossier
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[gl]=Sincronización de cartafol
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[he]=@APPLICATION_ICON_NAME@
|
||||
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
||||
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
||||
GenericName[he]=סנכרון תיקיות
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[hr]=@APPLICATION_ICON_NAME@
|
||||
Name[hr]=@APPLICATION_NAME@ klijent za sink. računala
|
||||
Comment[hr]=@APPLICATION_NAME@ klijent za sinkronizaciju računala
|
||||
GenericName[hr]=Sinkronizacija mapa
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[hu_HU]=@APPLICATION_ICON_NAME@
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[is]=Samstilling á möppum
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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@
|
||||
GenericName[it]=Sincronizzazione cartelle
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[ja_JP]=@APPLICATION_ICON_NAME@
|
||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ
|
||||
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||
GenericName[ja_JP]=フォルダーを同期する
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[ko]=@APPLICATION_ICON_NAME@
|
||||
Name[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||
GenericName[ko]=폴더 동기화
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[lt_LT]=@APPLICATION_ICON_NAME@
|
||||
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
||||
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
||||
GenericName[lt_LT]=Aplankų sinchronizavimas
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[lv]=@APPLICATION_ICON_NAME@
|
||||
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
||||
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
||||
GenericName[lv]=Mapju Sinhronizēšana
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[mk]=@APPLICATION_ICON_NAME@
|
||||
Name[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
||||
Comment[mk]=@APPLICATION_NAME@ клиент за синхронизација на компјутер
|
||||
GenericName[mk]=Папка за синхронизација
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[nb_NO]=@APPLICATION_ICON_NAME@
|
||||
Name[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
||||
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
||||
GenericName[nb_NO]=Mappe synkroinisering
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[nl]=@APPLICATION_ICON_NAME@
|
||||
Name[nl]=@APPLICATION_NAME@ desktop sync client
|
||||
Name[nl]=@APPLICATION_NAME@ Desktop
|
||||
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
|
||||
GenericName[nl]=Map synchronisatie
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[oc]=@APPLICATION_ICON_NAME@
|
||||
Name[oc]=@APPLICATION_NAME@ client de sincronizacion
|
||||
Comment[oc]=@APPLICATION_NAME@ client de sincronizacion
|
||||
GenericName[oc]=Sincro. dossièr
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[pl]=@APPLICATION_ICON_NAME@
|
||||
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
||||
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
||||
Name[pl]=@APPLICATION_NAME@ Desktop
|
||||
Comment[pl]=Desktopowy klient synchronizacji @APPLICATION_NAME@
|
||||
GenericName[pl]=Katalog synchronizacji
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[pt_BR]=Sincronizar pasta
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[pt_PT]=Sincronização de Pasta
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[ro]=@APPLICATION_ICON_NAME@
|
||||
Name[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||
Comment[ro]=@APPLICATION_NAME@ client de sincronizare pentru desktop
|
||||
GenericName[ro]=Sincronizare director
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[ru]=@APPLICATION_ICON_NAME@
|
||||
Name[ru]=@APPLICATION_NAME@ для ПК
|
||||
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
|
||||
GenericName[ru]=Синхронизация папок
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sc]=@NÙMENE_ICONA_APLICATZIONE@
|
||||
Name[sc]=@NÙMENE_APLICATZIONE@ cliente sicronizadore de iscrivania
|
||||
Comment[sc]=@NÙMENE_APLICATZIONE@ cliente de sincronizatzione iscrivania
|
||||
GenericName[sc]=Sincronizadore de cartellas
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
||||
Name[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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sl]=@APPLICATION_ICON_NAME@
|
||||
Name[sl]=@APPLICATION_NAME@ program za usklajevanje
|
||||
Comment[sl]=@APPLICATION_NAME@ program za usklajevanje
|
||||
Name[sl]=Namizni program @APPLICATION_NAME@
|
||||
Comment[sl]=Program za usklajevanje @APPLICATION_NAME@
|
||||
GenericName[sl]=Usklajevanje map
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sr]=@APPLICATION_ICON_NAME@
|
||||
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
||||
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
||||
GenericName[sr]=Синхронизација фасцикли
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sv]=@APPLICATION_ICON_NAME@
|
||||
Name[sv]=@APPLICATION_NAME@ desktopssynkklient
|
||||
Comment[sv]=@APPLICATION_NAME@ desktopssynkroniseringsklient
|
||||
GenericName[sv]=Mappsynkronisering
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[sw]=@APPLICATION_ICON_NAME@
|
||||
Name[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
||||
Comment[sw]=Teja ya @APPLICATION_NAME@ ya kufanana faili kwa seva na faili ziko hapa
|
||||
GenericName[sw]=Fanana Kabrasha
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
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
|
||||
GenericName[tr]=Klasör Eşitleme
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,5 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[uk]=@APPLICATION_ICON_NAME@
|
||||
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
||||
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
||||
GenericName[uk]=Синхронізація тек
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[zh_CN]=@APPLICATION_ICON_NAME@
|
||||
Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
||||
Name[zh_CN]=@APPLICATION_NAME@ 桌面
|
||||
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
||||
GenericName[zh_CN]=文件夹同步
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[zh_HK]=@APPLICATION_ICON_NAME@
|
||||
Name[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
|
||||
Name[zh_HK]=@APPLICATION_NAME@ 桌面電腦
|
||||
Comment[zh_HK]= @APPLICATION_NAME@ 桌面同步客戶端
|
||||
GenericName[zh_HK]=資料夾同步
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Categories=Utility;X-SuSE-SyncUtility;
|
||||
Type=Application
|
||||
Exec=@APPLICATION_EXECUTABLE@
|
||||
Name=@APPLICATION_NAME@ desktop sync client
|
||||
Name=@APPLICATION_NAME@ Desktop
|
||||
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||
GenericName=Folder Sync
|
||||
Icon=@APPLICATION_ICON_NAME@
|
||||
@@ -22,6 +22,6 @@ Icon=@APPLICATION_EXECUTABLE@
|
||||
|
||||
# Translations
|
||||
Icon[zh_TW]=@APPLICATION_ICON_NAME@
|
||||
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||
Name[zh_TW]=@APPLICATION_NAME@ 桌面版
|
||||
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||
GenericName[zh_TW]=資料夾同步
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
set( MIRALL_VERSION_MAJOR 3 )
|
||||
set( MIRALL_VERSION_MINOR 1 )
|
||||
set( MIRALL_VERSION_PATCH 83 )
|
||||
set( MIRALL_VERSION_YEAR 2020 )
|
||||
set( MIRALL_VERSION_MINOR 2 )
|
||||
set( MIRALL_VERSION_PATCH 2 )
|
||||
set( MIRALL_VERSION_YEAR 2021 )
|
||||
set( MIRALL_SOVERSION 0 )
|
||||
|
||||
# Minimum supported server version according to https://docs.nextcloud.com/server/latest/admin_manual/release_schedule.html
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
<Property Id="INSTALLDIR">
|
||||
<RegistrySearch Id="RegistryInstallDir" Type="raw" Root="HKLM" Key="Software\$(var.AppVendor)\$(var.AppName)" Win64="no" />
|
||||
</Property>
|
||||
<Property Id="WINDOWSRELEASEID">
|
||||
<RegistrySearch Id="RegistryWindowsReleaseId" Type="raw" Root="HKLM" Key="Software\Microsoft\Windows NT\CurrentVersion" Name="ReleaseId"/>
|
||||
</Property>
|
||||
|
||||
<!-- Detect legacy NSIS installation -->
|
||||
<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) -->
|
||||
<Custom Action="RemoveNavigationPaneEntries" After="RemoveFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
|
||||
|
||||
<!-- Schedule Reboot for the Shell Extensions -->
|
||||
<ScheduleReboot After="InstallFinalize">NOT (DO_NOT_SCHEDULE_REBOOT=1)</ScheduleReboot>
|
||||
<!-- Schedule Reboot for the Shell Extensions (in silent installation mode only, or if SCHEDULE_REBOOT argument is set-->
|
||||
<ScheduleReboot After="InstallFinalize">(SCHEDULE_REBOOT=1) OR NOT (UILevel=2)</ScheduleReboot>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<!-- "Add or Remove" Programs Entries -->
|
||||
@@ -214,6 +217,6 @@
|
||||
<Condition Level="0">(NO_DESKTOP_SHORTCUT=1)</Condition>
|
||||
</Feature>
|
||||
</Feature>
|
||||
|
||||
<Condition Message="This application only runs on Windows 10, version 1709 or higher!">(VersionNT>=603 AND WINDOWSRELEASEID>=1709)</Condition>
|
||||
</Product>
|
||||
</Wix>
|
||||
|
||||
@@ -41,16 +41,16 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
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
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '3.0'
|
||||
version = '3.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '3.0'
|
||||
release = '3.2.2'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# 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`_.
|
||||
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
|
||||
application: download the program and then double-click it to launch the
|
||||
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
|
||||
improvements.
|
||||
|
||||
* Show server notifications on the client
|
||||
* Improved sync speed
|
||||
* Improved handling of Win32 file locks and network files
|
||||
* Improved user notifications about ignored files and conflicts
|
||||
* Add warnings for old server versions
|
||||
* Update of QtKeyChain to support Windows credential store
|
||||
* Packaging of dolphin overlay icon module for bleeding edge distributions
|
||||
* Virtual Files on Windows
|
||||
* Support for the user status from the server
|
||||
* Many improvements to the sync engine
|
||||
* Make the end-to-end encryption work more reliable
|
||||
* Improve sync performance
|
||||
|
||||
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
@@ -163,7 +163,8 @@ std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *h
|
||||
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||
file_stat->type = ItemTypeDirectory;
|
||||
} else {
|
||||
file_stat->type = ItemTypeFile;
|
||||
// exclude ".lnk" files as they are not essential, but, causing troubles when enabling the VFS due to QFileInfo::isDir() and other methods are freezing, which causes the ".lnk" files to start hydrating and freezing the app eventually.
|
||||
file_stat->type = !OCC::FileSystem::isLnkFile(path) ? ItemTypeFile : ItemTypeSoftLink;
|
||||
}
|
||||
|
||||
/* Check for the hidden flag */
|
||||
|
||||
@@ -223,8 +223,6 @@ set( final_src
|
||||
${MIRALL_RC_SRC}
|
||||
${client_SRCS}
|
||||
${client_UI_SRCS}
|
||||
${client_version}
|
||||
${client_manifest}
|
||||
${guiMoc}
|
||||
${client_I18N}
|
||||
${3rdparty_SRC}
|
||||
@@ -253,7 +251,7 @@ if(APPLE)
|
||||
file(GLOB_RECURSE OWNCLOUD_SIDEBAR_ICONS "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-sidebar*")
|
||||
MESSAGE(STATUS "OWNCLOUD_SIDEBAR_ICONS: ${APPLICATION_ICON_NAME}: ${OWNCLOUD_SIDEBAR_ICONS}")
|
||||
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)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
|
||||
@@ -315,13 +313,13 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||
endif()
|
||||
|
||||
# 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()
|
||||
# set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
|
||||
set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns")
|
||||
|
||||
# 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)
|
||||
install(FILES ${client_I18N} DESTINATION ${QM_DIR})
|
||||
|
||||
@@ -385,8 +385,7 @@ void AccountSettings::slotEditCurrentLocalIgnoredFiles()
|
||||
|
||||
void AccountSettings::openIgnoredFilesDialog(const QString & absFolderPath)
|
||||
{
|
||||
Q_ASSERT(absFolderPath.startsWith('/'));
|
||||
Q_ASSERT(absFolderPath.endsWith('/'));
|
||||
Q_ASSERT(QFileInfo(absFolderPath).isAbsolute());
|
||||
|
||||
const QString ignoreFile = absFolderPath + ".sync-exclude.lst";
|
||||
auto layout = new QVBoxLayout();
|
||||
|
||||
@@ -227,7 +227,7 @@ bool AccountState::isDesktopNotificationsAllowed() const
|
||||
return _isDesktopNotificationsAllowed;
|
||||
}
|
||||
|
||||
void AccountState::setDesktopNotificationsAllowed(const bool isAllowed)
|
||||
void AccountState::setDesktopNotificationsAllowed(bool isAllowed)
|
||||
{
|
||||
_isDesktopNotificationsAllowed = isAllowed;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ public:
|
||||
|
||||
/** Set desktop notifications status retrieved by the notificatons endpoint
|
||||
*/
|
||||
void setDesktopNotificationsAllowed(const bool isAllowed);
|
||||
void setDesktopNotificationsAllowed(bool isAllowed);
|
||||
|
||||
/** Fetch the user status (status, icon, message)
|
||||
*/
|
||||
|
||||
@@ -86,9 +86,6 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
|
||||
// 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.
|
||||
foreach (Folder *folder, _folderMan->map()) {
|
||||
if (folder->vfs().mode() == Vfs::WindowsCfApi) {
|
||||
continue;
|
||||
}
|
||||
if (!folder->navigationPaneClsid().isNull()) {
|
||||
// If it already exists, unmark it for removal, this is a valid sync root.
|
||||
entriesToRemove.removeOne(folder->navigationPaneClsid());
|
||||
|
||||
@@ -180,11 +180,11 @@ Q_LOGGING_CATEGORY(lcPublicLink, "nextcloud.gui.socketapi.publiclink", QtInfoMsg
|
||||
void SocketListener::sendMessage(const QString &message, bool doWait) const
|
||||
{
|
||||
if (!socket) {
|
||||
qCInfo(lcSocketApi) << "Not sending message to dead socket:" << message;
|
||||
qCWarning(lcSocketApi) << "Not sending message to dead socket:" << message;
|
||||
return;
|
||||
}
|
||||
|
||||
qCInfo(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket;
|
||||
qCDebug(lcSocketApi) << "Sending SocketAPI message -->" << message << "to" << socket;
|
||||
QString localMessage = message;
|
||||
if (!localMessage.endsWith(QLatin1Char('\n'))) {
|
||||
localMessage.append(QLatin1Char('\n'));
|
||||
@@ -313,6 +313,7 @@ void SocketApi::slotNewConnection()
|
||||
foreach (Folder *f, FolderMan::instance()->map()) {
|
||||
if (f->canSync()) {
|
||||
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
|
||||
qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket;
|
||||
listener.sendMessage(message);
|
||||
}
|
||||
}
|
||||
@@ -417,6 +418,7 @@ void SocketApi::slotRegisterPath(const QString &alias)
|
||||
if (f) {
|
||||
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
|
||||
foreach (auto &listener, _listeners) {
|
||||
qCInfo(lcSocketApi) << "Trying to send SocketAPI Register Path Message -->" << message << "to" << listener.socket;
|
||||
listener.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ void ServerNotificationHandler::slotEtagResponseHeaderReceived(const QByteArray
|
||||
}
|
||||
}
|
||||
|
||||
void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(const bool isAllowed)
|
||||
void ServerNotificationHandler::slotAllowDesktopNotificationsChanged(bool isAllowed)
|
||||
{
|
||||
auto *account = qvariant_cast<AccountState *>(sender()->property(propertyAccountStateC));
|
||||
if (account != nullptr) {
|
||||
|
||||
@@ -26,7 +26,7 @@ private slots:
|
||||
void slotNotificationsReceived(const QJsonDocument &json, int statusCode);
|
||||
void slotEtagResponseHeaderReceived(const QByteArray &value, int statusCode);
|
||||
void slotIconDownloaded(QByteArray iconData);
|
||||
void slotAllowDesktopNotificationsChanged(const bool isAllowed);
|
||||
void slotAllowDesktopNotificationsChanged(bool isAllowed);
|
||||
|
||||
private:
|
||||
QPointer<JsonApiJob> _notificationJob;
|
||||
|
||||
@@ -219,7 +219,8 @@ void User::slotRefreshActivities()
|
||||
_activityModel->slotRefreshActivity();
|
||||
}
|
||||
|
||||
void User::slotRefreshUserStatus() {
|
||||
void User::slotRefreshUserStatus()
|
||||
{
|
||||
// TODO: check for _account->account()->capabilities().userStatus()
|
||||
if (_account.data() && _account.data()->isConnected()) {
|
||||
_account.data()->fetchUserStatus();
|
||||
@@ -698,7 +699,7 @@ Q_INVOKABLE bool UserModel::isUserConnected(const int &id)
|
||||
return _users[id]->isConnected();
|
||||
}
|
||||
|
||||
Q_INVOKABLE QUrl UserModel::statusIcon(const int &id)
|
||||
Q_INVOKABLE QUrl UserModel::statusIcon(int id)
|
||||
{
|
||||
if (id < 0 || id >= _users.size()) {
|
||||
return {};
|
||||
|
||||
@@ -140,7 +140,7 @@ public:
|
||||
Q_INVOKABLE bool currentUserHasLocalFolder();
|
||||
int currentUserId() const;
|
||||
Q_INVOKABLE bool isUserConnected(const int &id);
|
||||
Q_INVOKABLE QUrl statusIcon(const int &id);
|
||||
Q_INVOKABLE QUrl statusIcon(int id);
|
||||
Q_INVOKABLE void switchCurrentUser(const int &id);
|
||||
Q_INVOKABLE void login(const int &id);
|
||||
Q_INVOKABLE void logout(const int &id);
|
||||
|
||||
@@ -403,67 +403,57 @@ Window {
|
||||
}
|
||||
}
|
||||
|
||||
// Filler between account dropdown and header app buttons
|
||||
Item {
|
||||
id: trayWindowHeaderSpacer
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
RowLayout {
|
||||
id: openLocalFolderRowLayout
|
||||
spacing: 0
|
||||
Layout.preferredWidth: Style.trayWindowHeaderHeight
|
||||
Layout.preferredHeight: Style.trayWindowHeaderHeight
|
||||
|
||||
HeaderButton {
|
||||
id: openLocalFolderButton
|
||||
visible: UserModel.currentUser.hasLocalFolder
|
||||
icon.source: "qrc:///client/theme/white/folder.svg"
|
||||
onClicked: UserModel.openCurrentAccountLocalFolder()
|
||||
|
||||
Rectangle {
|
||||
id: folderStateIndicatorBackground
|
||||
width: Style.folderStateIndicatorSize
|
||||
height: width
|
||||
anchors.top: openLocalFolderButton.verticalCenter
|
||||
anchors.left: openLocalFolderButton.horizontalCenter
|
||||
color: Style.ncBlue
|
||||
radius: width*0.5
|
||||
z: 1
|
||||
}
|
||||
}
|
||||
|
||||
HeaderButton {
|
||||
id: openLocalFolderButton
|
||||
|
||||
visible: UserModel.currentUser.hasLocalFolder
|
||||
icon.source: "qrc:///client/theme/white/folder.svg"
|
||||
onClicked: UserModel.openCurrentAccountLocalFolder()
|
||||
Image {
|
||||
id: folderStateIndicator
|
||||
source: UserModel.isUserConnected(UserModel.currentUserId)
|
||||
? Style.stateOnlineImageSource
|
||||
: Style.stateOfflineImageSource
|
||||
cache: false
|
||||
anchors.top: openLocalFolderButton.verticalCenter
|
||||
anchors.left: openLocalFolderButton.horizontalCenter
|
||||
|
||||
sourceSize.width: Style.folderStateIndicatorSize
|
||||
sourceSize.height: Style.folderStateIndicatorSize
|
||||
|
||||
Accessible.role: Accessible.Indicator
|
||||
Accessible.name: UserModel.isUserConnected(UserModel.currentUserId()) ? qsTr("Connected") : qsTr("Disconnected")
|
||||
}
|
||||
|
||||
Accessible.role: Accessible.Button
|
||||
Accessible.name: qsTr("Open local folder of current account")
|
||||
Accessible.onPressAction: openLocalFolderButton.clicked()
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: folderStateIndicatorBackground
|
||||
width: Style.folderStateIndicatorSize
|
||||
height: width
|
||||
anchors.top: openLocalFolderButton.verticalCenter
|
||||
anchors.left: openLocalFolderButton.horizontalCenter
|
||||
color: Style.ncBlue
|
||||
radius: width*0.5
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: folderStateRectangle
|
||||
width: Style.folderStateIndicatorSize
|
||||
height: width
|
||||
anchors.bottom: openLocalFolderButton.bottom
|
||||
anchors.right: openLocalFolderButton.right
|
||||
color: openLocalFolderButton.containsMouse ? "white" : "transparent"
|
||||
opacity: 0.2
|
||||
radius: width*0.5
|
||||
}
|
||||
|
||||
Image {
|
||||
id: folderStateIndicator
|
||||
source: UserModel.isUserConnected(UserModel.currentUserId)
|
||||
? Style.stateOnlineImageSource
|
||||
: Style.stateOfflineImageSource
|
||||
cache: false
|
||||
x: folderStateIndicatorBackground.x
|
||||
y: folderStateIndicatorBackground.y
|
||||
sourceSize.width: Style.folderStateIndicatorSize
|
||||
sourceSize.height: Style.folderStateIndicatorSize
|
||||
|
||||
Accessible.role: Accessible.Indicator
|
||||
Accessible.name: UserModel.isUserConnected(UserModel.currentUserId()) ? qsTr("Connected") : qsTr("Disconnected")
|
||||
}
|
||||
|
||||
HeaderButton {
|
||||
id: trayWindowTalkButton
|
||||
|
||||
|
||||
visible: UserModel.currentUser.serverHasTalk
|
||||
icon.source: "qrc:///client/theme/white/talk-app.svg"
|
||||
onClicked: UserModel.openCurrentAccountTalk()
|
||||
|
||||
|
||||
Accessible.role: Accessible.Button
|
||||
Accessible.name: qsTr("Open Nextcloud Talk in browser")
|
||||
Accessible.onPressAction: trayWindowTalkButton.clicked()
|
||||
@@ -472,6 +462,7 @@ Window {
|
||||
HeaderButton {
|
||||
id: trayWindowAppsButton
|
||||
icon.source: "qrc:///client/theme/white/more-apps.svg"
|
||||
|
||||
onClicked: {
|
||||
if(appsMenu.count <= 0) {
|
||||
UserModel.openCurrentAccountServer()
|
||||
|
||||
@@ -149,11 +149,11 @@ QString OCUpdater::statusString() const
|
||||
case DownloadComplete:
|
||||
return tr("%1 available. Restart application to start the update.").arg(updateVersion);
|
||||
case DownloadFailed:
|
||||
return tr("Could not download update. Please click <a href='%1'>here</a> to download the update manually.").arg(_updateInfo.web());
|
||||
return tr("Could not download update. Please open %1 to download the update manually.").arg(_updateInfo.web());
|
||||
case DownloadTimedOut:
|
||||
return tr("Could not check for new updates.");
|
||||
case UpdateOnlyAvailableThroughSystem:
|
||||
return tr("New %1 is available. Please click <a href='%2'>here</a> to download the update.").arg(updateVersion, _updateInfo.web());
|
||||
return tr("New %1 is available. Please open %2 to download the update.").arg(updateVersion, _updateInfo.web());
|
||||
case CheckingServer:
|
||||
return tr("Checking update server …");
|
||||
case Unknown:
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include "config.h"
|
||||
#include "configfile.h"
|
||||
|
||||
#include <QSysInfo>
|
||||
|
||||
namespace OCC {
|
||||
|
||||
Q_LOGGING_CATEGORY(lcUpdater, "nextcloud.gui.updater", QtInfoMsg)
|
||||
@@ -88,6 +90,9 @@ QUrlQuery Updater::getQueryParams()
|
||||
}
|
||||
query.addQueryItem(QStringLiteral("version"), clientVersion());
|
||||
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("buildArch"), QSysInfo::buildCpuArchitecture());
|
||||
query.addQueryItem(QStringLiteral("currentArch"), QSysInfo::currentCpuArchitecture());
|
||||
|
||||
@@ -30,16 +30,37 @@ Q_LOGGING_CATEGORY(lcUserStatus, "nextcloud.gui.userstatus", QtInfoMsg)
|
||||
|
||||
UserStatus::UserStatus(QObject *parent)
|
||||
: QObject(parent)
|
||||
, _message("")
|
||||
{
|
||||
}
|
||||
|
||||
UserStatus::Status UserStatus::stringToEnum(const QString &status) const
|
||||
{
|
||||
// it needs to match the Status enum
|
||||
const QHash<QString, Status> preDefinedStatus{{"online", Status::Online},
|
||||
{"dnd", Status::DoNotDisturb}, //DoNotDisturb
|
||||
{"away", Status::Away},
|
||||
{"offline", Status::Offline},
|
||||
{"invisible", Status::Invisible}};
|
||||
|
||||
// api should return invisible, dnd,... toLower() it is to make sure
|
||||
// it matches _preDefinedStatus, otherwise the default is online (0)
|
||||
const auto statusEnum = _preDefinedStatus.value(status.isEmpty()? "online" : status.toLower(), 0);
|
||||
return static_cast<Status>(statusEnum);
|
||||
const auto statusKey = status.isEmpty() ? QStringLiteral("online") : status.toLower();
|
||||
return preDefinedStatus.value(statusKey, Status::Online);
|
||||
}
|
||||
|
||||
QString UserStatus::enumToString(Status status) const
|
||||
{
|
||||
switch (status) {
|
||||
case Status::Away:
|
||||
return tr("Away");
|
||||
case Status::DoNotDisturb:
|
||||
return tr("Do not disturb");
|
||||
case Status::Invisible:
|
||||
case Status::Offline:
|
||||
return tr("Offline");
|
||||
default:
|
||||
return tr("Online");
|
||||
}
|
||||
}
|
||||
|
||||
void UserStatus::fetchUserStatus(AccountPtr account)
|
||||
@@ -53,10 +74,9 @@ void UserStatus::fetchUserStatus(AccountPtr account)
|
||||
_job->start();
|
||||
}
|
||||
|
||||
void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode)
|
||||
void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode)
|
||||
{
|
||||
const QJsonObject defaultValues
|
||||
{
|
||||
const QJsonObject defaultValues {
|
||||
{"icon", ""},
|
||||
{"message", ""},
|
||||
{"status", "online"}
|
||||
@@ -66,19 +86,13 @@ void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const in
|
||||
qCInfo(lcUserStatus) << "Slot fetch UserStatus finished with status code" << statusCode;
|
||||
qCInfo(lcUserStatus) << "Using then default values as if user has not set any status" << defaultValues;
|
||||
}
|
||||
|
||||
const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues);
|
||||
const auto emoji = retrievedData.value("icon").toString();
|
||||
const auto message = retrievedData.value("message").toString();
|
||||
auto statusString = retrievedData.value("status").toString();
|
||||
_status = stringToEnum(statusString);
|
||||
|
||||
// to display it to the user like 'Invisible' instead of 'invisible'
|
||||
statusString.replace(0, 1, statusString.at(0).toUpper());
|
||||
|
||||
const auto visibleStatusText = message.isEmpty()
|
||||
? _status == DoNotDisturb? tr("Do not disturb")
|
||||
: tr(qPrintable(statusString))
|
||||
: message;
|
||||
_status = stringToEnum(retrievedData.value("status").toString());
|
||||
const auto visibleStatusText = message.isEmpty() ? enumToString(_status) : message;
|
||||
|
||||
_message = QString("%1 %2").arg(emoji, visibleStatusText);
|
||||
emit fetchUserStatusFinished();
|
||||
@@ -91,20 +105,18 @@ UserStatus::Status UserStatus::status() const
|
||||
|
||||
QString UserStatus::message() const
|
||||
{
|
||||
return _message;
|
||||
return _message.trimmed();
|
||||
}
|
||||
|
||||
QUrl UserStatus::icon() const
|
||||
{
|
||||
switch (_status) {
|
||||
case Online:
|
||||
return Theme::instance()->statusOnlineImageSource();
|
||||
case Away:
|
||||
case Status::Away:
|
||||
return Theme::instance()->statusAwayImageSource();
|
||||
case DoNotDisturb:
|
||||
case Status::DoNotDisturb:
|
||||
return Theme::instance()->statusDoNotDisturbImageSource();
|
||||
case Invisible:
|
||||
case Offline:
|
||||
case Status::Invisible:
|
||||
case Status::Offline:
|
||||
return Theme::instance()->statusInvisibleImageSource();
|
||||
default:
|
||||
return Theme::instance()->statusOnlineImageSource();
|
||||
|
||||
@@ -28,7 +28,7 @@ class UserStatus : public QObject
|
||||
|
||||
public:
|
||||
explicit UserStatus(QObject *parent = nullptr);
|
||||
enum Status {
|
||||
enum class Status {
|
||||
Online,
|
||||
DoNotDisturb,
|
||||
Away,
|
||||
@@ -42,23 +42,16 @@ public:
|
||||
QUrl icon() const;
|
||||
|
||||
private slots:
|
||||
void slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode);
|
||||
void slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode);
|
||||
|
||||
signals:
|
||||
void fetchUserStatusFinished();
|
||||
|
||||
private:
|
||||
Status stringToEnum(const QString &status) const;
|
||||
|
||||
// it needs to match the Status enum
|
||||
const QHash<QString, int> _preDefinedStatus{{"online", 0},
|
||||
{"dnd", 1}, //DoNotDisturb
|
||||
{"away", 2},
|
||||
{"offline", 3},
|
||||
{"invisible", 4}};
|
||||
|
||||
QString enumToString(Status status) const;
|
||||
QPointer<JsonApiJob> _job; // the currently running job
|
||||
Status _status{Status::Online};
|
||||
Status _status = Status::Online;
|
||||
QString _message;
|
||||
};
|
||||
|
||||
|
||||
@@ -116,7 +116,10 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
||||
void OwncloudWizard::centerWindow()
|
||||
{
|
||||
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 newWindowPosition = screenGeometry.center() - QPoint(windowGeometry.width() / 2, windowGeometry.height() / 2);
|
||||
wizardWindow->move(newWindowPosition);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
*/
|
||||
|
||||
#include "discovery.h"
|
||||
#include "common/filesystembase.h"
|
||||
#include "common/syncjournaldb.h"
|
||||
#include "syncfileitem.h"
|
||||
#include <QDebug>
|
||||
@@ -177,9 +178,15 @@ void ProcessDirectoryJob::process()
|
||||
// local stat function.
|
||||
// Recall file shall not be ignored (#4420)
|
||||
bool isHidden = e.localEntry.isHidden || (f.first[0] == '.' && f.first != QLatin1String(".sys.admin#recall#"));
|
||||
#ifdef Q_OS_WIN
|
||||
// exclude ".lnk" files as they are not essential, but, causing troubles when enabling the VFS due to QFileInfo::isDir() and other methods are freezing, which causes the ".lnk" files to start hydrating and freezing the app eventually.
|
||||
const bool isServerEntryWindowsShortcut = !e.localEntry.isValid() && e.serverEntry.isValid() && !e.serverEntry.isDirectory && FileSystem::isLnkFile(e.serverEntry.name);
|
||||
#else
|
||||
const bool isServerEntryWindowsShortcut = false;
|
||||
#endif
|
||||
if (handleExcluded(path._target, e.localEntry.name,
|
||||
e.localEntry.isDirectory || e.serverEntry.isDirectory, isHidden,
|
||||
e.localEntry.isSymLink))
|
||||
e.localEntry.isSymLink || isServerEntryWindowsShortcut))
|
||||
continue;
|
||||
|
||||
if (_queryServer == InBlackList || _discoveryData->isInSelectiveSyncBlackList(path._original)) {
|
||||
|
||||
@@ -425,7 +425,7 @@ signals:
|
||||
* @brief desktopNotificationStatusReceived - signal to report if notifications are allowed
|
||||
* @param status - set desktop notifications allowed status
|
||||
*/
|
||||
void allowDesktopNotificationsChanged(const bool isAllowed);
|
||||
void allowDesktopNotificationsChanged(bool isAllowed);
|
||||
|
||||
private:
|
||||
QUrlQuery _additionalParams;
|
||||
|
||||
@@ -427,6 +427,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
||||
}
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
||||
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;
|
||||
}
|
||||
if (vfs->mode() == Vfs::Off && _item->_type == ItemTypeVirtualFile) {
|
||||
@@ -434,6 +440,11 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
||||
_item->_type = ItemTypeFile;
|
||||
}
|
||||
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;
|
||||
auto r = vfs->createPlaceholder(*_item);
|
||||
if (!r) {
|
||||
@@ -441,6 +452,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
||||
return;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -795,8 +795,55 @@ void SyncEngine::slotPropagationFinished(bool success)
|
||||
_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) {
|
||||
_journal->setDataFingerprint(_discoveryPhase->_dataFingerprint);
|
||||
} else if (_discoveryPhase) {
|
||||
// TODO: Remove this when the file restoration problem is fixed for a user
|
||||
checkAndOverrideSetDataFingerprint();
|
||||
}
|
||||
|
||||
conflictRecordMaintenance();
|
||||
@@ -812,6 +859,12 @@ void SyncEngine::slotPropagationFinished(bool success)
|
||||
emit transmissionProgress(*_progressInfo);
|
||||
|
||||
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)
|
||||
|
||||
@@ -289,6 +289,9 @@ private:
|
||||
LocalDiscoveryStyle _lastLocalDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
||||
LocalDiscoveryStyle _localDiscoveryStyle = LocalDiscoveryStyle::FilesystemOnly;
|
||||
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 <QLocalSocket>
|
||||
#include <QLoggingCategory>
|
||||
#include <QUuid>
|
||||
|
||||
#include <sddl.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());
|
||||
}
|
||||
|
||||
const auto isDownloadFinished = ((offset + currentBlockLength) == totalLength);
|
||||
if (isDownloadFinished) {
|
||||
return;
|
||||
}
|
||||
|
||||
// refresh Windows Copy Dialog progress
|
||||
LARGE_INTEGER progressTotal;
|
||||
progressTotal.QuadPart = totalLength;
|
||||
@@ -450,7 +456,7 @@ bool deleteSyncRootRegistryKey(const QString &syncRootPath, const QString &provi
|
||||
return true;
|
||||
}
|
||||
|
||||
OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString path, const QString providerName, const QString providerVersion, const QString folderAlias, const QString displayName, const QString accountDisplayName)
|
||||
OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString &path, const QString &providerName, const QString &providerVersion, const QString &folderAlias, const QString &displayName, const QString &accountDisplayName)
|
||||
{
|
||||
// even if we fail to register our sync root with shell, we can still proceed with using the VFS
|
||||
const auto createRegistryKeyResult = createSyncRootRegistryKeys(providerName, folderAlias, displayName, accountDisplayName, path);
|
||||
@@ -460,19 +466,24 @@ OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString pat
|
||||
qCWarning(lcCfApiWrapper) << "Failed to create the registry key for path:" << path;
|
||||
}
|
||||
|
||||
const auto p = path.toStdWString();
|
||||
const auto name = providerName.toStdWString();
|
||||
const auto version = providerVersion.toStdWString();
|
||||
// API is somehow keeping the pointers for longer than one would expect or freeing them itself
|
||||
// the internal format of QString is likely the right one for wstring on Windows so there's in fact not necessarily a need to copy
|
||||
const auto p = std::wstring(path.toStdWString().data());
|
||||
const auto name = std::wstring(providerName.toStdWString().data());
|
||||
const auto version = std::wstring(providerVersion.toStdWString().data());
|
||||
|
||||
CF_SYNC_REGISTRATION info;
|
||||
info.StructSize = sizeof(info) + (name.length() + version.length()) * sizeof(wchar_t);
|
||||
info.ProviderName = name.data();
|
||||
info.ProviderVersion = version.data();
|
||||
info.SyncRootIdentity = nullptr;
|
||||
info.SyncRootIdentityLength = 0;
|
||||
info.FileIdentity = nullptr;
|
||||
info.FileIdentityLength = 0;
|
||||
info.ProviderId = QUuid::createUuid();
|
||||
|
||||
CF_SYNC_POLICIES policies;
|
||||
policies.StructSize = sizeof(policies);
|
||||
policies.Hydration.Primary = CF_HYDRATION_POLICY_FULL;
|
||||
policies.Hydration.Modifier = CF_HYDRATION_POLICY_MODIFIER_NONE;
|
||||
policies.Population.Primary = CF_POPULATION_POLICY_ALWAYS_FULL;
|
||||
@@ -489,7 +500,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::registerSyncRoot(const QString pat
|
||||
}
|
||||
}
|
||||
|
||||
OCC::Result<void, QString> OCC::CfApiWrapper::unregisterSyncRoot(const QString path, const QString providerName, const QString accountDisplayName)
|
||||
OCC::Result<void, QString> OCC::CfApiWrapper::unregisterSyncRoot(const QString &path, const QString &providerName, const QString &accountDisplayName)
|
||||
{
|
||||
const auto deleteRegistryKeyResult = deleteSyncRootRegistryKey(path, providerName, accountDisplayName);
|
||||
Q_ASSERT(deleteRegistryKeyResult);
|
||||
@@ -692,7 +703,7 @@ OCC::Result<void, QString> OCC::CfApiWrapper::convertToPlaceholder(const FileHan
|
||||
|
||||
const auto fileIdentity = QString::fromUtf8(fileId).toStdWString();
|
||||
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);
|
||||
if (result != S_OK) {
|
||||
qCCritical(lcCfApiWrapper) << "Couldn't convert to placeholder" << pathForHandle(handle) << ":" << _com_error(result).ErrorMessage();
|
||||
|
||||
@@ -71,8 +71,8 @@ private:
|
||||
std::unique_ptr<CF_PLACEHOLDER_BASIC_INFO, Deleter> _data;
|
||||
};
|
||||
|
||||
OWNCLOUDSYNC_EXPORT Result<void, QString> registerSyncRoot(const QString path, const QString providerName, const QString providerVersion, const QString folderAlias, const QString displayName, const QString accountDisplayName);
|
||||
OWNCLOUDSYNC_EXPORT Result<void, QString> unregisterSyncRoot(const QString path, const QString providerName, const QString accountDisplayName);
|
||||
OWNCLOUDSYNC_EXPORT Result<void, QString> registerSyncRoot(const QString &path, const QString &providerName, const QString &providerVersion, const QString &folderAlias, const QString &displayName, const QString &accountDisplayName);
|
||||
OWNCLOUDSYNC_EXPORT Result<void, QString> unregisterSyncRoot(const QString &path, const QString &providerName, const QString &accountDisplayName);
|
||||
|
||||
OWNCLOUDSYNC_EXPORT Result<ConnectionKey, QString> connectSyncRoot(const QString &path, VfsCfApi *context);
|
||||
OWNCLOUDSYNC_EXPORT Result<void, QString> disconnectSyncRoot(ConnectionKey &&key);
|
||||
|
||||
@@ -129,7 +129,7 @@ Result<void, QString> VfsCfApi::dehydratePlaceholder(const SyncFileItem &item)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -184,6 +184,8 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
|
||||
const auto hasReparsePoint = (ffd->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0;
|
||||
const auto hasCloudTag = (ffd->dwReserved0 & IO_REPARSE_TAG_CLOUD) != 0;
|
||||
|
||||
const auto isWindowsShortcut = !isDirectory && FileSystem::isLnkFile(stat->path);
|
||||
|
||||
// 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
|
||||
// it is a file... let's prevent it
|
||||
@@ -195,7 +197,7 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
|
||||
} else if (isSparseFile && isPinned) {
|
||||
stat->type = ItemTypeVirtualFileDownload;
|
||||
return true;
|
||||
} else if (!isSparseFile && isUnpinned){
|
||||
} else if (!isSparseFile && isUnpinned && !isWindowsShortcut){
|
||||
stat->type = ItemTypeVirtualFileDehydration;
|
||||
return true;
|
||||
} else if (isSparseFile) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user