mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-09 15:13:06 +02:00
Compare commits
387 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
477614b8c9 | ||
|
|
9d060e5e55 | ||
|
|
50be2e067c | ||
|
|
ae28be4a10 | ||
|
|
fa2f52b551 | ||
|
|
658f6817ce | ||
|
|
28c401236b | ||
|
|
7d700a3c84 | ||
|
|
2c2cc5c23e | ||
|
|
94db2f82a2 | ||
|
|
d967ebac9a | ||
|
|
6b5b3c96cf | ||
|
|
a8bf75d496 | ||
|
|
bb34de2bd8 | ||
|
|
b146654474 | ||
|
|
c897564d28 | ||
|
|
ae9bc786ad | ||
|
|
b2d85cc4bf | ||
|
|
ac505aac0e | ||
|
|
4eac71a032 | ||
|
|
fa29fc4028 | ||
|
|
f352af7ffb | ||
|
|
d7098343a2 | ||
|
|
908f4d34e3 | ||
|
|
78c7aed3b9 | ||
|
|
a8986124b8 | ||
|
|
57ec1cdda4 | ||
|
|
9dc47438c9 | ||
|
|
d6a0a5272a | ||
|
|
47ac10fb8e | ||
|
|
459a17bd7e | ||
|
|
de65b6fb7e | ||
|
|
6ddfc80672 | ||
|
|
048cf3b23e | ||
|
|
3c958dea20 | ||
|
|
0b420c5fe6 | ||
|
|
bb7d330516 | ||
|
|
795c29d5bd | ||
|
|
ad04116c00 | ||
|
|
42b9dec1d0 | ||
|
|
51e398d4f4 | ||
|
|
feee0bf62b | ||
|
|
f6dee2b10f | ||
|
|
57fc438b91 | ||
|
|
aa5b62c931 | ||
|
|
f089fa34fc | ||
|
|
200032c9cb | ||
|
|
6a294bb4a0 | ||
|
|
4aa2e2e8c3 | ||
|
|
4cd7095a40 | ||
|
|
eb28fe9990 | ||
|
|
fa5c1eff25 | ||
|
|
1dca017537 | ||
|
|
9ff1a30dc4 | ||
|
|
4f0ff154d3 | ||
|
|
981a4ee240 | ||
|
|
378dd744fb | ||
|
|
d38e829330 | ||
|
|
ad65b6fdf3 | ||
|
|
ea6f3be374 | ||
|
|
85d217ec95 | ||
|
|
e8213242a9 | ||
|
|
0c603944b8 | ||
|
|
559187df6c | ||
|
|
eb00500b0b | ||
|
|
876f69dc7d | ||
|
|
33605d7f65 | ||
|
|
492fc846df | ||
|
|
febf206704 | ||
|
|
e1eeaadaff | ||
|
|
4f17366262 | ||
|
|
a8ac89c20c | ||
|
|
e0f421ac7a | ||
|
|
b6c0f9db5d | ||
|
|
50755d0295 | ||
|
|
9dc0027304 | ||
|
|
37ee52a930 | ||
|
|
692d885b55 | ||
|
|
6c0d796b4b | ||
|
|
db7e5e01b3 | ||
|
|
ae0b1ce3d6 | ||
|
|
419b8a3ff9 | ||
|
|
bdfc5dcd14 | ||
|
|
c0704cd500 | ||
|
|
1b36dbc435 | ||
|
|
188374f60c | ||
|
|
fd9d7563c2 | ||
|
|
bd9fcd88d8 | ||
|
|
b6ff17c50b | ||
|
|
2d3bac4e53 | ||
|
|
7af786fde9 | ||
|
|
1f1a7a27f0 | ||
|
|
c2e3cbca31 | ||
|
|
92a5e64487 | ||
|
|
9153f710df | ||
|
|
8151eb4837 | ||
|
|
a5b65a73a8 | ||
|
|
26b9bf0281 | ||
|
|
19c968de76 | ||
|
|
9b3fa62b2d | ||
|
|
68983c54bb | ||
|
|
d9af9b895f | ||
|
|
50f332eac7 | ||
|
|
ad095efe3a | ||
|
|
3c947819c1 | ||
|
|
f52f9f0abe | ||
|
|
75ccffa5a2 | ||
|
|
f0035b95bb | ||
|
|
955f54cdef | ||
|
|
c5b8cda323 | ||
|
|
ae0dbcde5b | ||
|
|
f32d83e993 | ||
|
|
d7b881feb6 | ||
|
|
6bd98518e4 | ||
|
|
54d80bbc9b | ||
|
|
5f9ec1762a | ||
|
|
1c8dfd701b | ||
|
|
f520d7364d | ||
|
|
4d61a7c263 | ||
|
|
ac6ef500cc | ||
|
|
b5b2ef3120 | ||
|
|
7f3c3f6eb6 | ||
|
|
936bdd04a8 | ||
|
|
33baf40061 | ||
|
|
6a63d8f2b9 | ||
|
|
b11a4217c7 | ||
|
|
35114cf45c | ||
|
|
e07c472057 | ||
|
|
0fed1cc54d | ||
|
|
ac257cd65f | ||
|
|
088b0817d8 | ||
|
|
b0c75723e2 | ||
|
|
b368a93e2e | ||
|
|
c75cb390dd | ||
|
|
d39f826e0e | ||
|
|
1ea8b18893 | ||
|
|
8491ef428e | ||
|
|
42ce5c0c0d | ||
|
|
acca019afe | ||
|
|
4591f9c09f | ||
|
|
088a5a9771 | ||
|
|
19079c65c1 | ||
|
|
3804410949 | ||
|
|
b8e874a3a7 | ||
|
|
3a03568ec8 | ||
|
|
40da5630e1 | ||
|
|
b36626d50a | ||
|
|
26f897d22c | ||
|
|
1b4cb6483b | ||
|
|
9312c18c57 | ||
|
|
96434aabe9 | ||
|
|
95ec0777ca | ||
|
|
283423f1bd | ||
|
|
3a893d6179 | ||
|
|
6a83b31c5a | ||
|
|
9a3667c1de | ||
|
|
90fa47bbe6 | ||
|
|
44c265e2a7 | ||
|
|
bb9017d3a6 | ||
|
|
9d87f707a6 | ||
|
|
89cda9a1b4 | ||
|
|
653e56268d | ||
|
|
56c905819e | ||
|
|
0d5120e7cc | ||
|
|
1c76dd5859 | ||
|
|
37f709fe34 | ||
|
|
a362f32402 | ||
|
|
7ecab308f2 | ||
|
|
d7314adcf1 | ||
|
|
f64035339b | ||
|
|
0e70b8ab9f | ||
|
|
e805184726 | ||
|
|
b0d1e34df3 | ||
|
|
0862d6cfb0 | ||
|
|
9032b1c491 | ||
|
|
e9111d745c | ||
|
|
0e3a8856e5 | ||
|
|
3084b85229 | ||
|
|
f7f0a3249f | ||
|
|
4419a51a5d | ||
|
|
1d37e96999 | ||
|
|
158c6e8136 | ||
|
|
423e4ef92e | ||
|
|
4645adda0a | ||
|
|
0252ad9a08 | ||
|
|
089625c9fd | ||
|
|
e63fd9b894 | ||
|
|
9be32355f9 | ||
|
|
984c02546e | ||
|
|
c60b4afafb | ||
|
|
55ff37a454 | ||
|
|
bb2f179342 | ||
|
|
28afe8c323 | ||
|
|
9393626ec2 | ||
|
|
c0d0d39d8d | ||
|
|
d06db158a0 | ||
|
|
1698c39223 | ||
|
|
42ad97de8c | ||
|
|
29230412ed | ||
|
|
e4bcc1a9ee | ||
|
|
ca624def40 | ||
|
|
bb912ecc0a | ||
|
|
e2309362e1 | ||
|
|
a20ac05357 | ||
|
|
c9d4360fb6 | ||
|
|
63fe2a7098 | ||
|
|
9931977266 | ||
|
|
d4a77be3f8 | ||
|
|
79dd8397d7 | ||
|
|
d564279254 | ||
|
|
97c54249d5 | ||
|
|
652304e82e | ||
|
|
86251ff2e3 | ||
|
|
ae7ad8fb4f | ||
|
|
822c386709 | ||
|
|
50ebc49d69 | ||
|
|
eb3245b241 | ||
|
|
af443461e3 | ||
|
|
e2293eddce | ||
|
|
b34708da29 | ||
|
|
0c21852bc3 | ||
|
|
944f9e9668 | ||
|
|
5c2996deb7 | ||
|
|
33d272e941 | ||
|
|
bf81a473af | ||
|
|
a46548fc04 | ||
|
|
21b7257150 | ||
|
|
7c1401da1c | ||
|
|
c53e9cb417 | ||
|
|
e3731e40aa | ||
|
|
218ffd0cd8 | ||
|
|
9195452878 | ||
|
|
67c25ca4b9 | ||
|
|
75ddd315e3 | ||
|
|
179ab90fce | ||
|
|
198b95676a | ||
|
|
63e5e4e92d | ||
|
|
107bf5db6d | ||
|
|
38449bf179 | ||
|
|
8710d70a0a | ||
|
|
b0e8837b94 | ||
|
|
aadd2ff7ac | ||
|
|
7dfe21fe35 | ||
|
|
310266f9fa | ||
|
|
33e3b7098f | ||
|
|
e5b5573711 | ||
|
|
5e4abbc0c1 | ||
|
|
9e6e6dd5db | ||
|
|
79e196a22f | ||
|
|
d73c4273ad | ||
|
|
86a1bc36cb | ||
|
|
aa600b4a24 | ||
|
|
27298a2056 | ||
|
|
5ebee92991 | ||
|
|
9ec61a84ce | ||
|
|
cacf3e9924 | ||
|
|
dc993d3ebe | ||
|
|
51829bfb47 | ||
|
|
6dfe160cef | ||
|
|
a2f1ee05ba | ||
|
|
76b9d5c0c3 | ||
|
|
51d349f527 | ||
|
|
188125dd88 | ||
|
|
d8aed94ab1 | ||
|
|
86d7d41e40 | ||
|
|
74454d0452 | ||
|
|
0dcf6c6024 | ||
|
|
0a14f6eeb1 | ||
|
|
b59b633a3d | ||
|
|
d6b34323c5 | ||
|
|
716517db98 | ||
|
|
76c515b09c | ||
|
|
ac367b21bc | ||
|
|
1361c3053a | ||
|
|
b46ee79081 | ||
|
|
9cea77b0fb | ||
|
|
c04addc5c4 | ||
|
|
c2f4326908 | ||
|
|
f6d3229b38 | ||
|
|
3451970751 | ||
|
|
09b0055dc3 | ||
|
|
24907acc2a | ||
|
|
01bbfaacf3 | ||
|
|
6d5da44947 | ||
|
|
071709ab5e | ||
|
|
1295884420 | ||
|
|
6d661e0b3d | ||
|
|
e0430288ce | ||
|
|
a7b16e3c28 | ||
|
|
abe22d8fe6 | ||
|
|
1ad7116045 | ||
|
|
72777be571 | ||
|
|
840904d527 | ||
|
|
f91678ef24 | ||
|
|
6cf390f753 | ||
|
|
20b9404539 | ||
|
|
0ff23eabca | ||
|
|
b37cbea5cc | ||
|
|
fc18fd9a06 | ||
|
|
07116707e5 | ||
|
|
0f935b06e9 | ||
|
|
a0d6f5fb60 | ||
|
|
4ddfc04534 | ||
|
|
9fb5b4a92d | ||
|
|
b97d8ba6db | ||
|
|
7d8bba6786 | ||
|
|
f0c6825746 | ||
|
|
1490b186f9 | ||
|
|
8b64db6344 | ||
|
|
ab85dfcd67 | ||
|
|
13fdb32d4f | ||
|
|
72901a4ed8 | ||
|
|
558d3ad492 | ||
|
|
0a04419180 | ||
|
|
fdbc523f85 | ||
|
|
287d78ffd3 | ||
|
|
8418507483 | ||
|
|
d1b9d100b4 | ||
|
|
b93c762205 | ||
|
|
528e1bef37 | ||
|
|
73aed1d630 | ||
|
|
7b446eef93 | ||
|
|
1afaa22ddb | ||
|
|
bdd5d423ed | ||
|
|
44b5e07a80 | ||
|
|
d8c0fb856c | ||
|
|
6cc496633f | ||
|
|
1d0bf08a1c | ||
|
|
a3d1bd3a42 | ||
|
|
1c0fbba98e | ||
|
|
2d6c5f393f | ||
|
|
eaf339b11d | ||
|
|
3a50b57b5a | ||
|
|
6c0cd4bd3a | ||
|
|
d6170271e9 | ||
|
|
6f145e3a80 | ||
|
|
3c193143f2 | ||
|
|
b25e15347b | ||
|
|
a8cce41f35 | ||
|
|
f0f691fffc | ||
|
|
847706432b | ||
|
|
bd93489b14 | ||
|
|
96d0059ca4 | ||
|
|
df802472cb | ||
|
|
94750a5ea1 | ||
|
|
fae1c0dbdd | ||
|
|
b546e7c224 | ||
|
|
cd58850f5b | ||
|
|
7d3242077b | ||
|
|
3f2ff2e6ba | ||
|
|
433a059223 | ||
|
|
d6feb984c3 | ||
|
|
41f2864ac9 | ||
|
|
b1a2683e62 | ||
|
|
4febf7c70b | ||
|
|
b8f0721fcb | ||
|
|
8f95f68f06 | ||
|
|
c9b7078fb7 | ||
|
|
f0b96445d2 | ||
|
|
bcb4b44c69 | ||
|
|
82f9ec78dc | ||
|
|
5a26e7dabe | ||
|
|
6718f5ad58 | ||
|
|
88c738dd21 | ||
|
|
2d79ea5262 | ||
|
|
cc7abc02f4 | ||
|
|
e2c813bfca | ||
|
|
5695aba5d7 | ||
|
|
0f9e32d49c | ||
|
|
0d9d942ab7 | ||
|
|
9de32d2cb7 | ||
|
|
53c89e2196 | ||
|
|
b0959a6292 | ||
|
|
1af9bf8abc | ||
|
|
0d1c15a768 | ||
|
|
48acaec66f | ||
|
|
9f6bb617e9 | ||
|
|
c5a4694c74 | ||
|
|
0f2294cef4 | ||
|
|
778489d445 | ||
|
|
ba53a01339 | ||
|
|
8217c44ee5 | ||
|
|
fff64e8aa5 | ||
|
|
8e38e2ac86 | ||
|
|
fb5ff96ed6 | ||
|
|
91602574a9 | ||
|
|
ee8bcb2a5b |
561
.drone.yml
561
.drone.yml
@@ -1,228 +1,347 @@
|
|||||||
clone:
|
kind: pipeline
|
||||||
git:
|
name: qt-5.7
|
||||||
image: plugins/git
|
|
||||||
tags: true
|
|
||||||
depth: 1
|
|
||||||
|
|
||||||
pipeline:
|
steps:
|
||||||
qt-5.7:
|
- name: build and test
|
||||||
image: nextcloudci/client-5.7:client-5.7-4
|
image: nextcloudci/client-5.7:client-5.7-4
|
||||||
commands:
|
commands:
|
||||||
# Install QtKeyChain
|
# Install QtKeyChain
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
source /opt/qt57/bin/qt57-env.sh &&
|
source /opt/qt57/bin/qt57-env.sh &&
|
||||||
cd /tmp &&
|
cd /tmp &&
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
cd qtkeychain &&
|
cd qtkeychain &&
|
||||||
git checkout v0.9.1 &&
|
git checkout v0.9.1 &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake ../ &&
|
cmake ../ &&
|
||||||
make &&
|
make &&
|
||||||
make install"
|
make install"
|
||||||
# Build client
|
# Build client
|
||||||
- /bin/bash -c "
|
- /bin/bash -c "
|
||||||
source /opt/qt57/bin/qt57-env.sh &&
|
source /opt/qt57/bin/qt57-env.sh &&
|
||||||
mkdir build &&
|
mkdir build &&
|
||||||
cd build &&
|
cd build &&
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
make &&
|
make &&
|
||||||
useradd -m -s /bin/bash test &&
|
useradd -m -s /bin/bash test &&
|
||||||
chown -R test:test . &&
|
chown -R test:test . &&
|
||||||
su -c 'ctest --output-on-failure' test"
|
su -c 'ctest --output-on-failure' test"
|
||||||
when:
|
trigger:
|
||||||
matrix:
|
branch:
|
||||||
TESTS: qt-5.7
|
- master
|
||||||
qt-5.8:
|
event:
|
||||||
image: nextcloudci/client-5.8:client-5.8-4
|
- pull_request
|
||||||
commands:
|
- push
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt58/bin/qt58-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt58/bin/qt58-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.8
|
|
||||||
qt-5.9:
|
|
||||||
image: nextcloudci/client-5.9:client-5.9-5
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt59/bin/qt59-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
source /opt/qt59/bin/qt59-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.9
|
|
||||||
qt-5.10:
|
|
||||||
image: nextcloudci/client-5.10:client-5.10-3
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt510/bin/qt510-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt510/bin/qt510-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.10
|
|
||||||
qt-5.11:
|
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
|
||||||
commands:
|
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=gcc-7 &&
|
|
||||||
export CXX=g++-7 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.11
|
|
||||||
|
|
||||||
qt-5.11-clang:
|
---
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
kind: pipeline
|
||||||
commands:
|
name: qt-5.8
|
||||||
# Install QtKeyChain
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=clang-6.0 &&
|
|
||||||
export CXX=clang++-6.0 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
cd /tmp &&
|
|
||||||
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
|
||||||
cd qtkeychain &&
|
|
||||||
git checkout v0.9.1 &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake ../ &&
|
|
||||||
make &&
|
|
||||||
make install"
|
|
||||||
# Build client
|
|
||||||
- /bin/bash -c "
|
|
||||||
export CC=clang-6.0 &&
|
|
||||||
export CXX=clang++-6.0 &&
|
|
||||||
source /opt/qt511/bin/qt511-env.sh &&
|
|
||||||
mkdir build &&
|
|
||||||
cd build &&
|
|
||||||
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
|
||||||
make &&
|
|
||||||
useradd -m -s /bin/bash test &&
|
|
||||||
chown -R test:test . &&
|
|
||||||
su -c 'ctest --output-on-failure' test"
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
TESTS: qt-5.11-clang
|
|
||||||
|
|
||||||
AppImage:
|
steps:
|
||||||
image: nextcloudci/client-5.11:client-5.11-3
|
- name: build and test
|
||||||
commands:
|
image: nextcloudci/client-5.8:client-5.8-4
|
||||||
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
commands:
|
||||||
when:
|
# Install QtKeyChain
|
||||||
matrix:
|
- /bin/bash -c "
|
||||||
BUILD: AppImage
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
source /opt/qt58/bin/qt58-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
Debian:
|
---
|
||||||
image: nextcloudci/client-debian-ci:client-debian-ci-2
|
kind: pipeline
|
||||||
commands:
|
name: qt-5.9
|
||||||
- /bin/bash -c "./admin/linux/debian/drone-build.sh"
|
|
||||||
secrets: [ DEBIAN_SECRET_KEY, DEBIAN_SECRET_IV ]
|
|
||||||
when:
|
|
||||||
matrix:
|
|
||||||
BUILD: Debian
|
|
||||||
|
|
||||||
documentation:
|
steps:
|
||||||
image: nextcloudci/documentation:documentation-5
|
- name: build and test
|
||||||
commands:
|
image: nextcloudci/client-5.9:client-5.9-5
|
||||||
- cd doc
|
commands:
|
||||||
- make html
|
# Install QtKeyChain
|
||||||
when:
|
- /bin/bash -c "
|
||||||
matrix:
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
TESTS: documentation
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
source /opt/qt59/bin/qt59-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
matrix:
|
---
|
||||||
include:
|
kind: pipeline
|
||||||
- TESTS: qt-5.7
|
name: qt-5.10
|
||||||
- TESTS: qt-5.8
|
|
||||||
- TESTS: qt-5.9
|
|
||||||
- TESTS: qt-5.10
|
|
||||||
- TESTS: qt-5.11
|
|
||||||
- TESTS: qt-5.11-clang
|
|
||||||
- BUILD: AppImage
|
|
||||||
- BUILD: Debian
|
|
||||||
- TESTS: documentation
|
|
||||||
|
|
||||||
branches: [ master, 2.* ]
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.10:client-5.10-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt510/bin/qt510-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.11
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.11:client-5.11-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.11-clang
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.11:client-5.11-3
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt511/bin/qt511-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.12
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=gcc-7 &&
|
||||||
|
export CXX=g++-7 &&
|
||||||
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: qt-5.12-clang
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build and test
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
|
commands:
|
||||||
|
# Install QtKeyChain
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
|
cd /tmp &&
|
||||||
|
git clone https://github.com/frankosterfeld/qtkeychain.git &&
|
||||||
|
cd qtkeychain &&
|
||||||
|
git checkout v0.9.1 &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake ../ &&
|
||||||
|
make &&
|
||||||
|
make install"
|
||||||
|
# Build client
|
||||||
|
- /bin/bash -c "
|
||||||
|
export CC=clang-6.0 &&
|
||||||
|
export CXX=clang++-6.0 &&
|
||||||
|
source /opt/qt512/bin/qt512-env.sh &&
|
||||||
|
mkdir build &&
|
||||||
|
cd build &&
|
||||||
|
cmake -D NO_SHIBBOLETH=1 -DCMAKE_BUILD_TYPE=Debug -DUNIT_TESTING=1 ../ &&
|
||||||
|
make &&
|
||||||
|
useradd -m -s /bin/bash test &&
|
||||||
|
chown -R test:test . &&
|
||||||
|
su -c 'ctest --output-on-failure' test"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: AppImage
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nextcloudci/client-5.12:client-5.12-2
|
||||||
|
commands:
|
||||||
|
- /bin/bash -c "./admin/linux/build-appimage.sh"
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: Documentation
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: nextcloudci/documentation:documentation-5
|
||||||
|
commands:
|
||||||
|
- cd doc
|
||||||
|
- make html
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
- push
|
||||||
|
|||||||
33
.github/issue_template.md
vendored
33
.github/issue_template.md
vendored
@@ -1,9 +1,14 @@
|
|||||||
<!---
|
<!--
|
||||||
Please try to only report a bug if it happens with the latest version
|
Dear user,
|
||||||
The latest version can be seen by checking https://download.nextcloud.com/desktop/
|
Please understand that at the moment, we are very busy with customer issues
|
||||||
For support try our forums: https://help.nextcloud.com
|
and some high priority development work. A lot of issues are getting reported.
|
||||||
--->
|
Right now we can't keep up and timely respond to all of them.
|
||||||
|
We're sorry for that and are expanding our team, if you're looking for a C++
|
||||||
|
job or know somebody who is, please point them to https://nextcloud.com/jobs
|
||||||
|
Don't forget that Github is not a support system or a place to ask for
|
||||||
|
features but only a place to report verified bugs - see nextcloud.com/support
|
||||||
|
for support options!
|
||||||
|
-->
|
||||||
|
|
||||||
### Expected behaviour
|
### Expected behaviour
|
||||||
Tell us what should happen
|
Tell us what should happen
|
||||||
@@ -18,6 +23,11 @@ Tell us what happens instead
|
|||||||
|
|
||||||
### Client configuration
|
### Client configuration
|
||||||
Client version:
|
Client version:
|
||||||
|
<!---
|
||||||
|
Please try to only report a bug if it happens with the latest version
|
||||||
|
The latest version can be seen by checking https://download.nextcloud.com/desktop/
|
||||||
|
For support try our forums: https://help.nextcloud.com
|
||||||
|
--->
|
||||||
|
|
||||||
Operating system:
|
Operating system:
|
||||||
|
|
||||||
@@ -34,15 +44,6 @@ Installation path of client:
|
|||||||
<!---
|
<!---
|
||||||
Optional section. It depends on the issue.
|
Optional section. It depends on the issue.
|
||||||
--->
|
--->
|
||||||
|
|
||||||
Operating system:
|
|
||||||
|
|
||||||
Web server:
|
|
||||||
|
|
||||||
Database:
|
|
||||||
|
|
||||||
PHP version:
|
|
||||||
|
|
||||||
Nextcloud version:
|
Nextcloud version:
|
||||||
|
|
||||||
Storage backend (external storage):
|
Storage backend (external storage):
|
||||||
@@ -52,8 +53,6 @@ Storage backend (external storage):
|
|||||||
Please use Gist (https://gist.github.com/) or a similar code paster for longer
|
Please use Gist (https://gist.github.com/) or a similar code paster for longer
|
||||||
logs.
|
logs.
|
||||||
|
|
||||||
```Template for output < 10 lines```
|
|
||||||
|
|
||||||
1. Client logfile: Output of `nextcloud --logwindow` or `nextcloud --logfile log.txt`
|
1. Client logfile: Output of `nextcloud --logwindow` or `nextcloud --logfile log.txt`
|
||||||
(On Windows using `cmd.exe`, you might need to first `cd` into the Nextcloud directory)
|
(On Windows using `cmd.exe`, you might need to first `cd` into the Nextcloud directory)
|
||||||
(See also https://docs.nextcloud.com/desktop/2.3/troubleshooting.html#log-files)
|
(See also https://docs.nextcloud.com/desktop/2.3/troubleshooting.html#log-files)
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -171,3 +171,4 @@ CPackConfig.cmake
|
|||||||
CPackOptions.cmake
|
CPackOptions.cmake
|
||||||
CPackSourceConfig.cmake
|
CPackSourceConfig.cmake
|
||||||
|
|
||||||
|
compile_commands.json
|
||||||
|
|||||||
201
.tx/nextcloud.client-desktop/ar_translation
Normal file
201
.tx/nextcloud.client-desktop/ar_translation
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
GenericName[ar]=مزامنة المجلد
|
||||||
204
.tx/nextcloud.client-desktop/bg_translation
Normal file
204
.tx/nextcloud.client-desktop/bg_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[bg_BG]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
|
Comment[bg_BG]=@APPLICATION_NAME@ клиент за синхронизиране на десктоп
|
||||||
|
GenericName[bg_BG]=Синхронизиране на папка
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
|
||||||
Icon[ca]=@APPLICATION_ICON_NAME@
|
Icon[ca]=@APPLICATION_ICON_NAME@
|
||||||
Name[ca]=@APPLICATION_NAME@ client de sincro d'escriptori
|
Name[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
|
Comment[ca]=@APPLICATION_NAME@ client de sincronització d'escriptori
|
||||||
GenericName[ca]=Directori de sincronització
|
GenericName[ca]=Directori de sincronització
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
|
||||||
Icon[cs_CZ]=@NAZEV_IKONY_APLIKACE@
|
Icon[cs_CZ]=@NAZEV_IKONY_APLIKACE@
|
||||||
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
Name[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
|
Comment[cs_CZ]=@APPLICATION_NAME@ synchronizační klient pro desktop
|
||||||
GenericName[cs_CZ]=Synchronizace složek
|
GenericName[cs_CZ]=Synchronizace složek
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/da_translation
Normal file
204
.tx/nextcloud.client-desktop/da_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[da]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||||
|
Comment[da]=@APPLICATION_NAME@ Arbejdsstationsssynkroniseringsklient
|
||||||
|
GenericName[da]=Mappesynkronisering
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
Icon[de]=@APPLICATION_ICON_NAME@
|
||||||
Icon[de_DE]=@APPLICATION_ICON_NAME@
|
Name[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
||||||
Name[de_DE]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
Comment[de]=@APPLICATION_NAME@ Client zur Desktop-Synchronisation
|
||||||
GenericName[de_DE]=Synchronisationsordner
|
GenericName[de]=Synchronisationsordner
|
||||||
|
|||||||
201
.tx/nextcloud.client-desktop/el_translation
Normal file
201
.tx/nextcloud.client-desktop/el_translation
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
GenericName[el]=Συγχρονισμός φακέλου
|
||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
Icon[en_GB]=@APPLICATION_ICON_NAME@
|
||||||
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
|
Name[en_GB]=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment[en_GB]=@APPLICATION_NAME@ desktop synchronisation client
|
||||||
GenericName[en_GB]=Folder Sync
|
GenericName[en_GB]=Folder Sync
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/eo_translation
Normal file
204
.tx/nextcloud.client-desktop/eo_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[eo]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
||||||
|
Comment[eo]=@APPLICATION_NAME@ sinkroniga kliento
|
||||||
|
GenericName[eo]=Dosieruja sinkronigo
|
||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_CL]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_CL]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_CO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_CO]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_CR]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_CR]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_DO]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_DO]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_EC]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_EC]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_GT]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_GT]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_MX]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_MX]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
|
||||||
Name[es_SV]=@APPLICATION_NAME@ Cliente de sincronización de escritorio
|
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
|
GenericName[es_SV]=Sincronización de carpeta
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
|
||||||
Icon[es]=@APPLICATION_ICON_NAME@
|
Icon[es]=@APPLICATION_ICON_NAME@
|
||||||
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
Name[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
||||||
|
Comment[es]=Cliente de sincronización de escritorio @APPLICATION_NAME@
|
||||||
GenericName[es]=Sincronización de carpetas
|
GenericName[es]=Sincronización de carpetas
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/eu_translation
Normal file
204
.tx/nextcloud.client-desktop/eu_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[eu]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
||||||
|
Comment[eu]=@APPLICATION_NAME@ mahaigainerako sinkronizazio bezeroa
|
||||||
|
GenericName[eu]=Karpeta-sinkronizazioa
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[fr]=Client de synchronisation @APPLICATION_NAME@ desktop
|
|
||||||
Icon[fr]=@APPLICATION_ICON_NAME@
|
Icon[fr]=@APPLICATION_ICON_NAME@
|
||||||
Name[fr]=Client desktop de synchronisation @APPLICATION_NAME@
|
Name[fr]=Client de synchro @APPLICATION_NAME@
|
||||||
|
Comment[fr]=Client de synchronisation @APPLICATION_NAME@
|
||||||
GenericName[fr]=Synchronisation du dossier
|
GenericName[fr]=Synchronisation du dossier
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
|
||||||
Icon[gl]=@APPLICATION_ICON_NAME@
|
Icon[gl]=@APPLICATION_ICON_NAME@
|
||||||
Name[gl]=@APPLICATION_NAME@ cliente de sincr escritorio
|
Name[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
||||||
GenericName[gl]=Sincr. de cartafol
|
Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio
|
||||||
|
GenericName[gl]=Sincronización de cartafol
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
Icon[he]=@APPLICATION_ICON_NAME@
|
||||||
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
Name[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
||||||
|
Comment[he]=@APPLICATION_NAME@ לקוח סנכרון לשולחן העבודה
|
||||||
GenericName[he]=סנכרון תיקיות
|
GenericName[he]=סנכרון תיקיות
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[hr]=klijent za sinkronizaciju računala
|
|
||||||
Name[hr]=sinkronizacija računala
|
Name[hr]=sinkronizacija računala
|
||||||
|
Comment[hr]=klijent za sinkronizaciju računala
|
||||||
GenericName[hr]=Sinkronizacija mapa
|
GenericName[hr]=Sinkronizacija mapa
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[hu_HU]=@APPLICATION_NAME@ deszktop szinkronizációs kliens
|
|
||||||
Icon[hu_HU]=@APPLICATION_ICON_NAME@
|
Icon[hu_HU]=@APPLICATION_ICON_NAME@
|
||||||
Name[hu_HU]=@APPLICATION_NAME@ deszktop szinkronizációs kliens
|
Name[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
|
||||||
GenericName[hu_HU]=Mappa szinkronizáció
|
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizálási kliens
|
||||||
|
GenericName[hu_HU]=Mappaszinkronizálás
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
|
|
||||||
Icon[is]=@APPLICATION_ICON_NAME@
|
Icon[is]=@APPLICATION_ICON_NAME@
|
||||||
Name[is]=@APPLICATION_NAME@ forrit til samstillingar við tölvu
|
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
|
GenericName[is]=Samstilling á möppum
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
|
|
||||||
Icon[it]=@APPLICATION_ICON_NAME@
|
Icon[it]=@APPLICATION_ICON_NAME@
|
||||||
Name[it]=Client di sincronizzazione desktop di @APPLICATION_NAME@
|
Name[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
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
Icon[ja_JP]=@APPLICATION_ICON_NAME@
|
||||||
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
Name[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||||
|
Comment[ja_JP]=@APPLICATION_NAME@ デスクトップ同期クライアント
|
||||||
GenericName[ja_JP]=フォルダーを同期する
|
GenericName[ja_JP]=フォルダーを同期する
|
||||||
|
|||||||
203
.tx/nextcloud.client-desktop/ko_translation
Normal file
203
.tx/nextcloud.client-desktop/ko_translation
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[ko]=@APPLICATION_ICON_NAME@
|
||||||
|
Comment[ko]=@APPLICATION_NAME@ 데스크톱 동기화 클라이언트
|
||||||
|
GenericName[ko]=폴더 동기화
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
|
||||||
Icon[lt_LT]=@APPLICATION_ICON_NAME@
|
Icon[lt_LT]=@APPLICATION_ICON_NAME@
|
||||||
Name[lt_LT]=@APPLICATION_NAME@ darbalaukio sinchronizavimo kliento programa
|
Name[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
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
|
||||||
Icon[lv]=@APPLICATION_ICON_NAME@
|
Icon[lv]=@APPLICATION_ICON_NAME@
|
||||||
Name[lv]=@APPLICATION_NAME@ darbavirsmas sinhronizešanas klients
|
Name[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
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
Icon[nb_NO]=@APPLICATION_ICON_NAME@
|
||||||
Name[nb_NO]=@APPLICATION_NAME@ klient for synkroinisering
|
Name[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
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
|
|
||||||
Icon[nl]=@APPLICATION_ICON_NAME@
|
Icon[nl]=@APPLICATION_ICON_NAME@
|
||||||
Name[nl]=@APPLICATION_NAME@ desktop sync client
|
Name[nl]=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment[nl]=@APPLICATION_NAME@ desktopsynchronisatieclient
|
||||||
GenericName[nl]=Map synchronisatie
|
GenericName[nl]=Map synchronisatie
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
|
||||||
Icon[pl]=@APPLICATION_ICON_NAME@
|
Icon[pl]=@APPLICATION_ICON_NAME@
|
||||||
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
Name[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
||||||
|
Comment[pl]=@APPLICATION_NAME@ desktopowy klient synchronizacji
|
||||||
GenericName[pl]=Katalog synchronizacji
|
GenericName[pl]=Katalog synchronizacji
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
|
||||||
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@ cliente de sincronização desktop
|
||||||
GenericName[pt_BR]=Sincronizar Pasta
|
Comment[pt_BR]=@APPLICATION_NAME@ cliente de sincronização desktop
|
||||||
|
GenericName[pt_BR]=Sincronizar pasta
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
|
Icon[pt_PT]=@APPLICATION_ICON_NAME@
|
||||||
Name[pt_PT]=@APPLICATION_NAME@ - Cliente de Sincronização da Área de Trabalho
|
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
|
GenericName[pt_PT]=Sincronização de Pasta
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/ro_translation
Normal file
204
.tx/nextcloud.client-desktop/ro_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[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 dosare
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
|
|
||||||
Icon[ru]=@APPLICATION_ICON_NAME@
|
Icon[ru]=@APPLICATION_ICON_NAME@
|
||||||
Name[ru]=@APPLICATION_NAME@ клиент для ПК
|
Name[ru]=@APPLICATION_NAME@ для ПК
|
||||||
|
Comment[ru]=Клиент синхронизации @APPLICATION_NAME@ для ПК
|
||||||
GenericName[ru]=Синхронизация папок
|
GenericName[ru]=Синхронизация папок
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[sk_SK]=@APPLICATION_NAME@ Synchronizačný klient pre PC
|
|
||||||
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
Icon[sk_SK]=@APPLICATION_ICON_NAME@
|
||||||
Name[sk_SK]=@APPLICATION_NAME@ Synchronizačný klient pre PC
|
Name[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
GenericName[sk_SK]=Synchnonizácia priečinka
|
Comment[sk_SK]=@APPLICATION_NAME@ synchronizačný klient pre PC
|
||||||
|
GenericName[sk_SK]=Synchnonizácia priečinkov
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
|
||||||
Icon[sl]=@APPLICATION_ICON_NAME@
|
Icon[sl]=@APPLICATION_ICON_NAME@
|
||||||
Name[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
Name[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
||||||
|
Comment[sl]=@APPLICATION_NAME@ odjemalec za usklajevanje
|
||||||
GenericName[sl]=Usklajevanje map
|
GenericName[sl]=Usklajevanje map
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
|
||||||
Icon[sr]=@APPLICATION_ICON_NAME@
|
Icon[sr]=@APPLICATION_ICON_NAME@
|
||||||
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
Name[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
||||||
|
Comment[sr]=@APPLICATION_NAME@ десктоп клијент за синхронизацију
|
||||||
GenericName[sr]=Синхронизација фасцикли
|
GenericName[sr]=Синхронизација фасцикли
|
||||||
|
|||||||
202
.tx/nextcloud.client-desktop/sv_translation
Normal file
202
.tx/nextcloud.client-desktop/sv_translation
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[sv]=@APPLICATION_ICON_NAME@
|
||||||
|
GenericName[sv]=Mappsynkronisering
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
|
||||||
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ü eşiteme istemcisi
|
||||||
|
Comment[tr]=@APPLICATION_NAME@ masaüstü eşitleme istemcisi
|
||||||
GenericName[tr]=Klasör Eşitleme
|
GenericName[tr]=Klasör Eşitleme
|
||||||
|
|||||||
204
.tx/nextcloud.client-desktop/uk_translation
Normal file
204
.tx/nextcloud.client-desktop/uk_translation
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;X-SuSE-SyncUtility;
|
||||||
|
Type=Application
|
||||||
|
Exec=@APPLICATION_EXECUTABLE@
|
||||||
|
Name=@APPLICATION_NAME@ desktop sync client
|
||||||
|
Comment=@APPLICATION_NAME@ desktop synchronization client
|
||||||
|
GenericName=Folder Sync
|
||||||
|
Icon=@APPLICATION_ICON_NAME@
|
||||||
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
Icon[uk]=@APPLICATION_ICON_NAME@
|
||||||
|
Name[uk]=@APPLICATION_NAME@ клієнт для ПК
|
||||||
|
Comment[uk]=Клієнт синхронізації @APPLICATION_NAME@ для ПК
|
||||||
|
GenericName[uk]=Синхронізація каталогів
|
||||||
@@ -198,7 +198,7 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端
|
|
||||||
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@ 桌面同步客户端
|
||||||
GenericName[zh_CN]=文件夹同步
|
GenericName[zh_CN]=文件夹同步
|
||||||
|
|||||||
@@ -198,6 +198,6 @@ X-GNOME-Autostart-Delay=3
|
|||||||
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
|
||||||
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
|
Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端
|
||||||
GenericName[zh_TW]=資料夾同步
|
GenericName[zh_TW]=資料夾同步
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ If your issue appears to be a bug, and hasn't been reported, open a new issue.
|
|||||||
Help us to maximize the effort we can spend fixing issues and adding new
|
Help us to maximize the effort we can spend fixing issues and adding new
|
||||||
features, by not reporting duplicate issues.
|
features, by not reporting duplicate issues.
|
||||||
|
|
||||||
[template]: https://raw.githubusercontent.com/nextcloud/appstore/master/.github/issue_template.md
|
[template]: https://raw.githubusercontent.com/nextcloud/desktop/master/.github/issue_template.md
|
||||||
[support]: https://nextcloud.com/support/
|
[support]: https://nextcloud.com/support/
|
||||||
[forum]: https://help.nextcloud.com/categories
|
[forum]: https://help.nextcloud.com/categories
|
||||||
[irc]: https://webchat.freenode.net/?channels=nextcloud
|
[irc]: https://webchat.freenode.net/?channels=nextcloud
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ set( APPLICATION_EXECUTABLE "nextcloud" )
|
|||||||
set( APPLICATION_DOMAIN "nextcloud.com" )
|
set( APPLICATION_DOMAIN "nextcloud.com" )
|
||||||
set( APPLICATION_VENDOR "Nextcloud GmbH" )
|
set( APPLICATION_VENDOR "Nextcloud GmbH" )
|
||||||
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE string "URL for updater" )
|
set( APPLICATION_UPDATE_URL "https://updates.nextcloud.org/client/" CACHE string "URL for updater" )
|
||||||
|
set( APPLICATION_HELP_URL "" CACHE string "URL for the help menu" )
|
||||||
set( APPLICATION_ICON_NAME "Nextcloud" )
|
set( APPLICATION_ICON_NAME "Nextcloud" )
|
||||||
|
set( APPLICATION_SERVER_URL "" CACHE string "URL for the server to use. If entered the server can only connect to this instance" )
|
||||||
|
|
||||||
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
set( LINUX_PACKAGE_SHORTNAME "nextcloud" )
|
||||||
|
|
||||||
@@ -22,3 +24,10 @@ option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
|||||||
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
#set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
||||||
|
|
||||||
option( WITH_PROVIDERS "Build with providers list" ON )
|
option( WITH_PROVIDERS "Build with providers list" ON )
|
||||||
|
|
||||||
|
|
||||||
|
## Theming options
|
||||||
|
set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "#0082c9" CACHE string "Hex color of the wizard header background")
|
||||||
|
set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#ffffff" CACHE string "Hex color of the text in the wizard header")
|
||||||
|
option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.png' else the default application icon is used" ON )
|
||||||
|
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -24,33 +24,27 @@ $ cd build
|
|||||||
```
|
```
|
||||||
##### Compile and install
|
##### Compile and install
|
||||||
|
|
||||||
For development reasons it is better to install the client on user space
|
:warning: For development reasons it is better to **install the client on user space** instead on the global system. Mixing up libs/dll's of different version can lead to undefined behavior and crashes:
|
||||||
instead on the global system. For example you could use in the next
|
|
||||||
instructions `path-to-install-folder/` as `~/.local/` in a linux system. If
|
|
||||||
you want to install system wide you could use `/usr/local` or `/opt/nextcloud/`.
|
|
||||||
|
|
||||||
##### Linux
|
* You could use the **cmake flag** ```CMAKE_INSTALL_PREFIX``` as ```~/.local/``` in a **Linux** system. If you want to install system wide you could use ```/usr/local``` or ```/opt/nextcloud/```.
|
||||||
|
|
||||||
|
* On **Windows 10** [```$USERPROFILE```](https://docs.microsoft.com/en-us/windows/deployment/usmt/usmt-recognized-environment-variables#a-href-idbkmk-2avariables-that-are-recognized-only-in-the-user-context) refers to ```C:\Users\<USERNAME>```.
|
||||||
|
|
||||||
|
##### Linux & Mac OS
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib64/libqt5keychain.so -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/nextcloud-desktop-client -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
|
||||||
$ make install
|
$ make install
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Windows
|
##### Windows
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DPng2Ico_EXECUTABLE=/path-to-install-png2ico/png2ico.exe -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/qt5keychain.lib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
$ cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_INSTALL_PREFIX=$USERPROFILE\nextcloud-desktop-client -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
|
||||||
$ cmake --build . --config Debug --target install
|
$ cmake --build . --config Debug --target install
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Mac OS
|
:information_source: More detailed instructions can be found at the [Desktop Client Wiki](https://github.com/nextcloud/desktop/wiki).
|
||||||
|
|
||||||
```
|
|
||||||
$ cmake .. -DCMAKE_INSTALL_PREFIX=path-to-install-folder/ -DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1 -DQTKEYCHAIN_LIBRARY=/path-to-qt5keychain-folder/lib/libqt5keychain.dylib -DQTKEYCHAIN_INCLUDE_DIR=/path-to-qt5keychain-folder/include/qt5keychain/ -DOPENSSL_ROOT_DIR=/path-to-openssl-folder/ -DOPENSSL_INCLUDE_DIR=path-to-openssl-folder/include -DOPENSSL_LIBRARIES=path-to-openssl-folder/lib
|
|
||||||
$ make install
|
|
||||||
```
|
|
||||||
|
|
||||||
More detailed instructions can be found at the [Desktop Client Wiki](https://github.com/nextcloud/desktop/wiki).
|
|
||||||
|
|
||||||
### :inbox_tray: Where to find binaries to download
|
### :inbox_tray: Where to find binaries to download
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 2 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 5 )
|
set( MIRALL_VERSION_MINOR 5 )
|
||||||
set( MIRALL_VERSION_PATCH 0 )
|
set( MIRALL_VERSION_PATCH 3 )
|
||||||
set( MIRALL_VERSION_YEAR 2018 )
|
set( MIRALL_VERSION_YEAR 2019 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ set -xe
|
|||||||
mkdir /app
|
mkdir /app
|
||||||
mkdir /build
|
mkdir /build
|
||||||
|
|
||||||
#Set Qt-5.11
|
#Set Qt-5.12
|
||||||
export QT_BASE_DIR=/opt/qt511
|
export QT_BASE_DIR=/opt/qt512
|
||||||
export QTDIR=$QT_BASE_DIR
|
export QTDIR=$QT_BASE_DIR
|
||||||
export PATH=$QT_BASE_DIR/bin:$PATH
|
export PATH=$QT_BASE_DIR/bin:$PATH
|
||||||
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
|
||||||
|
|||||||
23
admin/linux/debian/debian.disco/changelog
Normal file
23
admin/linux/debian/debian.disco/changelog
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
nextcloud-client (2.3.3-1.0~disco1) disco; urgency=medium
|
||||||
|
|
||||||
|
* Debian build support for the forked client.
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Mon, 6 Nov 2017 20:20:04 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.1-1.0~disco1) disco; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Thu, 23 Mar 2017 19:07:36 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.3.0-1.0~disco1) disco; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 21 Mar 2017 19:34:13 +0100
|
||||||
|
|
||||||
|
nextcloud-client (2.2.4-1.4~disco1) disco; urgency=medium
|
||||||
|
|
||||||
|
* The locale-specific icon names are correct too
|
||||||
|
|
||||||
|
-- István Váradi <ivaradi@varadiistvan.hu> Tue, 7 Feb 2017 19:55:40 +0100
|
||||||
@@ -3,11 +3,11 @@
|
|||||||
set -xe
|
set -xe
|
||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
PPA=ppa:nextcloud-devs/client-beta
|
PPA=ppa:nextcloud-devs/client
|
||||||
PPA_BETA=ppa:nextcloud-devs/client-alpha
|
PPA_BETA=ppa:nextcloud-devs/client-beta
|
||||||
|
|
||||||
OBS_PROJECT=home:ivaradi:beta
|
OBS_PROJECT=home:ivaradi
|
||||||
OBS_PROJECT_BETA=home:ivaradi:alpha
|
OBS_PROJECT_BETA=home:ivaradi:beta
|
||||||
OBS_PACKAGE=nextcloud-client
|
OBS_PACKAGE=nextcloud-client
|
||||||
|
|
||||||
pull_request=${DRONE_PULL_REQUEST:=master}
|
pull_request=${DRONE_PULL_REQUEST:=master}
|
||||||
@@ -36,12 +36,11 @@ read basever kind <<<$(admin/linux/debian/scripts/git2changelog.py /tmp/tmpchang
|
|||||||
cd "${DRONE_DIR}"
|
cd "${DRONE_DIR}"
|
||||||
|
|
||||||
echo "$kind" > kind
|
echo "$kind" > kind
|
||||||
kind="release"
|
|
||||||
|
|
||||||
if test "$kind" = "beta"; then
|
if test "$kind" = "beta"; then
|
||||||
repo=nextcloud-devs/client-alpha
|
|
||||||
else
|
|
||||||
repo=nextcloud-devs/client-beta
|
repo=nextcloud-devs/client-beta
|
||||||
|
else
|
||||||
|
repo=nextcloud-devs/client
|
||||||
fi
|
fi
|
||||||
|
|
||||||
origsourceopt=""
|
origsourceopt=""
|
||||||
@@ -52,7 +51,7 @@ if ! wget http://ppa.launchpad.net/${repo}/ubuntu/pool/main/n/nextcloud-client/n
|
|||||||
origsourceopt="-sa"
|
origsourceopt="-sa"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for distribution in xenial bionic cosmic stable; do
|
for distribution in xenial bionic cosmic disco stable; do
|
||||||
rm -rf nextcloud-client_${basever}
|
rm -rf nextcloud-client_${basever}
|
||||||
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
cp -a ${DRONE_WORKSPACE} nextcloud-client_${basever}
|
||||||
|
|
||||||
|
|||||||
@@ -73,11 +73,13 @@ def collectEntries(baseCommit, baseVersion, kind):
|
|||||||
(commit, name, email, date, revdate, subject) = line.split("\t")
|
(commit, name, email, date, revdate, subject) = line.split("\t")
|
||||||
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
revdate = datetime.datetime.utcfromtimestamp(long(revdate)).strftime("%Y%m%d.%H%M%S")
|
||||||
|
|
||||||
|
kind = "beta"
|
||||||
|
|
||||||
if commit==newVersionCommit:
|
if commit==newVersionCommit:
|
||||||
result = processVersionTag(newVersionTag)
|
result = processVersionTag(newVersionTag)
|
||||||
if result:
|
if result:
|
||||||
newVersionOrigTag = lastVersionTag
|
newVersionOrigTag = lastVersionTag
|
||||||
(baseVersion, kind) = result
|
(baseVersion, _kind) = result
|
||||||
|
|
||||||
|
|
||||||
version=getCommitVersion(commit)
|
version=getCommitVersion(commit)
|
||||||
@@ -88,7 +90,7 @@ def collectEntries(baseCommit, baseVersion, kind):
|
|||||||
if result:
|
if result:
|
||||||
lastVersionTag = tag
|
lastVersionTag = tag
|
||||||
lastCMAKEVersion = version
|
lastCMAKEVersion = version
|
||||||
(baseVersion, kind) = result
|
(baseVersion, _kind) = result
|
||||||
|
|
||||||
for tag in subprocess.check_output(["git", "tag",
|
for tag in subprocess.check_output(["git", "tag",
|
||||||
"--points-at",
|
"--points-at",
|
||||||
@@ -132,7 +134,7 @@ if __name__ == "__main__":
|
|||||||
distribution = sys.argv[2]
|
distribution = sys.argv[2]
|
||||||
|
|
||||||
#entries = collectEntries("8aade24147b5313f8241a8b42331442b7f40eef9", "2.2.4", "release")
|
#entries = collectEntries("8aade24147b5313f8241a8b42331442b7f40eef9", "2.2.4", "release")
|
||||||
entries = collectEntries("f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1", "2.4.0", "release")
|
entries = collectEntries("f9b1c724d6ab5431e0cd56b7cd834f2dd48cebb1", "2.4.0", "beta")
|
||||||
|
|
||||||
|
|
||||||
with open(sys.argv[1], "wt") as f:
|
with open(sys.argv[1], "wt") as f:
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<file>resources/confirm.svg</file>
|
<file>resources/confirm.svg</file>
|
||||||
<file>resources/copy.svg</file>
|
<file>resources/copy.svg</file>
|
||||||
<file>resources/state-sync.svg</file>
|
<file>resources/state-sync.svg</file>
|
||||||
|
<file>resources/add.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/"/>
|
<qresource prefix="/"/>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -18,7 +18,12 @@
|
|||||||
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
#cmakedefine APPLICATION_SHORTNAME "@APPLICATION_SHORTNAME@"
|
||||||
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
#cmakedefine APPLICATION_EXECUTABLE "@APPLICATION_EXECUTABLE@"
|
||||||
#cmakedefine APPLICATION_UPDATE_URL "@APPLICATION_UPDATE_URL@"
|
#cmakedefine APPLICATION_UPDATE_URL "@APPLICATION_UPDATE_URL@"
|
||||||
|
#cmakedefine APPLICATION_HELP_URL "@APPLICATION_HELP_URL@"
|
||||||
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
#cmakedefine APPLICATION_ICON_NAME "@APPLICATION_ICON_NAME@"
|
||||||
|
#cmakedefine APPLICATION_SERVER_URL "@APPLICATION_SERVER_URL@"
|
||||||
|
#cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@"
|
||||||
|
#cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@"
|
||||||
|
#cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@"
|
||||||
|
|
||||||
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
|
#cmakedefine ZLIB_FOUND @ZLIB_FOUND@
|
||||||
|
|
||||||
|
|||||||
33
man/nextcloud.1.rst
Normal file
33
man/nextcloud.1.rst
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
:orphan:
|
||||||
|
|
||||||
|
nextcloud(1)
|
||||||
|
————
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
========
|
||||||
|
*nextcloud* [`OPTIONS`...]
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
===========
|
||||||
|
The nextCloud Client is a file synchronization desktop utility. It synchronizes files on your local computer, tablet, or handheld device with an nextCloud Server. If you make a change to the files on one device, the change is propagated to all other synchronized devices using the desktop synchronization clients.
|
||||||
|
|
||||||
|
Normally, you start the client by clicking on the desktop icon or by starting it from the client application menu. After starting, an nextCloud icon appears in the computer system tray or on your tablet or handheld device.
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
.. include:: ../doc/options.rst
|
||||||
|
|
||||||
|
Config File
|
||||||
|
===========
|
||||||
|
.. include:: ../doc/conffile.rst
|
||||||
|
|
||||||
|
BUGS
|
||||||
|
====
|
||||||
|
|
||||||
|
Please report bugs at https://github.com/nextcloud/client/issues.
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
========
|
||||||
|
:manpage:`nextcloudcmd(1)`
|
||||||
@@ -1,30 +1,30 @@
|
|||||||
:orphan:
|
:orphan:
|
||||||
|
|
||||||
owncloudcmd(1)
|
nextcloudcmd(1)
|
||||||
—————
|
—————
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
========
|
========
|
||||||
*owncloudcmd* [`OPTIONS`...] sourcedir owncloudurl
|
*nextcloudcmd* [`OPTIONS`...] sourcedir nextcloudurl
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
===========
|
===========
|
||||||
owncloudcmd is the command line tool used for the ownCloud file synchronization
|
nextcloudcmd is the command line tool used for the nextCloud file synchronization
|
||||||
desktop utility.
|
desktop utility.
|
||||||
|
|
||||||
Contrary to the :manpage:`owncloud(1)` GUI client, `owncloudcmd` only performs
|
Contrary to the :manpage:`nextcloud(1)` GUI client, `nextcloudcmd` only performs
|
||||||
a single sync run and then exits. In so doing, `owncloudcmd` replaces the
|
a single sync run and then exits. In so doing, `nextcloudcmd` replaces the
|
||||||
`ocsync` binary used for the same purpose in earlier releases.
|
`ocsync` binary used for the same purpose in earlier releases.
|
||||||
|
|
||||||
A *sync run* synchronizes a single local directory using a WebDAV share on a
|
A *sync run* synchronizes a single local directory using a WebDAV share on a
|
||||||
remote ownCloud server.
|
remote nextCloud server.
|
||||||
|
|
||||||
To invoke the command line client, provide the local and the remote repository:
|
To invoke the command line client, provide the local and the remote repository:
|
||||||
The first parameter is the local directory. The second parameter is
|
The first parameter is the local directory. The second parameter is
|
||||||
the server URL.
|
the server URL.
|
||||||
|
|
||||||
.. note:: Prior to the 1.6 release of owncloudcmd, the tool only accepted
|
.. note:: Prior to the 1.6 release of nextcloudcmd, the tool only accepted
|
||||||
``owncloud://`` or ``ownclouds://`` in place of ``http://`` and ``https://`` as
|
``nextcloud://`` or ``nextclouds://`` in place of ``http://`` and ``https://`` as
|
||||||
a scheme. See ``Examples`` for details.
|
a scheme. See ``Examples`` for details.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
@@ -70,28 +70,28 @@ OPTIONS
|
|||||||
|
|
||||||
Example
|
Example
|
||||||
=======
|
=======
|
||||||
To synchronize the ownCloud directory ``Music`` to the local directory ``media/music``
|
To synchronize the nextCloud directory ``Music`` to the local directory ``media/music``
|
||||||
through a proxy listening on port ``8080`` on the gateway machine ``192.168.178.1``,
|
through a proxy listening on port ``8080`` on the gateway machine ``192.168.178.1``,
|
||||||
the command line would be::
|
the command line would be::
|
||||||
|
|
||||||
$ owncloudcmd —httpproxy http://192.168.178.1:8080 \
|
$ nextcloudcmd —httpproxy http://192.168.178.1:8080 \
|
||||||
$HOME/media/music \
|
$HOME/media/music \
|
||||||
https://server/owncloud/remote.php/webdav/Music
|
https://server/nextcloud/remote.php/webdav/Music
|
||||||
|
|
||||||
``owncloudcmd`` will enquire user name and password, unless they have
|
``nextcloudcmd`` will enquire user name and password, unless they have
|
||||||
been specified on the command line or ``-n`` (see `netrc(5)`) has been passed.
|
been specified on the command line or ``-n`` (see `netrc(5)`) has been passed.
|
||||||
|
|
||||||
Using the legacy scheme, it would be::
|
Using the legacy scheme, it would be::
|
||||||
|
|
||||||
$ owncloudcmd —httpproxy http://192.168.178.1:8080 \
|
$ nextcloudcmd —httpproxy http://192.168.178.1:8080 \
|
||||||
$HOME/media/music \
|
$HOME/media/music \
|
||||||
ownclouds://server/owncloud/remote.php/webdav/Music
|
nextclouds://server/nextcloud/remote.php/webdav/Music
|
||||||
|
|
||||||
|
|
||||||
BUGS
|
BUGS
|
||||||
====
|
====
|
||||||
Please report bugs at https://github.com/owncloud/client/issues.
|
Please report bugs at https://github.com/nextcloud/client/issues.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
========
|
========
|
||||||
:manpage:`owncloud(1)`
|
:manpage:`nextcloud(1)`
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
:orphan:
|
|
||||||
|
|
||||||
owncloud(1)
|
|
||||||
————
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
========
|
|
||||||
*owncloud* [`OPTIONS`...]
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
===========
|
|
||||||
The ownCloud Client is a file synchronization desktop utility. It synchronizes files on your local computer, tablet, or handheld device with an ownCloud Server. If you make a change to the files on one device, the change is propagated to all other synchronized devices using the desktop synchronization clients.
|
|
||||||
|
|
||||||
Normally, you start the client by clicking on the desktop icon or by starting it from the client application menu. After starting, an ownCloud icon appears in the computer system tray or on your tablet or handheld device.
|
|
||||||
|
|
||||||
Options
|
|
||||||
=======
|
|
||||||
.. include:: ../doc/options.rst
|
|
||||||
|
|
||||||
Config File
|
|
||||||
===========
|
|
||||||
.. include:: ../doc/conffile.rst
|
|
||||||
|
|
||||||
BUGS
|
|
||||||
====
|
|
||||||
|
|
||||||
Please report bugs at https://github.com/owncloud/client/issues.
|
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
|
||||||
========
|
|
||||||
:manpage:`owncloudcmd(1)`
|
|
||||||
BIN
resources/add.png
Normal file
BIN
resources/add.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -20,7 +20,12 @@ set_package_properties(DolphinVcs PROPERTIES
|
|||||||
PURPOSE "Provides plugin interfaces for Dolphin."
|
PURPOSE "Provides plugin interfaces for Dolphin."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(KDE_INSTALL_DIRS_NO_DEPRECATED TRUE)
|
||||||
include(KDEInstallDirs)
|
include(KDEInstallDirs)
|
||||||
|
# Before KF5 5.54, kcoreaddons_add_plugin uses deprecated VAR PLUGIN_INSTALL_DIR
|
||||||
|
# when that is fixed and you want to remove this workaround,
|
||||||
|
# you need to _require_ the new enough kcoreaddons
|
||||||
|
set(PLUGIN_INSTALL_DIR "${KDE_INSTALL_PLUGINDIR}")
|
||||||
include(KDECMakeSettings)
|
include(KDECMakeSettings)
|
||||||
include(KDECompilerSettings)
|
include(KDECompilerSettings)
|
||||||
include(ECMMarkNonGuiExecutable)
|
include(ECMMarkNonGuiExecutable)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ macro(libcloudproviders_add_config _sources)
|
|||||||
endmacro(libcloudproviders_add_config _sources)
|
endmacro(libcloudproviders_add_config _sources)
|
||||||
|
|
||||||
|
|
||||||
|
find_package(Qt5 5.6 COMPONENTS DBus)
|
||||||
IF (UNIX AND Qt5DBus_FOUND AND LIBCLOUDPROVIDERS_FOUND)
|
IF (UNIX AND Qt5DBus_FOUND AND LIBCLOUDPROVIDERS_FOUND)
|
||||||
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
|
STRING(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
|
||||||
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")
|
STRING(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# this script replaces the line
|
# this script replaces the line
|
||||||
# appname = 'ownCloud'
|
# appname = 'Nextcloud'
|
||||||
# with the correct branding name in the syncstate.py script
|
# with the correct branding name in the syncstate.py script
|
||||||
sed -i.org -e 's/appname\s*=\s*'"'"'ownCloud'"'/appname = '$1'/" syncstate.py
|
sed -i.org -e 's/appname\s*=\s*'"'"'Nextcloud'"'/appname = '$1'/" syncstate.py
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ from gi.repository import GObject, Nautilus
|
|||||||
# The reason is that we use a script to adopt this file for branding
|
# The reason is that we use a script to adopt this file for branding
|
||||||
# by replacing this line with the branding app name. If the following
|
# by replacing this line with the branding app name. If the following
|
||||||
# line is changed, the script can not match the pattern and fails.
|
# line is changed, the script can not match the pattern and fails.
|
||||||
appname = 'ownCloud'
|
appname = 'Nextcloud'
|
||||||
|
|
||||||
print("Initializing "+appname+"-client-nautilus extension")
|
print("Initializing "+appname+"-client-nautilus extension")
|
||||||
print("Using python version {}".format(sys.version_info))
|
print("Using python version {}".format(sys.version_info))
|
||||||
|
|||||||
512
src/3rdparty/kmessagewidget/kmessagewidget.cpp
vendored
Normal file
512
src/3rdparty/kmessagewidget/kmessagewidget.cpp
vendored
Normal file
@@ -0,0 +1,512 @@
|
|||||||
|
/* This file is part of the KDE libraries
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* Copyright (c) 2014 Dominik Haumann <dhaumann@kde.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#include "kmessagewidget.h"
|
||||||
|
|
||||||
|
#include <QAction>
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QShowEvent>
|
||||||
|
#include <QTimeLine>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QStyle>
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// KMessageWidgetPrivate
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
class KMessageWidgetPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void init(KMessageWidget *);
|
||||||
|
|
||||||
|
KMessageWidget *q;
|
||||||
|
QFrame *content = nullptr;
|
||||||
|
QLabel *iconLabel = nullptr;
|
||||||
|
QLabel *textLabel = nullptr;
|
||||||
|
QToolButton *closeButton = nullptr;
|
||||||
|
QTimeLine *timeLine = nullptr;
|
||||||
|
QIcon icon;
|
||||||
|
bool ignoreShowEventDoingAnimatedShow = false;
|
||||||
|
|
||||||
|
KMessageWidget::MessageType messageType;
|
||||||
|
bool wordWrap;
|
||||||
|
QList<QToolButton *> buttons;
|
||||||
|
QPixmap contentSnapShot;
|
||||||
|
|
||||||
|
void createLayout();
|
||||||
|
void applyStyleSheet();
|
||||||
|
void updateSnapShot();
|
||||||
|
void updateLayout();
|
||||||
|
void slotTimeLineChanged(qreal);
|
||||||
|
void slotTimeLineFinished();
|
||||||
|
|
||||||
|
int bestContentHeight() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::init(KMessageWidget *q_ptr)
|
||||||
|
{
|
||||||
|
q = q_ptr;
|
||||||
|
|
||||||
|
q->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
|
||||||
|
|
||||||
|
// Note: when changing the value 500, also update KMessageWidgetTest
|
||||||
|
timeLine = new QTimeLine(500, q);
|
||||||
|
QObject::connect(timeLine, SIGNAL(valueChanged(qreal)), q, SLOT(slotTimeLineChanged(qreal)));
|
||||||
|
QObject::connect(timeLine, SIGNAL(finished()), q, SLOT(slotTimeLineFinished()));
|
||||||
|
|
||||||
|
content = new QFrame(q);
|
||||||
|
content->setObjectName(QStringLiteral("contentWidget"));
|
||||||
|
content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
|
||||||
|
wordWrap = false;
|
||||||
|
|
||||||
|
iconLabel = new QLabel(content);
|
||||||
|
iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
|
iconLabel->hide();
|
||||||
|
|
||||||
|
textLabel = new QLabel(content);
|
||||||
|
textLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
textLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||||
|
QObject::connect(textLabel, &QLabel::linkActivated, q, &KMessageWidget::linkActivated);
|
||||||
|
QObject::connect(textLabel, &QLabel::linkHovered, q, &KMessageWidget::linkHovered);
|
||||||
|
|
||||||
|
QAction *closeAction = new QAction(q);
|
||||||
|
closeAction->setText(KMessageWidget::tr("&Close"));
|
||||||
|
closeAction->setToolTip(KMessageWidget::tr("Close message"));
|
||||||
|
closeAction->setIcon(QIcon(":/client/resources/close.svg")); // ivan: NC customization
|
||||||
|
|
||||||
|
QObject::connect(closeAction, &QAction::triggered, q, &KMessageWidget::animatedHide);
|
||||||
|
|
||||||
|
closeButton = new QToolButton(content);
|
||||||
|
closeButton->setAutoRaise(true);
|
||||||
|
closeButton->setDefaultAction(closeAction);
|
||||||
|
|
||||||
|
q->setMessageType(KMessageWidget::Information);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::createLayout()
|
||||||
|
{
|
||||||
|
delete content->layout();
|
||||||
|
|
||||||
|
content->resize(q->size());
|
||||||
|
|
||||||
|
qDeleteAll(buttons);
|
||||||
|
buttons.clear();
|
||||||
|
|
||||||
|
Q_FOREACH (QAction *action, q->actions()) {
|
||||||
|
QToolButton *button = new QToolButton(content);
|
||||||
|
button->setDefaultAction(action);
|
||||||
|
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
||||||
|
buttons.append(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutoRaise reduces visual clutter, but we don't want to turn it on if
|
||||||
|
// there are other buttons, otherwise the close button will look different
|
||||||
|
// from the others.
|
||||||
|
closeButton->setAutoRaise(buttons.isEmpty());
|
||||||
|
|
||||||
|
if (wordWrap) {
|
||||||
|
QGridLayout *layout = new QGridLayout(content);
|
||||||
|
// Set alignment to make sure icon does not move down if text wraps
|
||||||
|
layout->addWidget(iconLabel, 0, 0, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
|
layout->addWidget(textLabel, 0, 1);
|
||||||
|
|
||||||
|
if (buttons.isEmpty()) {
|
||||||
|
// Use top-vertical alignment like the icon does.
|
||||||
|
layout->addWidget(closeButton, 0, 2, 1, 1, Qt::AlignHCenter | Qt::AlignTop);
|
||||||
|
} else {
|
||||||
|
// Use an additional layout in row 1 for the buttons.
|
||||||
|
QHBoxLayout *buttonLayout = new QHBoxLayout;
|
||||||
|
buttonLayout->addStretch();
|
||||||
|
Q_FOREACH (QToolButton *button, buttons) {
|
||||||
|
// For some reason, calling show() is necessary if wordwrap is true,
|
||||||
|
// otherwise the buttons do not show up. It is not needed if
|
||||||
|
// wordwrap is false.
|
||||||
|
button->show();
|
||||||
|
buttonLayout->addWidget(button);
|
||||||
|
}
|
||||||
|
buttonLayout->addWidget(closeButton);
|
||||||
|
layout->addItem(buttonLayout, 1, 0, 1, 2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QHBoxLayout *layout = new QHBoxLayout(content);
|
||||||
|
layout->addWidget(iconLabel);
|
||||||
|
layout->addWidget(textLabel);
|
||||||
|
|
||||||
|
for (QToolButton *button : qAsConst(buttons)) {
|
||||||
|
layout->addWidget(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
layout->addWidget(closeButton);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (q->isVisible()) {
|
||||||
|
q->setFixedHeight(content->sizeHint().height());
|
||||||
|
}
|
||||||
|
q->updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::applyStyleSheet()
|
||||||
|
{
|
||||||
|
QColor bgBaseColor;
|
||||||
|
|
||||||
|
// We have to hardcode colors here because KWidgetsAddons is a tier 1 framework
|
||||||
|
// and therefore can't depend on any other KDE Frameworks
|
||||||
|
// The following RGB color values come from the "default" scheme in kcolorscheme.cpp
|
||||||
|
switch (messageType) {
|
||||||
|
case KMessageWidget::Positive:
|
||||||
|
bgBaseColor.setRgb(39, 174, 96); // Window: ForegroundPositive
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Information:
|
||||||
|
bgBaseColor.setRgb(61, 174, 233); // Window: ForegroundActive
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Warning:
|
||||||
|
bgBaseColor.setRgb(246, 116, 0); // Window: ForegroundNeutral
|
||||||
|
break;
|
||||||
|
case KMessageWidget::Error:
|
||||||
|
bgBaseColor.setRgb(218, 68, 83); // Window: ForegroundNegative
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const qreal bgBaseColorAlpha = 0.2;
|
||||||
|
bgBaseColor.setAlphaF(bgBaseColorAlpha);
|
||||||
|
|
||||||
|
const QPalette palette = QGuiApplication::palette();
|
||||||
|
const QColor windowColor = palette.window().color();
|
||||||
|
const QColor textColor = palette.text().color();
|
||||||
|
const QColor border = bgBaseColor;
|
||||||
|
|
||||||
|
// Generate a final background color from overlaying bgBaseColor over windowColor
|
||||||
|
const int newRed = (bgBaseColor.red() * bgBaseColorAlpha) + (windowColor.red() * (1 - bgBaseColorAlpha));
|
||||||
|
const int newGreen = (bgBaseColor.green() * bgBaseColorAlpha) + (windowColor.green() * (1 - bgBaseColorAlpha));
|
||||||
|
const int newBlue = (bgBaseColor.blue() * bgBaseColorAlpha) + (windowColor.blue() * (1 - bgBaseColorAlpha));
|
||||||
|
|
||||||
|
const QColor bgFinalColor = QColor(newRed, newGreen, newBlue);
|
||||||
|
|
||||||
|
content->setStyleSheet(
|
||||||
|
QString::fromLatin1(".QFrame {"
|
||||||
|
"background-color: %1;"
|
||||||
|
"border-radius: 4px;"
|
||||||
|
"border: 2px solid %2;"
|
||||||
|
"margin: %3px;"
|
||||||
|
"}"
|
||||||
|
".QLabel { color: %4; }"
|
||||||
|
)
|
||||||
|
.arg(bgFinalColor.name())
|
||||||
|
.arg(border.name())
|
||||||
|
// DefaultFrameWidth returns the size of the external margin + border width. We know our border is 1px, so we subtract this from the frame normal QStyle FrameWidth to get our margin
|
||||||
|
.arg(q->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, q) - 1)
|
||||||
|
.arg(textColor.name())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::updateLayout()
|
||||||
|
{
|
||||||
|
if (content->layout()) {
|
||||||
|
createLayout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::updateSnapShot()
|
||||||
|
{
|
||||||
|
// Attention: updateSnapShot calls QWidget::render(), which causes the whole
|
||||||
|
// window layouts to be activated. Calling this method from resizeEvent()
|
||||||
|
// can lead to infinite recursion, see:
|
||||||
|
// https://bugs.kde.org/show_bug.cgi?id=311336
|
||||||
|
contentSnapShot = QPixmap(content->size() * q->devicePixelRatio());
|
||||||
|
contentSnapShot.setDevicePixelRatio(q->devicePixelRatio());
|
||||||
|
contentSnapShot.fill(Qt::transparent);
|
||||||
|
content->render(&contentSnapShot, QPoint(), QRegion(), QWidget::DrawChildren);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::slotTimeLineChanged(qreal value)
|
||||||
|
{
|
||||||
|
q->setFixedHeight(qMin(value * 2, qreal(1.0)) * content->height());
|
||||||
|
q->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidgetPrivate::slotTimeLineFinished()
|
||||||
|
{
|
||||||
|
if (timeLine->direction() == QTimeLine::Forward) {
|
||||||
|
// Show
|
||||||
|
// We set the whole geometry here, because it may be wrong if a
|
||||||
|
// KMessageWidget is shown right when the toplevel window is created.
|
||||||
|
content->setGeometry(0, 0, q->width(), bestContentHeight());
|
||||||
|
|
||||||
|
// notify about finished animation
|
||||||
|
emit q->showAnimationFinished();
|
||||||
|
} else {
|
||||||
|
// hide and notify about finished animation
|
||||||
|
q->hide();
|
||||||
|
emit q->hideAnimationFinished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMessageWidgetPrivate::bestContentHeight() const
|
||||||
|
{
|
||||||
|
int height = content->heightForWidth(q->width());
|
||||||
|
if (height == -1) {
|
||||||
|
height = content->sizeHint().height();
|
||||||
|
}
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// KMessageWidget
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
KMessageWidget::KMessageWidget(QWidget *parent)
|
||||||
|
: QFrame(parent)
|
||||||
|
, d(new KMessageWidgetPrivate)
|
||||||
|
{
|
||||||
|
d->init(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::KMessageWidget(const QString &text, QWidget *parent)
|
||||||
|
: QFrame(parent)
|
||||||
|
, d(new KMessageWidgetPrivate)
|
||||||
|
{
|
||||||
|
d->init(this);
|
||||||
|
setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::~KMessageWidget()
|
||||||
|
{
|
||||||
|
delete d;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KMessageWidget::text() const
|
||||||
|
{
|
||||||
|
return d->textLabel->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setText(const QString &text)
|
||||||
|
{
|
||||||
|
d->textLabel->setText(text);
|
||||||
|
updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
KMessageWidget::MessageType KMessageWidget::messageType() const
|
||||||
|
{
|
||||||
|
return d->messageType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setMessageType(KMessageWidget::MessageType type)
|
||||||
|
{
|
||||||
|
d->messageType = type;
|
||||||
|
d->applyStyleSheet();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize KMessageWidget::sizeHint() const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->sizeHint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize KMessageWidget::minimumSizeHint() const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->minimumSizeHint();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::event(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::Polish && !d->content->layout()) {
|
||||||
|
d->createLayout();
|
||||||
|
} else if (event->type() == QEvent::PaletteChange) {
|
||||||
|
d->applyStyleSheet();
|
||||||
|
} else if (event->type() == QEvent::Show && !d->ignoreShowEventDoingAnimatedShow) {
|
||||||
|
if ((height() != d->content->height()) || (d->content->pos().y() != 0)) {
|
||||||
|
d->content->move(0, 0);
|
||||||
|
setFixedHeight(d->content->height());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QFrame::event(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QFrame::resizeEvent(event);
|
||||||
|
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->content->resize(width(), d->bestContentHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMessageWidget::heightForWidth(int width) const
|
||||||
|
{
|
||||||
|
ensurePolished();
|
||||||
|
return d->content->heightForWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
QFrame::paintEvent(event);
|
||||||
|
if (d->timeLine->state() == QTimeLine::Running) {
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.setOpacity(d->timeLine->currentValue() * d->timeLine->currentValue());
|
||||||
|
painter.drawPixmap(0, 0, d->contentSnapShot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::wordWrap() const
|
||||||
|
{
|
||||||
|
return d->wordWrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setWordWrap(bool wordWrap)
|
||||||
|
{
|
||||||
|
d->wordWrap = wordWrap;
|
||||||
|
d->textLabel->setWordWrap(wordWrap);
|
||||||
|
QSizePolicy policy = sizePolicy();
|
||||||
|
policy.setHeightForWidth(wordWrap);
|
||||||
|
setSizePolicy(policy);
|
||||||
|
d->updateLayout();
|
||||||
|
// Without this, when user does wordWrap -> !wordWrap -> wordWrap, a minimum
|
||||||
|
// height is set, causing the widget to be too high.
|
||||||
|
// Mostly visible in test programs.
|
||||||
|
if (wordWrap) {
|
||||||
|
setMinimumHeight(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isCloseButtonVisible() const
|
||||||
|
{
|
||||||
|
return d->closeButton->isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setCloseButtonVisible(bool show)
|
||||||
|
{
|
||||||
|
d->closeButton->setVisible(show);
|
||||||
|
updateGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::addAction(QAction *action)
|
||||||
|
{
|
||||||
|
QFrame::addAction(action);
|
||||||
|
d->updateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::removeAction(QAction *action)
|
||||||
|
{
|
||||||
|
QFrame::removeAction(action);
|
||||||
|
d->updateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::animatedShow()
|
||||||
|
{
|
||||||
|
// Test before styleHint, as there might have been a style change while animation was running
|
||||||
|
if (isHideAnimationRunning()) {
|
||||||
|
d->timeLine->stop();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)
|
||||||
|
|| (parentWidget() && !parentWidget()->isVisible())) {
|
||||||
|
show();
|
||||||
|
emit showAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isVisible() && (d->timeLine->state() == QTimeLine::NotRunning) && (height() == d->bestContentHeight()) && (d->content->pos().y() == 0)) {
|
||||||
|
emit showAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->ignoreShowEventDoingAnimatedShow = true;
|
||||||
|
show();
|
||||||
|
d->ignoreShowEventDoingAnimatedShow = false;
|
||||||
|
setFixedHeight(0);
|
||||||
|
int wantedHeight = d->bestContentHeight();
|
||||||
|
d->content->setGeometry(0, -wantedHeight, width(), wantedHeight);
|
||||||
|
|
||||||
|
d->updateSnapShot();
|
||||||
|
|
||||||
|
d->timeLine->setDirection(QTimeLine::Forward);
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->timeLine->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::animatedHide()
|
||||||
|
{
|
||||||
|
// test this before isVisible, as animatedShow might have been called directly before,
|
||||||
|
// so the first timeline event is not yet done and the widget is still hidden
|
||||||
|
// And before styleHint, as there might have been a style change while animation was running
|
||||||
|
if (isShowAnimationRunning()) {
|
||||||
|
d->timeLine->stop();
|
||||||
|
emit showAnimationFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!style()->styleHint(QStyle::SH_Widget_Animate, nullptr, this)) {
|
||||||
|
hide();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isVisible()) {
|
||||||
|
// explicitly hide it, so it stays hidden in case it is only not visible due to the parents
|
||||||
|
hide();
|
||||||
|
emit hideAnimationFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->content->move(0, -d->content->height());
|
||||||
|
d->updateSnapShot();
|
||||||
|
|
||||||
|
d->timeLine->setDirection(QTimeLine::Backward);
|
||||||
|
if (d->timeLine->state() == QTimeLine::NotRunning) {
|
||||||
|
d->timeLine->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isHideAnimationRunning() const
|
||||||
|
{
|
||||||
|
return (d->timeLine->direction() == QTimeLine::Backward)
|
||||||
|
&& (d->timeLine->state() == QTimeLine::Running);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KMessageWidget::isShowAnimationRunning() const
|
||||||
|
{
|
||||||
|
return (d->timeLine->direction() == QTimeLine::Forward)
|
||||||
|
&& (d->timeLine->state() == QTimeLine::Running);
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon KMessageWidget::icon() const
|
||||||
|
{
|
||||||
|
return d->icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KMessageWidget::setIcon(const QIcon &icon)
|
||||||
|
{
|
||||||
|
d->icon = icon;
|
||||||
|
if (d->icon.isNull()) {
|
||||||
|
d->iconLabel->hide();
|
||||||
|
} else {
|
||||||
|
const int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize);
|
||||||
|
d->iconLabel->setPixmap(d->icon.pixmap(size));
|
||||||
|
d->iconLabel->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "moc_kmessagewidget.cpp"
|
||||||
|
|
||||||
346
src/3rdparty/kmessagewidget/kmessagewidget.h
vendored
Normal file
346
src/3rdparty/kmessagewidget/kmessagewidget.h
vendored
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
/* This file is part of the KDE libraries
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* Copyright (c) 2014 Dominik Haumann <dhaumann@kde.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
* 02110-1301 USA
|
||||||
|
*/
|
||||||
|
#ifndef KMESSAGEWIDGET_H
|
||||||
|
#define KMESSAGEWIDGET_H
|
||||||
|
|
||||||
|
#include <QFrame>
|
||||||
|
|
||||||
|
class KMessageWidgetPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class KMessageWidget kmessagewidget.h KMessageWidget
|
||||||
|
*
|
||||||
|
* @short A widget to provide feedback or propose opportunistic interactions.
|
||||||
|
*
|
||||||
|
* KMessageWidget can be used to provide inline positive or negative
|
||||||
|
* feedback, or to implement opportunistic interactions.
|
||||||
|
*
|
||||||
|
* As a feedback widget, KMessageWidget provides a less intrusive alternative
|
||||||
|
* to "OK Only" message boxes. If you want to avoid a modal KMessageBox,
|
||||||
|
* consider using KMessageWidget instead.
|
||||||
|
*
|
||||||
|
* Examples of KMessageWidget look as follows, all of them having an icon set
|
||||||
|
* with setIcon(), and the first three show a close button:
|
||||||
|
*
|
||||||
|
* \image html kmessagewidget.png "KMessageWidget with different message types"
|
||||||
|
*
|
||||||
|
* <b>Negative feedback</b>
|
||||||
|
*
|
||||||
|
* The KMessageWidget can be used as a secondary indicator of failure: the
|
||||||
|
* first indicator is usually the fact the action the user expected to happen
|
||||||
|
* did not happen.
|
||||||
|
*
|
||||||
|
* Example: User fills a form, clicks "Submit".
|
||||||
|
*
|
||||||
|
* @li Expected feedback: form closes
|
||||||
|
* @li First indicator of failure: form stays there
|
||||||
|
* @li Second indicator of failure: a KMessageWidget appears on top of the
|
||||||
|
* form, explaining the error condition
|
||||||
|
*
|
||||||
|
* When used to provide negative feedback, KMessageWidget should be placed
|
||||||
|
* close to its context. In the case of a form, it should appear on top of the
|
||||||
|
* form entries.
|
||||||
|
*
|
||||||
|
* KMessageWidget should get inserted in the existing layout. Space should not
|
||||||
|
* be reserved for it, otherwise it becomes "dead space", ignored by the user.
|
||||||
|
* KMessageWidget should also not appear as an overlay to prevent blocking
|
||||||
|
* access to elements the user needs to interact with to fix the failure.
|
||||||
|
*
|
||||||
|
* <b>Positive feedback</b>
|
||||||
|
*
|
||||||
|
* KMessageWidget can be used for positive feedback but it shouldn't be
|
||||||
|
* overused. It is often enough to provide feedback by simply showing the
|
||||||
|
* results of an action.
|
||||||
|
*
|
||||||
|
* Examples of acceptable uses:
|
||||||
|
*
|
||||||
|
* @li Confirm success of "critical" transactions
|
||||||
|
* @li Indicate completion of background tasks
|
||||||
|
*
|
||||||
|
* Example of unadapted uses:
|
||||||
|
*
|
||||||
|
* @li Indicate successful saving of a file
|
||||||
|
* @li Indicate a file has been successfully removed
|
||||||
|
*
|
||||||
|
* <b>Opportunistic interaction</b>
|
||||||
|
*
|
||||||
|
* Opportunistic interaction is the situation where the application suggests to
|
||||||
|
* the user an action he could be interested in perform, either based on an
|
||||||
|
* action the user just triggered or an event which the application noticed.
|
||||||
|
*
|
||||||
|
* Example of acceptable uses:
|
||||||
|
*
|
||||||
|
* @li A browser can propose remembering a recently entered password
|
||||||
|
* @li A music collection can propose ripping a CD which just got inserted
|
||||||
|
* @li A chat application may notify the user a "special friend" just connected
|
||||||
|
*
|
||||||
|
* @author Aurélien Gâteau <agateau@kde.org>
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
class KMessageWidget : public QFrame
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QString text READ text WRITE setText)
|
||||||
|
Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
|
||||||
|
Q_PROPERTY(bool closeButtonVisible READ isCloseButtonVisible WRITE setCloseButtonVisible)
|
||||||
|
Q_PROPERTY(MessageType messageType READ messageType WRITE setMessageType)
|
||||||
|
Q_PROPERTY(QIcon icon READ icon WRITE setIcon)
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Available message types.
|
||||||
|
* The background colors are chosen depending on the message type.
|
||||||
|
*/
|
||||||
|
enum MessageType {
|
||||||
|
Positive,
|
||||||
|
Information,
|
||||||
|
Warning,
|
||||||
|
Error
|
||||||
|
};
|
||||||
|
Q_ENUM(MessageType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a KMessageWidget with the specified @p parent.
|
||||||
|
*/
|
||||||
|
explicit KMessageWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a KMessageWidget with the specified @p parent and
|
||||||
|
* contents @p text.
|
||||||
|
*/
|
||||||
|
explicit KMessageWidget(const QString &text, QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
|
~KMessageWidget() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the text of this message widget.
|
||||||
|
* @see setText()
|
||||||
|
*/
|
||||||
|
QString text() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether word wrap is enabled.
|
||||||
|
*
|
||||||
|
* If word wrap is enabled, the message widget wraps the displayed text
|
||||||
|
* as required to the available width of the widget. This is useful to
|
||||||
|
* avoid breaking widget layouts.
|
||||||
|
*
|
||||||
|
* @see setWordWrap()
|
||||||
|
*/
|
||||||
|
bool wordWrap() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the close button is visible.
|
||||||
|
*
|
||||||
|
* @see setCloseButtonVisible()
|
||||||
|
*/
|
||||||
|
bool isCloseButtonVisible() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the type of this message.
|
||||||
|
* By default, the type is set to KMessageWidget::Information.
|
||||||
|
*
|
||||||
|
* @see KMessageWidget::MessageType, setMessageType()
|
||||||
|
*/
|
||||||
|
MessageType messageType() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add @p action to the message widget.
|
||||||
|
* For each action a button is added to the message widget in the
|
||||||
|
* order the actions were added.
|
||||||
|
*
|
||||||
|
* @param action the action to add
|
||||||
|
* @see removeAction(), QWidget::actions()
|
||||||
|
*/
|
||||||
|
void addAction(QAction *action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove @p action from the message widget.
|
||||||
|
*
|
||||||
|
* @param action the action to remove
|
||||||
|
* @see KMessageWidget::MessageType, addAction(), setMessageType()
|
||||||
|
*/
|
||||||
|
void removeAction(QAction *action);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the preferred size of the message widget.
|
||||||
|
*/
|
||||||
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the minimum size of the message widget.
|
||||||
|
*/
|
||||||
|
QSize minimumSizeHint() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the required height for @p width.
|
||||||
|
* @param width the width in pixels
|
||||||
|
*/
|
||||||
|
int heightForWidth(int width) const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The icon shown on the left of the text. By default, no icon is shown.
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
QIcon icon() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the hide animation started by calling animatedHide()
|
||||||
|
* is still running. If animations are disabled, this function always
|
||||||
|
* returns @e false.
|
||||||
|
*
|
||||||
|
* @see animatedHide(), hideAnimationFinished()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
bool isHideAnimationRunning() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the show animation started by calling animatedShow()
|
||||||
|
* is still running. If animations are disabled, this function always
|
||||||
|
* returns @e false.
|
||||||
|
*
|
||||||
|
* @see animatedShow(), showAnimationFinished()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
bool isShowAnimationRunning() const;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
/**
|
||||||
|
* Set the text of the message widget to @p text.
|
||||||
|
* If the message widget is already visible, the text changes on the fly.
|
||||||
|
*
|
||||||
|
* @param text the text to display, rich text is allowed
|
||||||
|
* @see text()
|
||||||
|
*/
|
||||||
|
void setText(const QString &text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set word wrap to @p wordWrap. If word wrap is enabled, the text()
|
||||||
|
* of the message widget is wrapped to fit the available width.
|
||||||
|
* If word wrap is disabled, the message widget's minimum size is
|
||||||
|
* such that the entire text fits.
|
||||||
|
*
|
||||||
|
* @param wordWrap disable/enable word wrap
|
||||||
|
* @see wordWrap()
|
||||||
|
*/
|
||||||
|
void setWordWrap(bool wordWrap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the visibility of the close button. If @p visible is @e true,
|
||||||
|
* a close button is shown that calls animatedHide() if clicked.
|
||||||
|
*
|
||||||
|
* @see closeButtonVisible(), animatedHide()
|
||||||
|
*/
|
||||||
|
void setCloseButtonVisible(bool visible);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the message type to @p type.
|
||||||
|
* By default, the message type is set to KMessageWidget::Information.
|
||||||
|
* Appropriate colors are chosen to mimic the appearance of Kirigami's
|
||||||
|
* InlineMessage.
|
||||||
|
*
|
||||||
|
* @see messageType(), KMessageWidget::MessageType
|
||||||
|
*/
|
||||||
|
void setMessageType(KMessageWidget::MessageType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the widget using an animation.
|
||||||
|
*/
|
||||||
|
void animatedShow();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the widget using an animation.
|
||||||
|
*/
|
||||||
|
void animatedHide();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define an icon to be shown on the left of the text
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
void setIcon(const QIcon &icon);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the user clicks a link in the text label.
|
||||||
|
* The URL referred to by the href anchor is passed in contents.
|
||||||
|
* @param contents text of the href anchor
|
||||||
|
* @see QLabel::linkActivated()
|
||||||
|
* @since 4.10
|
||||||
|
*/
|
||||||
|
void linkActivated(const QString &contents);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the user hovers over a link in the text label.
|
||||||
|
* The URL referred to by the href anchor is passed in contents.
|
||||||
|
* @param contents text of the href anchor
|
||||||
|
* @see QLabel::linkHovered()
|
||||||
|
* @since 4.11
|
||||||
|
*/
|
||||||
|
void linkHovered(const QString &contents);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the hide animation is finished, started by
|
||||||
|
* calling animatedHide(). If animations are disabled, this signal is
|
||||||
|
* emitted immediately after the message widget got hidden.
|
||||||
|
*
|
||||||
|
* @note This signal is @e not emitted if the widget was hidden by
|
||||||
|
* calling hide(), so this signal is only useful in conjunction
|
||||||
|
* with animatedHide().
|
||||||
|
*
|
||||||
|
* @see animatedHide()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
void hideAnimationFinished();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when the show animation is finished, started by
|
||||||
|
* calling animatedShow(). If animations are disabled, this signal is
|
||||||
|
* emitted immediately after the message widget got shown.
|
||||||
|
*
|
||||||
|
* @note This signal is @e not emitted if the widget was shown by
|
||||||
|
* calling show(), so this signal is only useful in conjunction
|
||||||
|
* with animatedShow().
|
||||||
|
*
|
||||||
|
* @see animatedShow()
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
void showAnimationFinished();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
||||||
|
bool event(QEvent *event) override;
|
||||||
|
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
KMessageWidgetPrivate *const d;
|
||||||
|
friend class KMessageWidgetPrivate;
|
||||||
|
|
||||||
|
Q_PRIVATE_SLOT(d, void slotTimeLineChanged(qreal))
|
||||||
|
Q_PRIVATE_SLOT(d, void slotTimeLineFinished())
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* KMESSAGEWIDGET_H */
|
||||||
@@ -165,6 +165,7 @@ set(3rdparty_SRC
|
|||||||
../3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
../3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
||||||
../3rdparty/qtsingleapplication/qtsingleapplication.cpp
|
../3rdparty/qtsingleapplication/qtsingleapplication.cpp
|
||||||
../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
|
../3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
|
||||||
|
../3rdparty/kmessagewidget/kmessagewidget.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
@@ -329,6 +330,7 @@ target_include_directories(${APPLICATION_EXECUTABLE} PRIVATE
|
|||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
|
${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtmacgoodies/src
|
${CMAKE_SOURCE_DIR}/src/3rdparty/qtmacgoodies/src
|
||||||
${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
|
${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
|
||||||
|
${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget
|
||||||
${CMAKE_CURRENT_BINARY_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -342,9 +342,6 @@ AccountPtr AccountManager::createAccount()
|
|||||||
connect(acc.data(), &Account::proxyAuthenticationRequired,
|
connect(acc.data(), &Account::proxyAuthenticationRequired,
|
||||||
ProxyAuthHandler::instance(), &ProxyAuthHandler::handleProxyAuthenticationRequired);
|
ProxyAuthHandler::instance(), &ProxyAuthHandler::handleProxyAuthenticationRequired);
|
||||||
|
|
||||||
connect(acc.data()->e2e(), &ClientSideEncryption::mnemonicGenerated,
|
|
||||||
&AccountManager::displayMnemonic);
|
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,7 +351,7 @@ void AccountManager::displayMnemonic(const QString& mnemonic)
|
|||||||
Ui_Dialog ui;
|
Ui_Dialog ui;
|
||||||
ui.setupUi(widget);
|
ui.setupUi(widget);
|
||||||
widget->setWindowTitle(tr("End to end encryption mnemonic"));
|
widget->setWindowTitle(tr("End to end encryption mnemonic"));
|
||||||
ui.label->setText(tr("To protect your Cryptocraphic Identity, we encrypt it with a mnemonic of 12 dictionary words. "
|
ui.label->setText(tr("To protect your Cryptographic Identity, we encrypt it with a mnemonic of 12 dictionary words. "
|
||||||
"Please note these down and keep them safe. "
|
"Please note these down and keep them safe. "
|
||||||
"They will be needed to add other devices to your account (like your mobile phone or laptop)."));
|
"They will be needed to add other devices to your account (like your mobile phone or laptop)."));
|
||||||
ui.textEdit->setText(mnemonic);
|
ui.textEdit->setText(mnemonic);
|
||||||
@@ -364,6 +361,7 @@ void AccountManager::displayMnemonic(const QString& mnemonic)
|
|||||||
widget->exec();
|
widget->exec();
|
||||||
widget->resize(widget->sizeHint());
|
widget->resize(widget->sizeHint());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::shutdown()
|
void AccountManager::shutdown()
|
||||||
{
|
{
|
||||||
auto accountsCopy = _accounts;
|
auto accountsCopy = _accounts;
|
||||||
|
|||||||
@@ -194,6 +194,14 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent)
|
|||||||
// Connect E2E stuff
|
// Connect E2E stuff
|
||||||
connect(this, &AccountSettings::requesetMnemonic, _accountState->account()->e2e(), &ClientSideEncryption::slotRequestMnemonic);
|
connect(this, &AccountSettings::requesetMnemonic, _accountState->account()->e2e(), &ClientSideEncryption::slotRequestMnemonic);
|
||||||
connect(_accountState->account()->e2e(), &ClientSideEncryption::showMnemonic, this, &AccountSettings::slotShowMnemonic);
|
connect(_accountState->account()->e2e(), &ClientSideEncryption::showMnemonic, this, &AccountSettings::slotShowMnemonic);
|
||||||
|
|
||||||
|
connect(_accountState->account()->e2e(), &ClientSideEncryption::mnemonicGenerated, this, &AccountSettings::slotNewMnemonicGenerated);
|
||||||
|
if (_accountState->account()->e2e()->newMnemonicGenerated())
|
||||||
|
{
|
||||||
|
slotNewMnemonicGenerated();
|
||||||
|
} else {
|
||||||
|
ui->encryptionMessage->hide();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -222,6 +230,19 @@ void AccountSettings::createAccountToolbox()
|
|||||||
slotAccountAdded(_accountState);
|
slotAccountAdded(_accountState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AccountSettings::slotNewMnemonicGenerated()
|
||||||
|
{
|
||||||
|
ui->encryptionMessage->setText(tr("This account supports end-to-end encryption"));
|
||||||
|
|
||||||
|
QAction *mnemonic = new QAction(tr("Enable encryption"), this);
|
||||||
|
connect(mnemonic, &QAction::triggered, this, &AccountSettings::requesetMnemonic);
|
||||||
|
connect(mnemonic, &QAction::triggered, ui->encryptionMessage, &KMessageWidget::hide);
|
||||||
|
|
||||||
|
ui->encryptionMessage->addAction(mnemonic);
|
||||||
|
ui->encryptionMessage->show();
|
||||||
|
}
|
||||||
|
|
||||||
void AccountSettings::slotMenuBeforeShow() {
|
void AccountSettings::slotMenuBeforeShow() {
|
||||||
if (_menuShown) {
|
if (_menuShown) {
|
||||||
return;
|
return;
|
||||||
@@ -265,7 +286,7 @@ void AccountSettings::slotOpenAccountWizard()
|
|||||||
qFatal("nope");
|
qFatal("nope");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), 0);
|
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountSettings::slotToggleSignInState()
|
void AccountSettings::slotToggleSignInState()
|
||||||
@@ -808,7 +829,7 @@ void AccountSettings::slotEnableCurrentFolder()
|
|||||||
QWidget *parent = this;
|
QWidget *parent = this;
|
||||||
Qt::WindowFlags flags = Qt::Sheet;
|
Qt::WindowFlags flags = Qt::Sheet;
|
||||||
#else
|
#else
|
||||||
QWidget *parent = 0;
|
QWidget *parent = nullptr;
|
||||||
Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint; // default flags
|
Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint; // default flags
|
||||||
#endif
|
#endif
|
||||||
QMessageBox msgbox(QMessageBox::Question, tr("Sync Running"),
|
QMessageBox msgbox(QMessageBox::Question, tr("Sync Running"),
|
||||||
@@ -1152,7 +1173,7 @@ void AccountSettings::slotDeleteAccount()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Else it might access during destruction. This should be better handled by it having a QSharedPointer
|
// Else it might access during destruction. This should be better handled by it having a QSharedPointer
|
||||||
_model->setAccountState(0);
|
_model->setAccountState(nullptr);
|
||||||
|
|
||||||
auto manager = AccountManager::instance();
|
auto manager = AccountManager::instance();
|
||||||
manager->deleteAccount(_accountState);
|
manager->deleteAccount(_accountState);
|
||||||
|
|||||||
@@ -53,9 +53,9 @@ class AccountSettings : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AccountSettings(AccountState *accountState, QWidget *parent = 0);
|
explicit AccountSettings(AccountState *accountState, QWidget *parent = nullptr);
|
||||||
~AccountSettings();
|
~AccountSettings();
|
||||||
QSize sizeHint() const Q_DECL_OVERRIDE { return ownCloudGui::settingsDialogSize(); }
|
QSize sizeHint() const override { return ownCloudGui::settingsDialogSize(); }
|
||||||
bool canEncryptOrDecrypt(const FolderStatusModel::SubFolderInfo* folderInfo);
|
bool canEncryptOrDecrypt(const FolderStatusModel::SubFolderInfo* folderInfo);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@@ -99,6 +99,7 @@ protected slots:
|
|||||||
|
|
||||||
// Encryption Related Stuff.
|
// Encryption Related Stuff.
|
||||||
void slotShowMnemonic(const QString &mnemonic);
|
void slotShowMnemonic(const QString &mnemonic);
|
||||||
|
void slotNewMnemonicGenerated();
|
||||||
|
|
||||||
void slotEncryptionFlagSuccess(const QByteArray &folderId);
|
void slotEncryptionFlagSuccess(const QByteArray &folderId);
|
||||||
void slotEncryptionFlagError(const QByteArray &folderId, int httpReturnCode);
|
void slotEncryptionFlagError(const QByteArray &folderId, int httpReturnCode);
|
||||||
@@ -122,7 +123,7 @@ protected slots:
|
|||||||
private:
|
private:
|
||||||
void showConnectionLabel(const QString &message,
|
void showConnectionLabel(const QString &message,
|
||||||
QStringList errors = QStringList());
|
QStringList errors = QStringList());
|
||||||
bool event(QEvent *) Q_DECL_OVERRIDE;
|
bool event(QEvent *) override;
|
||||||
void createAccountToolbox();
|
void createAccountToolbox();
|
||||||
|
|
||||||
/// Returns the alias of the selected folder, empty string if none
|
/// Returns the alias of the selected folder, empty string if none
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>575</width>
|
<width>582</width>
|
||||||
<height>557</height>
|
<height>557</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -14,128 +14,7 @@
|
|||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QWidget" name="accountStatus" native="true">
|
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="SslButton" name="sslButton">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="connectLabel">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Connected with <server> as <user></string>
|
|
||||||
</property>
|
|
||||||
<property name="textFormat">
|
|
||||||
<enum>Qt::RichText</enum>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QToolButton" name="_accountToolbox">
|
|
||||||
<property name="text">
|
|
||||||
<string>...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="storageGroupBox">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="quotaInfoLabel">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Storage space: ...</string>
|
|
||||||
</property>
|
|
||||||
<property name="textFormat">
|
|
||||||
<enum>Qt::PlainText</enum>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QProgressBar" name="quotaProgressBar">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>7</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>100</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>-1</number>
|
|
||||||
</property>
|
|
||||||
<property name="textVisible">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="OCC::FolderStatusView" name="_folderList">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>5</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="contextMenuPolicy">
|
|
||||||
<enum>Qt::CustomContextMenu</enum>
|
|
||||||
</property>
|
|
||||||
<property name="editTriggers">
|
|
||||||
<set>QAbstractItemView::NoEditTriggers</set>
|
|
||||||
</property>
|
|
||||||
<property name="animated">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QWidget" name="selectiveSyncStatus" native="true">
|
<widget class="QWidget" name="selectiveSyncStatus" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
@@ -267,6 +146,130 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QWidget" name="accountStatus" native="true">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="SslButton" name="sslButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="connectLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Connected with <server> as <user></string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::RichText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QToolButton" name="_accountToolbox">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="storageGroupBox">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="quotaInfoLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Storage space: ...</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="quotaProgressBar">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>7</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
<property name="textVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="OCC::FolderStatusView" name="_folderList">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>5</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="animated">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="KMessageWidget" name="encryptionMessage" native="true"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
@@ -280,6 +283,12 @@
|
|||||||
<extends>QTreeView</extends>
|
<extends>QTreeView</extends>
|
||||||
<header>folderstatusview.h</header>
|
<header>folderstatusview.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>KMessageWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>kmessagewidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|||||||
@@ -371,7 +371,7 @@ void AccountState::slotCredentialsAsked(AbstractCredentials *credentials)
|
|||||||
// When new credentials become available we always want to restart the
|
// When new credentials become available we always want to restart the
|
||||||
// connection validation, even if it's currently running.
|
// connection validation, even if it's currently running.
|
||||||
_connectionValidator->deleteLater();
|
_connectionValidator->deleteLater();
|
||||||
_connectionValidator = 0;
|
_connectionValidator = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkConnectivity();
|
checkConnectivity();
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ public:
|
|||||||
AccountConnectedRole,
|
AccountConnectedRole,
|
||||||
SyncFileStatusRole };
|
SyncFileStatusRole };
|
||||||
|
|
||||||
void paint(QPainter *, const QStyleOptionViewItem &, const QModelIndex &) const Q_DECL_OVERRIDE;
|
void paint(QPainter *, const QStyleOptionViewItem &, const QModelIndex &) const override;
|
||||||
QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const Q_DECL_OVERRIDE;
|
QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const override;
|
||||||
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
|
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
|
||||||
const QModelIndex &index) Q_DECL_OVERRIDE;
|
const QModelIndex &index) override;
|
||||||
|
|
||||||
static int rowHeight();
|
static int rowHeight();
|
||||||
static int iconHeight();
|
static int iconHeight();
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
|
|||||||
} else if(a._status == SyncFileItem::SoftError
|
} else if(a._status == SyncFileItem::SoftError
|
||||||
|| a._status == SyncFileItem::FileIgnored
|
|| a._status == SyncFileItem::FileIgnored
|
||||||
|| a._status == SyncFileItem::Conflict
|
|| a._status == SyncFileItem::Conflict
|
||||||
|| a._status == SyncFileItem::Restoration){
|
|| a._status == SyncFileItem::Restoration
|
||||||
|
|| a._status == SyncFileItem::FileLocked){
|
||||||
return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
|
return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
|
||||||
}
|
}
|
||||||
return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
|
return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
|
||||||
@@ -150,16 +151,12 @@ int ActivityListModel::rowCount(const QModelIndex &) const
|
|||||||
return _finalList.count();
|
return _finalList.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
// current strategy: Fetch 100 items per Account
|
|
||||||
// ATTENTION: This method is const and thus it is not possible to modify
|
|
||||||
// the _activityLists hash or so. Doesn't make it easier...
|
|
||||||
bool ActivityListModel::canFetchMore(const QModelIndex &) const
|
bool ActivityListModel::canFetchMore(const QModelIndex &) const
|
||||||
{
|
{
|
||||||
if (_activityLists.count() == 0)
|
// We need to be connected to be able to fetch more
|
||||||
return true;
|
|
||||||
|
|
||||||
if (_accountState && _accountState->isConnected()) {
|
if (_accountState && _accountState->isConnected()) {
|
||||||
if (_activityLists.count() == 0 && !_currentlyFetching) {
|
// If the fetching is reported to be done or we are currently fetching we can't fetch more
|
||||||
|
if (!_doneFetching && !_currentlyFetching) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,8 +174,8 @@ void ActivityListModel::startFetchJob()
|
|||||||
this, &ActivityListModel::slotActivitiesReceived);
|
this, &ActivityListModel::slotActivitiesReceived);
|
||||||
|
|
||||||
QUrlQuery params;
|
QUrlQuery params;
|
||||||
params.addQueryItem(QLatin1String("page"), QLatin1String("0"));
|
params.addQueryItem(QLatin1String("start"), QString::number(_currentItem));
|
||||||
params.addQueryItem(QLatin1String("pagesize"), QLatin1String("100"));
|
params.addQueryItem(QLatin1String("count"), QString::number(100));
|
||||||
job->addQueryParams(params);
|
job->addQueryParams(params);
|
||||||
|
|
||||||
_currentlyFetching = true;
|
_currentlyFetching = true;
|
||||||
@@ -192,10 +189,16 @@ void ActivityListModel::slotActivitiesReceived(const QJsonDocument &json, int st
|
|||||||
|
|
||||||
ActivityList list;
|
ActivityList list;
|
||||||
auto ast = _accountState;
|
auto ast = _accountState;
|
||||||
if (!ast)
|
if (!ast) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_currentlyFetching = 0;
|
if (activities.size() == 0) {
|
||||||
|
_doneFetching = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_currentlyFetching = false;
|
||||||
|
_currentItem += activities.size();
|
||||||
|
|
||||||
foreach (auto activ, activities) {
|
foreach (auto activ, activities) {
|
||||||
auto json = activ.toObject();
|
auto json = activ.toObject();
|
||||||
@@ -212,7 +215,7 @@ void ActivityListModel::slotActivitiesReceived(const QJsonDocument &json, int st
|
|||||||
list.append(a);
|
list.append(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
_activityLists = list;
|
_activityLists.append(list);
|
||||||
|
|
||||||
emit activityJobStatusCode(statusCode);
|
emit activityJobStatusCode(statusCode);
|
||||||
|
|
||||||
@@ -231,9 +234,16 @@ void ActivityListModel::addNotificationToActivityList(Activity activity) {
|
|||||||
combineActivityLists();
|
combineActivityLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ActivityListModel::clearNotifications() {
|
||||||
|
qCInfo(lcActivity) << "Clear the notifications";
|
||||||
|
_notificationLists.clear();
|
||||||
|
combineActivityLists();
|
||||||
|
}
|
||||||
|
|
||||||
void ActivityListModel::removeActivityFromActivityList(int row) {
|
void ActivityListModel::removeActivityFromActivityList(int row) {
|
||||||
Activity activity = _finalList.at(row);
|
Activity activity = _finalList.at(row);
|
||||||
removeActivityFromActivityList(activity);
|
removeActivityFromActivityList(activity);
|
||||||
|
combineActivityLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityListModel::addSyncFileItemToActivityList(Activity activity) {
|
void ActivityListModel::addSyncFileItemToActivityList(Activity activity) {
|
||||||
@@ -291,18 +301,32 @@ void ActivityListModel::combineActivityLists()
|
|||||||
endInsertRows();
|
endInsertRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ActivityListModel::canFetchActivities() const {
|
||||||
|
return _accountState->isConnected() && _accountState->account()->capabilities().hasActivities();
|
||||||
|
}
|
||||||
|
|
||||||
void ActivityListModel::fetchMore(const QModelIndex &)
|
void ActivityListModel::fetchMore(const QModelIndex &)
|
||||||
{
|
{
|
||||||
if (_accountState->isConnected()) {
|
if (canFetchActivities()) {
|
||||||
_activityLists = ActivityList();
|
|
||||||
startFetchJob();
|
startFetchJob();
|
||||||
|
} else {
|
||||||
|
_doneFetching = true;
|
||||||
|
combineActivityLists();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityListModel::slotRefreshActivity()
|
void ActivityListModel::slotRefreshActivity()
|
||||||
{
|
{
|
||||||
_activityLists.clear();
|
_activityLists.clear();
|
||||||
startFetchJob();
|
_doneFetching = false;
|
||||||
|
_currentItem = 0;
|
||||||
|
|
||||||
|
if (canFetchActivities()) {
|
||||||
|
startFetchJob();
|
||||||
|
} else {
|
||||||
|
_doneFetching = true;
|
||||||
|
combineActivityLists();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityListModel::slotRemoveAccount()
|
void ActivityListModel::slotRemoveAccount()
|
||||||
@@ -310,5 +334,7 @@ void ActivityListModel::slotRemoveAccount()
|
|||||||
_finalList.clear();
|
_finalList.clear();
|
||||||
_activityLists.clear();
|
_activityLists.clear();
|
||||||
_currentlyFetching = false;
|
_currentlyFetching = false;
|
||||||
|
_doneFetching = false;
|
||||||
|
_currentItem = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,17 +38,18 @@ class ActivityListModel : public QAbstractListModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ActivityListModel(AccountState *accountState, QWidget *parent = 0);
|
explicit ActivityListModel(AccountState *accountState, QWidget *parent = nullptr);
|
||||||
|
|
||||||
QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
|
||||||
bool canFetchMore(const QModelIndex &) const Q_DECL_OVERRIDE;
|
bool canFetchMore(const QModelIndex &) const override;
|
||||||
void fetchMore(const QModelIndex &) Q_DECL_OVERRIDE;
|
void fetchMore(const QModelIndex &) override;
|
||||||
|
|
||||||
ActivityList activityList() { return _finalList; }
|
ActivityList activityList() { return _finalList; }
|
||||||
ActivityList errorsList() { return _notificationErrorsLists; }
|
ActivityList errorsList() { return _notificationErrorsLists; }
|
||||||
void addNotificationToActivityList(Activity activity);
|
void addNotificationToActivityList(Activity activity);
|
||||||
|
void clearNotifications();
|
||||||
void addErrorToActivityList(Activity activity);
|
void addErrorToActivityList(Activity activity);
|
||||||
void addSyncFileItemToActivityList(Activity activity);
|
void addSyncFileItemToActivityList(Activity activity);
|
||||||
void removeActivityFromActivityList(int row);
|
void removeActivityFromActivityList(int row);
|
||||||
@@ -67,6 +68,7 @@ signals:
|
|||||||
private:
|
private:
|
||||||
void startFetchJob();
|
void startFetchJob();
|
||||||
void combineActivityLists();
|
void combineActivityLists();
|
||||||
|
bool canFetchActivities() const;
|
||||||
|
|
||||||
ActivityList _activityLists;
|
ActivityList _activityLists;
|
||||||
ActivityList _syncFileItemLists;
|
ActivityList _syncFileItemLists;
|
||||||
@@ -74,7 +76,9 @@ private:
|
|||||||
ActivityList _notificationErrorsLists;
|
ActivityList _notificationErrorsLists;
|
||||||
ActivityList _finalList;
|
ActivityList _finalList;
|
||||||
AccountState *_accountState;
|
AccountState *_accountState;
|
||||||
bool _currentlyFetching = true;
|
bool _currentlyFetching = false;
|
||||||
|
bool _doneFetching = false;
|
||||||
|
int _currentItem = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // ACTIVITYLISTMODEL_H
|
#endif // ACTIVITYLISTMODEL_H
|
||||||
|
|||||||
@@ -121,6 +121,11 @@ void ActivityWidget::slotProgressInfo(const QString &folder, const ProgressInfo
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(activity._status == SyncFileItem::FileLocked && !QFileInfo(f->path() + activity._file).exists()){
|
||||||
|
_model->removeActivityFromActivityList(activity);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
|
if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
|
||||||
_model->removeActivityFromActivityList(activity);
|
_model->removeActivityFromActivityList(activity);
|
||||||
@@ -179,7 +184,8 @@ void ActivityWidget::slotItemCompleted(const QString &folder, const SyncFileItem
|
|||||||
|
|
||||||
if(item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success){
|
if(item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success){
|
||||||
qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully.";
|
qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully.";
|
||||||
activity._message.prepend(tr("Synced "));
|
activity._message.prepend(" ");
|
||||||
|
activity._message.prepend(tr("Synced"));
|
||||||
_model->addSyncFileItemToActivityList(activity);
|
_model->addSyncFileItemToActivityList(activity);
|
||||||
} else {
|
} else {
|
||||||
qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString;
|
qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString;
|
||||||
@@ -430,20 +436,17 @@ void ActivityWidget::slotOpenFile(QModelIndex indx)
|
|||||||
// collected.
|
// collected.
|
||||||
void ActivityWidget::slotBuildNotificationDisplay(const ActivityList &list)
|
void ActivityWidget::slotBuildNotificationDisplay(const ActivityList &list)
|
||||||
{
|
{
|
||||||
QString listAccountName;
|
|
||||||
|
|
||||||
// Whether a new notification was added to the list
|
// Whether a new notification was added to the list
|
||||||
bool newNotificationShown = false;
|
bool newNotificationShown = false;
|
||||||
|
|
||||||
|
_model->clearNotifications();
|
||||||
|
|
||||||
foreach (auto activity, list) {
|
foreach (auto activity, list) {
|
||||||
if (_blacklistedNotifications.contains(activity)) {
|
if (_blacklistedNotifications.contains(activity)) {
|
||||||
qCInfo(lcActivity) << "Activity in blacklist, skip";
|
qCInfo(lcActivity) << "Activity in blacklist, skip";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remember the list account name for the strayCat handling below.
|
|
||||||
listAccountName = activity._accName;
|
|
||||||
|
|
||||||
// handle gui logs. In order to NOT annoy the user with every fetching of the
|
// handle gui logs. In order to NOT annoy the user with every fetching of the
|
||||||
// notifications the notification id is stored in a Set. Only if an id
|
// notifications the notification id is stored in a Set. Only if an id
|
||||||
// is not in the set, it qualifies for guiLog.
|
// is not in the set, it qualifies for guiLog.
|
||||||
@@ -468,14 +471,15 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList &list)
|
|||||||
emit guiLog(activity._subject, activity._accName);
|
emit guiLog(activity._subject, activity._accName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_model->addNotificationToActivityList(activity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_model->addNotificationToActivityList(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// restart the gui log timer now that we show a new notification
|
// restart the gui log timer now that we show a new notification
|
||||||
if(newNotificationShown)
|
if(newNotificationShown) {
|
||||||
_guiLogTimer.start();
|
_guiLogTimer.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActivityWidget::slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row)
|
void ActivityWidget::slotSendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row)
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ class ActivityWidget : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ActivityWidget(AccountState *accountState, QWidget *parent = 0);
|
explicit ActivityWidget(AccountState *accountState, QWidget *parent = nullptr);
|
||||||
~ActivityWidget();
|
~ActivityWidget();
|
||||||
QSize sizeHint() const Q_DECL_OVERRIDE { return ownCloudGui::settingsDialogSize(); }
|
QSize sizeHint() const override { return ownCloudGui::settingsDialogSize(); }
|
||||||
void storeActivityList(QTextStream &ts);
|
void storeActivityList(QTextStream &ts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,10 +128,10 @@ class ActivitySettings : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ActivitySettings(AccountState *accountState, QWidget *parent = 0);
|
explicit ActivitySettings(AccountState *accountState, QWidget *parent = nullptr);
|
||||||
|
|
||||||
~ActivitySettings();
|
~ActivitySettings();
|
||||||
QSize sizeHint() const Q_DECL_OVERRIDE { return ownCloudGui::settingsDialogSize(); }
|
QSize sizeHint() const override { return ownCloudGui::settingsDialogSize(); }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void slotRefresh();
|
void slotRefresh();
|
||||||
@@ -146,7 +146,7 @@ signals:
|
|||||||
void guiLog(const QString &, const QString &);
|
void guiLog(const QString &, const QString &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool event(QEvent *e) Q_DECL_OVERRIDE;
|
bool event(QEvent *e) override;
|
||||||
|
|
||||||
ActivityWidget *_activityWidget;
|
ActivityWidget *_activityWidget;
|
||||||
QProgressIndicator *_progressIndicator;
|
QProgressIndicator *_progressIndicator;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class AddCertificateDialog : public QDialog
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AddCertificateDialog(QWidget *parent = 0);
|
explicit AddCertificateDialog(QWidget *parent = nullptr);
|
||||||
~AddCertificateDialog();
|
~AddCertificateDialog();
|
||||||
QString getCertificatePath();
|
QString getCertificatePath();
|
||||||
QString getCertificatePasswd();
|
QString getCertificatePasswd();
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ namespace {
|
|||||||
" (to be used with --logdir)\n"
|
" (to be used with --logdir)\n"
|
||||||
" --logflush : flush the log file after every write.\n"
|
" --logflush : flush the log file after every write.\n"
|
||||||
" --logdebug : also output debug-level messages in the log.\n"
|
" --logdebug : also output debug-level messages in the log.\n"
|
||||||
" --confdir <dirname> : Use the given configuration folder.\n";
|
" --confdir <dirname> : Use the given configuration folder.\n"
|
||||||
|
" --background : launch the application in the background.\n";
|
||||||
|
|
||||||
QString applicationTrPath()
|
QString applicationTrPath()
|
||||||
{
|
{
|
||||||
@@ -96,7 +97,7 @@ namespace {
|
|||||||
|
|
||||||
Application::Application(int &argc, char **argv)
|
Application::Application(int &argc, char **argv)
|
||||||
: SharedTools::QtSingleApplication(Theme::instance()->appName(), argc, argv)
|
: SharedTools::QtSingleApplication(Theme::instance()->appName(), argc, argv)
|
||||||
, _gui(0)
|
, _gui(nullptr)
|
||||||
, _theme(Theme::instance())
|
, _theme(Theme::instance())
|
||||||
, _helpOnly(false)
|
, _helpOnly(false)
|
||||||
, _versionOnly(false)
|
, _versionOnly(false)
|
||||||
@@ -106,6 +107,7 @@ Application::Application(int &argc, char **argv)
|
|||||||
, _logDebug(false)
|
, _logDebug(false)
|
||||||
, _userTriggeredConnect(false)
|
, _userTriggeredConnect(false)
|
||||||
, _debugMode(false)
|
, _debugMode(false)
|
||||||
|
, _backgroundMode(false)
|
||||||
{
|
{
|
||||||
_startedAt.start();
|
_startedAt.start();
|
||||||
|
|
||||||
@@ -186,12 +188,12 @@ Application::Application(int &argc, char **argv)
|
|||||||
if (!AccountManager::instance()->restore()) {
|
if (!AccountManager::instance()->restore()) {
|
||||||
qCCritical(lcApplication) << "Could not read the account settings, quitting";
|
qCCritical(lcApplication) << "Could not read the account settings, quitting";
|
||||||
QMessageBox::critical(
|
QMessageBox::critical(
|
||||||
0,
|
nullptr,
|
||||||
tr("Error accessing the configuration file"),
|
tr("Error accessing the configuration file"),
|
||||||
tr("There was an error while accessing the configuration "
|
tr("There was an error while accessing the configuration "
|
||||||
"file at %1.")
|
"file at %1. Please make sure the file can be accessed by your user.")
|
||||||
.arg(ConfigFile().configFile()),
|
.arg(ConfigFile().configFile()),
|
||||||
tr("Quit Nextcloud"));
|
tr("Quit %1").arg(Theme::instance()->appNameGUI()));
|
||||||
QTimer::singleShot(0, qApp, SLOT(quit()));
|
QTimer::singleShot(0, qApp, SLOT(quit()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -467,6 +469,8 @@ void Application::parseOptions(const QStringList &options)
|
|||||||
} else if (option == QLatin1String("--debug")) {
|
} else if (option == QLatin1String("--debug")) {
|
||||||
_logDebug = true;
|
_logDebug = true;
|
||||||
_debugMode = true;
|
_debugMode = true;
|
||||||
|
} else if (option == QLatin1String("--background")) {
|
||||||
|
_backgroundMode = true;
|
||||||
} else if (option == QLatin1String("--version")) {
|
} else if (option == QLatin1String("--version")) {
|
||||||
_versionOnly = true;
|
_versionOnly = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -540,6 +544,11 @@ bool Application::debugMode()
|
|||||||
return _debugMode;
|
return _debugMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Application::backgroundMode() const
|
||||||
|
{
|
||||||
|
return _backgroundMode;
|
||||||
|
}
|
||||||
|
|
||||||
void Application::setHelp()
|
void Application::setHelp()
|
||||||
{
|
{
|
||||||
_helpOnly = true;
|
_helpOnly = true;
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public:
|
|||||||
void showHelp();
|
void showHelp();
|
||||||
void showHint(std::string errorHint);
|
void showHint(std::string errorHint);
|
||||||
bool debugMode();
|
bool debugMode();
|
||||||
|
bool backgroundMode() const;
|
||||||
bool versionOnly(); // only display the version?
|
bool versionOnly(); // only display the version?
|
||||||
void showVersion();
|
void showVersion();
|
||||||
|
|
||||||
@@ -112,6 +113,7 @@ private:
|
|||||||
bool _logDebug;
|
bool _logDebug;
|
||||||
bool _userTriggeredConnect;
|
bool _userTriggeredConnect;
|
||||||
bool _debugMode;
|
bool _debugMode;
|
||||||
|
bool _backgroundMode;
|
||||||
|
|
||||||
ClientProxy _proxy;
|
ClientProxy _proxy;
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class AuthenticationDialog : public QDialog
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AuthenticationDialog(const QString &realm, const QString &domain, QWidget *parent = 0);
|
AuthenticationDialog(const QString &realm, const QString &domain, QWidget *parent = nullptr);
|
||||||
|
|
||||||
QString user() const;
|
QString user() const;
|
||||||
QString password() const;
|
QString password() const;
|
||||||
|
|||||||
@@ -74,29 +74,37 @@ void ClientProxy::setupQtProxyFromConfig()
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (proxyType) {
|
switch (proxyType) {
|
||||||
case QNetworkProxy::NoProxy:
|
case QNetworkProxy::NoProxy:
|
||||||
qCInfo(lcClientProxy) << "Set proxy configuration to use NO proxy";
|
qCInfo(lcClientProxy) << "Set proxy configuration to use NO proxy";
|
||||||
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
||||||
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
|
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
|
||||||
break;
|
break;
|
||||||
case QNetworkProxy::DefaultProxy:
|
case QNetworkProxy::DefaultProxy:
|
||||||
qCInfo(lcClientProxy) << "Set proxy configuration to use system configuration";
|
qCInfo(lcClientProxy) << "Set proxy configuration to use the prefered system proxy for http tcp connections";
|
||||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
{
|
||||||
break;
|
QNetworkProxyQuery query;
|
||||||
case QNetworkProxy::Socks5Proxy:
|
query.setProtocolTag("http");
|
||||||
proxy.setType(QNetworkProxy::Socks5Proxy);
|
query.setQueryType(QNetworkProxyQuery::TcpSocket);
|
||||||
qCInfo(lcClientProxy) << "Set proxy configuration to SOCKS5" << printQNetworkProxy(proxy);
|
auto proxies = QNetworkProxyFactory::proxyForQuery(query);
|
||||||
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
proxy = proxies.first();
|
||||||
QNetworkProxy::setApplicationProxy(proxy);
|
}
|
||||||
break;
|
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
||||||
case QNetworkProxy::HttpProxy:
|
QNetworkProxy::setApplicationProxy(proxy);
|
||||||
proxy.setType(QNetworkProxy::HttpProxy);
|
break;
|
||||||
qCInfo(lcClientProxy) << "Set proxy configuration to HTTP" << printQNetworkProxy(proxy);
|
case QNetworkProxy::Socks5Proxy:
|
||||||
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
proxy.setType(QNetworkProxy::Socks5Proxy);
|
||||||
QNetworkProxy::setApplicationProxy(proxy);
|
qCInfo(lcClientProxy) << "Set proxy configuration to SOCKS5" << printQNetworkProxy(proxy);
|
||||||
break;
|
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
||||||
default:
|
QNetworkProxy::setApplicationProxy(proxy);
|
||||||
break;
|
break;
|
||||||
|
case QNetworkProxy::HttpProxy:
|
||||||
|
proxy.setType(QNetworkProxy::HttpProxy);
|
||||||
|
qCInfo(lcClientProxy) << "Set proxy configuration to HTTP" << printQNetworkProxy(proxy);
|
||||||
|
QNetworkProxyFactory::setUseSystemConfiguration(false);
|
||||||
|
QNetworkProxy::setApplicationProxy(proxy);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class ClientProxy : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ClientProxy(QObject *parent = 0);
|
explicit ClientProxy(QObject *parent = nullptr);
|
||||||
|
|
||||||
static bool isUsingSystemDefault();
|
static bool isUsingSystemDefault();
|
||||||
static void lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot);
|
static void lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot);
|
||||||
@@ -53,7 +53,7 @@ class SystemProxyRunnable : public QObject, public QRunnable
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
SystemProxyRunnable(const QUrl &url);
|
SystemProxyRunnable(const QUrl &url);
|
||||||
void run();
|
void run() override;
|
||||||
signals:
|
signals:
|
||||||
void systemProxyLookedUp(const QNetworkProxy &url);
|
void systemProxyLookedUp(const QNetworkProxy &url);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ extern "C" {
|
|||||||
|
|
||||||
CloudProvidersProviderExporter *_providerExporter;
|
CloudProvidersProviderExporter *_providerExporter;
|
||||||
|
|
||||||
void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data)
|
void on_name_acquired (GDBusConnection *connection, const gchar *name, gpointer user_data)
|
||||||
{
|
{
|
||||||
Q_UNUSED(name);
|
Q_UNUSED(name);
|
||||||
CloudProviderManager *self;
|
CloudProviderManager *self;
|
||||||
@@ -34,6 +34,14 @@ void on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer u
|
|||||||
self->registerSignals();
|
self->registerSignals();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_name_lost (GDBusConnection *connection, const gchar *name, gpointer user_data)
|
||||||
|
{
|
||||||
|
Q_UNUSED(connection);
|
||||||
|
Q_UNUSED(name);
|
||||||
|
Q_UNUSED(user_data);
|
||||||
|
g_clear_object (&_providerExporter);
|
||||||
|
}
|
||||||
|
|
||||||
void CloudProviderManager::registerSignals()
|
void CloudProviderManager::registerSignals()
|
||||||
{
|
{
|
||||||
OCC::FolderMan *folderManager = OCC::FolderMan::instance();
|
OCC::FolderMan *folderManager = OCC::FolderMan::instance();
|
||||||
@@ -45,7 +53,7 @@ CloudProviderManager::CloudProviderManager(QObject *parent) : QObject(parent)
|
|||||||
{
|
{
|
||||||
_map = new QMap<QString, CloudProviderWrapper*>();
|
_map = new QMap<QString, CloudProviderWrapper*>();
|
||||||
QString busName = QString(LIBCLOUDPROVIDERS_DBUS_BUS_NAME);
|
QString busName = QString(LIBCLOUDPROVIDERS_DBUS_BUS_NAME);
|
||||||
g_bus_own_name (G_BUS_TYPE_SESSION, busName.toAscii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, NULL, NULL, this, NULL);
|
g_bus_own_name (G_BUS_TYPE_SESSION, busName.toAscii().data(), G_BUS_NAME_OWNER_FLAGS_NONE, nullptr, on_name_acquired, nullptr, this, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudProviderManager::slotFolderListChanged(const Folder::Map &folderMap)
|
void CloudProviderManager::slotFolderListChanged(const Folder::Map &folderMap)
|
||||||
|
|||||||
@@ -31,35 +31,27 @@ extern "C" {
|
|||||||
|
|
||||||
using namespace OCC;
|
using namespace OCC;
|
||||||
|
|
||||||
GSimpleActionGroup *actionGroup = NULL;
|
GSimpleActionGroup *actionGroup = nullptr;
|
||||||
|
|
||||||
static
|
|
||||||
gchar* qstring_to_gchar(const QString &string)
|
|
||||||
{
|
|
||||||
QByteArray ba = string.toUtf8();
|
|
||||||
char* data = ba.data();
|
|
||||||
return g_strdup(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, CloudProvidersProviderExporter* cloudprovider) : QObject(parent)
|
CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, CloudProvidersProviderExporter* cloudprovider) : QObject(parent)
|
||||||
, _folder(folder)
|
, _folder(folder)
|
||||||
{
|
{
|
||||||
|
GMenuModel *model;
|
||||||
|
GActionGroup *action_group;
|
||||||
_recentlyChanged = new QList<QPair<QString, QString>>();
|
_recentlyChanged = new QList<QPair<QString, QString>>();
|
||||||
gchar *accountName = g_strdup_printf ("Account%sFolder%s",
|
QString accountName = QString("Account%1Folder%2").arg(folder->alias(), folder->accountState()->account()->id());
|
||||||
qstring_to_gchar(folder->alias()),
|
|
||||||
qstring_to_gchar(folder->accountState()->account()->id()));
|
|
||||||
|
|
||||||
_cloudProvider = CLOUD_PROVIDERS_PROVIDER_EXPORTER(cloudprovider);
|
_cloudProvider = CLOUD_PROVIDERS_PROVIDER_EXPORTER(cloudprovider);
|
||||||
_cloudProviderAccount = cloud_providers_account_exporter_new(_cloudProvider, accountName);
|
_cloudProviderAccount = cloud_providers_account_exporter_new(_cloudProvider, accountName.toUtf8().data());
|
||||||
|
|
||||||
gchar* folderName = qstring_to_gchar(folder->shortGuiLocalPath());
|
cloud_providers_account_exporter_set_name (_cloudProviderAccount, folder->shortGuiLocalPath().toUtf8().data());
|
||||||
gchar* folderPath = qstring_to_gchar(folder->cleanPath());
|
cloud_providers_account_exporter_set_icon (_cloudProviderAccount, g_icon_new_for_string(APPLICATION_ICON_NAME, nullptr));
|
||||||
cloud_providers_account_exporter_set_name (_cloudProviderAccount, folderName);
|
cloud_providers_account_exporter_set_path (_cloudProviderAccount, folder->cleanPath().toUtf8().data());
|
||||||
cloud_providers_account_exporter_set_icon (_cloudProviderAccount, g_icon_new_for_string(APPLICATION_ICON_NAME, NULL));
|
|
||||||
cloud_providers_account_exporter_set_path (_cloudProviderAccount, folderPath);
|
|
||||||
cloud_providers_account_exporter_set_status (_cloudProviderAccount, CLOUD_PROVIDERS_ACCOUNT_STATUS_IDLE);
|
cloud_providers_account_exporter_set_status (_cloudProviderAccount, CLOUD_PROVIDERS_ACCOUNT_STATUS_IDLE);
|
||||||
cloud_providers_account_exporter_set_menu_model (_cloudProviderAccount, getMenuModel());
|
model = getMenuModel();
|
||||||
cloud_providers_account_exporter_set_action_group (_cloudProviderAccount, getActionGroup());
|
cloud_providers_account_exporter_set_menu_model (_cloudProviderAccount, model);
|
||||||
|
action_group = getActionGroup();
|
||||||
|
cloud_providers_account_exporter_set_action_group (_cloudProviderAccount, action_group);
|
||||||
|
|
||||||
connect(ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, ProgressInfo)), this, SLOT(slotUpdateProgress(QString, ProgressInfo)));
|
connect(ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, ProgressInfo)), this, SLOT(slotUpdateProgress(QString, ProgressInfo)));
|
||||||
connect(_folder, SIGNAL(syncStarted()), this, SLOT(slotSyncStarted()));
|
connect(_folder, SIGNAL(syncStarted()), this, SLOT(slotSyncStarted()));
|
||||||
@@ -68,10 +60,8 @@ CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, Clou
|
|||||||
|
|
||||||
_paused = _folder->syncPaused();
|
_paused = _folder->syncPaused();
|
||||||
updatePauseStatus();
|
updatePauseStatus();
|
||||||
|
g_clear_object (&model);
|
||||||
g_free(accountName);
|
g_clear_object (&action_group);
|
||||||
g_free(folderName);
|
|
||||||
g_free(folderPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CloudProviderWrapper::~CloudProviderWrapper()
|
CloudProviderWrapper::~CloudProviderWrapper()
|
||||||
@@ -93,6 +83,16 @@ static bool shouldShowInRecentsMenu(const SyncFileItem &item)
|
|||||||
&& item._instruction != CSYNC_INSTRUCTION_NONE;
|
&& item._instruction != CSYNC_INSTRUCTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GMenuItem *menu_item_new(const QString &label, const gchar *detailed_action)
|
||||||
|
{
|
||||||
|
return g_menu_item_new(label.toUtf8 ().data(), detailed_action);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GMenuItem *menu_item_new_submenu(const QString &label, GMenuModel *submenu)
|
||||||
|
{
|
||||||
|
return g_menu_item_new_submenu(label.toUtf8 ().data(), submenu);
|
||||||
|
}
|
||||||
|
|
||||||
void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const ProgressInfo &progress)
|
void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const ProgressInfo &progress)
|
||||||
{
|
{
|
||||||
// Only update progress for the current folder
|
// Only update progress for the current folder
|
||||||
@@ -154,30 +154,25 @@ void CloudProviderWrapper::slotUpdateProgress(const QString &folder, const Progr
|
|||||||
if(!_recentlyChanged->isEmpty()) {
|
if(!_recentlyChanged->isEmpty()) {
|
||||||
QList<QPair<QString, QString>>::iterator i;
|
QList<QPair<QString, QString>>::iterator i;
|
||||||
for (i = _recentlyChanged->begin(); i != _recentlyChanged->end(); i++) {
|
for (i = _recentlyChanged->begin(); i != _recentlyChanged->end(); i++) {
|
||||||
gchar *file;
|
|
||||||
QString label = i->first;
|
QString label = i->first;
|
||||||
QString fullPath = i->second;
|
QString fullPath = i->second;
|
||||||
file = g_strdup(qstring_to_gchar(label));
|
item = menu_item_new(label, "cloudprovider.showfile");
|
||||||
item = g_menu_item_new(file, "cloudprovider.showfile");
|
g_menu_item_set_action_and_target_value(item, "cloudprovider.showfile", g_variant_new_string(fullPath.toUtf8().data()));
|
||||||
g_menu_item_set_action_and_target_value(item, "cloudprovider.showfile", g_variant_new_string(qstring_to_gchar(fullPath)));
|
|
||||||
g_menu_append_item(_recentMenu, item);
|
g_menu_append_item(_recentMenu, item);
|
||||||
|
g_clear_object (&item);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
item = g_menu_item_new("No recently changed files", NULL);
|
item = menu_item_new(tr("No recently changed files"), nullptr);
|
||||||
g_menu_append_item(_recentMenu, item);
|
g_menu_append_item(_recentMenu, item);
|
||||||
|
g_clear_object (&item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudProviderWrapper::updateStatusText(QString statusText)
|
void CloudProviderWrapper::updateStatusText(QString statusText)
|
||||||
{
|
{
|
||||||
char* state = qstring_to_gchar(_folder->accountState()->stateString(_folder->accountState()->state()));
|
QString status = QString("%1 - %2").arg(_folder->accountState()->stateString(_folder->accountState()->state()), statusText);
|
||||||
char* statusChar = qstring_to_gchar(statusText);
|
cloud_providers_account_exporter_set_status_details(_cloudProviderAccount, status.toUtf8().data());
|
||||||
char* status = g_strdup_printf("%s - %s", state, statusChar);
|
|
||||||
cloud_providers_account_exporter_set_status_details(_cloudProviderAccount, status);
|
|
||||||
g_free(state);
|
|
||||||
g_free(statusChar);
|
|
||||||
g_free(status);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudProviderWrapper::updatePauseStatus()
|
void CloudProviderWrapper::updatePauseStatus()
|
||||||
@@ -217,38 +212,53 @@ GMenuModel* CloudProviderWrapper::getMenuModel() {
|
|||||||
|
|
||||||
GMenu* section;
|
GMenu* section;
|
||||||
GMenuItem* item;
|
GMenuItem* item;
|
||||||
|
QString item_label;
|
||||||
|
|
||||||
_mainMenu = g_menu_new();
|
_mainMenu = g_menu_new();
|
||||||
|
|
||||||
section = g_menu_new();
|
section = g_menu_new();
|
||||||
item = g_menu_item_new("Open website", "cloudprovider.openwebsite");
|
item = menu_item_new(tr("Open website"), "cloudprovider.openwebsite");
|
||||||
g_menu_append_item(section, item);
|
g_menu_append_item(section, item);
|
||||||
g_menu_append_section(_mainMenu, NULL, G_MENU_MODEL(section));
|
g_clear_object (&item);
|
||||||
|
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
|
||||||
|
g_clear_object (§ion);
|
||||||
|
|
||||||
_recentMenu = g_menu_new();
|
_recentMenu = g_menu_new();
|
||||||
item = g_menu_item_new("No recently changed files", NULL);
|
item = menu_item_new(tr("No recently changed files"), nullptr);
|
||||||
g_menu_append_item(_recentMenu, item);
|
g_menu_append_item(_recentMenu, item);
|
||||||
section = g_menu_new();
|
g_clear_object (&item);
|
||||||
item = g_menu_item_new_submenu("Recently changed", G_MENU_MODEL(_recentMenu));
|
|
||||||
g_menu_append_item(section, item);
|
|
||||||
g_menu_append_section(_mainMenu, NULL, G_MENU_MODEL(section));
|
|
||||||
|
|
||||||
section = g_menu_new();
|
section = g_menu_new();
|
||||||
item = g_menu_item_new("Pause synchronization", "cloudprovider.pause");
|
item = menu_item_new_submenu(tr("Recently changed"), G_MENU_MODEL(_recentMenu));
|
||||||
g_menu_append_item(section, item);
|
g_menu_append_item(section, item);
|
||||||
g_menu_append_section(_mainMenu, NULL, G_MENU_MODEL(section));
|
g_clear_object (&item);
|
||||||
|
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
|
||||||
|
g_clear_object (§ion);
|
||||||
|
|
||||||
section = g_menu_new();
|
section = g_menu_new();
|
||||||
item = g_menu_item_new("Help", "cloudprovider.openhelp");
|
item = menu_item_new(tr("Pause synchronization"), "cloudprovider.pause");
|
||||||
g_menu_append_item(section, item);
|
g_menu_append_item(section, item);
|
||||||
item = g_menu_item_new("Settings", "cloudprovider.opensettings");
|
g_clear_object (&item);
|
||||||
g_menu_append_item(section, item);
|
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
|
||||||
item = g_menu_item_new("Log out", "cloudprovider.logout");
|
g_clear_object (§ion);
|
||||||
g_menu_append_item(section, item);
|
|
||||||
item = g_menu_item_new("Quit sync client", "cloudprovider.quit");
|
|
||||||
g_menu_append_item(section, item);
|
|
||||||
g_menu_append_section(_mainMenu, NULL, G_MENU_MODEL(section));
|
|
||||||
|
|
||||||
|
section = g_menu_new();
|
||||||
|
item = menu_item_new(tr("Help"), "cloudprovider.openhelp");
|
||||||
|
g_menu_append_item(section, item);
|
||||||
|
g_clear_object (&item);
|
||||||
|
item = menu_item_new(tr("Settings"), "cloudprovider.opensettings");
|
||||||
|
g_menu_append_item(section, item);
|
||||||
|
g_clear_object (&item);
|
||||||
|
item = menu_item_new(tr("Log out"), "cloudprovider.logout");
|
||||||
|
g_menu_append_item(section, item);
|
||||||
|
g_clear_object (&item);
|
||||||
|
item = menu_item_new(tr("Quit sync client"), "cloudprovider.quit");
|
||||||
|
g_menu_append_item(section, item);
|
||||||
|
g_clear_object (&item);
|
||||||
|
g_menu_append_section(_mainMenu, nullptr, G_MENU_MODEL(section));
|
||||||
|
g_clear_object (§ion);
|
||||||
|
|
||||||
|
g_clear_object (&_recentMenu);
|
||||||
return G_MENU_MODEL(_mainMenu);
|
return G_MENU_MODEL(_mainMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,11 +287,10 @@ activate_action_open (GSimpleAction *action, GVariant *parameter, gpointer user_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(g_str_equal(name, "showfile")) {
|
if(g_str_equal(name, "showfile")) {
|
||||||
gchar *path;
|
const gchar *path = g_variant_get_string (parameter, NULL);
|
||||||
g_variant_get (parameter, "s", &path);
|
g_print("showfile => %s\n", path);
|
||||||
g_print("showfile => %s\n", path);
|
showInFileManager(QString(path));
|
||||||
showInFileManager(QString(path));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(g_str_equal(name, "logout")) {
|
if(g_str_equal(name, "logout")) {
|
||||||
self->folder()->accountState()->signOutByUi();
|
self->folder()->accountState()->signOutByUi();
|
||||||
@@ -318,25 +327,26 @@ activate_action_pause (GSimpleAction *action,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GActionEntry actions[] = {
|
static GActionEntry actions[] = {
|
||||||
{ "openwebsite", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "openwebsite", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "quit", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "quit", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "logout", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "logout", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "openfolder", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "openfolder", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "showfile", activate_action_open, "s", NULL, NULL, {0,0,0}},
|
{ "showfile", activate_action_open, "s", nullptr, nullptr, {0,0,0}},
|
||||||
{ "openhelp", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "openhelp", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "opensettings", activate_action_open, NULL, NULL, NULL, {0,0,0}},
|
{ "opensettings", activate_action_open, nullptr, nullptr, nullptr, {0,0,0}},
|
||||||
{ "openrecentfile", activate_action_openrecentfile, "s", NULL, NULL, {0,0,0}},
|
{ "openrecentfile", activate_action_openrecentfile, "s", nullptr, nullptr, {0,0,0}},
|
||||||
{ "pause", activate_action_pause, NULL, "false", NULL, {0,0,0}}
|
{ "pause", activate_action_pause, nullptr, "false", nullptr, {0,0,0}}
|
||||||
};
|
};
|
||||||
|
|
||||||
GActionGroup* CloudProviderWrapper::getActionGroup()
|
GActionGroup* CloudProviderWrapper::getActionGroup()
|
||||||
{
|
{
|
||||||
|
g_clear_object (&actionGroup);
|
||||||
actionGroup = g_simple_action_group_new ();
|
actionGroup = g_simple_action_group_new ();
|
||||||
g_action_map_add_action_entries (G_ACTION_MAP (actionGroup), actions, G_N_ELEMENTS (actions), this);
|
g_action_map_add_action_entries (G_ACTION_MAP (actionGroup), actions, G_N_ELEMENTS (actions), this);
|
||||||
bool state = _folder->syncPaused();
|
bool state = _folder->syncPaused();
|
||||||
GAction *pause = g_action_map_lookup_action(G_ACTION_MAP(actionGroup), "pause");
|
GAction *pause = g_action_map_lookup_action(G_ACTION_MAP(actionGroup), "pause");
|
||||||
g_simple_action_set_state(G_SIMPLE_ACTION(pause), g_variant_new_boolean(state));
|
g_simple_action_set_state(G_SIMPLE_ACTION(pause), g_variant_new_boolean(state));
|
||||||
return G_ACTION_GROUP (actionGroup);
|
return G_ACTION_GROUP (g_object_ref (actionGroup));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloudProviderWrapper::slotSyncPausedChanged(Folder *folder, bool state)
|
void CloudProviderWrapper::slotSyncPausedChanged(Folder *folder, bool state)
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ private:
|
|||||||
CloudProvidersAccountExporter *_cloudProviderAccount;
|
CloudProvidersAccountExporter *_cloudProviderAccount;
|
||||||
QList<QPair<QString, QString>> *_recentlyChanged;
|
QList<QPair<QString, QString>> *_recentlyChanged;
|
||||||
bool _paused;
|
bool _paused;
|
||||||
GMenu* _mainMenu = NULL;
|
GMenu* _mainMenu = nullptr;
|
||||||
GMenu* _recentMenu = NULL;
|
GMenu* _recentMenu = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CLOUDPROVIDER_H
|
#endif // CLOUDPROVIDER_H
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ class ConnectionValidator : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ConnectionValidator(AccountPtr account, QObject *parent = 0);
|
explicit ConnectionValidator(AccountPtr account, QObject *parent = nullptr);
|
||||||
|
|
||||||
enum Status {
|
enum Status {
|
||||||
Undefined,
|
Undefined,
|
||||||
|
|||||||
@@ -75,10 +75,10 @@ void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user,
|
|||||||
case OAuth::NotSupported:
|
case OAuth::NotSupported:
|
||||||
// We will re-enter the event loop, so better wait the next iteration
|
// We will re-enter the event loop, so better wait the next iteration
|
||||||
QMetaObject::invokeMethod(this, "showDialog", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "showDialog", Qt::QueuedConnection);
|
||||||
_asyncAuth.reset(0);
|
_asyncAuth.reset(nullptr);
|
||||||
return;
|
return;
|
||||||
case OAuth::Error:
|
case OAuth::Error:
|
||||||
_asyncAuth.reset(0);
|
_asyncAuth.reset(nullptr);
|
||||||
emit asked();
|
emit asked();
|
||||||
return;
|
return;
|
||||||
case OAuth::LoggedIn:
|
case OAuth::LoggedIn:
|
||||||
@@ -91,7 +91,7 @@ void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user,
|
|||||||
_refreshToken = refreshToken;
|
_refreshToken = refreshToken;
|
||||||
_ready = true;
|
_ready = true;
|
||||||
persist();
|
persist();
|
||||||
_asyncAuth.reset(0);
|
_asyncAuth.reset(nullptr);
|
||||||
emit asked();
|
emit asked();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ QString HttpCredentialsGui::requestAppPasswordText(const Account *account)
|
|||||||
} else if (version >= Account::makeServerVersion(12, 0, 0)) {
|
} else if (version >= Account::makeServerVersion(12, 0, 0)) {
|
||||||
url += QLatin1String("/index.php/settings/personal#security");
|
url += QLatin1String("/index.php/settings/personal#security");
|
||||||
} else if (version >= Account::makeServerVersion(11, 0, 0)) {
|
} else if (version >= Account::makeServerVersion(11, 0, 0)) {
|
||||||
url += QLatin1String("/index.php/settings/personal#apppasswords");
|
url += QLatin1String("/index.php/settings/user/security#security");
|
||||||
} else {
|
} else {
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
* This will query the server and either uses OAuth via _asyncAuth->start()
|
* This will query the server and either uses OAuth via _asyncAuth->start()
|
||||||
* or call showDialog to ask the password
|
* or call showDialog to ask the password
|
||||||
*/
|
*/
|
||||||
void askFromUser() Q_DECL_OVERRIDE;
|
void askFromUser() override;
|
||||||
/**
|
/**
|
||||||
* In case of oauth, return an URL to the link to open the browser.
|
* In case of oauth, return an URL to the link to open the browser.
|
||||||
* An invalid URL otherwise
|
* An invalid URL otherwise
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class ShibbolethUserJob : public JsonApiJob
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ShibbolethUserJob(AccountPtr account, QObject *parent = 0);
|
explicit ShibbolethUserJob(AccountPtr account, QObject *parent = nullptr);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
// is always emitted when the job is finished. user is empty in case of error.
|
// is always emitted when the job is finished. user is empty in case of error.
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public:
|
|||||||
settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
|
settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QString userAgentForUrl(const QUrl &url) const
|
QString userAgentForUrl(const QUrl &url) const override
|
||||||
{
|
{
|
||||||
return QWebPage::userAgentForUrl(url) + " " + Utility::userAgentString();
|
return QWebPage::userAgentForUrl(url) + " " + Utility::userAgentString();
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ ShibbolethWebView::ShibbolethWebView(AccountPtr account, QWidget *parent)
|
|||||||
QWebView *debugView = new QWebView(this);
|
QWebView *debugView = new QWebView(this);
|
||||||
debugView->setPage(debugPage);
|
debugView->setPage(debugPage);
|
||||||
QMainWindow *window = new QMainWindow(this);
|
QMainWindow *window = new QMainWindow(this);
|
||||||
window->setWindowTitle(tr("SSL Chipher Debug View"));
|
window->setWindowTitle(tr("SSL Cipher Debug View"));
|
||||||
window->setCentralWidget(debugView);
|
window->setCentralWidget(debugView);
|
||||||
window->show();
|
window->show();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ class ShibbolethWebView : public QWebView
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ShibbolethWebView(AccountPtr account, QWidget *parent = 0);
|
ShibbolethWebView(AccountPtr account, QWidget *parent = nullptr);
|
||||||
ShibbolethWebView(AccountPtr account, ShibbolethCookieJar *jar, QWidget *parent = 0);
|
ShibbolethWebView(AccountPtr account, ShibbolethCookieJar *jar, QWidget *parent = nullptr);
|
||||||
~ShibbolethWebView();
|
~ShibbolethWebView();
|
||||||
|
|
||||||
void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
|
void closeEvent(QCloseEvent *event) override;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void shibbolethCookieReceived(const QNetworkCookie &cookie);
|
void shibbolethCookieReceived(const QNetworkCookie &cookie);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ ShibbolethCredentials::ShibbolethCredentials()
|
|||||||
, _url()
|
, _url()
|
||||||
, _ready(false)
|
, _ready(false)
|
||||||
, _stillValid(false)
|
, _stillValid(false)
|
||||||
, _browser(0)
|
, _browser(nullptr)
|
||||||
, _keychainMigration(false)
|
, _keychainMigration(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ ShibbolethCredentials::ShibbolethCredentials()
|
|||||||
ShibbolethCredentials::ShibbolethCredentials(const QNetworkCookie &cookie)
|
ShibbolethCredentials::ShibbolethCredentials(const QNetworkCookie &cookie)
|
||||||
: _ready(true)
|
: _ready(true)
|
||||||
, _stillValid(true)
|
, _stillValid(true)
|
||||||
, _browser(0)
|
, _browser(nullptr)
|
||||||
, _shibCookie(cookie)
|
, _shibCookie(cookie)
|
||||||
, _keychainMigration(false)
|
, _keychainMigration(false)
|
||||||
{
|
{
|
||||||
@@ -161,7 +161,7 @@ void ShibbolethCredentials::askFromUser()
|
|||||||
} else if (type == DetermineAuthTypeJob::OAuth) {
|
} else if (type == DetermineAuthTypeJob::OAuth) {
|
||||||
// Hack: upgrade to oauth
|
// Hack: upgrade to oauth
|
||||||
auto newCred = new HttpCredentialsGui;
|
auto newCred = new HttpCredentialsGui;
|
||||||
job->setParent(0);
|
job->setParent(nullptr);
|
||||||
job->deleteLater();
|
job->deleteLater();
|
||||||
auto account = this->_account;
|
auto account = this->_account;
|
||||||
auto user = this->_user;
|
auto user = this->_user;
|
||||||
|
|||||||
@@ -50,17 +50,17 @@ public:
|
|||||||
/* create credentials for an already connected account */
|
/* create credentials for an already connected account */
|
||||||
ShibbolethCredentials(const QNetworkCookie &cookie);
|
ShibbolethCredentials(const QNetworkCookie &cookie);
|
||||||
|
|
||||||
void setAccount(Account *account) Q_DECL_OVERRIDE;
|
void setAccount(Account *account) override;
|
||||||
QString authType() const Q_DECL_OVERRIDE;
|
QString authType() const override;
|
||||||
QString user() const Q_DECL_OVERRIDE;
|
QString user() const override;
|
||||||
QNetworkAccessManager *createQNAM() const Q_DECL_OVERRIDE;
|
QNetworkAccessManager *createQNAM() const override;
|
||||||
bool ready() const Q_DECL_OVERRIDE;
|
bool ready() const override;
|
||||||
void fetchFromKeychain() Q_DECL_OVERRIDE;
|
void fetchFromKeychain() override;
|
||||||
void askFromUser() Q_DECL_OVERRIDE;
|
void askFromUser() override;
|
||||||
bool stillValid(QNetworkReply *reply) Q_DECL_OVERRIDE;
|
bool stillValid(QNetworkReply *reply) override;
|
||||||
void persist() Q_DECL_OVERRIDE;
|
void persist() override;
|
||||||
void invalidateToken() Q_DECL_OVERRIDE;
|
void invalidateToken() override;
|
||||||
void forgetSensitiveData() Q_DECL_OVERRIDE;
|
void forgetSensitiveData() override;
|
||||||
|
|
||||||
void showLoginWindow();
|
void showLoginWindow();
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) Q_DECL_OVERRIDE
|
QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) override
|
||||||
{
|
{
|
||||||
QNetworkRequest req(request);
|
QNetworkRequest req(request);
|
||||||
if (!req.attribute(HttpCredentials::DontAddCredentialsAttribute).toBool()) {
|
if (!req.attribute(HttpCredentials::DontAddCredentialsAttribute).toBool()) {
|
||||||
@@ -129,7 +129,7 @@ void WebFlowCredentials::askFromUser() {
|
|||||||
|
|
||||||
connect(_askDialog, &WebFlowCredentialsDialog::urlCatched, this, &WebFlowCredentials::slotAskFromUserCredentialsProvided);
|
connect(_askDialog, &WebFlowCredentialsDialog::urlCatched, this, &WebFlowCredentials::slotAskFromUserCredentialsProvided);
|
||||||
|
|
||||||
qCWarning(lcWebFlowCredentials()) << "User needs to reauth!";
|
qCDebug(lcWebFlowCredentials()) << "User needs to reauth!";
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebFlowCredentials::slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host) {
|
void WebFlowCredentials::slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host) {
|
||||||
@@ -160,14 +160,15 @@ void WebFlowCredentials::slotAskFromUserCredentialsProvided(const QString &user,
|
|||||||
|
|
||||||
_askDialog->close();
|
_askDialog->close();
|
||||||
delete _askDialog;
|
delete _askDialog;
|
||||||
_askDialog = NULL;
|
_askDialog = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool WebFlowCredentials::stillValid(QNetworkReply *reply) {
|
bool WebFlowCredentials::stillValid(QNetworkReply *reply) {
|
||||||
qCWarning(lcWebFlowCredentials()) << "Still valid?";
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
qCWarning(lcWebFlowCredentials()) << reply->error();
|
qCWarning(lcWebFlowCredentials()) << reply->error();
|
||||||
qCWarning(lcWebFlowCredentials()) << reply->errorString();
|
qCWarning(lcWebFlowCredentials()) << reply->errorString();
|
||||||
|
}
|
||||||
return (reply->error() != QNetworkReply::AuthenticationRequiredError);
|
return (reply->error() != QNetworkReply::AuthenticationRequiredError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,7 +209,7 @@ void WebFlowCredentials::forgetSensitiveData(){
|
|||||||
|
|
||||||
const QString kck = keychainKey(_account->url().toString(), _user, _account->id());
|
const QString kck = keychainKey(_account->url().toString(), _user, _account->id());
|
||||||
if (kck.isEmpty()) {
|
if (kck.isEmpty()) {
|
||||||
qCWarning(lcWebFlowCredentials()) << "InvalidateToken: User is empty, bailing out!";
|
qCDebug(lcWebFlowCredentials()) << "InvalidateToken: User is empty, bailing out!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +244,7 @@ void WebFlowCredentials::slotAuthentication(QNetworkReply *reply, QAuthenticator
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qCWarning(lcWebFlowCredentials()) << "Requires authentication";
|
qCDebug(lcWebFlowCredentials()) << "Requires authentication";
|
||||||
|
|
||||||
authenticator->setUser(_user);
|
authenticator->setUser(_user);
|
||||||
authenticator->setPassword(_password);
|
authenticator->setPassword(_password);
|
||||||
@@ -296,7 +297,7 @@ void WebFlowCredentials::slotReadPasswordJobDone(Job *incomingJob) {
|
|||||||
_keychainMigration = false;
|
_keychainMigration = false;
|
||||||
persist();
|
persist();
|
||||||
deleteOldKeychainEntries();
|
deleteOldKeychainEntries();
|
||||||
qCWarning(lcWebFlowCredentials) << "Migrated old keychain entries";
|
qCInfo(lcWebFlowCredentials) << "Migrated old keychain entries";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,14 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(QWidget *parent)
|
|||||||
connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched);
|
connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebFlowCredentialsDialog::closeEvent(QCloseEvent* e) {
|
||||||
|
Q_UNUSED(e);
|
||||||
|
|
||||||
|
// Force calling WebView::~WebView() earlier so that _profile and _page are
|
||||||
|
// deleted in the correct order.
|
||||||
|
delete _webView;
|
||||||
|
}
|
||||||
|
|
||||||
void WebFlowCredentialsDialog::setUrl(const QUrl &url) {
|
void WebFlowCredentialsDialog::setUrl(const QUrl &url) {
|
||||||
_webView->setUrl(url);
|
_webView->setUrl(url);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,15 @@ class WebFlowCredentialsDialog : public QDialog
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
WebFlowCredentialsDialog(QWidget *parent = 0);
|
WebFlowCredentialsDialog(QWidget *parent = nullptr);
|
||||||
|
|
||||||
void setUrl(const QUrl &url);
|
void setUrl(const QUrl &url);
|
||||||
void setInfo(const QString &msg);
|
void setInfo(const QString &msg);
|
||||||
void setError(const QString &error);
|
void setError(const QString &error);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void closeEvent(QCloseEvent * e) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void urlCatched(const QString user, const QString pass, const QString host);
|
void urlCatched(const QString user, const QString pass, const QString host);
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,12 @@
|
|||||||
|
|
||||||
namespace OCC {
|
namespace OCC {
|
||||||
|
|
||||||
|
ElidedLabel::ElidedLabel(QWidget *parent)
|
||||||
|
: QLabel(parent)
|
||||||
|
, _elideMode(Qt::ElideNone)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
ElidedLabel::ElidedLabel(const QString &text, QWidget *parent)
|
ElidedLabel::ElidedLabel(const QString &text, QWidget *parent)
|
||||||
: QLabel(text, parent)
|
: QLabel(text, parent)
|
||||||
, _text(text)
|
, _text(text)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user