mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2026-04-03 09:11:33 +02:00
Compare commits
198 Commits
v1.2.3
...
v1.3.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
82d79b1188 | ||
|
|
e33601becd | ||
|
|
334443adbb | ||
|
|
99579e8a2a | ||
|
|
89438f7ace | ||
|
|
d323ec5dd9 | ||
|
|
bb5cf37330 | ||
|
|
4b0bdd648c | ||
|
|
5588fbe695 | ||
|
|
12ea381205 | ||
|
|
99fbf25fb2 | ||
|
|
b37645e14d | ||
|
|
1ec5a1aaa2 | ||
|
|
3eb7acde25 | ||
|
|
e53e39cfad | ||
|
|
1a17f40233 | ||
|
|
10094a997a | ||
|
|
2af38b093f | ||
|
|
b03c168175 | ||
|
|
1c6bc84d2d | ||
|
|
541239c17b | ||
|
|
74b4ade15a | ||
|
|
205502fd3b | ||
|
|
54e4217216 | ||
|
|
d2579a7754 | ||
|
|
76580840dd | ||
|
|
779e59156c | ||
|
|
b0f0d0b1cd | ||
|
|
858dcb53bd | ||
|
|
9d7db88fcb | ||
|
|
2099b7c6a0 | ||
|
|
4442564ad2 | ||
|
|
12148b5c9b | ||
|
|
d7d77a49fc | ||
|
|
b70c2f5c20 | ||
|
|
033249423f | ||
|
|
0c959e8661 | ||
|
|
79785241ea | ||
|
|
0090862313 | ||
|
|
a4a68c6622 | ||
|
|
49b4c341ae | ||
|
|
7c1f91abdd | ||
|
|
1f2ba7e254 | ||
|
|
8014bcb7c4 | ||
|
|
b1c8bf5954 | ||
|
|
0eb6740bac | ||
|
|
96531b548a | ||
|
|
f3371360ed | ||
|
|
c1b92f9fed | ||
|
|
b028ca0738 | ||
|
|
a9aab30d55 | ||
|
|
efbad3a3c8 | ||
|
|
b6ed959f98 | ||
|
|
477953f965 | ||
|
|
aaf59cece5 | ||
|
|
e88b7e8ec2 | ||
|
|
078b09b5f4 | ||
|
|
0d06fe764a | ||
|
|
94f8c39a9e | ||
|
|
7d1bd9da86 | ||
|
|
ed8cdf6910 | ||
|
|
7ee83847c8 | ||
|
|
52eca1362f | ||
|
|
eec1af09c4 | ||
|
|
c651c8cbf9 | ||
|
|
da6a398624 | ||
|
|
1418512a9f | ||
|
|
dd2859880b | ||
|
|
f38d8ba2e4 | ||
|
|
fdd52a2520 | ||
|
|
e2c0792043 | ||
|
|
e8889530b0 | ||
|
|
23f67d950a | ||
|
|
0bd1f507ab | ||
|
|
2bcfc143f6 | ||
|
|
9dc21bf8a3 | ||
|
|
70f627ba06 | ||
|
|
0683c26d41 | ||
|
|
dbc085d4d4 | ||
|
|
804eaa700e | ||
|
|
646922665d | ||
|
|
62ad2f19e3 | ||
|
|
14f55420f9 | ||
|
|
d4ea0ba6ba | ||
|
|
c06f7b7ecb | ||
|
|
3a50eece9e | ||
|
|
44f0fb0242 | ||
|
|
c210e2b72f | ||
|
|
7b5079f043 | ||
|
|
be4027fb36 | ||
|
|
0f03b47a46 | ||
|
|
c923e0803e | ||
|
|
bd74dbbfc5 | ||
|
|
a0599e75b7 | ||
|
|
f334b6349b | ||
|
|
2ff9fcfa1d | ||
|
|
aa23e4698b | ||
|
|
302fdeb1f9 | ||
|
|
eea8542fc0 | ||
|
|
a36d79e993 | ||
|
|
be5c1b2072 | ||
|
|
f0bd1ea48e | ||
|
|
90d0460a42 | ||
|
|
c15ce2b20b | ||
|
|
b51f210bfa | ||
|
|
105c76c055 | ||
|
|
6b15b7a58f | ||
|
|
fee0aae975 | ||
|
|
b33b638d2d | ||
|
|
1e677a5f0f | ||
|
|
3f3f6c0f39 | ||
|
|
5dd53b48ef | ||
|
|
a215e11b20 | ||
|
|
7d71f9dd2d | ||
|
|
183f1574ca | ||
|
|
504b651bb9 | ||
|
|
c848ff4bdb | ||
|
|
5aa8f5bc01 | ||
|
|
6c5d5a543c | ||
|
|
a8bc849b5d | ||
|
|
5f535b9661 | ||
|
|
eaf865539c | ||
|
|
75448c41d4 | ||
|
|
afc96e2021 | ||
|
|
d7bce80c7b | ||
|
|
7e07d20d31 | ||
|
|
238111be09 | ||
|
|
6f0820a3ed | ||
|
|
1d0d1c249b | ||
|
|
1b5ed68375 | ||
|
|
ce996b3fc8 | ||
|
|
2789522948 | ||
|
|
55a56cc275 | ||
|
|
20101527b2 | ||
|
|
311bd39100 | ||
|
|
fab77a15f0 | ||
|
|
09e7f5c618 | ||
|
|
c5a674b1df | ||
|
|
f83453cfc7 | ||
|
|
1ca8ebebd9 | ||
|
|
7cc73ed46c | ||
|
|
01b4694b47 | ||
|
|
bcc6d59c6b | ||
|
|
b4e2e5f586 | ||
|
|
43ed874789 | ||
|
|
8928c87fc3 | ||
|
|
e3f8a918d6 | ||
|
|
668bb94270 | ||
|
|
89e0543e0a | ||
|
|
6695b50965 | ||
|
|
5c02c85126 | ||
|
|
de99c0c7e7 | ||
|
|
9f0348979b | ||
|
|
5b5cd310b9 | ||
|
|
ea85d68a26 | ||
|
|
fb0a883f7b | ||
|
|
64a0efe29a | ||
|
|
1f361b7260 | ||
|
|
763b06477d | ||
|
|
cd7d2a0778 | ||
|
|
a4be3f304d | ||
|
|
88184d14d6 | ||
|
|
844d8eba47 | ||
|
|
5e65945a53 | ||
|
|
428040762f | ||
|
|
30e0a13bc5 | ||
|
|
275c2b1a6b | ||
|
|
e409814cb6 | ||
|
|
acdb624713 | ||
|
|
3cae8e7124 | ||
|
|
2595b9eae7 | ||
|
|
46a8561925 | ||
|
|
bb74cab887 | ||
|
|
dd7f58b9b9 | ||
|
|
ee080222d8 | ||
|
|
c7aaa3ab28 | ||
|
|
fcde01fd4c | ||
|
|
83be334ee8 | ||
|
|
819f76c2b9 | ||
|
|
783b16676f | ||
|
|
aa6160ab62 | ||
|
|
8bae06802b | ||
|
|
a20f572448 | ||
|
|
f74aa1e9a6 | ||
|
|
86525570aa | ||
|
|
d11ce781d0 | ||
|
|
be5a50a000 | ||
|
|
7309a894bc | ||
|
|
310f29d3fd | ||
|
|
a8f0e79046 | ||
|
|
8165b83a27 | ||
|
|
fa62c270e6 | ||
|
|
c03199e78a | ||
|
|
f346503534 | ||
|
|
1315ca2a57 | ||
|
|
2f0474a467 | ||
|
|
4caca2ce1a | ||
|
|
e0645b4b63 |
@@ -4,7 +4,8 @@ project(mirall)
|
||||
set(PACKAGE "mirall")
|
||||
set( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
|
||||
|
||||
if ( DEFINED OEM_THEME_DIR AND EXISTS ${OEM_THEME_DIR}/OEM.cmake )
|
||||
set(OEM_THEME_DIR "" CACHE STRING "Define directory containing a custom theme")
|
||||
if ( EXISTS ${OEM_THEME_DIR}/OEM.cmake )
|
||||
include ( ${OEM_THEME_DIR}/OEM.cmake )
|
||||
else ()
|
||||
include ( ${CMAKE_SOURCE_DIR}/OWNCLOUD.cmake )
|
||||
@@ -12,7 +13,7 @@ endif()
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
||||
configure_file( ${CMAKE_SOURCE_DIR}/src/mirall/version.h.in "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/version.h" )
|
||||
include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
||||
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
@@ -53,9 +54,19 @@ else()
|
||||
endif()
|
||||
#####
|
||||
|
||||
#####
|
||||
## handle DBUS for Fdo notifications
|
||||
if( UNIX AND NOT APPLE )
|
||||
add_definitions( -DUSE_FDO_NOTIFICATIONS)
|
||||
endif()
|
||||
####
|
||||
|
||||
#### find libs
|
||||
find_package(Qt4 4.6.0 COMPONENTS QtCore QtGui QtXml QtNetwork QtTest REQUIRED )
|
||||
find_package(Csync)
|
||||
if( UNIX AND NOT APPLE ) # Fdo notifications
|
||||
find_package(Qt4 4.6.0 COMPONENTS QtDBus REQUIRED )
|
||||
endif()
|
||||
find_package(Csync REQUIRED)
|
||||
if(UNIX)
|
||||
find_package(INotify REQUIRED)
|
||||
else()
|
||||
@@ -65,7 +76,6 @@ find_package(Sphinx)
|
||||
find_package(PdfLatex)
|
||||
find_package(QtKeychain)
|
||||
|
||||
set(WITH_CSYNC CSYNC_FOUND)
|
||||
set(WITH_QTKEYCHAIN ${QTKEYCHAIN_FOUND})
|
||||
set(USE_INOTIFY ${INOTIFY_FOUND})
|
||||
|
||||
@@ -92,12 +102,6 @@ set(CPACK_SOURCE_IGNORE_FILES
|
||||
|
||||
include(OwnCloudCPack.cmake)
|
||||
|
||||
#
|
||||
# This cmake builds two targets (aka apps), mirall and owncloud. For the owncloud
|
||||
# target, OWNCLOUD_CLIENT needs to be a compile flag. It is set in src/CMakeLists.txt
|
||||
# but if that fails because cmake is too old, uncomment this here if you want to build
|
||||
# owncloud.
|
||||
# add_definitions(-DOWNCLOUD_CLIENT)
|
||||
add_definitions(-DUNICODE)
|
||||
add_definitions(-D_UNICODE)
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ If you have questions about how to use the ownCloud Desktop Client, please
|
||||
direct these to the [mailing list][mailinglist] or our [forum][forum].
|
||||
We are also available on [IRC][irc].
|
||||
|
||||
### Guidelines
|
||||
* Report the issue using our [template][template], it includes all the
|
||||
### Bug Reporting Guidelines
|
||||
* Important: Report the issue using our [template][template], it includes all the
|
||||
informations we need to track down the issue.
|
||||
* This repository is *only* for issues within the ownCloud desktop client.
|
||||
Issues in other compontents should be reported in their own repositores:
|
||||
|
||||
26
ChangeLog
26
ChangeLog
@@ -1,11 +1,28 @@
|
||||
ChangeLog
|
||||
=========
|
||||
version 1.2.3 (release 2013-04-02 ), csync 0.70.5 required
|
||||
|
||||
version 1.2.5 (release 2013-04-23 ), csync 0.70.7 required
|
||||
* [Fixes] NSIS installer fixes
|
||||
* [Fixes] Fix crash race by making certificateChain() thread safe
|
||||
* [Fixes] Build with older CMake versions (CentOS/RHEL 6)
|
||||
* [Fixes] Wording in GUI
|
||||
* [Fixes] Silently ignore "installed = true" status.php
|
||||
* Set log verbosity before calling csync_init.
|
||||
* GUI feedback for the statistics copy action
|
||||
* Safer approach for detecting duplicate sync runs
|
||||
|
||||
version 1.2.4 (release 2013-04-11 ), csync 0.70.6 required
|
||||
* [Fixes] Clarify string in folder wizard
|
||||
* [Fixes] Fixed some valgrind warnings
|
||||
* [Fixes] Ensure that only one sync thread can ever run
|
||||
* [Fixes] Fix default config storage path
|
||||
* [Fixes] Skip folders with no absolute path
|
||||
* [Fixes] Allow setting the configuration directory on command line
|
||||
|
||||
version 1.2.3 (release 2013-04-02 ), csync 0.70.5 required
|
||||
* [Fixes] Unbreak self-signed certificate handling
|
||||
|
||||
version 1.2.2 (release 2013-04-02 ), csync 0.70.5 required
|
||||
|
||||
* [Fixes] Do not crash when local file tree contains symlinks
|
||||
* [Fixes] Correctly handle locked files on Windows
|
||||
* [Fixes] Display errors in all members of the SSL chain
|
||||
@@ -180,8 +197,3 @@ version 1.0.1 (release 2012-04-18), csync 0.50.5 required
|
||||
* [Platform] MacOSX Bundle creation added
|
||||
* [Platform] Enabled ranslations on Windows.
|
||||
|
||||
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
version 1.2.1 (release 2013-02-26 ), csync 0.70.4 required
|
||||
|
||||
61
README.md
61
README.md
@@ -2,50 +2,12 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
Mirall synchronizes your folders with another computer.
|
||||
|
||||
The ultimate goals of Mirall are:
|
||||
|
||||
* Network location aware: should not try to sync against your NAS if you are
|
||||
not in the home network
|
||||
* It is a zero-interaction tool. So forget about resolving conflicts.
|
||||
* It should work silently and realiably.
|
||||
|
||||
Mirall is in early stages of development, and may still eat your
|
||||
files or hang your computer.
|
||||
|
||||
* Network location awareness not implemented yet
|
||||
* Current version supports local and remote (sftp and smb) folders.
|
||||
* It is powered by csync (http://www.csync.org), however
|
||||
the user does not know and other tools will be incorporated to provide other
|
||||
functionality.
|
||||
|
||||
## Current issues
|
||||
|
||||
* No sane way to backup conflicting versions yet, this should be solved
|
||||
in a near csync release (--conflictcopy, available in Jann's branch).
|
||||
Right now the newest copy wins.
|
||||
* You can't remove folder configurations
|
||||
Workaround: delete ~/.local/share/data/Mirall/folders/$alias and restart
|
||||
* Some tasks block the GUI (initial setup of watchers)
|
||||
* May be some concurrency issues
|
||||
|
||||
## Roadmap
|
||||
|
||||
* Improve robustness to minimize user interaction
|
||||
* Improve feedback and sync results
|
||||
* Add support for other folder types: tarsnap, duplicity, git (SparkleShare)
|
||||
|
||||
## Requirements
|
||||
|
||||
* Linux (currently it uses inotify to detect file changes)
|
||||
* unison installed in the local and remote machine
|
||||
(you should not care if you got Mirall with your favorite
|
||||
distribution)
|
||||
Mirall is a tool to synchronize files from ownCloud Server with your computer.
|
||||
It uses OCSync as its syncing backend.
|
||||
|
||||
## Download
|
||||
|
||||
### openSUSE
|
||||
### Binary packages
|
||||
|
||||
* Refer to the download page http://owncloud.org/sync-clients/
|
||||
|
||||
@@ -55,23 +17,12 @@ files or hang your computer.
|
||||
|
||||
## Building the source code
|
||||
|
||||
You need Qt 4.7 and cmake:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
|
||||
To generate a tarball:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make package_source
|
||||
Please refer to [Building the Client](http://doc.owncloud.org/desktop/1.2/building.html)
|
||||
in the ownCloud client manual.
|
||||
|
||||
## Authors
|
||||
|
||||
* Duncan Mac-Vicar P. <duncan@kde.org>
|
||||
* Duncan Mac-Vicar P. <duncan@kde.org> (original Mirall author)
|
||||
* Klaas Freitag <freitag@owncloud.com>
|
||||
* Daniel Molkentin <danimo@owncloud.com>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
set( VERSION_MAJOR 1 )
|
||||
set( VERSION_MINOR 2 )
|
||||
set( VERSION_PATCH 3 )
|
||||
set( VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_SUFFIX})
|
||||
set( VERSION_MINOR 3 )
|
||||
set( VERSION_PATCH 0 )
|
||||
set( VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_SUFFIX}beta3)
|
||||
set( SOVERSION 0 )
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ FunctionEnd
|
||||
# INSTALLER SECTIONS #
|
||||
# #
|
||||
##############################################################################
|
||||
Section "${APPLICATION_NAME}" SEC_OWNCLOUD
|
||||
Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
SectionIn 1 2 3 RO
|
||||
SetDetailsPrint listonly
|
||||
|
||||
@@ -374,7 +374,7 @@ Section "${APPLICATION_NAME}" SEC_OWNCLOUD
|
||||
|
||||
;License & release notes.
|
||||
File "@CPACK_RESOURCE_FILE_LICENSE@"
|
||||
File /oname=NOTES.txt ${NSI_PATH}\RELEASE_NOTES.txt
|
||||
;File /oname=NOTES.txt ${NSI_PATH}\RELEASE_NOTES.txt
|
||||
|
||||
;QT stuff:
|
||||
File "${QT_DLL_PATH}\QtCore4.dll"
|
||||
@@ -425,9 +425,9 @@ SectionGroup "Shortcuts"
|
||||
SetShellVarContext all
|
||||
RMDir /r "$SMPROGRAMS\${APPLICATION_NAME}"
|
||||
CreateDirectory "$SMPROGRAMS\${APPLICATION_NAME}"
|
||||
CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\LICENSE.lnk" "$INSTDIR\LICENSE.txt"
|
||||
;CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\LICENSE.lnk" "$INSTDIR\LICENSE.txt"
|
||||
CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\${APPLICATION_NAME}.lnk" "$INSTDIR\${APPLICATION_EXECUTABLE}"
|
||||
CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\Release notes.lnk" "$INSTDIR\NOTES.txt"
|
||||
;CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\Release notes.lnk" "$INSTDIR\NOTES.txt"
|
||||
CreateShortCut "$SMPROGRAMS\${APPLICATION_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe"
|
||||
SetShellVarContext current
|
||||
${MementoSectionEnd}
|
||||
@@ -462,7 +462,7 @@ SectionGroupEnd
|
||||
DetailPrint "Creating Windows Start Entry"
|
||||
SetDetailsPrint listonly
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Run" \
|
||||
"${APPLICATION_NAME}" "$INSTDIR\${APPLICATION_EXECUTABLE}"
|
||||
"${APPLICATION_NAME}" "$INSTDIR\${APPLICATION_EXECUTABLE}"
|
||||
${MementoSectionEnd}
|
||||
!endif
|
||||
|
||||
@@ -475,7 +475,7 @@ ${MementoSectionDone}
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_START_MENU} "${APPLICATION_NAME} program group."
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} "Desktop shortcut for ${APPLICATION_NAME}."
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_QUICK_LAUNCH} "Quick Launch shortcut for ${APPLICATION_NAME}."
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_QUICK_AUTOSTART} "Register ${APPLICATION_NAME} to run on Windows startup."
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_AUTOSTART} "Register ${APPLICATION_NAME} to run on Windows startup."
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||
|
||||
Section -post
|
||||
|
||||
@@ -20,20 +20,24 @@ Linux
|
||||
Mac OS X
|
||||
--------
|
||||
|
||||
Follow the `generic build instructions`_.
|
||||
Next to XCode (and the command line tools!), you will need some
|
||||
extra dependencies.
|
||||
|
||||
You can install the missing dependencies via MacPorts_ or Homebrew_.
|
||||
You can install these dependencies via MacPorts_ or Homebrew_.
|
||||
This is only needed on the build machine, since non-standard libs
|
||||
will be deployed in the app bundle.
|
||||
|
||||
The only exception to this rule is libiniparser_, which lacks a decent
|
||||
build system. If you are using Homebrew_, you can just add it::
|
||||
The tested and preferred way is to use HomeBrew_. The ownCloud team has
|
||||
its own repository which contains non-standard recipes. Add it with::
|
||||
|
||||
brew tap dschmidt/owncloud
|
||||
brew install iniparser
|
||||
brew tap owncloud/owncloud
|
||||
|
||||
Otherwise, you need to copy the header and lib files to
|
||||
``/usr/local/include`` and ``/usr/local/lib`` respectively.
|
||||
Next, install the missing dependencies::
|
||||
|
||||
brew install $(brew deps ocsync)
|
||||
brew install $(brew deps mirall)
|
||||
|
||||
To build mirall and cmake, follow the `generic build instructions`_.
|
||||
|
||||
.. note::
|
||||
You should not call ``make install`` at any time, since the product of the
|
||||
@@ -51,18 +55,22 @@ if you do not have it installed already.
|
||||
In order to cross-compile, the following repositories need to be added
|
||||
via YaST or ``zypper ar`` (adjust when using openSUSE 12.2)::
|
||||
|
||||
http://download.opensuse.org/repositories/isv:/ownCloud:/devel:/mingw:/win32/openSUSE_12.1/
|
||||
http://download.opensuse.org/repositories/windows:/mingw/openSUSE_12.1/
|
||||
http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_12.1/
|
||||
zypper ar http://download.opensuse.org/repositories/isv:/ownCloud:/devel:/mingw:/win32/openSUSE_12.1/isv:ownCloud:devel:mingw:win32.repo
|
||||
zypper ar http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_12.1/windows:mingw:win32.repo
|
||||
zypper ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_12.1/windows:mingw.repo
|
||||
|
||||
Next, install the cross-compiler packages and the cross-compiled dependencies::
|
||||
|
||||
zypper si -d mingw32-csync
|
||||
zypper install kdewin-png2ico mingw32-libqt4 mingw32-libqt4-devel \
|
||||
mingw32-libgcrypt mingw32-libgnutls mingw32-libneon \
|
||||
mingw32-libbeecrypt mingw32-libopenssl mingw32-openssl \
|
||||
mingw32-libpng-devel mingw32-libsqlite mingw32-qtkeychain \
|
||||
mingw32-qtkeychain-devel mingw32-iniparser mingw32-dlfcn
|
||||
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||
mingw32-headers mingw32-runtime site-config mingw32-iniparser-devel \
|
||||
mingw32-libsqlite-devel mingw32-dlfcn-devel mingw32-libssh2-devel \
|
||||
kdewin-png2ico mingw32-libqt4 mingw32-libqt4-devel mingw32-libgcrypt \
|
||||
mingw32-libgnutls mingw32-libneon mingw32-libneon-devel mingw32-libbeecrypt \
|
||||
mingw32-libopenssl mingw32-openssl mingw32-libpng-devel mingw32-libsqlite \
|
||||
mingw32-qtkeychain mingw32-qtkeychain-devel mingw32-iniparser mingw32-dlfcn \
|
||||
mingw32-libintl-devel mingw32-libneon-devel mingw32-libopenssl-devel \
|
||||
mingw32-libproxy-devel mingw32-libxml2-devel mingw32-zlib-devel
|
||||
|
||||
For the installer, the NSIS installer package is also required::
|
||||
|
||||
@@ -76,18 +84,18 @@ For the installer, the NSIS installer package is also required::
|
||||
You will also need to manually download and install the following files with
|
||||
``rpm -ivh <package>`` (They will also work with OpenSUSE 12.2)::
|
||||
|
||||
http://pmbs.links2linux.org/download/mingw:/32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-processes-0-1.1.x86_64.rpm
|
||||
http://pmbs.links2linux.org/download/mingw:/32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-uac-0-3.1.x86_64.rpm
|
||||
rpm -ihv http://pmbs.links2linux.org/download/mingw:/32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-processes-0-1.1.x86_64.rpm
|
||||
rpm -ihv http://pmbs.links2linux.org/download/mingw:/32/openSUSE_12.1/x86_64/mingw32-cross-nsis-plugin-uac-0-3.1.x86_64.rpm
|
||||
|
||||
Now, follow the `generic build instructions`_, but pay attention to
|
||||
the following differences:
|
||||
|
||||
1. For building ``libocsync``, you need to use ``mingw32-cmake`` instead
|
||||
of cmake.
|
||||
2. Also, you need to specify *absolute pathes* for ``CSYNC_LIBRARY_PATH``
|
||||
and ``CSYNC_LIBRARY_PATH`` when running ``cmake`` on mirall.
|
||||
3. for building ``mirall``, you need to use ``cmake`` again, but make sure
|
||||
2. for building ``mirall``, you need to use ``cmake`` again, but make sure
|
||||
to append the following parameter::
|
||||
3. Also, you need to specify *absolute pathes* for ``CSYNC_LIBRARY_PATH``
|
||||
and ``CSYNC_LIBRARY_PATH`` when running ``cmake`` on mirall.
|
||||
|
||||
``-DCMAKE_TOOLCHAIN_FILE=../mirall/admin/win/Toolchain-mingw32-openSUSE.cmake``
|
||||
|
||||
@@ -147,7 +155,7 @@ directories. If this succeeds, call ``make``. The owncloud binary should appear
|
||||
in the ``bin`` directory. You can also run ``make install`` to install the client to
|
||||
``/usr/local/bin``.
|
||||
|
||||
To build in installer (requires the mingw32-cross-nsis packages)::
|
||||
To build an installer/app bundle (requires the mingw32-cross-nsis packages on Windows)::
|
||||
|
||||
make package
|
||||
|
||||
@@ -161,4 +169,3 @@ Known cmake parameters:
|
||||
.. _Git: http://git-scm.com
|
||||
.. _MacPorts: http://www.macports.org
|
||||
.. _Homebrew: http://mxcl.github.com/homebrew/
|
||||
.. _libiniparser: http://ndevilla.free.fr/iniparser/
|
||||
|
||||
@@ -19,7 +19,7 @@ Mac OS X
|
||||
Installing the ownCloud client on your Mac follows the normal app installation
|
||||
pattern:
|
||||
|
||||
1. Download the installation file Click ownCloud-1.1.1.dmg, a window with the
|
||||
1. Download the installation file Click ownCloud-x.y.z.dmg, a window with the
|
||||
2. ownCloud icon opens In that window, drag the ownCloud application into the
|
||||
3. ‘Applications’ folder on the right hand side From ‘Applications’, choose
|
||||
ownCloud
|
||||
|
||||
@@ -3,8 +3,8 @@ ownCloud Client supports the following command line switches:
|
||||
``--logwindow``
|
||||
open a window to show log output at startup.
|
||||
|
||||
``--logfile`` `<filename>`
|
||||
write log output to file.
|
||||
``--logdir`` `<dir>`
|
||||
write log output to dir, one for each sync run.
|
||||
|
||||
``--flushlog``
|
||||
flush the log file after every write.
|
||||
|
||||
@@ -9,7 +9,7 @@ SYNOPSIS
|
||||
|
||||
DESCRIPTION
|
||||
===========
|
||||
owncloud is a file synchronisation desktop utility it is based on mirall.
|
||||
ownCloud is a file synchronisation desktop utility it is based on mirall.
|
||||
It synchronizes files on your local machine with an ownCloud Server. If you
|
||||
make a change to the files on one computer, it will flow across the others
|
||||
using this desktop sync clients.
|
||||
|
||||
@@ -4,9 +4,12 @@ Doc Build Convenience Scripts
|
||||
* ``htmlhelp.sh``: A script to install Microsoft HTML Workshop on Linux or Mac OS using Wine, along with some dependencies.
|
||||
* ``htmlhelp.reg``: Registry file to override some DLLs with their native version and set the right Windows version.
|
||||
|
||||
Those files have been taken from the HTML Help Project (http://code.google.com/p/htmlhelp/wiki/HHW4Wine).
|
||||
Those files have been taken from the `HTML Help Project`_.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
The HTML Help Project has licensed its software under LGPLv3 terms.
|
||||
The HTML Help Project has licensed_ its software under LGPLv2.1 terms
|
||||
|
||||
.. _HTML Help Project: http://code.google.com/p/htmlhelp/wiki/HHW4Wine
|
||||
.. _licensed: https://code.google.com/p/htmlhelp/source/browse/trunk/pyhtmlhelp/COPYING
|
||||
|
||||
@@ -1,42 +1,86 @@
|
||||
Troubleshooting
|
||||
===============
|
||||
|
||||
:All of my desktop clients fail to connect to ownCloud:
|
||||
If the client fails to start syncing it basically can have two
|
||||
basic reasons: Either the server setup has a problem or the client
|
||||
has a bug. When reporting bugs, it is crucial to find out what part
|
||||
of the system causes the problem.
|
||||
|
||||
Here are a couple of useful steps to isolate the problem.
|
||||
|
||||
:A general ownCloud Server test:
|
||||
A very first check is to verify that you can log on to ownClouds web
|
||||
application. Assuming your ownCloud instance is installed at
|
||||
``http://yourserver.com/owncloud``, type
|
||||
``http://yourserver.com/owncloud/`` into your browsers address bar.
|
||||
|
||||
If you are not prompted to enter your user name and password, or if you
|
||||
see a red warning box on the page, your server setup is not correct or needs
|
||||
fixes. Please verify that your server installation is working correctly.
|
||||
|
||||
:All desktop clients fail to connect to ownCloud:
|
||||
The ownCloud syncing use the built in WebDAV server of ownCloud.
|
||||
Verify that you can log on to ownClouds WebDAV server. Assuming your ownCloud
|
||||
instance is installed at ``http://yourserver.com/owncloud``, type
|
||||
``http://yourserver.com/owncloud/remote.php/webdav`` into your browsers
|
||||
address bar.
|
||||
|
||||
If you are not prompted to enter your user name and password, please verify
|
||||
that your server installation is working correctly.
|
||||
|
||||
If you are prompted, but the authentication fails even though the credentials
|
||||
your provided are correct, please ensure that your authentication backend
|
||||
is configured properly.
|
||||
|
||||
:Use a WebDAV command line tool to test:
|
||||
A more sophisticated test is to use a WebDAV command line client and log
|
||||
into the ownCloud WebDAV server, such as a little app called cadaver, available
|
||||
on Linux. I can be used to further verify that the WebDAV server is running
|
||||
on Linux. It can be used to further verify that the WebDAV server is running
|
||||
properly, for example by performing PROPFIND calls:
|
||||
|
||||
``propget .`` called within cadaver will return some properties of the current
|
||||
directory and thus be a successful WebDAV connect.
|
||||
|
||||
:The desktop client fails for an unknown reason:
|
||||
Start the client with ``--logwindow``. You can also open a log window for an
|
||||
already running session, by simply starting the client again with this
|
||||
parameter. Syntax:
|
||||
Logfiles
|
||||
========
|
||||
|
||||
Doing effective debugging requires to provide as much as relevant logs as
|
||||
possible. The log output can help you with tracking down problem, and if you
|
||||
report a bug, you're advised to include the output.
|
||||
|
||||
:Client Logfile:
|
||||
Start the client with ``--logwindow``. That opens a window providing a view
|
||||
on the current log. It provides a Save button to let you save the log to a
|
||||
file.
|
||||
|
||||
You can also open a log window for an already running session, by simply
|
||||
starting the client again with this parameter. Syntax:
|
||||
|
||||
* Windows: ``C:\Program Files (x86)\ownCloud\owncloud.exe --logwindow``
|
||||
* Mac OS X: ``/Applications/owncloud.app/Contents/MacOS/owncloud --logwindow``
|
||||
* Linux: ``owncloud --logwindow``
|
||||
|
||||
The log output can help you with tracking down problem, and if you report
|
||||
a bug, it's useful to include the output.
|
||||
It is also possible to directly log to a directory, which is an useful option
|
||||
in case the problem only happens ocassionally. In that case it is better to
|
||||
create a huge amount of data, as the log window has a limited buffer.
|
||||
|
||||
Also, please take a look at your webservers error log file to check if there
|
||||
are problems. For apache on linux, the error logs usually can be found at
|
||||
``/var/log/apache2``. A file called ``error_log`` shows errors like PHP code
|
||||
problems. A file called ``access_log`` usually records all requests handled
|
||||
by the server. More information about the apache logging can be found at
|
||||
``http://httpd.apache.org/docs/current/logs.html``.
|
||||
To write logs to disk, start the client with ``--logdir <dir>``, where ``<dir>``
|
||||
is an existing directory. Each sync run will create a new file.
|
||||
|
||||
:ownCloud server Logfile:
|
||||
The ownCloud server maintains an ownCloud specific logfile as well. It can and
|
||||
must be enabled through the ownCloud Administration page. There you can adjust
|
||||
the loglevel. It is advisable to set it to a verbose level like ``Debug`` or ``Info``.
|
||||
|
||||
The logfile can be viewed either in the web interface or can be found in the
|
||||
filesystem in the ownCloud server data dir.
|
||||
|
||||
:Webserver Logfiles:
|
||||
Also, please take a look at your webservers error log file to check if there
|
||||
are problems. For apache on linux, the error logs usually can be found at
|
||||
``/var/log/apache2``. A file called ``error_log`` shows errors like PHP code
|
||||
problems. A file called ``access_log`` usually records all requests handled
|
||||
by the server. Especially the access_log is a very good debugging tool as the
|
||||
log line contains a lot of information of every request and it's result.
|
||||
|
||||
More information about the apache logging can be found at
|
||||
``http://httpd.apache.org/docs/current/logs.html``.
|
||||
|
||||
|
||||
|
||||
@@ -7,10 +7,9 @@
|
||||
<file>resources/folder-remote.png</file>
|
||||
<file>resources/folder-sync.png</file>
|
||||
<file>resources/folder-grey.png</file>
|
||||
<file>resources/mirall-32.png</file>
|
||||
<file>resources/mirall-128.png</file>
|
||||
<file>resources/mirall-48.png</file>
|
||||
<file>resources/task-ongoing.png</file>
|
||||
<file>resources/view-refresh.png</file>
|
||||
<file>resources/warning-16.png</file>
|
||||
<file>resources/owncloud_logo_blue.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 698 B |
Binary file not shown.
|
Before Width: | Height: | Size: 991 B |
BIN
resources/owncloud_logo_blue.png
Normal file
BIN
resources/owncloud_logo_blue.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.6 KiB |
BIN
resources/warning-16.png
Normal file
BIN
resources/warning-16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 596 B |
22
src/3rdparty/LGPL_EXCEPTION.txt
vendored
Normal file
22
src/3rdparty/LGPL_EXCEPTION.txt
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
Digia Qt LGPL Exception version 1.1
|
||||
|
||||
As an additional permission to the GNU Lesser General Public License version
|
||||
2.1, the object code form of a "work that uses the Library" may incorporate
|
||||
material from a header file that is part of the Library. You may distribute
|
||||
such object code under terms of your choice, provided that:
|
||||
(i) the header files of the Library have not been modified; and
|
||||
(ii) the incorporated material is limited to numerical parameters, data
|
||||
structure layouts, accessors, macros, inline functions and
|
||||
templates; and
|
||||
(iii) you comply with the terms of Section 6 of the GNU Lesser General
|
||||
Public License version 2.1.
|
||||
|
||||
Moreover, you may apply this exception to a modified version of the Library,
|
||||
provided that such modification does not involve copying material from the
|
||||
Library into the modified Library's header files unless such material is
|
||||
limited to (i) numerical parameters; (ii) data structure layouts;
|
||||
(iii) accessors; and (iv) small macros, templates and inline functions of
|
||||
five lines or less in length.
|
||||
|
||||
Furthermore, you are not required to apply this additional permission to a
|
||||
modified version of the Library.
|
||||
165
src/3rdparty/QProgressIndicator/LICENSE
vendored
Normal file
165
src/3rdparty/QProgressIndicator/LICENSE
vendored
Normal file
@@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
137
src/3rdparty/QProgressIndicator/QProgressIndicator.cpp
vendored
Normal file
137
src/3rdparty/QProgressIndicator/QProgressIndicator.cpp
vendored
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
*
|
||||
* This file is part of QProgressIndicator,
|
||||
* an open-source recent files menu widget
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Morgan Leborgne
|
||||
*
|
||||
* This program 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with QRecentFilesMenu. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#include "QProgressIndicator.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
QProgressIndicator::QProgressIndicator(QWidget* parent)
|
||||
: QWidget(parent),
|
||||
m_angle(0),
|
||||
m_timerId(-1),
|
||||
m_delay(40),
|
||||
m_displayedWhenStopped(false),
|
||||
m_color(Qt::black)
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
bool QProgressIndicator::isAnimated () const
|
||||
{
|
||||
return (m_timerId != -1);
|
||||
}
|
||||
|
||||
void QProgressIndicator::setDisplayedWhenStopped(bool state)
|
||||
{
|
||||
m_displayedWhenStopped = state;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
bool QProgressIndicator::isDisplayedWhenStopped() const
|
||||
{
|
||||
return m_displayedWhenStopped;
|
||||
}
|
||||
|
||||
void QProgressIndicator::startAnimation()
|
||||
{
|
||||
m_angle = 0;
|
||||
|
||||
if (m_timerId == -1)
|
||||
m_timerId = startTimer(m_delay);
|
||||
}
|
||||
|
||||
void QProgressIndicator::stopAnimation()
|
||||
{
|
||||
if (m_timerId != -1)
|
||||
killTimer(m_timerId);
|
||||
|
||||
m_timerId = -1;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void QProgressIndicator::setAnimationDelay(int delay)
|
||||
{
|
||||
if (m_timerId != -1)
|
||||
killTimer(m_timerId);
|
||||
|
||||
m_delay = delay;
|
||||
|
||||
if (m_timerId != -1)
|
||||
m_timerId = startTimer(m_delay);
|
||||
}
|
||||
|
||||
void QProgressIndicator::setColor(const QColor & color)
|
||||
{
|
||||
m_color = color;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
QSize QProgressIndicator::sizeHint() const
|
||||
{
|
||||
return QSize(20,20);
|
||||
}
|
||||
|
||||
int QProgressIndicator::heightForWidth(int w) const
|
||||
{
|
||||
return w;
|
||||
}
|
||||
|
||||
void QProgressIndicator::timerEvent(QTimerEvent * /*event*/)
|
||||
{
|
||||
m_angle = (m_angle+30)%360;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void QProgressIndicator::paintEvent(QPaintEvent * /*event*/)
|
||||
{
|
||||
if (!m_displayedWhenStopped && !isAnimated())
|
||||
return;
|
||||
|
||||
int width = qMin(this->width(), this->height());
|
||||
|
||||
QPainter p(this);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
int outerRadius = (width-1)*0.5;
|
||||
int innerRadius = (width-1)*0.5*0.38;
|
||||
|
||||
int capsuleHeight = outerRadius - innerRadius;
|
||||
int capsuleWidth = (width > 32 ) ? capsuleHeight *.23 : capsuleHeight *.35;
|
||||
int capsuleRadius = capsuleWidth/2;
|
||||
|
||||
for (int i=0; i<12; i++)
|
||||
{
|
||||
QColor color = m_color;
|
||||
color.setAlphaF(1.0f - (i/12.0f));
|
||||
p.setPen(Qt::NoPen);
|
||||
p.setBrush(color);
|
||||
p.save();
|
||||
p.translate(rect().center());
|
||||
p.rotate(m_angle - i*30.0f);
|
||||
p.drawRoundedRect(-capsuleWidth*0.5, -(innerRadius+capsuleHeight), capsuleWidth, capsuleHeight, capsuleRadius, capsuleRadius);
|
||||
p.restore();
|
||||
}
|
||||
}
|
||||
108
src/3rdparty/QProgressIndicator/QProgressIndicator.h
vendored
Normal file
108
src/3rdparty/QProgressIndicator/QProgressIndicator.h
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
*
|
||||
* This file is part of QProgressIndicator,
|
||||
* an open-source recent files menu widget
|
||||
*
|
||||
* Copyright (C) 2009 - 2010 Morgan Leborgne
|
||||
*
|
||||
* This program 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with QRecentFilesMenu. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#ifndef QPROGRESSINDICATOR_H
|
||||
#define QPROGRESSINDICATOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QColor>
|
||||
|
||||
/*!
|
||||
\class QProgressIndicator
|
||||
\brief The QProgressIndicator class lets an application display a progress indicator to show that a lengthy task is under way.
|
||||
|
||||
Progress indicators are indeterminate and do nothing more than spin to show that the application is busy.
|
||||
\sa QProgressBar
|
||||
*/
|
||||
class QProgressIndicator : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int delay READ animationDelay WRITE setAnimationDelay)
|
||||
Q_PROPERTY(bool displayedWhenStopped READ isDisplayedWhenStopped WRITE setDisplayedWhenStopped)
|
||||
Q_PROPERTY(QColor color READ color WRITE setColor)
|
||||
public:
|
||||
QProgressIndicator(QWidget* parent = 0);
|
||||
|
||||
/*! Returns the delay between animation steps.
|
||||
\return The number of milliseconds between animation steps. By default, the animation delay is set to 40 milliseconds.
|
||||
\sa setAnimationDelay
|
||||
*/
|
||||
int animationDelay() const { return m_delay; }
|
||||
|
||||
/*! Returns a Boolean value indicating whether the component is currently animated.
|
||||
\return Animation state.
|
||||
\sa startAnimation stopAnimation
|
||||
*/
|
||||
bool isAnimated () const;
|
||||
|
||||
/*! Returns a Boolean value indicating whether the receiver shows itself even when it is not animating.
|
||||
\return Return true if the progress indicator shows itself even when it is not animating. By default, it returns false.
|
||||
\sa setDisplayedWhenStopped
|
||||
*/
|
||||
bool isDisplayedWhenStopped() const;
|
||||
|
||||
/*! Returns the color of the component.
|
||||
\sa setColor
|
||||
*/
|
||||
const QColor & color() const { return m_color; }
|
||||
|
||||
virtual QSize sizeHint() const;
|
||||
int heightForWidth(int w) const;
|
||||
public slots:
|
||||
/*! Starts the spin animation.
|
||||
\sa stopAnimation isAnimated
|
||||
*/
|
||||
void startAnimation();
|
||||
|
||||
/*! Stops the spin animation.
|
||||
\sa startAnimation isAnimated
|
||||
*/
|
||||
void stopAnimation();
|
||||
|
||||
/*! Sets the delay between animation steps.
|
||||
Setting the \a delay to a value larger than 40 slows the animation, while setting the \a delay to a smaller value speeds it up.
|
||||
\param delay The delay, in milliseconds.
|
||||
\sa animationDelay
|
||||
*/
|
||||
void setAnimationDelay(int delay);
|
||||
|
||||
/*! Sets whether the component hides itself when it is not animating.
|
||||
\param state The animation state. Set false to hide the progress indicator when it is not animating; otherwise true.
|
||||
\sa isDisplayedWhenStopped
|
||||
*/
|
||||
void setDisplayedWhenStopped(bool state);
|
||||
|
||||
/*! Sets the color of the components to the given color.
|
||||
\sa color
|
||||
*/
|
||||
void setColor(const QColor & color);
|
||||
protected:
|
||||
virtual void timerEvent(QTimerEvent * event);
|
||||
virtual void paintEvent(QPaintEvent * event);
|
||||
private:
|
||||
int m_angle;
|
||||
int m_timerId;
|
||||
int m_delay;
|
||||
bool m_displayedWhenStopped;
|
||||
QColor m_color;
|
||||
};
|
||||
|
||||
#endif // QPROGRESSINDICATOR_H
|
||||
14
src/3rdparty/QProgressIndicator/README.md
vendored
Normal file
14
src/3rdparty/QProgressIndicator/README.md
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
## Description
|
||||
|
||||
The QProgressIndicator class lets an application display a progress indicator to show that a lengthy task is under way.
|
||||
Will work at any size.
|
||||
|
||||
<img src="https://raw.github.com/mojocorp/QProgressIndicator/master/screen-capture-1.png" >
|
||||
<img src="https://raw.github.com/mojocorp/QProgressIndicator/master/screen-capture-2.png" >
|
||||
|
||||
## Dependency
|
||||
Qt 4.4.x.
|
||||
|
||||
## License
|
||||
|
||||
LGPL
|
||||
353
src/3rdparty/fancylineedit/fancylineedit.cpp
vendored
Normal file
353
src/3rdparty/fancylineedit/fancylineedit.cpp
vendored
Normal file
@@ -0,0 +1,353 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "fancylineedit.h"
|
||||
|
||||
#include <QEvent>
|
||||
#include <QDebug>
|
||||
#include <QString>
|
||||
#include <QPropertyAnimation>
|
||||
#include <QApplication>
|
||||
#include <QMenu>
|
||||
#include <QMouseEvent>
|
||||
#include <QLabel>
|
||||
#include <QAbstractButton>
|
||||
#include <QPainter>
|
||||
#include <QStyle>
|
||||
#include <QPaintEvent>
|
||||
#include <QDesktopWidget>
|
||||
|
||||
/*! Opens a menu at the specified widget position.
|
||||
* This functions computes the position where to show the menu, and opens it with
|
||||
* QMenu::exec().
|
||||
* \param menu The menu to open
|
||||
* \param widget The widget next to which to open the menu
|
||||
*/
|
||||
static void execMenuAtWidget(QMenu *menu, QWidget *widget)
|
||||
{
|
||||
QPoint p;
|
||||
QRect screen = qApp->desktop()->availableGeometry(widget);
|
||||
QSize sh = menu->sizeHint();
|
||||
QRect rect = widget->rect();
|
||||
if (widget->isRightToLeft()) {
|
||||
if (widget->mapToGlobal(QPoint(0, rect.bottom())).y() + sh.height() <= screen.height())
|
||||
p = widget->mapToGlobal(rect.bottomRight());
|
||||
else
|
||||
p = widget->mapToGlobal(rect.topRight() - QPoint(0, sh.height()));
|
||||
p.rx() -= sh.width();
|
||||
} else {
|
||||
if (widget->mapToGlobal(QPoint(0, rect.bottom())).y() + sh.height() <= screen.height())
|
||||
p = widget->mapToGlobal(rect.bottomLeft());
|
||||
else
|
||||
p = widget->mapToGlobal(rect.topLeft() - QPoint(0, sh.height()));
|
||||
}
|
||||
p.rx() = qMax(screen.left(), qMin(p.x(), screen.right() - sh.width()));
|
||||
p.ry() += 1;
|
||||
|
||||
menu->exec(p);
|
||||
}
|
||||
|
||||
/*!
|
||||
\class Utils::FancyLineEdit
|
||||
|
||||
\brief A line edit with an embedded pixmap on one side that is connected to
|
||||
a menu.
|
||||
|
||||
Additionally, it can display a grayed hintText (like "Type Here to")
|
||||
when not focused and empty. When connecting to the changed signals and
|
||||
querying text, one has to be aware that the text is set to that hint
|
||||
text if isShowingHintText() returns true (that is, does not contain
|
||||
valid user input).
|
||||
*/
|
||||
|
||||
enum { margin = 6 };
|
||||
|
||||
#define ICONBUTTON_HEIGHT 18
|
||||
#define FADE_TIME 160
|
||||
|
||||
namespace Utils {
|
||||
|
||||
// --------- FancyLineEditPrivate
|
||||
class FancyLineEditPrivate : public QObject
|
||||
{
|
||||
public:
|
||||
explicit FancyLineEditPrivate(FancyLineEdit *parent);
|
||||
|
||||
virtual bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
FancyLineEdit *m_lineEdit;
|
||||
QPixmap m_pixmap[2];
|
||||
QMenu *m_menu[2];
|
||||
bool m_menuTabFocusTrigger[2];
|
||||
IconButton *m_iconbutton[2];
|
||||
bool m_iconEnabled[2];
|
||||
};
|
||||
|
||||
|
||||
FancyLineEditPrivate::FancyLineEditPrivate(FancyLineEdit *parent) :
|
||||
QObject(parent), m_lineEdit(parent)
|
||||
{
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
m_menu[i] = 0;
|
||||
m_menuTabFocusTrigger[i] = false;
|
||||
m_iconbutton[i] = new IconButton(parent);
|
||||
m_iconbutton[i]->installEventFilter(this);
|
||||
m_iconbutton[i]->hide();
|
||||
m_iconbutton[i]->setAutoHide(false);
|
||||
m_iconEnabled[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool FancyLineEditPrivate::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
int buttonIndex = -1;
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (obj == m_iconbutton[i]) {
|
||||
buttonIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (buttonIndex == -1)
|
||||
return QObject::eventFilter(obj, event);
|
||||
switch (event->type()) {
|
||||
case QEvent::FocusIn:
|
||||
if (m_menuTabFocusTrigger[buttonIndex] && m_menu[buttonIndex]) {
|
||||
m_lineEdit->setFocus();
|
||||
execMenuAtWidget(m_menu[buttonIndex], m_iconbutton[buttonIndex]);
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
|
||||
// --------- FancyLineEdit
|
||||
FancyLineEdit::FancyLineEdit(QWidget *parent) :
|
||||
QLineEdit(parent),
|
||||
d(new FancyLineEditPrivate(this))
|
||||
{
|
||||
ensurePolished();
|
||||
updateMargins();
|
||||
|
||||
connect(this, SIGNAL(textChanged(QString)), this, SLOT(checkButtons(QString)));
|
||||
connect(d->m_iconbutton[Left], SIGNAL(clicked()), this, SLOT(iconClicked()));
|
||||
connect(d->m_iconbutton[Right], SIGNAL(clicked()), this, SLOT(iconClicked()));
|
||||
}
|
||||
|
||||
void FancyLineEdit::checkButtons(const QString &text)
|
||||
{
|
||||
if (m_oldText.isEmpty() || text.isEmpty()) {
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
if (d->m_iconbutton[i]->hasAutoHide())
|
||||
d->m_iconbutton[i]->animateShow(!text.isEmpty());
|
||||
}
|
||||
m_oldText = text;
|
||||
}
|
||||
}
|
||||
|
||||
FancyLineEdit::~FancyLineEdit()
|
||||
{
|
||||
}
|
||||
|
||||
void FancyLineEdit::setButtonVisible(Side side, bool visible)
|
||||
{
|
||||
d->m_iconbutton[side]->setVisible(visible);
|
||||
d->m_iconEnabled[side] = visible;
|
||||
updateMargins();
|
||||
}
|
||||
|
||||
bool FancyLineEdit::isButtonVisible(Side side) const
|
||||
{
|
||||
return d->m_iconEnabled[side];
|
||||
}
|
||||
|
||||
void FancyLineEdit::iconClicked()
|
||||
{
|
||||
IconButton *button = qobject_cast<IconButton *>(sender());
|
||||
int index = -1;
|
||||
for (int i = 0; i < 2; ++i)
|
||||
if (d->m_iconbutton[i] == button)
|
||||
index = i;
|
||||
if (index == -1)
|
||||
return;
|
||||
if (d->m_menu[index]) {
|
||||
execMenuAtWidget(d->m_menu[index], button);
|
||||
} else {
|
||||
emit buttonClicked((Side)index);
|
||||
if (index == Left)
|
||||
emit leftButtonClicked();
|
||||
else if (index == Right)
|
||||
emit rightButtonClicked();
|
||||
}
|
||||
}
|
||||
|
||||
void FancyLineEdit::updateMargins()
|
||||
{
|
||||
bool leftToRight = (layoutDirection() == Qt::LeftToRight);
|
||||
Side realLeft = (leftToRight ? Left : Right);
|
||||
Side realRight = (leftToRight ? Right : Left);
|
||||
|
||||
int leftMargin = d->m_iconbutton[realLeft]->pixmap().width() + 8;
|
||||
int rightMargin = d->m_iconbutton[realRight]->pixmap().width() + 8;
|
||||
// Note KDE does not reserve space for the highlight color
|
||||
if (style()->inherits("OxygenStyle")) {
|
||||
leftMargin = qMax(24, leftMargin);
|
||||
rightMargin = qMax(24, rightMargin);
|
||||
}
|
||||
|
||||
QMargins margins((d->m_iconEnabled[realLeft] ? leftMargin : 0), 0,
|
||||
(d->m_iconEnabled[realRight] ? rightMargin : 0), 0);
|
||||
|
||||
setTextMargins(margins);
|
||||
}
|
||||
|
||||
void FancyLineEdit::updateButtonPositions()
|
||||
{
|
||||
QRect contentRect = rect();
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
Side iconpos = (Side)i;
|
||||
if (layoutDirection() == Qt::RightToLeft)
|
||||
iconpos = (iconpos == Left ? Right : Left);
|
||||
|
||||
if (iconpos == FancyLineEdit::Right) {
|
||||
const int iconoffset = textMargins().right() + 4;
|
||||
d->m_iconbutton[i]->setGeometry(contentRect.adjusted(width() - iconoffset, 0, 0, 0));
|
||||
} else {
|
||||
const int iconoffset = textMargins().left() + 4;
|
||||
d->m_iconbutton[i]->setGeometry(contentRect.adjusted(0, 0, -width() + iconoffset, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FancyLineEdit::resizeEvent(QResizeEvent *)
|
||||
{
|
||||
updateButtonPositions();
|
||||
}
|
||||
|
||||
void FancyLineEdit::setButtonPixmap(Side side, const QPixmap &buttonPixmap)
|
||||
{
|
||||
d->m_iconbutton[side]->setPixmap(buttonPixmap);
|
||||
updateMargins();
|
||||
updateButtonPositions();
|
||||
update();
|
||||
}
|
||||
|
||||
QPixmap FancyLineEdit::buttonPixmap(Side side) const
|
||||
{
|
||||
return d->m_pixmap[side];
|
||||
}
|
||||
|
||||
void FancyLineEdit::setButtonMenu(Side side, QMenu *buttonMenu)
|
||||
{
|
||||
d->m_menu[side] = buttonMenu;
|
||||
d->m_iconbutton[side]->setIconOpacity(1.0);
|
||||
}
|
||||
|
||||
QMenu *FancyLineEdit::buttonMenu(Side side) const
|
||||
{
|
||||
return d->m_menu[side];
|
||||
}
|
||||
|
||||
bool FancyLineEdit::hasMenuTabFocusTrigger(Side side) const
|
||||
{
|
||||
return d->m_menuTabFocusTrigger[side];
|
||||
}
|
||||
|
||||
void FancyLineEdit::setMenuTabFocusTrigger(Side side, bool v)
|
||||
{
|
||||
if (d->m_menuTabFocusTrigger[side] == v)
|
||||
return;
|
||||
|
||||
d->m_menuTabFocusTrigger[side] = v;
|
||||
d->m_iconbutton[side]->setFocusPolicy(v ? Qt::TabFocus : Qt::NoFocus);
|
||||
}
|
||||
|
||||
bool FancyLineEdit::hasAutoHideButton(Side side) const
|
||||
{
|
||||
return d->m_iconbutton[side]->hasAutoHide();
|
||||
}
|
||||
|
||||
void FancyLineEdit::setAutoHideButton(Side side, bool h)
|
||||
{
|
||||
d->m_iconbutton[side]->setAutoHide(h);
|
||||
if (h)
|
||||
d->m_iconbutton[side]->setIconOpacity(text().isEmpty() ? 0.0 : 1.0);
|
||||
else
|
||||
d->m_iconbutton[side]->setIconOpacity(1.0);
|
||||
}
|
||||
|
||||
void FancyLineEdit::setButtonToolTip(Side side, const QString &tip)
|
||||
{
|
||||
d->m_iconbutton[side]->setToolTip(tip);
|
||||
}
|
||||
|
||||
void FancyLineEdit::setButtonFocusPolicy(Side side, Qt::FocusPolicy policy)
|
||||
{
|
||||
d->m_iconbutton[side]->setFocusPolicy(policy);
|
||||
}
|
||||
|
||||
// IconButton - helper class to represent a clickable icon
|
||||
|
||||
IconButton::IconButton(QWidget *parent)
|
||||
: QAbstractButton(parent), m_autoHide(false)
|
||||
{
|
||||
setCursor(Qt::ArrowCursor);
|
||||
setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
void IconButton::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
QRect pixmapRect = QRect(0, 0, m_pixmap.width(), m_pixmap.height());
|
||||
pixmapRect.moveCenter(rect().center());
|
||||
|
||||
if (m_autoHide)
|
||||
painter.setOpacity(m_iconOpacity);
|
||||
|
||||
painter.drawPixmap(pixmapRect, m_pixmap);
|
||||
}
|
||||
|
||||
void IconButton::animateShow(bool visible)
|
||||
{
|
||||
if (visible) {
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(this, "iconOpacity");
|
||||
animation->setDuration(FADE_TIME);
|
||||
animation->setEndValue(1.0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
} else {
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(this, "iconOpacity");
|
||||
animation->setDuration(FADE_TIME);
|
||||
animation->setEndValue(0.0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Utils
|
||||
121
src/3rdparty/fancylineedit/fancylineedit.h
vendored
Normal file
121
src/3rdparty/fancylineedit/fancylineedit.h
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef FANCYLINEEDIT_H
|
||||
#define FANCYLINEEDIT_H
|
||||
|
||||
#include <QLineEdit>
|
||||
#include <QAbstractButton>
|
||||
|
||||
namespace Utils {
|
||||
|
||||
class FancyLineEditPrivate;
|
||||
|
||||
class IconButton: public QAbstractButton
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(float iconOpacity READ iconOpacity WRITE setIconOpacity)
|
||||
Q_PROPERTY(bool autoHide READ hasAutoHide WRITE setAutoHide)
|
||||
Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
|
||||
public:
|
||||
explicit IconButton(QWidget *parent = 0);
|
||||
void paintEvent(QPaintEvent *event);
|
||||
void setPixmap(const QPixmap &pixmap) { m_pixmap = pixmap; update(); }
|
||||
QPixmap pixmap() const { return m_pixmap; }
|
||||
float iconOpacity() { return m_iconOpacity; }
|
||||
void setIconOpacity(float value) { m_iconOpacity = value; update(); }
|
||||
void animateShow(bool visible);
|
||||
|
||||
void setAutoHide(bool hide) { m_autoHide = hide; }
|
||||
bool hasAutoHide() const { return m_autoHide; }
|
||||
|
||||
private:
|
||||
float m_iconOpacity;
|
||||
bool m_autoHide;
|
||||
QPixmap m_pixmap;
|
||||
};
|
||||
|
||||
class FancyLineEdit : public QLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(Side)
|
||||
|
||||
public:
|
||||
enum Side {Left = 0, Right = 1};
|
||||
|
||||
explicit FancyLineEdit(QWidget *parent = 0);
|
||||
~FancyLineEdit();
|
||||
|
||||
QPixmap buttonPixmap(Side side) const;
|
||||
void setButtonPixmap(Side side, const QPixmap &pixmap);
|
||||
|
||||
QMenu *buttonMenu(Side side) const;
|
||||
void setButtonMenu(Side side, QMenu *menu);
|
||||
|
||||
void setButtonVisible(Side side, bool visible);
|
||||
bool isButtonVisible(Side side) const;
|
||||
|
||||
void setButtonToolTip(Side side, const QString &);
|
||||
void setButtonFocusPolicy(Side side, Qt::FocusPolicy policy);
|
||||
|
||||
// Set whether tabbing in will trigger the menu.
|
||||
void setMenuTabFocusTrigger(Side side, bool v);
|
||||
bool hasMenuTabFocusTrigger(Side side) const;
|
||||
|
||||
// Set if icon should be hidden when text is empty
|
||||
void setAutoHideButton(Side side, bool h);
|
||||
bool hasAutoHideButton(Side side) const;
|
||||
#if QT_VERSION <= 0x040700
|
||||
void setPlaceholderText( const QString& ) { }
|
||||
#endif
|
||||
|
||||
signals:
|
||||
void buttonClicked(Utils::FancyLineEdit::Side side);
|
||||
void leftButtonClicked();
|
||||
void rightButtonClicked();
|
||||
|
||||
private slots:
|
||||
void checkButtons(const QString &);
|
||||
void iconClicked();
|
||||
|
||||
protected:
|
||||
virtual void resizeEvent(QResizeEvent *e);
|
||||
|
||||
private:
|
||||
void updateMargins();
|
||||
void updateButtonPositions();
|
||||
friend class Utils::FancyLineEditPrivate;
|
||||
|
||||
FancyLineEditPrivate *d;
|
||||
QString m_oldText;
|
||||
};
|
||||
|
||||
} // namespace Utils
|
||||
|
||||
#endif // FANCYLINEEDIT_H
|
||||
@@ -3,7 +3,7 @@ include(${QT_USE_FILE})
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
QT4_ADD_RESOURCES ( MIRALL_RC_SRC ../mirall.qrc)
|
||||
if ( DEFINED OEM_THEME_DIR)
|
||||
if ( IS_DIRECTORY ${OEM_THEME_DIR} )
|
||||
QT4_ADD_RESOURCES ( MIRALL_RC_SRC ${OEM_THEME_DIR}/theme.qrc)
|
||||
set(theme_dir ${OEM_THEME_DIR}/theme)
|
||||
else()
|
||||
@@ -14,13 +14,8 @@ endif()
|
||||
set(mirall_UI
|
||||
mirall/folderwizardsourcepage.ui
|
||||
mirall/folderwizardtargetpage.ui
|
||||
mirall/folderwizardnetworkpage.ui
|
||||
mirall/folderwizardowncloudpage.ui
|
||||
mirall/statusdialog.ui
|
||||
mirall/owncloudwizardselecttypepage.ui
|
||||
mirall/owncloudsetuppage.ui
|
||||
mirall/createanowncloudpage.ui
|
||||
mirall/owncloudftpaccesspage.ui
|
||||
mirall/owncloudsetuppage_ng.ui
|
||||
mirall/owncloudwizardresultpage.ui
|
||||
mirall/owncloudcredentialspage.ui
|
||||
mirall/sslerrordialog.ui
|
||||
@@ -30,20 +25,19 @@ mirall/fileitemdialog.ui
|
||||
|
||||
set(3rdparty_SRC
|
||||
3rdparty/qtsingleapplication/qtsingleapplication.cpp
|
||||
3rdparty/qtsingleapplication/qtlocalpeer.h
|
||||
3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
||||
3rdparty/qtsingleapplication/qtsingleapplication.h
|
||||
3rdparty/qtsingleapplication/qtsinglecoreapplication.h
|
||||
3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp
|
||||
|
||||
3rdparty/qtlockedfile/qtlockedfile.h
|
||||
3rdparty/qtlockedfile/qtlockedfile.cpp
|
||||
3rdparty/fancylineedit/fancylineedit.cpp
|
||||
3rdparty/QProgressIndicator/QProgressIndicator.cpp
|
||||
)
|
||||
|
||||
set(3rdparty_HEADER
|
||||
3rdparty/qtsingleapplication/qtlocalpeer.h
|
||||
3rdparty/qtsingleapplication/qtsingleapplication.h
|
||||
3rdparty/qtsingleapplication/qtsinglecoreapplication.h
|
||||
3rdparty/fancylineedit/fancylineedit.h
|
||||
3rdparty/QProgressIndicator/QProgressIndicator.h
|
||||
)
|
||||
qt4_wrap_cpp(3rdparty_MOC ${3rdparty_HEADER})
|
||||
|
||||
@@ -56,6 +50,8 @@ endif()
|
||||
set(3rdparty_INC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qtlockedfile
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qtsingleapplication
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/QProgressIndicator
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/fancylineedit
|
||||
)
|
||||
|
||||
qt4_wrap_ui(mirall_UI_SRCS ${mirall_UI})
|
||||
@@ -65,32 +61,29 @@ set(libsync_SRCS
|
||||
mirall/folder.cpp
|
||||
mirall/folderwatcher.cpp
|
||||
mirall/syncresult.cpp
|
||||
mirall/unisonfolder.cpp
|
||||
mirall/networklocation.cpp
|
||||
mirall/mirallconfigfile.cpp
|
||||
mirall/credentialstore.cpp
|
||||
mirall/csyncfolder.cpp
|
||||
mirall/owncloudfolder.cpp
|
||||
mirall/csyncthread.cpp
|
||||
mirall/fileutils.cpp
|
||||
mirall/theme.cpp
|
||||
mirall/owncloudtheme.cpp
|
||||
mirall/miralltheme.cpp
|
||||
mirall/owncloudinfo.cpp
|
||||
mirall/logger.cpp
|
||||
mirall/utility.cpp
|
||||
mirall/connectionvalidator.cpp
|
||||
)
|
||||
set(libsync_HEADERS
|
||||
mirall/folderman.h
|
||||
mirall/folder.h
|
||||
mirall/folderwatcher.h
|
||||
mirall/unisonfolder.h
|
||||
mirall/csyncfolder.h
|
||||
mirall/owncloudfolder.h
|
||||
mirall/csyncthread.h
|
||||
mirall/owncloudinfo.h
|
||||
mirall/credentialstore.h
|
||||
mirall/logger.h
|
||||
mirall/connectionvalidator.h
|
||||
)
|
||||
|
||||
IF( INOTIFY_FOUND )
|
||||
@@ -122,7 +115,6 @@ if(QTKEYCHAIN_FOUND)
|
||||
endif()
|
||||
|
||||
add_library(owncloudsync SHARED ${libsync_SRCS} ${syncMoc})
|
||||
set_target_properties( owncloudsync PROPERTIES COMPILE_DEFINITIONS OWNCLOUD_CLIENT)
|
||||
set_target_properties( owncloudsync PROPERTIES
|
||||
VERSION ${VERSION}
|
||||
SOVERSION ${SOVERSION}
|
||||
@@ -142,7 +134,7 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||
)
|
||||
if(NOT WIN32)
|
||||
configure_file(${CMAKE_SOURCE_DIR}/mirall.desktop.in
|
||||
${APPLICATION_SHORTNAME}.desktop)
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_SHORTNAME}.desktop)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_SHORTNAME}.desktop DESTINATION share/applications )
|
||||
endif()
|
||||
else()
|
||||
@@ -151,6 +143,7 @@ endif()
|
||||
|
||||
set(mirall_SRCS
|
||||
mirall/application.cpp
|
||||
mirall/systray.cpp
|
||||
mirall/folderwizard.cpp
|
||||
mirall/statusdialog.cpp
|
||||
mirall/owncloudwizard.cpp
|
||||
@@ -165,6 +158,7 @@ set(mirall_SRCS
|
||||
|
||||
set(mirall_HEADERS
|
||||
mirall/application.h
|
||||
mirall/systray.h
|
||||
mirall/folderwizard.h
|
||||
mirall/owncloudsetupwizard.h
|
||||
mirall/owncloudwizard.h
|
||||
@@ -183,7 +177,7 @@ if( UNIX AND NOT APPLE)
|
||||
endif()
|
||||
|
||||
# csync is required.
|
||||
include_directories(${CSYNC_INCLUDE_DIR}/csync ${CSYNC_INCLUDE_DIR} ${CMAKE_BINARY_DIR})
|
||||
include_directories(${CSYNC_INCLUDE_DIR}/csync ${CSYNC_INCLUDE_DIR} ${CSYNC_BUILD_PATH}/src)
|
||||
include_directories(${3rdparty_INC})
|
||||
|
||||
qt4_wrap_cpp(mirallMoc ${mirall_HEADERS})
|
||||
@@ -214,8 +208,6 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||
set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
|
||||
if(NOT WIN32)
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/resources/mirall-48.png
|
||||
DESTINATION share/icons/hicolor/48x48/apps/ RENAME mirall.png)
|
||||
install(FILES
|
||||
${theme_dir}/colored/${APPLICATION_SHORTNAME}-icon-48.png
|
||||
DESTINATION share/icons/hicolor/48x48/apps/ RENAME ${APPLICATION_SHORTNAME}.png)
|
||||
@@ -227,22 +219,7 @@ endif(NOT WIN32)
|
||||
|
||||
# add_executable( ${APPLICATION_EXECUTABLE} main.cpp ${final_src})
|
||||
add_executable( ${APPLICATION_EXECUTABLE} WIN32 main.cpp ${final_src})
|
||||
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES COMPILE_DEFINITIONS OWNCLOUD_CLIENT)
|
||||
|
||||
# mirall is not built for the bundle
|
||||
add_executable( mirall WIN32 main.cpp ${final_src})
|
||||
|
||||
target_link_libraries(mirall ${QT_LIBRARIES} )
|
||||
target_link_libraries(mirall owncloudsync)
|
||||
target_link_libraries(mirall ${CSYNC_LIBRARY})
|
||||
|
||||
set_target_properties( mirall PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} )
|
||||
install(TARGETS mirall
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
else()
|
||||
set(BIN_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
|
||||
include(DeployQt4)
|
||||
@@ -252,7 +229,6 @@ else()
|
||||
|
||||
# we must add MACOSX_BUNDLE only if building a bundle
|
||||
add_executable( ${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp ${final_src})
|
||||
set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES COMPILE_DEFINITIONS OWNCLOUD_CLIENT)
|
||||
|
||||
#FIXME: hardcoded path
|
||||
if ( EXISTS ${CSYNC_BINARY_DIR}/modules/ocsync_owncloud.so )
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "mirall/application.h"
|
||||
#include "mirall/systray.h"
|
||||
#include "mirall/folder.h"
|
||||
#include "mirall/folderwatcher.h"
|
||||
#include "mirall/folderwizard.h"
|
||||
#include "mirall/networklocation.h"
|
||||
#include "mirall/unisonfolder.h"
|
||||
#include "mirall/owncloudfolder.h"
|
||||
#include "mirall/statusdialog.h"
|
||||
#include "mirall/owncloudsetupwizard.h"
|
||||
@@ -29,15 +29,15 @@
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/updatedetector.h"
|
||||
#include "mirall/proxydialog.h"
|
||||
#include "mirall/version.h"
|
||||
#include "mirall/credentialstore.h"
|
||||
#include "mirall/logger.h"
|
||||
|
||||
#ifdef WITH_CSYNC
|
||||
#include "mirall/csyncfolder.h"
|
||||
#endif
|
||||
#include "mirall/inotify.h"
|
||||
|
||||
#if defined(Q_OS_WIN)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
#include <QHash>
|
||||
@@ -48,20 +48,32 @@
|
||||
#include <QNetworkProxy>
|
||||
#include <QNetworkProxyFactory>
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
// application logging handler.
|
||||
void mirallLogCatcher(QtMsgType type, const char *msg)
|
||||
{
|
||||
Q_UNUSED(type)
|
||||
Logger::instance()->mirallLog( QString::fromUtf8(msg) );
|
||||
// qDebug() exports to local8Bit, which is not always UTF-8
|
||||
Logger::instance()->mirallLog( QString::fromLocal8Bit(msg) );
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
static const char optionsC[] =
|
||||
"Options:\n"
|
||||
" -h --help : show this help screen.\n"
|
||||
" --logwindow : open a window to show log output.\n"
|
||||
" --logfile <filename> : write log output to file <filename>.\n"
|
||||
" --logdir <name> : write each sync log output in a new file\n"
|
||||
" in directory <name>.\n"
|
||||
" --logexpire <hours> : removes logs older than <hours> hours.\n"
|
||||
" (to be used with --logdir)\n"
|
||||
" --logflush : flush the log file after every write.\n"
|
||||
" --monoicons : Use black/white pictograms for systray.\n"
|
||||
" --confdir <dirname> : Use the given configuration directory.\n"
|
||||
;
|
||||
|
||||
QString applicationTrPath()
|
||||
{
|
||||
#ifdef Q_OS_LINUX
|
||||
@@ -90,10 +102,13 @@ Application::Application(int &argc, char **argv) :
|
||||
_theme(Theme::instance()),
|
||||
_updateDetector(0),
|
||||
_logBrowser(0),
|
||||
_logExpire(0),
|
||||
_showLogWindow(false),
|
||||
_logFlush(false),
|
||||
_helpOnly(false),
|
||||
_fileItemDialog(0)
|
||||
_fileItemDialog(0),
|
||||
_statusDialog(0),
|
||||
_folderWizard(0)
|
||||
{
|
||||
setApplicationName( _theme->appNameGUI() );
|
||||
setWindowIcon( _theme->applicationIcon() );
|
||||
@@ -104,16 +119,6 @@ Application::Application(int &argc, char **argv) :
|
||||
//no need to waste time;
|
||||
if ( _helpOnly ) return;
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
// HACK: bump the refcount for libgnutls by calling dlopen()
|
||||
// so gnutls, which is an dependency of libneon on some linux
|
||||
// distros, and does not cleanup it's FDs properly, does
|
||||
// not get unloaded. This works around a FD exhaustion crash
|
||||
// (#154). We are not using gnutls at all and it's fine
|
||||
// if loading fails, so no error handling is performed here.
|
||||
dlopen("libgnutls.so", RTLD_LAZY|RTLD_NODELETE);
|
||||
#endif
|
||||
|
||||
connect( this, SIGNAL(messageReceived(QString)), SLOT(slotParseOptions(QString)));
|
||||
connect( Logger::instance(), SIGNAL(guiLog(QString,QString)),
|
||||
this, SLOT(slotShowTrayMessage(QString,QString)));
|
||||
@@ -130,12 +135,6 @@ Application::Application(int &argc, char **argv) :
|
||||
|
||||
setQuitOnLastWindowClosed(false);
|
||||
|
||||
_folderWizard = new FolderWizard;
|
||||
|
||||
_owncloudSetupWizard = new OwncloudSetupWizard( _folderMan, _theme, this );
|
||||
connect( _owncloudSetupWizard, SIGNAL(ownCloudWizardDone(int)),
|
||||
this, SLOT(slotownCloudWizardDone(int)));
|
||||
|
||||
_statusDialog = new StatusDialog( _theme );
|
||||
connect( _statusDialog, SIGNAL(addASync()), this, SLOT(slotAddFolder()) );
|
||||
|
||||
@@ -183,8 +182,8 @@ Application::Application(int &argc, char **argv) :
|
||||
Application::~Application()
|
||||
{
|
||||
delete _tray; // needed, see ctor
|
||||
if( _fileItemDialog) delete _fileItemDialog;
|
||||
if( _statusDialog && ! _helpOnly) delete _statusDialog;
|
||||
delete _fileItemDialog;
|
||||
delete _statusDialog;
|
||||
qDebug() << "* Mirall shutdown";
|
||||
}
|
||||
|
||||
@@ -207,7 +206,7 @@ void Application::slotStartFolderSetup( int result )
|
||||
|
||||
ownCloudInfo::instance()->checkInstallation();
|
||||
} else {
|
||||
_owncloudSetupWizard->startWizard(true); // with intro
|
||||
slotConfigure();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Setup Wizard was canceled. No reparsing of config.";
|
||||
@@ -263,23 +262,28 @@ void Application::slotFetchCredentials()
|
||||
{
|
||||
QString trayMessage;
|
||||
|
||||
if( CredentialStore::instance()->canTryAgain() ) {
|
||||
connect( CredentialStore::instance(), SIGNAL(fetchCredentialsFinished(bool)),
|
||||
this, SLOT(slotCredentialsFetched(bool)) );
|
||||
CredentialStore::instance()->fetchCredentials();
|
||||
if( CredentialStore::instance()->state() == CredentialStore::TooManyAttempts ) {
|
||||
trayMessage = tr("Too many attempts to get a valid password.");
|
||||
}
|
||||
if( CredentialStore::instance()->state() == CredentialStore::Ok ) {
|
||||
// the credentials are still valid and ok.
|
||||
slotCredentialsFetched( true );
|
||||
} else {
|
||||
qDebug() << "Can not try again to fetch Credentials.";
|
||||
trayMessage = tr("%1 user credentials are wrong. Please check configuration.")
|
||||
.arg(Theme::instance()->appNameGUI());
|
||||
}
|
||||
if( CredentialStore::instance()->canTryAgain() ) {
|
||||
connect( CredentialStore::instance(), SIGNAL(fetchCredentialsFinished(bool)),
|
||||
this, SLOT(slotCredentialsFetched(bool)) );
|
||||
CredentialStore::instance()->fetchCredentials();
|
||||
if( CredentialStore::instance()->state() == CredentialStore::TooManyAttempts ) {
|
||||
trayMessage = tr("Too many incorrect password attempts.");
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Can not try again to fetch Credentials.";
|
||||
trayMessage = tr("%1 user credentials are wrong. Please check configuration.")
|
||||
.arg(Theme::instance()->appNameGUI());
|
||||
}
|
||||
|
||||
if( !trayMessage.isEmpty() ) {
|
||||
_tray->showMessage(tr("Credentials"), trayMessage);
|
||||
_actionOpenStatus->setEnabled( false );
|
||||
_actionAddFolder->setEnabled( false );
|
||||
if( !trayMessage.isEmpty() ) {
|
||||
_tray->showMessage(tr("Credentials"), trayMessage);
|
||||
_actionOpenStatus->setEnabled( false );
|
||||
_actionAddFolder->setEnabled( false );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,6 +423,7 @@ void Application::slotownCloudWizardDone( int res )
|
||||
}
|
||||
_folderMan->setSyncEnabled( true );
|
||||
slotStartFolderSetup( res );
|
||||
_owncloudSetupWizard.reset(0);
|
||||
}
|
||||
|
||||
void Application::setupActions()
|
||||
@@ -444,7 +449,7 @@ void Application::setupSystemTray()
|
||||
{
|
||||
// Setting a parent heres will crash on X11 since by the time qapp runs
|
||||
// its childrens dtors, the X11->screen variable queried for is gone -> crash
|
||||
_tray = new QSystemTrayIcon;
|
||||
_tray = new Systray();
|
||||
_tray->setIcon( _theme->syncStateIcon( SyncResult::NotYetStarted, true ) );
|
||||
|
||||
connect(_tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
|
||||
@@ -538,7 +543,9 @@ void Application::setupLogBrowser()
|
||||
_logBrowser = new LogBrowser;
|
||||
qInstallMsgHandler( mirallLogCatcher );
|
||||
// ## TODO: allow new log name maybe?
|
||||
if (!_logFile.isEmpty()) {
|
||||
if (!_logDirectory.isEmpty()) {
|
||||
enterNextLogFile();
|
||||
} else if (!_logFile.isEmpty()) {
|
||||
qDebug() << "Logging into logfile: " << _logFile << " with flush " << _logFlush;
|
||||
_logBrowser->setLogFile( _logFile, _logFlush );
|
||||
}
|
||||
@@ -554,38 +561,74 @@ void Application::setupLogBrowser()
|
||||
|
||||
}
|
||||
|
||||
void Application::setupProxy()
|
||||
void Application::enterNextLogFile()
|
||||
{
|
||||
//
|
||||
Mirall::MirallConfigFile cfg;
|
||||
int proxy = cfg.proxyType();
|
||||
if (_logBrowser && !_logDirectory.isEmpty()) {
|
||||
QDir dir(_logDirectory);
|
||||
if (!dir.exists()) {
|
||||
dir.mkpath(".");
|
||||
}
|
||||
|
||||
switch(proxy) {
|
||||
case QNetworkProxy::NoProxy: {
|
||||
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
|
||||
break;
|
||||
}
|
||||
case QNetworkProxy::DefaultProxy: {
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
break;
|
||||
}
|
||||
// Find out what is the file with the highest nymber if any
|
||||
QStringList files = dir.entryList(QStringList("owncloud.log.*"),
|
||||
QDir::Files);
|
||||
QRegExp rx("owncloud.log.(\\d+)");
|
||||
uint maxNumber = 0;
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
foreach(const QString &s, files) {
|
||||
if (rx.exactMatch(s)) {
|
||||
maxNumber = qMax(maxNumber, rx.cap(1).toUInt());
|
||||
if (_logExpire > 0) {
|
||||
QFileInfo fileInfo = dir.absoluteFilePath(s);
|
||||
if (fileInfo.lastModified().addSecs(60*60 * _logExpire) < now) {
|
||||
dir.remove(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case QNetworkProxy::Socks5Proxy: {
|
||||
proxy = QNetworkProxy::HttpProxy;
|
||||
cfg.setProxyType(proxy);
|
||||
// fall through
|
||||
QString filename = _logDirectory + "/owncloud.log." + QString::number(maxNumber+1);
|
||||
_logBrowser->setLogFile(filename , _logFlush);
|
||||
}
|
||||
case QNetworkProxy::HttpProxy:{
|
||||
QNetworkProxy proxy;
|
||||
proxy.setType(QNetworkProxy::HttpProxy);
|
||||
proxy.setHostName(cfg.proxyHostName());
|
||||
proxy.setPort(cfg.proxyPort());
|
||||
}
|
||||
|
||||
QNetworkProxy proxyFromConfig(const MirallConfigFile& cfg)
|
||||
{
|
||||
QNetworkProxy proxy;
|
||||
proxy.setHostName(cfg.proxyHostName());
|
||||
proxy.setPort(cfg.proxyPort());
|
||||
if (cfg.proxyNeedsAuth()) {
|
||||
proxy.setUser(cfg.proxyUser());
|
||||
proxy.setPassword(cfg.proxyPassword());
|
||||
}
|
||||
return proxy;
|
||||
}
|
||||
|
||||
void Application::setupProxy()
|
||||
{
|
||||
Mirall::MirallConfigFile cfg;
|
||||
int proxyType = cfg.proxyType();
|
||||
QNetworkProxy proxy = proxyFromConfig(cfg);
|
||||
|
||||
switch(proxyType) {
|
||||
case QNetworkProxy::NoProxy:
|
||||
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
|
||||
break;
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
break;
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
proxy.setType(QNetworkProxy::Socks5Proxy);
|
||||
QNetworkProxy::setApplicationProxy(proxy);
|
||||
break;
|
||||
case QNetworkProxy::HttpProxy:
|
||||
proxy.setType(QNetworkProxy::HttpProxy);
|
||||
QNetworkProxy::setApplicationProxy(proxy);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
_folderMan->setProxy();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -630,7 +673,7 @@ void Application::slotTrayClicked( QSystemTrayIcon::ActivationReason reason )
|
||||
slotFetchCredentials();
|
||||
}
|
||||
#if defined Q_WS_WIN || defined Q_WS_X11
|
||||
if( reason == QSystemTrayIcon::Trigger && _actionOpenStatus->isEnabled() ) {
|
||||
if( reason == QSystemTrayIcon::Trigger ) {
|
||||
slotOpenStatus();
|
||||
}
|
||||
#endif
|
||||
@@ -638,63 +681,58 @@ void Application::slotTrayClicked( QSystemTrayIcon::ActivationReason reason )
|
||||
|
||||
void Application::slotAddFolder()
|
||||
{
|
||||
_folderMan->setSyncEnabled(false); // do not start more syncs.
|
||||
/** Helper class to ensure sync is always switched back on */
|
||||
class SyncDisabler
|
||||
{
|
||||
public:
|
||||
SyncDisabler(Application *app) : _app(app)
|
||||
{
|
||||
_app->_folderMan->setSyncEnabled(false);
|
||||
}
|
||||
~SyncDisabler() {
|
||||
_app->_folderMan->setSyncEnabled(true);
|
||||
_app->computeOverallSyncStatus();
|
||||
_app->_folderMan->slotScheduleAllFolders();
|
||||
}
|
||||
private:
|
||||
Application *_app;
|
||||
};
|
||||
|
||||
Folder::Map folderMap = _folderMan->map();
|
||||
|
||||
_folderWizard->setFolderMap( &folderMap );
|
||||
|
||||
_folderWizard->restart();
|
||||
|
||||
if (_folderWizard->exec() == QDialog::Accepted) {
|
||||
qDebug() << "* Folder wizard completed";
|
||||
|
||||
bool goodData = true;
|
||||
|
||||
QString alias = _folderWizard->field(QLatin1String("alias")).toString();
|
||||
QString sourceFolder = _folderWizard->field(QLatin1String("sourceFolder")).toString();
|
||||
QString backend = QLatin1String("csync");
|
||||
QString targetPath;
|
||||
bool onlyThisLAN = false;
|
||||
bool onlyOnline = false;
|
||||
|
||||
if (_folderWizard->field(QLatin1String("local?")).toBool()) {
|
||||
// setup a local csync folder
|
||||
targetPath = _folderWizard->field(QLatin1String("targetLocalFolder")).toString();
|
||||
} else if (_folderWizard->field(QLatin1String("remote?")).toBool()) {
|
||||
// setup a remote csync folder
|
||||
targetPath = _folderWizard->field(QLatin1String("targetURLFolder")).toString();
|
||||
onlyOnline = _folderWizard->field(QLatin1String("onlyOnline?")).toBool();
|
||||
onlyThisLAN = _folderWizard->field(QLatin1String("onlyThisLAN?")).toBool();
|
||||
(void) onlyOnline;
|
||||
(void) onlyThisLAN;
|
||||
} else if( _folderWizard->field(QLatin1String("OC?")).toBool() ||
|
||||
Theme::instance()->singleSyncFolder()) {
|
||||
// setup a ownCloud folder
|
||||
backend = QLatin1String("owncloud");
|
||||
targetPath = _folderWizard->field(QLatin1String("targetOCFolder")).toString(); //empty in single folder mode
|
||||
} else {
|
||||
qWarning() << "* Folder not local and note remote?";
|
||||
goodData = false;
|
||||
if (_folderWizard) {
|
||||
raiseDialog(_folderWizard);
|
||||
return;
|
||||
}
|
||||
|
||||
_folderMan->setSyncEnabled(true); // do start sync again.
|
||||
// disables sync queuing while in scope
|
||||
SyncDisabler disableSync(this);
|
||||
|
||||
if( goodData ) {
|
||||
_folderMan->addFolderDefinition( backend, alias, sourceFolder, targetPath, onlyThisLAN );
|
||||
Folder::Map folderMap = _folderMan->map();
|
||||
_folderWizard = new FolderWizard;
|
||||
_folderWizard->setFolderMap( &folderMap );
|
||||
|
||||
if (_folderWizard->exec() == QDialog::Accepted) {
|
||||
qDebug() << "* Folder wizard completed";
|
||||
|
||||
QString alias = _folderWizard->field(QLatin1String("alias")).toString();
|
||||
QString sourceFolder = _folderWizard->field(QLatin1String("sourceFolder")).toString();
|
||||
QString targetPath = _folderWizard->field(QLatin1String("OCFolderLineEdit")).toString();
|
||||
QString backend = QLatin1String("owncloud");
|
||||
|
||||
if (!FolderMan::ensureJournalGone( sourceFolder ))
|
||||
return;
|
||||
_folderMan->addFolderDefinition( backend, alias, sourceFolder, targetPath, false );
|
||||
Folder *f = _folderMan->setupFolderFromConfigFile( alias );
|
||||
if( f ) {
|
||||
_statusDialog->slotAddFolder( f );
|
||||
_statusDialog->buttonsSetEnabled();
|
||||
setupContextMenu();
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
qDebug() << "* Folder wizard cancelled";
|
||||
}
|
||||
_folderMan->setSyncEnabled(true);
|
||||
_folderMan->slotScheduleAllFolders();
|
||||
} else {
|
||||
qDebug() << "* Folder wizard cancelled";
|
||||
}
|
||||
_folderWizard->deleteLater();
|
||||
_folderWizard = 0;
|
||||
}
|
||||
|
||||
void Application::slotOpenStatus()
|
||||
@@ -704,7 +742,7 @@ void Application::slotOpenStatus()
|
||||
QWidget *raiseWidget = 0;
|
||||
|
||||
// check if there is a mirall.cfg already.
|
||||
if( _owncloudSetupWizard->wizard()->isVisible() ) {
|
||||
if( _owncloudSetupWizard && _owncloudSetupWizard->wizard()->isVisible() ) {
|
||||
raiseWidget = _owncloudSetupWizard->wizard();
|
||||
}
|
||||
|
||||
@@ -714,8 +752,7 @@ void Application::slotOpenStatus()
|
||||
|
||||
if( !cfgFile.exists() ) {
|
||||
qDebug() << "No configured folders yet, start the Owncloud integration dialog.";
|
||||
_folderMan->setSyncEnabled(false);
|
||||
_owncloudSetupWizard->startWizard(true); // with intro
|
||||
slotConfigure();
|
||||
} else {
|
||||
qDebug() << "#============# Status dialog starting #=============#";
|
||||
raiseWidget = _statusDialog;
|
||||
@@ -762,16 +799,14 @@ void Application::slotAbout()
|
||||
void Application::slotRemoveFolder( const QString& alias )
|
||||
{
|
||||
int ret = QMessageBox::question( 0, tr("Confirm Folder Remove"),
|
||||
tr("Do you really want to remove upload folder <i>%1</i>?").arg(alias),
|
||||
tr("<p>Do you really want to stop syncing the upload folder <i>%1</i>?</p>"
|
||||
"<p><b>Note:</b> This will not remove the files from your client.</p>").arg(alias),
|
||||
QMessageBox::Yes|QMessageBox::No );
|
||||
|
||||
if( ret == QMessageBox::No ) {
|
||||
return;
|
||||
}
|
||||
Folder *f = _folderMan->folder(alias);
|
||||
if( f && _overallStatusStrings.contains( f->alias() )) {
|
||||
_overallStatusStrings.remove( f->alias() );
|
||||
}
|
||||
|
||||
_folderMan->slotRemoveFolder( alias );
|
||||
_statusDialog->slotRemoveSelectedFolder( );
|
||||
@@ -825,8 +860,17 @@ void Application::slotEnableFolder(const QString& alias, const bool enable)
|
||||
|
||||
void Application::slotConfigure()
|
||||
{
|
||||
if (_owncloudSetupWizard && !_owncloudSetupWizard->wizard()->isVisible()) {
|
||||
raiseDialog(_owncloudSetupWizard->wizard());
|
||||
return;
|
||||
}
|
||||
|
||||
_owncloudSetupWizard.reset(new OwncloudSetupWizard( _folderMan, _theme, this ));;
|
||||
connect( _owncloudSetupWizard.data(), SIGNAL(ownCloudWizardDone(int)),
|
||||
this, SLOT(slotownCloudWizardDone(int)));
|
||||
|
||||
_folderMan->setSyncEnabled(false); // do not start more syncs.
|
||||
_owncloudSetupWizard->startWizard(false);
|
||||
_owncloudSetupWizard->startWizard();
|
||||
}
|
||||
|
||||
void Application::slotConfigureProxy()
|
||||
@@ -854,17 +898,18 @@ void Application::slotSyncStateChange( const QString& alias )
|
||||
{
|
||||
SyncResult result = _folderMan->syncResult( alias );
|
||||
|
||||
// do not promote LocalSyncState to the status dialog.
|
||||
if( !result.localRunOnly() ) {
|
||||
_statusDialog->slotUpdateFolderState( _folderMan->folder(alias) );
|
||||
_statusDialog->slotUpdateFolderState( _folderMan->folder(alias) );
|
||||
|
||||
if( _fileItemDialog && _fileItemDialog->isVisible() ) {
|
||||
_fileItemDialog->setSyncResult( _folderMan->syncResult(alias) );
|
||||
}
|
||||
if( _fileItemDialog && _fileItemDialog->isVisible() ) {
|
||||
_fileItemDialog->setSyncResult( _folderMan->syncResult(alias) );
|
||||
}
|
||||
computeOverallSyncStatus();
|
||||
|
||||
qDebug() << "Sync state changed for folder " << alias << ": " << result.statusString();
|
||||
|
||||
if (result.status() == SyncResult::Success || result.status() == SyncResult::Error) {
|
||||
enterNextLogFile();
|
||||
}
|
||||
}
|
||||
|
||||
void Application::parseOptions(const QStringList &options)
|
||||
@@ -888,16 +933,34 @@ void Application::parseOptions(const QStringList &options)
|
||||
} else {
|
||||
setHelp();
|
||||
}
|
||||
} else if (option == QLatin1String("--logdir")) {
|
||||
if (it.hasNext() && !it.peekNext().startsWith(QLatin1String("--"))) {
|
||||
_logDirectory = it.next();
|
||||
} else {
|
||||
setHelp();
|
||||
}
|
||||
} else if (option == QLatin1String("--logexpire")) {
|
||||
if (it.hasNext() && !it.peekNext().startsWith(QLatin1String("--"))) {
|
||||
_logExpire = it.next().toInt();
|
||||
} else {
|
||||
setHelp();
|
||||
}
|
||||
} else if (option == QLatin1String("--logflush")) {
|
||||
_logFlush = true;
|
||||
} else if (option == QLatin1String("--monoicons")) {
|
||||
_theme->setSystrayUseMonoIcons(true);
|
||||
} else {
|
||||
setHelp();
|
||||
std::cout << "Option not recognized: " << option.toStdString() << std::endl;
|
||||
break;
|
||||
} else if (option == QLatin1String("--confdir")) {
|
||||
if (it.hasNext() && !it.peekNext().startsWith(QLatin1String("--"))) {
|
||||
QString confDir = it.next();
|
||||
MirallConfigFile::setConfDir( confDir );
|
||||
} else {
|
||||
showHelp();
|
||||
}
|
||||
} else {
|
||||
setHelp();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Application::computeOverallSyncStatus()
|
||||
@@ -905,75 +968,72 @@ void Application::computeOverallSyncStatus()
|
||||
|
||||
// display the info of the least successful sync (eg. not just display the result of the latest sync
|
||||
SyncResult overallResult(SyncResult::Undefined );
|
||||
QMap<QString, QString> overallStatusStrings;
|
||||
QString trayMessage;
|
||||
Folder::Map map = _folderMan->map();
|
||||
|
||||
foreach ( Folder *syncedFolder, map.values() ) {
|
||||
QString folderMessage = _overallStatusStrings[syncedFolder->alias()];
|
||||
QString folderMessage;
|
||||
|
||||
SyncResult folderResult = syncedFolder->syncResult();
|
||||
SyncResult::Status syncStatus = folderResult.status();
|
||||
|
||||
if( ! folderResult.localRunOnly() ) { // skip local runs, use the last message.
|
||||
switch( syncStatus ) {
|
||||
case SyncResult::Undefined:
|
||||
if ( overallResult.status() != SyncResult::Error ) {
|
||||
overallResult.setStatus(SyncResult::Error);
|
||||
}
|
||||
folderMessage = tr( "Undefined State." );
|
||||
break;
|
||||
case SyncResult::NotYetStarted:
|
||||
folderMessage = tr( "Waits to start syncing." );
|
||||
overallResult.setStatus( SyncResult::NotYetStarted );
|
||||
break;
|
||||
case SyncResult::SyncPrepare:
|
||||
folderMessage = tr( "Preparing for sync." );
|
||||
overallResult.setStatus( SyncResult::SyncPrepare );
|
||||
break;
|
||||
case SyncResult::SyncRunning:
|
||||
folderMessage = tr( "Sync is running." );
|
||||
overallResult.setStatus( SyncResult::SyncRunning );
|
||||
break;
|
||||
case SyncResult::Unavailable:
|
||||
folderMessage = tr( "Server is currently not available." );
|
||||
overallResult.setStatus( SyncResult::Unavailable );
|
||||
break;
|
||||
case SyncResult::Success:
|
||||
if( overallResult.status() == SyncResult::Undefined ) {
|
||||
folderMessage = tr( "Last Sync was successful." );
|
||||
overallResult.setStatus( SyncResult::Success );
|
||||
}
|
||||
break;
|
||||
case SyncResult::Error:
|
||||
overallResult.setStatus( SyncResult::Error );
|
||||
folderMessage = tr( "Syncing Error." );
|
||||
break;
|
||||
case SyncResult::SetupError:
|
||||
if ( overallResult.status() != SyncResult::Error ) {
|
||||
overallResult.setStatus( SyncResult::SetupError );
|
||||
}
|
||||
folderMessage = tr( "Setup Error." );
|
||||
break;
|
||||
default:
|
||||
folderMessage = tr( "Undefined Error State." );
|
||||
overallResult.setStatus( SyncResult::Error );
|
||||
switch( syncStatus ) {
|
||||
case SyncResult::Undefined:
|
||||
if ( overallResult.status() != SyncResult::Error ) {
|
||||
overallResult.setStatus(SyncResult::Error);
|
||||
}
|
||||
if( !syncedFolder->syncEnabled() ) {
|
||||
// sync is disabled.
|
||||
folderMessage += tr( " (Sync is paused)" );
|
||||
folderMessage = tr( "Undefined State." );
|
||||
break;
|
||||
case SyncResult::NotYetStarted:
|
||||
folderMessage = tr( "Waits to start syncing." );
|
||||
overallResult.setStatus( SyncResult::NotYetStarted );
|
||||
break;
|
||||
case SyncResult::SyncPrepare:
|
||||
folderMessage = tr( "Preparing for sync." );
|
||||
overallResult.setStatus( SyncResult::SyncPrepare );
|
||||
break;
|
||||
case SyncResult::SyncRunning:
|
||||
folderMessage = tr( "Sync is running." );
|
||||
overallResult.setStatus( SyncResult::SyncRunning );
|
||||
break;
|
||||
case SyncResult::Unavailable:
|
||||
folderMessage = tr( "Server is currently not available." );
|
||||
overallResult.setStatus( SyncResult::Unavailable );
|
||||
break;
|
||||
case SyncResult::Success:
|
||||
if( overallResult.status() == SyncResult::Undefined ) {
|
||||
overallResult.setStatus( SyncResult::Success );
|
||||
}
|
||||
folderMessage = tr( "Last Sync was successful." );
|
||||
break;
|
||||
case SyncResult::Error:
|
||||
overallResult.setStatus( SyncResult::Error );
|
||||
folderMessage = tr( "Syncing Error." );
|
||||
break;
|
||||
case SyncResult::SetupError:
|
||||
if ( overallResult.status() != SyncResult::Error ) {
|
||||
overallResult.setStatus( SyncResult::SetupError );
|
||||
}
|
||||
folderMessage = tr( "Setup Error." );
|
||||
break;
|
||||
default:
|
||||
folderMessage = tr( "Undefined Error State." );
|
||||
overallResult.setStatus( SyncResult::Error );
|
||||
}
|
||||
if( !syncedFolder->syncEnabled() ) {
|
||||
// sync is disabled.
|
||||
folderMessage += tr( " (Sync is paused)" );
|
||||
}
|
||||
|
||||
qDebug() << "Folder in overallStatus Message: " << syncedFolder << " with name " << syncedFolder->alias();
|
||||
QString msg = QString::fromLatin1("Folder %1: %2").arg(syncedFolder->alias()).arg(folderMessage);
|
||||
if( msg != _overallStatusStrings[syncedFolder->alias()] ) {
|
||||
_overallStatusStrings[syncedFolder->alias()] = msg;
|
||||
}
|
||||
QString msg = tr("Folder %1: %2").arg(syncedFolder->alias(), folderMessage);
|
||||
overallStatusStrings[syncedFolder->alias()] = msg;
|
||||
}
|
||||
|
||||
// create the tray blob message, check if we have an defined state
|
||||
if( overallResult.status() != SyncResult::Undefined ) {
|
||||
QStringList allStatusStrings = _overallStatusStrings.values();
|
||||
QStringList allStatusStrings = overallStatusStrings.values();
|
||||
if( ! allStatusStrings.isEmpty() )
|
||||
trayMessage = allStatusStrings.join(QLatin1String("\n"));
|
||||
else
|
||||
@@ -986,21 +1046,48 @@ void Application::computeOverallSyncStatus()
|
||||
}
|
||||
}
|
||||
|
||||
// Helpers for displaying messages. Note that there is no console on Windows.
|
||||
#ifdef Q_OS_WIN
|
||||
// Format as <pre> HTML
|
||||
static inline void toHtml(QString &t)
|
||||
{
|
||||
t.replace(QLatin1Char('&'), QLatin1String("&"));
|
||||
t.replace(QLatin1Char('<'), QLatin1String("<"));
|
||||
t.replace(QLatin1Char('>'), QLatin1String(">"));
|
||||
t.insert(0, QLatin1String("<html><pre>"));
|
||||
t.append(QLatin1String("</pre></html>"));
|
||||
}
|
||||
|
||||
static void displayHelpText(QString t) // No console on Windows.
|
||||
{
|
||||
toHtml(t);
|
||||
QMessageBox::information(0, Theme::instance()->appNameGUI(), t);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void displayHelpText(const QString &t)
|
||||
{
|
||||
std::cout << qPrintable(t);
|
||||
}
|
||||
#endif
|
||||
|
||||
void Application::showHelp()
|
||||
{
|
||||
setHelp();
|
||||
std::cout << _theme->appName().toLatin1().constData() << " version " <<
|
||||
_theme->version().toLatin1().constData() << std::endl << std::endl;
|
||||
std::cout << "File synchronisation desktop utility." << std::endl << std::endl;
|
||||
std::cout << "Options:" << std::endl;
|
||||
std::cout << " -h --help : show this help screen." << std::endl;
|
||||
std::cout << " --logwindow : open a window to show log output." << std::endl;
|
||||
std::cout << " --logfile <filename> : write log output to file <filename>." << std::endl;
|
||||
std::cout << " --logflush : flush the log file after every write." << std::endl;
|
||||
std::cout << " --monoicons : Use black/white pictograms for systray." << std::endl;
|
||||
std::cout << std::endl;
|
||||
setHelp();
|
||||
QString helpText;
|
||||
QTextStream stream(&helpText);
|
||||
stream << _theme->appName().toLatin1().constData()
|
||||
<< QLatin1String(" version ")
|
||||
<< _theme->version().toLatin1().constData() << endl;
|
||||
|
||||
stream << QLatin1String("File synchronisation desktop utility.") << endl << endl
|
||||
<< QLatin1String(optionsC);
|
||||
|
||||
if (_theme->appName() == QLatin1String("ownCloud"))
|
||||
std::cout << "For more information, see http://www.owncloud.org" << std::endl;
|
||||
stream << endl << "For more information, see http://www.owncloud.org" << endl;
|
||||
|
||||
displayHelpText(helpText);
|
||||
}
|
||||
|
||||
void Application::setHelp()
|
||||
@@ -1008,6 +1095,30 @@ void Application::setHelp()
|
||||
_helpOnly = true;
|
||||
}
|
||||
|
||||
#if defined(Q_OS_WIN)
|
||||
bool Application::winEventFilter(MSG *pMsg, long *result)
|
||||
{
|
||||
if (pMsg->message == WM_POWERBROADCAST) {
|
||||
switch(pMsg->wParam) {
|
||||
case PBT_APMPOWERSTATUSCHANGE:
|
||||
qDebug() << "WM_POWERBROADCAST: Power state changed";
|
||||
break;
|
||||
case PBT_APMSUSPEND:
|
||||
qDebug() << "WM_POWERBROADCAST: Entering low power state";
|
||||
break;
|
||||
case PBT_APMRESUMEAUTOMATIC:
|
||||
qDebug() << "WM_POWERBROADCAST: Resuming from low power state";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return SharedTools::QtSingleApplication::winEventFilter(pMsg, result);
|
||||
}
|
||||
#endif
|
||||
|
||||
QString substLang(const QString &lang)
|
||||
{
|
||||
// Map the more apropriate script codes
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#define APPLICATION_H
|
||||
|
||||
#include <QApplication>
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QNetworkReply>
|
||||
#include <QSslError>
|
||||
|
||||
@@ -27,6 +26,7 @@
|
||||
#include "mirall/logbrowser.h"
|
||||
#include "mirall/folderman.h"
|
||||
#include "mirall/fileitemdialog.h"
|
||||
#include "mirall/systray.h"
|
||||
|
||||
class QAction;
|
||||
class QMenu;
|
||||
@@ -79,10 +79,16 @@ protected:
|
||||
void setupContextMenu();
|
||||
void setupLogBrowser();
|
||||
void setupProxy();
|
||||
void enterNextLogFile();
|
||||
|
||||
//folders have to be disabled while making config changes
|
||||
void computeOverallSyncStatus();
|
||||
|
||||
// reimplemented
|
||||
#if defined(Q_WS_WIN)
|
||||
bool winEventFilter( MSG * message, long * result );
|
||||
#endif
|
||||
|
||||
protected slots:
|
||||
void slotTrayClicked( QSystemTrayIcon::ActivationReason );
|
||||
void slotFolderOpenAction(const QString & );
|
||||
@@ -104,7 +110,7 @@ private:
|
||||
void raiseDialog( QWidget* );
|
||||
|
||||
// configuration file -> folder
|
||||
QSystemTrayIcon *_tray;
|
||||
Systray *_tray;
|
||||
QAction *_actionQuit;
|
||||
QAction *_actionAddFolder;
|
||||
QAction *_actionOpenStatus;
|
||||
@@ -118,7 +124,7 @@ private:
|
||||
#endif
|
||||
|
||||
FolderWizard *_folderWizard;
|
||||
OwncloudSetupWizard *_owncloudSetupWizard;
|
||||
QScopedPointer<OwncloudSetupWizard> _owncloudSetupWizard;
|
||||
SslErrorDialog *_sslErrorDialog;
|
||||
|
||||
// tray's menu
|
||||
@@ -130,9 +136,10 @@ private:
|
||||
Theme *_theme;
|
||||
QSignalMapper *_folderOpenActionMapper;
|
||||
UpdateDetector *_updateDetector;
|
||||
QMap<QString, QString> _overallStatusStrings;
|
||||
LogBrowser *_logBrowser;
|
||||
QString _logFile;
|
||||
QString _logDirectory;
|
||||
int _logExpire;
|
||||
bool _showLogWindow;
|
||||
bool _logFlush;
|
||||
bool _helpOnly;
|
||||
|
||||
193
src/mirall/connectionvalidator.cpp
Normal file
193
src/mirall/connectionvalidator.cpp
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <QtCore>
|
||||
|
||||
#include "mirall/connectionvalidator.h"
|
||||
#include "mirall/owncloudinfo.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/credentialstore.h"
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
ConnectionValidator::ConnectionValidator(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ConnectionValidator::ConnectionValidator(const QString& connection, QObject *parent)
|
||||
:_connection(connection)
|
||||
{
|
||||
ownCloudInfo::instance()->setCustomConfigHandle(_connection);
|
||||
}
|
||||
|
||||
QStringList ConnectionValidator::errors() const
|
||||
{
|
||||
return _errors;
|
||||
}
|
||||
|
||||
QString ConnectionValidator::statusString( Status )
|
||||
{
|
||||
return QLatin1String("Get your street creds!");
|
||||
}
|
||||
|
||||
|
||||
void ConnectionValidator::checkConnection()
|
||||
{
|
||||
if( ownCloudInfo::instance()->isConfigured() ) {
|
||||
connect( ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
SLOT(slotStatusFound(QString,QString,QString,QString)));
|
||||
|
||||
connect( ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
SLOT(slotNoStatusFound(QNetworkReply*)));
|
||||
|
||||
// checks for status.php
|
||||
ownCloudInfo::instance()->checkInstallation();
|
||||
} else {
|
||||
emit connectionResult( NotConfigured );
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectionValidator::slotStatusFound( const QString& url, const QString& versionStr, const QString& version, const QString& edition)
|
||||
{
|
||||
// status.php was found.
|
||||
qDebug() << "** Application: ownCloud found: " << url << " with version " << versionStr << "(" << version << ")";
|
||||
// now check the authentication
|
||||
MirallConfigFile cfgFile(_connection);
|
||||
|
||||
cfgFile.setOwnCloudVersion( version );
|
||||
// disconnect from ownCloudInfo
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
this, SLOT(slotStatusFound(QString,QString,QString,QString)));
|
||||
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
this, SLOT(slotNoStatusFound(QNetworkReply*)));
|
||||
|
||||
if( version.startsWith("4.0") ) {
|
||||
_errors.append( tr("<p>The configured server for this client is too old.</p>"
|
||||
"<p>Please update to the latest server and restart the client.</p>"));
|
||||
emit connectionResult( ServerVersionMismatch );
|
||||
return;
|
||||
}
|
||||
|
||||
QTimer::singleShot( 0, this, SLOT( slotFetchCredentials() ));
|
||||
}
|
||||
|
||||
// status.php could not be loaded.
|
||||
void ConnectionValidator::slotNoStatusFound(QNetworkReply *reply)
|
||||
{
|
||||
// disconnect from ownCloudInfo
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
this, SLOT(slotStatusFound(QString,QString,QString,QString)));
|
||||
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
this, SLOT(slotNoStatusFound(QNetworkReply*)));
|
||||
|
||||
_errors.append( reply->errorString() );
|
||||
emit connectionResult( StatusNotFound );
|
||||
|
||||
}
|
||||
|
||||
void ConnectionValidator::slotFetchCredentials()
|
||||
{
|
||||
if( _connection.isEmpty() ) {
|
||||
if( CredentialStore::instance()->canTryAgain() ) {
|
||||
connect( CredentialStore::instance(), SIGNAL(fetchCredentialsFinished(bool)),
|
||||
this, SLOT(slotCredentialsFetched(bool)) );
|
||||
CredentialStore::instance()->fetchCredentials();
|
||||
}
|
||||
|
||||
if( CredentialStore::instance()->state() == CredentialStore::TooManyAttempts ) {
|
||||
_errors << tr("Too many attempts to get a valid password.");
|
||||
emit connectionResult( CredentialsTooManyAttempts );
|
||||
}
|
||||
} else {
|
||||
// Pull credentials from Mirall config.
|
||||
slotCredentialsFetched( true );
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectionValidator::slotCredentialsFetched( bool ok )
|
||||
{
|
||||
qDebug() << "Credentials successfully fetched: " << ok;
|
||||
disconnect( CredentialStore::instance(), SIGNAL(fetchCredentialsFinished(bool)) );
|
||||
|
||||
if( ! ok ) {
|
||||
Status stat;
|
||||
_errors << tr("Error: Could not retrieve the password!");
|
||||
|
||||
if( CredentialStore::instance()->state() == CredentialStore::UserCanceled ) {
|
||||
_errors << tr("Password dialog was canceled!");
|
||||
stat = CredentialsUserCanceled;
|
||||
} else {
|
||||
_errors << CredentialStore::instance()->errorMessage();
|
||||
stat = CredentialError;
|
||||
}
|
||||
|
||||
qDebug() << "Could not fetch credentials" << _errors;
|
||||
|
||||
emit connectionResult( stat );
|
||||
} else {
|
||||
QString user, pwd;
|
||||
if( _connection.isEmpty() ) {
|
||||
user = CredentialStore::instance()->user();
|
||||
pwd = CredentialStore::instance()->password();
|
||||
} else {
|
||||
// in case of reconfiguration, the _connection is set.
|
||||
MirallConfigFile cfg(_connection);
|
||||
user = cfg.ownCloudUser();
|
||||
pwd = cfg.ownCloudPasswd();
|
||||
}
|
||||
ownCloudInfo::instance()->setCredentials( user, pwd );
|
||||
|
||||
// Credential fetched ok.
|
||||
QTimer::singleShot( 0, this, SLOT( slotCheckAuthentication() ));
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectionValidator::slotCheckAuthentication()
|
||||
{
|
||||
connect( ownCloudInfo::instance(), SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
this, SLOT(slotAuthCheck(QString,QNetworkReply*)));
|
||||
|
||||
qDebug() << "# checking for authentication settings.";
|
||||
ownCloudInfo::instance()->getRequest(QLatin1String("/"), true ); // this call needs to be authenticated.
|
||||
// simply GET the webdav root, will fail if credentials are wrong.
|
||||
// continue in slotAuthCheck here :-)
|
||||
}
|
||||
|
||||
void ConnectionValidator::slotAuthCheck( const QString& ,QNetworkReply *reply )
|
||||
{
|
||||
bool ok = true;
|
||||
Status stat = Connected;
|
||||
|
||||
if( reply->error() == QNetworkReply::AuthenticationRequiredError ||
|
||||
reply->error() == QNetworkReply::OperationCanceledError ) { // returned if the user is wrong.
|
||||
qDebug() << "******** Password is wrong!";
|
||||
_errors << "The provided credentials are wrong.";
|
||||
stat = CredentialsWrong;
|
||||
ok = false;
|
||||
}
|
||||
|
||||
// disconnect from ownCloud Info signals
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
this,SLOT(slotAuthCheck(QString,QNetworkReply*)));
|
||||
|
||||
emit connectionResult( stat );
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
73
src/mirall/connectionvalidator.h
Normal file
73
src/mirall/connectionvalidator.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#ifndef CONNECTIONVALIDATOR_H
|
||||
#define CONNECTIONVALIDATOR_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
|
||||
class QNetworkReply;
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class ConnectionValidator : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ConnectionValidator(QObject *parent = 0);
|
||||
explicit ConnectionValidator(const QString& connection, QObject *parent = 0);
|
||||
|
||||
enum Status {
|
||||
Undefined,
|
||||
Connected,
|
||||
NotConfigured,
|
||||
ServerVersionMismatch,
|
||||
CredentialsTooManyAttempts,
|
||||
CredentialError,
|
||||
CredentialsUserCanceled,
|
||||
CredentialsWrong,
|
||||
StatusNotFound
|
||||
|
||||
};
|
||||
|
||||
QStringList errors() const;
|
||||
|
||||
void checkConnection();
|
||||
|
||||
QString statusString( Status );
|
||||
|
||||
signals:
|
||||
void connectionResult( ConnectionValidator::Status );
|
||||
void connectionAvailable();
|
||||
void connectionFailed();
|
||||
|
||||
public slots:
|
||||
|
||||
protected slots:
|
||||
void slotStatusFound( const QString&, const QString&, const QString&, const QString& );
|
||||
void slotNoStatusFound(QNetworkReply *);
|
||||
|
||||
void slotFetchCredentials();
|
||||
void slotCredentialsFetched( bool );
|
||||
void slotCheckAuthentication();
|
||||
void slotAuthCheck( const QString& ,QNetworkReply * );
|
||||
|
||||
private:
|
||||
QStringList _errors;
|
||||
QString _connection;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // CONNECTIONVALIDATOR_H
|
||||
@@ -1,213 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CreateAnOwncloudPage</class>
|
||||
<widget class="QWidget" name="CreateAnOwncloudPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>539</width>
|
||||
<height>346</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../../mirall.qrc">:/mirall/resources/mirall-32.png</pixmap>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create a new ownCloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_17">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Where do you want to create your ownCloud?</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QRadioButton" name="createLocalRadioBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>create ownCloud on this computer</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">installs the ownCloud on this computer. Other people will not be able to access your data by default.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="3">
|
||||
<widget class="QRadioButton" name="createPerFTPRadioBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
<underline>false</underline>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>create ownCloud on my internet domain</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">installs ownCloud on a domain you control. You need the FTP credentials for the installation.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#585858;"></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">This ownCloud will be accessible from the internet.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>&Domain:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>myDomainEdit</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QLineEdit" name="myDomainEdit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>388</width>
|
||||
<height>72</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../mirall.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -69,30 +69,18 @@ CredentialStore::CredState CredentialStore::state()
|
||||
|
||||
bool CredentialStore::canTryAgain()
|
||||
{
|
||||
bool canDoIt = false;
|
||||
|
||||
if( _tries > MAX_LOGIN_ATTEMPTS ) {
|
||||
qDebug() << "canTryAgain: Max attempts reached.";
|
||||
return false;
|
||||
}
|
||||
|
||||
if( _state == NotFetched ) {
|
||||
/* Since QtKeyChain is required now, it makes sense to only query once. */
|
||||
if( _state == NotFetched || _state == AsyncWriting ) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch( _type ) {
|
||||
case CredentialStore::User:
|
||||
canDoIt = true;
|
||||
break;
|
||||
case CredentialStore::Settings:
|
||||
break;
|
||||
case CredentialStore::KeyChain:
|
||||
canDoIt = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return canDoIt;
|
||||
}
|
||||
|
||||
void CredentialStore::fetchCredentials()
|
||||
@@ -147,7 +135,7 @@ void CredentialStore::fetchCredentials()
|
||||
}
|
||||
case CredentialStore::KeyChain: {
|
||||
// If the credentials are here already, return.
|
||||
if( _state == Ok ) {
|
||||
if( _state == Ok || _state == AsyncWriting ) {
|
||||
emit(fetchCredentialsFinished(true));
|
||||
return;
|
||||
}
|
||||
@@ -347,6 +335,7 @@ void CredentialStore::saveCredentials( )
|
||||
|
||||
connect( job, SIGNAL(finished(QKeychain::Job*)), this,
|
||||
SLOT(slotKeyChainWriteFinished(QKeychain::Job*)));
|
||||
_state = AsyncWriting;
|
||||
job->start();
|
||||
#endif
|
||||
break;
|
||||
@@ -373,15 +362,21 @@ void CredentialStore::slotKeyChainWriteFinished( QKeychain::Job *job )
|
||||
pwdJob->errorString().contains(QLatin1String("Could not open wallet"))) {
|
||||
_type = Settings;
|
||||
saveCredentials();
|
||||
_state = NoKeychainBackend;
|
||||
} else {
|
||||
_state = Error;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Successfully stored password for user " << _user;
|
||||
// Try to remove password formerly stored in the config file.
|
||||
MirallConfigFile cfgFile;
|
||||
cfgFile.clearPasswordFromConfig();
|
||||
_state = NotFetched;
|
||||
_tries = 0;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Error: KeyChain Write Password Job failed!";
|
||||
_state = Error;
|
||||
}
|
||||
#else
|
||||
(void) job;
|
||||
|
||||
@@ -57,6 +57,7 @@ public:
|
||||
AccessDenied,
|
||||
NoKeychainBackend,
|
||||
Error,
|
||||
AsyncWriting,
|
||||
TooManyAttempts };
|
||||
|
||||
enum CredentialType {
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "mirall/csyncfolder.h"
|
||||
#include "mirall/csyncthread.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
|
||||
#include <csync.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QMutexLocker>
|
||||
#include <QThread>
|
||||
#include <QStringList>
|
||||
#include <QTextStream>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
CSyncFolder::CSyncFolder(const QString &alias,
|
||||
const QString &path,
|
||||
const QString &secondPath,
|
||||
QObject *parent)
|
||||
: Folder(alias, path, secondPath, parent)
|
||||
, _csync(0)
|
||||
, _thread(0)
|
||||
, _csyncError(false)
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
CSyncFolder::~CSyncFolder()
|
||||
{
|
||||
}
|
||||
|
||||
bool CSyncFolder::isBusy() const
|
||||
{
|
||||
return (_csync && _thread && _thread->isRunning() );
|
||||
}
|
||||
|
||||
void CSyncFolder::startSync(const QStringList &pathList)
|
||||
{
|
||||
if (_thread && _thread->isRunning()) {
|
||||
qCritical() << "* ERROR csync is still running and new sync requested.";
|
||||
return;
|
||||
}
|
||||
delete _csync;
|
||||
delete _thread;
|
||||
_errors.clear();
|
||||
_csyncError = false;
|
||||
_syncResult.setStatus( SyncResult::SyncRunning );
|
||||
emit syncStateChange();
|
||||
|
||||
_thread = new QThread(this);
|
||||
_csync = new CSyncThread( path(), secondPath() );
|
||||
connect(_csync, SIGNAL(started()), SLOT(slotCSyncStarted()), Qt::QueuedConnection);
|
||||
connect(_csync, SIGNAL(finished()), SLOT(slotCSyncFinished()), Qt::QueuedConnection);
|
||||
connect(_csync, SIGNAL(csyncError(QString)), SLOT(slotCSyncError(QString)), Qt::QueuedConnection);
|
||||
_csync->moveToThread(_thread);
|
||||
_thread->start();
|
||||
QMetaObject::invokeMethod(_csync, "startSync", Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
void CSyncFolder::slotTerminateSync()
|
||||
{
|
||||
if( _thread ) {
|
||||
_thread->terminate();
|
||||
}
|
||||
}
|
||||
|
||||
void CSyncFolder::slotCSyncStarted()
|
||||
{
|
||||
qDebug() << " * csync thread started";
|
||||
emit syncStarted();
|
||||
}
|
||||
|
||||
void CSyncFolder::slotCSyncFinished()
|
||||
{
|
||||
SyncResult res(SyncResult::Success);
|
||||
if( _csyncError ) {
|
||||
res.setStatus( SyncResult::Error );
|
||||
res.setErrorString( _errors.join(QLatin1String("\n")));
|
||||
}
|
||||
emit syncFinished( res );
|
||||
}
|
||||
|
||||
void CSyncFolder::slotCSyncError( const QString& errorStr )
|
||||
{
|
||||
_errors.append( errorStr );
|
||||
_csyncError = true;
|
||||
}
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#ifndef CSYNCFOLDER_H
|
||||
#define CSYNCFOLDER_H
|
||||
|
||||
/*
|
||||
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
|
||||
#include "mirall/csyncthread.h"
|
||||
#include "mirall/folder.h"
|
||||
|
||||
#include <QMutex>
|
||||
#include <QThread>
|
||||
#include <QString>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
|
||||
class CSyncFolder : public Folder
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CSyncFolder(const QString &alias,
|
||||
const QString &path,
|
||||
const QString &secondPath, QObject *parent = 0L);
|
||||
virtual ~CSyncFolder();
|
||||
virtual void startSync(const QStringList &pathList);
|
||||
virtual bool isBusy() const;
|
||||
|
||||
public slots:
|
||||
void slotTerminateSync();
|
||||
|
||||
protected slots:
|
||||
void slotCSyncStarted();
|
||||
void slotCSyncFinished();
|
||||
void slotCSyncError( const QString& );
|
||||
private:
|
||||
bool _csyncError;
|
||||
CSyncThread *_csync;
|
||||
QThread *_thread;
|
||||
QStringList _errors;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/logger.h"
|
||||
#include "mirall/utility.h"
|
||||
#include "mirall/owncloudinfo.h"
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
@@ -26,6 +25,8 @@
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QSslSocket>
|
||||
#include <QDir>
|
||||
@@ -41,30 +42,14 @@
|
||||
namespace Mirall {
|
||||
|
||||
/* static variables to hold the credentials */
|
||||
QString CSyncThread::_user;
|
||||
QString CSyncThread::_passwd;
|
||||
QNetworkProxy CSyncThread::_proxy;
|
||||
|
||||
QString CSyncThread::_csyncConfigDir; // to be able to remove the lock file.
|
||||
|
||||
QMutex CSyncThread::_mutex;
|
||||
QMutex CSyncThread::_syncMutex;
|
||||
|
||||
void csyncLogCatcher(CSYNC *ctx,
|
||||
int verbosity,
|
||||
const char *function,
|
||||
const char *buffer,
|
||||
void *userdata)
|
||||
{
|
||||
Logger::instance()->csyncLog( QString::fromUtf8(buffer) );
|
||||
}
|
||||
|
||||
CSyncThread::CSyncThread(const QString &source, const QString &target)
|
||||
: _source(source)
|
||||
, _target(target)
|
||||
|
||||
CSyncThread::CSyncThread(CSYNC *csync)
|
||||
{
|
||||
_mutex.lock();
|
||||
if( ! _source.endsWith(QLatin1Char('/'))) _source.append(QLatin1Char('/'));
|
||||
_csync_ctx = csync;
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
@@ -120,7 +105,7 @@ QString CSyncThread::csyncErrorToString( CSYNC_ERROR_CODE err, const char *errSt
|
||||
errStr = tr("CSync processing step propagate failed.");
|
||||
break;
|
||||
case CSYNC_ERR_ACCESS_FAILED:
|
||||
errStr = tr("<p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p>").arg(_target);
|
||||
errStr = tr("<p>The target directory does not exist.</p><p>Please check the sync setup.</p>");
|
||||
// this is critical. The database has to be removed.
|
||||
emit wipeDb();
|
||||
break;
|
||||
@@ -179,26 +164,6 @@ QString CSyncThread::csyncErrorToString( CSYNC_ERROR_CODE err, const char *errSt
|
||||
|
||||
}
|
||||
|
||||
const char* CSyncThread::proxyTypeToCStr(QNetworkProxy::ProxyType type)
|
||||
{
|
||||
switch (type) {
|
||||
case QNetworkProxy::NoProxy:
|
||||
return "NoProxy";
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
return "DefaultProxy";
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
return "Socks5Proxy";
|
||||
case QNetworkProxy::HttpProxy:
|
||||
return "HttpProxy";
|
||||
case QNetworkProxy::HttpCachingProxy:
|
||||
return "HttpCachingProxy";
|
||||
case QNetworkProxy::FtpCachingProxy:
|
||||
return "FtpCachingProxy";
|
||||
default:
|
||||
return "NoProxy";
|
||||
}
|
||||
}
|
||||
|
||||
int CSyncThread::treewalkLocal( TREE_WALK_FILE* file, void *data )
|
||||
{
|
||||
return static_cast<CSyncThread*>(data)->treewalkFile( file, false );
|
||||
@@ -226,6 +191,11 @@ int CSyncThread::treewalkFile( TREE_WALK_FILE *file, bool remote )
|
||||
|
||||
int re = 0;
|
||||
|
||||
if (file->instruction != CSYNC_INSTRUCTION_IGNORE
|
||||
&& file->instruction != CSYNC_INSTRUCTION_REMOVE) {
|
||||
_hasFiles = true;
|
||||
}
|
||||
|
||||
switch(file->instruction) {
|
||||
case CSYNC_INSTRUCTION_NONE:
|
||||
case CSYNC_INSTRUCTION_IGNORE:
|
||||
@@ -279,10 +249,11 @@ int CSyncThread::treewalkError(TREE_WALK_FILE* file)
|
||||
if ( indx == -1 )
|
||||
return 0;
|
||||
|
||||
if( item._instruction == CSYNC_INSTRUCTION_STAT_ERROR ||
|
||||
item._instruction == CSYNC_INSTRUCTION_ERROR ) {
|
||||
if( file &&
|
||||
file->instruction == CSYNC_INSTRUCTION_STAT_ERROR ||
|
||||
file->instruction == CSYNC_INSTRUCTION_ERROR ) {
|
||||
_mutex.lock();
|
||||
_syncedItems[indx]._instruction = item._instruction;
|
||||
_syncedItems[indx]._instruction = file->instruction;
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
@@ -290,20 +261,21 @@ int CSyncThread::treewalkError(TREE_WALK_FILE* file)
|
||||
}
|
||||
|
||||
struct CSyncRunScopeHelper {
|
||||
CSyncRunScopeHelper(CSYNC *_ctx, CSyncThread *_parent)
|
||||
: ctx(_ctx), parent(_parent)
|
||||
CSyncRunScopeHelper(CSYNC *ctx, CSyncThread *parent)
|
||||
: _ctx(ctx), _parent(parent)
|
||||
{
|
||||
t.start();
|
||||
_t.start();
|
||||
}
|
||||
~CSyncRunScopeHelper() {
|
||||
csync_destroy(ctx);
|
||||
csync_commit(_ctx);
|
||||
|
||||
qDebug() << "CSync run took " << t.elapsed() << " Milliseconds";
|
||||
emit(parent->finished());
|
||||
qDebug() << "CSync run took " << _t.elapsed() << " Milliseconds";
|
||||
emit(_parent->finished());
|
||||
_parent->_syncMutex.unlock();
|
||||
}
|
||||
CSYNC *ctx;
|
||||
QTime t;
|
||||
CSyncThread *parent;
|
||||
CSYNC *_ctx;
|
||||
QTime _t;
|
||||
CSyncThread *_parent;
|
||||
};
|
||||
|
||||
void CSyncThread::handleSyncError(CSYNC *ctx, const char *state) {
|
||||
@@ -323,176 +295,84 @@ void CSyncThread::handleSyncError(CSYNC *ctx, const char *state) {
|
||||
|
||||
void CSyncThread::startSync()
|
||||
{
|
||||
if (!_syncMutex.tryLock()) {
|
||||
qDebug() << Q_FUNC_INFO << "WARNING: Another sync seems to be running. Not starting a new one.";
|
||||
return;
|
||||
}
|
||||
|
||||
if( ! _csync_ctx ) {
|
||||
qDebug() << "XXXXXXXXXXXXXXXX FAIL: do not have csync_ctx!";
|
||||
}
|
||||
qDebug() << Q_FUNC_INFO << "Sync started";
|
||||
|
||||
qDebug() << "starting to sync " << qApp->thread() << QThread::currentThread();
|
||||
CSYNC *csync;
|
||||
int proxyPort = _proxy.port();
|
||||
|
||||
_mutex.lock();
|
||||
_syncedItems.clear();
|
||||
_needsUpdate = false;
|
||||
_mutex.unlock();
|
||||
|
||||
if( csync_create(&csync,
|
||||
_source.toUtf8().data(),
|
||||
_target.toUtf8().data()) < 0 ) {
|
||||
emit csyncError( tr("CSync create failed.") );
|
||||
}
|
||||
|
||||
MirallConfigFile cfg;
|
||||
csync_set_config_dir( csync, cfg.configPath().toUtf8() );
|
||||
|
||||
_mutex.lock();
|
||||
_csyncConfigDir = cfg.configPath();
|
||||
_mutex.unlock();
|
||||
|
||||
csync_enable_conflictcopys(csync);
|
||||
QString excludeList = cfg.excludeFile();
|
||||
if( !excludeList.isEmpty() ) {
|
||||
qDebug() << "==== added CSync exclude List: " << excludeList.toUtf8();
|
||||
csync_add_exclude_list( csync, excludeList.toUtf8() );
|
||||
}
|
||||
|
||||
// cleans up behind us and emits finished() to ease error handling
|
||||
CSyncRunScopeHelper helper(csync, this);
|
||||
CSyncRunScopeHelper helper(_csync_ctx, this);
|
||||
|
||||
csync_set_userdata(csync, this);
|
||||
csync_set_module_property(_csync_ctx, "csync_context", _csync_ctx);
|
||||
csync_set_userdata(_csync_ctx, this);
|
||||
|
||||
csync_set_log_callback( csync, csyncLogCatcher );
|
||||
csync_set_auth_callback( csync, getauth );
|
||||
csync_set_progress_callback( csync, progress );
|
||||
|
||||
if( csync_init(csync) < 0 ) {
|
||||
handleSyncError(csync, "csync_init");
|
||||
return;
|
||||
}
|
||||
|
||||
// set module properties, mainly the proxy information.
|
||||
// do not use QLatin1String here because that has to be real const char* for C.
|
||||
csync_set_log_verbosity(csync, 11);
|
||||
csync_set_module_property(csync, "csync_context", csync);
|
||||
csync_set_module_property(csync, "proxy_type", (char*) proxyTypeToCStr(_proxy.type()) );
|
||||
csync_set_module_property(csync, "proxy_host", _proxy.hostName().toUtf8().data() );
|
||||
csync_set_module_property(csync, "proxy_port", &proxyPort );
|
||||
csync_set_module_property(csync, "proxy_user", _proxy.user().toUtf8().data() );
|
||||
csync_set_module_property(csync, "proxy_pwd" , _proxy.password().toUtf8().data() );
|
||||
// csync_set_auth_callback( _csync_ctx, getauth );
|
||||
csync_set_progress_callback( _csync_ctx, progress );
|
||||
|
||||
qDebug() << "#### Update start #################################################### >>";
|
||||
if( csync_update(csync) < 0 ) {
|
||||
handleSyncError(csync, "csync_update");
|
||||
if( csync_update(_csync_ctx) < 0 ) {
|
||||
handleSyncError(_csync_ctx, "csync_update");
|
||||
return;
|
||||
}
|
||||
qDebug() << "<<#### Update end ###########################################################";
|
||||
|
||||
if( csync_reconcile(csync) < 0 ) {
|
||||
handleSyncError(csync, "cysnc_reconcile");
|
||||
if( csync_reconcile(_csync_ctx) < 0 ) {
|
||||
handleSyncError(_csync_ctx, "cysnc_reconcile");
|
||||
return;
|
||||
}
|
||||
|
||||
_hasFiles = false;
|
||||
bool walkOk = true;
|
||||
if( csync_walk_local_tree(csync, &treewalkLocal, 0) < 0 ) {
|
||||
if( csync_walk_local_tree(_csync_ctx, &treewalkLocal, 0) < 0 ) {
|
||||
qDebug() << "Error in local treewalk.";
|
||||
walkOk = false;
|
||||
}
|
||||
if( walkOk && csync_walk_remote_tree(csync, &treewalkRemote, 0) < 0 ) {
|
||||
if( walkOk && csync_walk_remote_tree(_csync_ctx, &treewalkRemote, 0) < 0 ) {
|
||||
qDebug() << "Error in remote treewalk.";
|
||||
}
|
||||
|
||||
if (!_hasFiles && !_syncedItems.isEmpty()) {
|
||||
qDebug() << Q_FUNC_INFO << "All the files are going to be removed, asking the user";
|
||||
bool cancel = true;
|
||||
emit aboutToRemoveAllFiles(_syncedItems.first()._dir, &cancel);
|
||||
if (cancel) {
|
||||
qDebug() << Q_FUNC_INFO << "Abort sync";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (_needsUpdate)
|
||||
emit(started());
|
||||
|
||||
if( csync_propagate(csync) < 0 ) {
|
||||
handleSyncError(csync, "cysnc_reconcile");
|
||||
if( csync_propagate(_csync_ctx) < 0 ) {
|
||||
handleSyncError(_csync_ctx, "cysnc_reconcile");
|
||||
return;
|
||||
}
|
||||
|
||||
if( walkOk ) {
|
||||
if( csync_walk_local_tree(csync, &walkFinalize, 0) < 0 ||
|
||||
csync_walk_remote_tree( csync, &walkFinalize, 0 ) < 0 ) {
|
||||
qDebug() << "Error in finalize treewalk.";
|
||||
if( csync_walk_local_tree(_csync_ctx, &walkFinalize, 0) < 0 ||
|
||||
csync_walk_remote_tree( _csync_ctx, &walkFinalize, 0 ) < 0 ) {
|
||||
qDebug() << "Error in finalize treewalk.";
|
||||
} else {
|
||||
// emit the treewalk results.
|
||||
emit treeWalkResult(_syncedItems);
|
||||
}
|
||||
}
|
||||
qDebug() << Q_FUNC_INFO << "Sync finished";
|
||||
}
|
||||
|
||||
void CSyncThread::setConnectionDetails( const QString &user, const QString &passwd, const QNetworkProxy &proxy )
|
||||
{
|
||||
_mutex.lock();
|
||||
_user = user;
|
||||
_passwd = passwd;
|
||||
_proxy = proxy;
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
QString CSyncThread::csyncConfigDir()
|
||||
{
|
||||
return _csyncConfigDir;
|
||||
}
|
||||
|
||||
int CSyncThread::getauth(const char *prompt,
|
||||
char *buf,
|
||||
size_t len,
|
||||
int echo,
|
||||
int verify,
|
||||
void *userdata
|
||||
)
|
||||
{
|
||||
int re = 0;
|
||||
|
||||
QString qPrompt = QString::fromLatin1( prompt ).trimmed();
|
||||
|
||||
if( qPrompt == QLatin1String("Enter your username:") ) {
|
||||
// qDebug() << "OOO Username requested!";
|
||||
QMutexLocker locker( &_mutex );
|
||||
qstrncpy( buf, _user.toUtf8().constData(), len );
|
||||
} else if( qPrompt == QLatin1String("Enter your password:") ) {
|
||||
QMutexLocker locker( &_mutex );
|
||||
// qDebug() << "OOO Password requested!";
|
||||
qstrncpy( buf, _passwd.toUtf8().constData(), len );
|
||||
} else {
|
||||
if( qPrompt.startsWith( QLatin1String("There are problems with the SSL certificate:"))) {
|
||||
// SSL is requested. If the program came here, the SSL check was done by mirall
|
||||
// It needs to be checked if the chain is still equal to the one which
|
||||
// was verified by the user.
|
||||
QRegExp regexp("fingerprint: ([\\w\\d:]+)");
|
||||
bool certOk = false;
|
||||
|
||||
int pos = 0;
|
||||
|
||||
|
||||
// This is the set of certificates which QNAM accepted, so we should accept
|
||||
// them as well
|
||||
QList<QSslCertificate> certs = ownCloudInfo::instance()->certificateChain();
|
||||
|
||||
while (!certOk && (pos = regexp.indexIn(qPrompt, 1+pos)) != -1) {
|
||||
QString neon_fingerprint = regexp.cap(1);
|
||||
|
||||
foreach( const QSslCertificate& c, certs ) {
|
||||
QString verified_shasum = Utility::formatFingerprint(c.digest(QCryptographicHash::Sha1).toHex());
|
||||
qDebug() << "SSL Fingerprint from neon: " << neon_fingerprint << " compared to verified: " << verified_shasum;
|
||||
if( verified_shasum == neon_fingerprint ) {
|
||||
certOk = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// certOk = false; DEBUG setting, keep disabled!
|
||||
if( !certOk ) { // Problem!
|
||||
qstrcpy( buf, "no" );
|
||||
re = -1;
|
||||
} else {
|
||||
qstrcpy( buf, "yes" ); // Certificate is fine!
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Unknown prompt: <" << prompt << ">";
|
||||
re = -1;
|
||||
}
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
|
||||
void CSyncThread::progress(const char *remote_url, enum csync_notify_type_e kind,
|
||||
long long o1, long long o2, void *userdata)
|
||||
{
|
||||
|
||||
@@ -35,13 +35,9 @@ class CSyncThread : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CSyncThread(const QString &source, const QString &target);
|
||||
CSyncThread(CSYNC *);
|
||||
~CSyncThread();
|
||||
|
||||
static void setConnectionDetails( const QString&, const QString&, const QNetworkProxy& );
|
||||
static QString csyncConfigDir();
|
||||
|
||||
const char* proxyTypeToCStr(QNetworkProxy::ProxyType);
|
||||
QString csyncErrorToString( CSYNC_ERROR_CODE, const char * );
|
||||
|
||||
Q_INVOKABLE void startSync();
|
||||
@@ -60,6 +56,8 @@ signals:
|
||||
void finished();
|
||||
void started();
|
||||
|
||||
void aboutToRemoveAllFiles(SyncFileItem::Direction direction, bool *cancel);
|
||||
|
||||
private:
|
||||
void handleSyncError(CSYNC *ctx, const char *state);
|
||||
static void progress(const char *remote_url,
|
||||
@@ -74,27 +72,17 @@ private:
|
||||
|
||||
static int walkFinalize(TREE_WALK_FILE*, void* );
|
||||
|
||||
static int getauth(const char *prompt,
|
||||
char *buf,
|
||||
size_t len,
|
||||
int echo,
|
||||
int verify,
|
||||
void *userdata
|
||||
);
|
||||
|
||||
|
||||
static QMutex _mutex;
|
||||
static QString _user;
|
||||
static QString _passwd;
|
||||
static QNetworkProxy _proxy;
|
||||
|
||||
static QString _csyncConfigDir;
|
||||
|
||||
static QMutex _syncMutex;
|
||||
SyncFileItemVector _syncedItems;
|
||||
|
||||
QString _source;
|
||||
QString _target;
|
||||
CSYNC *_csync_ctx;
|
||||
bool _needsUpdate;
|
||||
|
||||
bool _hasFiles; // true if there is at least one file that is not ignored or removed
|
||||
|
||||
friend class CSyncRunScopeHelper;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "mirall/fileitemdialog.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/syncresult.h"
|
||||
#include "mirall/logger.h"
|
||||
|
||||
#define TYPE_SUCCESS 1
|
||||
#define TYPE_CONFLICT 2
|
||||
@@ -46,6 +47,7 @@ FileItemDialog::FileItemDialog(Theme *theme, QWidget *parent) :
|
||||
_treeWidget->setColumnWidth(0, 480);
|
||||
_timer.setInterval(1000);
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(slotSetFolderMessage()));
|
||||
connect(this, SIGNAL(guiLog(QString,QString)), Logger::instance(), SIGNAL(guiLog(QString,QString)));
|
||||
|
||||
QPushButton *copyBtn = _dialogButtonBox->addButton(tr("Copy"), QDialogButtonBox::ActionRole);
|
||||
connect(copyBtn, SIGNAL(clicked()), SLOT(copyToClipboard()));
|
||||
@@ -66,6 +68,9 @@ void FileItemDialog::setSyncResult( const SyncResult& result )
|
||||
case SyncResult::NotYetStarted:
|
||||
folderMessage = tr( "The folder waits to start syncing." );
|
||||
break;
|
||||
case SyncResult::SyncPrepare:
|
||||
folderMessage = tr( "Determining which files to sync." );
|
||||
break;
|
||||
case SyncResult::Unavailable:
|
||||
folderMessage = tr( "Server is currently not available." );
|
||||
break;
|
||||
@@ -118,7 +123,10 @@ void FileItemDialog::slotSetFolderMessage()
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
int secs = _lastSyncTime.secsTo(now);
|
||||
|
||||
_timelabel->setText(tr("%1 (finished %2 sec. ago)").arg(_folderMessage).arg(secs));
|
||||
if (secs < 60)
|
||||
_timelabel->setText(tr("%1 (last finished %n sec. ago)", "", secs).arg(_folderMessage));
|
||||
else
|
||||
_timelabel->setText(tr("%1 (last finished %n min. ago)", "", secs/60).arg(_folderMessage));
|
||||
}
|
||||
|
||||
void FileItemDialog::copyToClipboard()
|
||||
@@ -147,6 +155,7 @@ void FileItemDialog::copyToClipboard()
|
||||
}
|
||||
|
||||
QApplication::clipboard()->setText(text);
|
||||
emit guiLog(tr("Copied to clipboard"), tr("The sync protocol has been copied to the clipboard."));
|
||||
}
|
||||
|
||||
void FileItemDialog::accept()
|
||||
@@ -219,8 +228,8 @@ void FileItemDialog::setSyncFileItems( const SyncFileItemVector& list )
|
||||
|
||||
QString dir;
|
||||
QStringList str( item._file );
|
||||
if( item._dir == SyncFileItem::Up ) dir = tr("Up");
|
||||
if( item._dir == SyncFileItem::Down ) dir = tr("Down");
|
||||
if( item._dir == SyncFileItem::Up ) dir = tr("Uploaded");
|
||||
if( item._dir == SyncFileItem::Down ) dir = tr("Downloaded");
|
||||
str << dir;
|
||||
|
||||
switch( item._instruction ) {
|
||||
|
||||
@@ -43,6 +43,9 @@ protected slots:
|
||||
void slotSetFolderMessage();
|
||||
void copyToClipboard();
|
||||
|
||||
signals:
|
||||
void guiLog(const QString&, const QString&);
|
||||
|
||||
private:
|
||||
void setSyncFileItems( const SyncFileItemVector& list );
|
||||
void formatHeaderItem( QTreeWidgetItem *, const QList<QTreeWidgetItem*>& );
|
||||
|
||||
@@ -139,11 +139,6 @@ QString Folder::nativePath() const
|
||||
return QDir::toNativeSeparators(_path);
|
||||
}
|
||||
|
||||
QString Folder::nativeSecondPath() const
|
||||
{
|
||||
return secondPath();
|
||||
}
|
||||
|
||||
bool Folder::syncEnabled() const
|
||||
{
|
||||
return _enabled;
|
||||
@@ -282,7 +277,7 @@ void Folder::slotSyncFinished(const SyncResult &result)
|
||||
{
|
||||
_watcher->setEventsEnabledDelayed(2000);
|
||||
|
||||
qDebug() << "OO folder slotSyncFinished: result: " << int(result.status()) << " local: " << result.localRunOnly();
|
||||
qDebug() << "OO folder slotSyncFinished: result: " << int(result.status());
|
||||
emit syncStateChange();
|
||||
|
||||
// reenable the poll timer if folder is sync enabled
|
||||
|
||||
@@ -62,7 +62,6 @@ public:
|
||||
* local folder path with native separators
|
||||
*/
|
||||
QString nativePath() const;
|
||||
virtual QString nativeSecondPath() const;
|
||||
/**
|
||||
* switch sync on or off
|
||||
* If the sync is switched off, the startSync method is not going to
|
||||
@@ -174,6 +173,11 @@ public slots:
|
||||
*/
|
||||
void setPollInterval( int );
|
||||
|
||||
/**
|
||||
* If folder is network-based, reimplement to react to proxy changes
|
||||
*/
|
||||
virtual void setProxy() {}
|
||||
|
||||
protected:
|
||||
/**
|
||||
* The minimum amounts of seconds to wait before
|
||||
|
||||
@@ -14,14 +14,20 @@
|
||||
|
||||
#include "mirall/folderman.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/unisonfolder.h"
|
||||
#include "mirall/csyncfolder.h"
|
||||
#include "mirall/owncloudfolder.h"
|
||||
#include "mirall/syncresult.h"
|
||||
#include "mirall/inotify.h"
|
||||
#include "mirall/theme.h"
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
#include <CoreServices/CoreServices.h>
|
||||
#endif
|
||||
#ifdef Q_OS_WIN
|
||||
#include <shlobj.h>
|
||||
#endif
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QMessageBox>
|
||||
#include <QtCore>
|
||||
|
||||
namespace Mirall {
|
||||
@@ -32,9 +38,10 @@ FolderMan::FolderMan(QObject *parent) :
|
||||
{
|
||||
// if QDir::mkpath would not be so stupid, I would not need to have this
|
||||
// duplication of folderConfigPath() here
|
||||
QDir storageDir(QDesktopServices::storageLocation(QDesktopServices::DataLocation));
|
||||
MirallConfigFile cfg;
|
||||
QDir storageDir(cfg.configPath());
|
||||
storageDir.mkpath(QLatin1String("folders"));
|
||||
_folderConfigPath = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QLatin1String("/folders");
|
||||
_folderConfigPath = cfg.configPath() + QLatin1String("folders");
|
||||
|
||||
_folderChangeSignalMapper = new QSignalMapper(this);
|
||||
connect(_folderChangeSignalMapper, SIGNAL(mapped(const QString &)),
|
||||
@@ -73,20 +80,28 @@ void FolderMan::slotReparseConfiguration()
|
||||
setupKnownFolders();
|
||||
}
|
||||
|
||||
int FolderMan::unloadAllFolders()
|
||||
{
|
||||
// first terminate sync jobs.
|
||||
terminateCurrentSync();
|
||||
|
||||
int cnt = 0;
|
||||
|
||||
// clear the list of existing folders.
|
||||
Folder::MapIterator i(_folderMap);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
delete _folderMap.take( i.key() );
|
||||
cnt++;
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
int FolderMan::setupKnownFolders()
|
||||
{
|
||||
qDebug() << "* Setup folders from " << _folderConfigPath;
|
||||
|
||||
// first terminate sync jobs.
|
||||
terminateCurrentSync();
|
||||
|
||||
// clear the list of existing folders.
|
||||
Folder::MapIterator i(_folderMap);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
delete _folderMap.take( i.key() );
|
||||
}
|
||||
unloadAllFolders();
|
||||
|
||||
QDir dir( _folderConfigPath );
|
||||
dir.setFilter(QDir::Files);
|
||||
@@ -111,6 +126,25 @@ void FolderMan::wipeAllJournals()
|
||||
}
|
||||
}
|
||||
|
||||
bool FolderMan::ensureJournalGone(const QString &localPath)
|
||||
{
|
||||
|
||||
// remove old .csync_journal file
|
||||
QString stateDbFile = localPath+QLatin1String("/.csync_journal.db");
|
||||
while (QFile::exists(stateDbFile) && !QFile::remove(stateDbFile)) {
|
||||
int ret = QMessageBox::warning(0, tr("Could not reset folder state"),
|
||||
tr("An old sync journal '%1' was found, "
|
||||
"but could not be removed. Please make sure "
|
||||
"that no application is currently using it.")
|
||||
.arg(QDir::fromNativeSeparators(QDir::cleanPath(stateDbFile))),
|
||||
QMessageBox::Retry|QMessageBox::Abort);
|
||||
if (ret == QMessageBox::Abort) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void FolderMan::terminateCurrentSync()
|
||||
{
|
||||
if( !_currentSyncFolder.isEmpty() ) {
|
||||
@@ -214,17 +248,7 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
|
||||
|
||||
if (!backend.isEmpty()) {
|
||||
|
||||
if (backend == QLatin1String("unison")) {
|
||||
folder = new UnisonFolder(alias, path, targetPath, this );
|
||||
} else if (backend == QLatin1String("csync")) {
|
||||
#ifdef WITH_CSYNC
|
||||
folder = new CSyncFolder(alias, path, targetPath, this );
|
||||
#else
|
||||
qCritical() << "* csync support not enabled!! ignoring:" << file;
|
||||
#endif
|
||||
} else if( backend == QLatin1String("owncloud") ) {
|
||||
#ifdef WITH_CSYNC
|
||||
|
||||
if( backend == QLatin1String("owncloud") ) {
|
||||
MirallConfigFile cfgFile;
|
||||
|
||||
// assemble the owncloud url to pass to csync, incl. webdav
|
||||
@@ -232,18 +256,14 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
|
||||
|
||||
// cut off the leading slash, oCUrl always has a trailing.
|
||||
if( targetPath.startsWith(QLatin1Char('/')) ) {
|
||||
|
||||
targetPath.remove(0,1);
|
||||
}
|
||||
|
||||
folder = new ownCloudFolder( alias, path, oCUrl + targetPath, this );
|
||||
folder->setConfigFile(file);
|
||||
#else
|
||||
qCritical() << "* owncloud support not enabled!! ignoring:" << file;
|
||||
#endif
|
||||
} else {
|
||||
qWarning() << "unknown backend" << backend;
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,12 +303,18 @@ void FolderMan::slotEnableFolder( const QString& alias, bool enable )
|
||||
// csync still remains in a stable state, regardless of that.
|
||||
void FolderMan::terminateSyncProcess( const QString& alias )
|
||||
{
|
||||
Folder *f = _folderMap[alias];
|
||||
if( f ) {
|
||||
f->slotTerminateSync();
|
||||
QString folderAlias = alias;
|
||||
if( alias.isEmpty() ) {
|
||||
folderAlias = _currentSyncFolder;
|
||||
}
|
||||
if( ! folderAlias.isEmpty() ) {
|
||||
Folder *f = _folderMap[folderAlias];
|
||||
if( f ) {
|
||||
f->slotTerminateSync();
|
||||
|
||||
if(_currentSyncFolder == alias )
|
||||
_currentSyncFolder = QString::null;
|
||||
if(_currentSyncFolder == folderAlias )
|
||||
_currentSyncFolder = QString::null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,6 +471,8 @@ void FolderMan::removeFolder( const QString& alias )
|
||||
{
|
||||
Folder *f = 0;
|
||||
|
||||
_scheduleQueue.removeAll(alias);
|
||||
|
||||
if( _folderMap.contains( alias )) {
|
||||
qDebug() << "Removing " << alias;
|
||||
f = _folderMap.take( alias );
|
||||
@@ -463,4 +491,53 @@ void FolderMan::removeFolder( const QString& alias )
|
||||
}
|
||||
}
|
||||
|
||||
QString FolderMan::getBackupName( const QString& fullPathName ) const
|
||||
{
|
||||
if( fullPathName.isEmpty() ) return QString::null;
|
||||
|
||||
QString newName = fullPathName + QLatin1String(".oC_bak");
|
||||
QFileInfo fi( newName );
|
||||
int cnt = 1;
|
||||
do {
|
||||
if( fi.exists() ) {
|
||||
newName = fullPathName + QString( ".oC_bak_%1").arg(cnt++);
|
||||
fi.setFile(newName);
|
||||
}
|
||||
} while( fi.exists() );
|
||||
|
||||
return newName;
|
||||
}
|
||||
|
||||
bool FolderMan::startFromScratch( const QString& localFolder )
|
||||
{
|
||||
if( localFolder.isEmpty() ) return false;
|
||||
|
||||
QFileInfo fi( localFolder );
|
||||
if( fi.exists() && fi.isDir() ) {
|
||||
QDir file = fi.dir();
|
||||
|
||||
// check if there are files in the directory.
|
||||
if( file.count() == 0 ) {
|
||||
// directory is existing, but its empty. Use it.
|
||||
qDebug() << "startFromScratch: Directory is empty!";
|
||||
return true;
|
||||
}
|
||||
QString newName = getBackupName( fi.absoluteFilePath() );
|
||||
|
||||
if( file.rename( fi.absoluteFilePath(), newName )) {
|
||||
if( file.mkdir( fi.absoluteFilePath() ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void FolderMan::setProxy()
|
||||
{
|
||||
foreach( Folder *f, _folderMap.values() ) {
|
||||
f->setProxy();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -76,6 +76,23 @@ public:
|
||||
*/
|
||||
void wipeAllJournals();
|
||||
|
||||
/**
|
||||
* Ensures that a given directory does not contain a .csync_journal.
|
||||
*
|
||||
* @returns false if the journal could not be removed, false otherwise.
|
||||
*/
|
||||
static bool ensureJournalGone(const QString &path);
|
||||
|
||||
/**
|
||||
* Creates a new and empty local directory.
|
||||
*/
|
||||
bool startFromScratch( const QString& );
|
||||
|
||||
/**
|
||||
* called whenever proxy configuration changes
|
||||
*/
|
||||
void setProxy();
|
||||
|
||||
signals:
|
||||
/**
|
||||
* signal to indicate a folder named by alias has changed its sync state.
|
||||
@@ -92,7 +109,10 @@ public slots:
|
||||
|
||||
void slotReparseConfiguration();
|
||||
|
||||
void terminateSyncProcess( const QString& );
|
||||
void terminateSyncProcess( const QString& alias = QString::null );
|
||||
|
||||
/* delete all folder objects */
|
||||
int unloadAllFolders();
|
||||
|
||||
// if enabled is set to false, no new folders will start to sync.
|
||||
// the current one will finish.
|
||||
@@ -112,6 +132,7 @@ private:
|
||||
// and create the folders
|
||||
int setupKnownFolders();
|
||||
void terminateCurrentSync();
|
||||
QString getBackupName( const QString& ) const;
|
||||
|
||||
// Escaping of the alias which is used in QSettings AND the file
|
||||
// system, thus need to be escaped.
|
||||
|
||||
@@ -36,7 +36,8 @@ FolderWizardSourcePage::FolderWizardSourcePage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField(QLatin1String("sourceFolder*"), _ui.localFolderLineEdit);
|
||||
_ui.localFolderLineEdit->setText( QString::fromLatin1( "%1/%2").arg( QDir::homePath() ).arg(Theme::instance()->appName() ) );
|
||||
QString defaultPath = QString::fromLatin1( "%1/%2").arg( QDir::homePath() ).arg(Theme::instance()->appName() );
|
||||
_ui.localFolderLineEdit->setText( QDir::toNativeSeparators( defaultPath ) );
|
||||
registerField(QLatin1String("alias*"), _ui.aliasLineEdit);
|
||||
_ui.aliasLineEdit->setText( Theme::instance()->appNameGUI() );
|
||||
|
||||
@@ -64,7 +65,7 @@ void FolderWizardSourcePage::cleanupPage()
|
||||
|
||||
bool FolderWizardSourcePage::isComplete() const
|
||||
{
|
||||
QFileInfo selFile( _ui.localFolderLineEdit->text() );
|
||||
QFileInfo selFile( QDir::fromNativeSeparators(_ui.localFolderLineEdit->text()) );
|
||||
QString userInput = selFile.canonicalFilePath();
|
||||
|
||||
QString warnString;
|
||||
@@ -82,12 +83,20 @@ bool FolderWizardSourcePage::isComplete() const
|
||||
while( isOk && i != map->constEnd() ) {
|
||||
Folder *f = static_cast<Folder*>(i.value());
|
||||
QString folderDir = QDir( f->path() ).canonicalPath();
|
||||
if( folderDir.isEmpty() )
|
||||
{
|
||||
isOk = true;
|
||||
qDebug() << "Absolute path for folder: " << f->path() << " doesn't exist. Skipping.";
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if( ! folderDir.endsWith(QLatin1Char('/')) ) folderDir.append(QLatin1Char('/'));
|
||||
|
||||
qDebug() << "Checking local path: " << folderDir << " <-> " << userInput;
|
||||
if( QFileInfo( f->path() ) == userInput ) {
|
||||
isOk = false;
|
||||
warnString.append( tr("The local path %1 is already an upload folder.<br/>Please pick another one!").arg(userInput) );
|
||||
warnString.append( tr("The local path %1 is already an upload folder.<br/>Please pick another one!")
|
||||
.arg(QDir::toNativeSeparators(userInput)) );
|
||||
}
|
||||
if( isOk && folderDir.startsWith( userInput )) {
|
||||
qDebug() << "A already configured folder is child of the current selected";
|
||||
@@ -141,7 +150,7 @@ void FolderWizardSourcePage::on_localFolderChooseBtn_clicked()
|
||||
tr("Select the source folder"),
|
||||
QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
|
||||
if (!dir.isEmpty()) {
|
||||
_ui.localFolderLineEdit->setText(dir);
|
||||
_ui.localFolderLineEdit->setText(QDir::toNativeSeparators(dir));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,12 +168,7 @@ FolderWizardTargetPage::FolderWizardTargetPage()
|
||||
_ui.setupUi(this);
|
||||
_ui.warnFrame->hide();
|
||||
|
||||
registerField(QLatin1String("local?"), _ui.localFolderRadioBtn);
|
||||
registerField(QLatin1String("remote?"), _ui.urlFolderRadioBtn);
|
||||
registerField(QLatin1String("OC?"), _ui.OCRadioBtn);
|
||||
registerField(QLatin1String("targetLocalFolder"), _ui.localFolder2LineEdit);
|
||||
registerField(QLatin1String("targetURLFolder"), _ui.urlFolderLineEdit);
|
||||
registerField(QLatin1String("targetOCFolder"), _ui.OCFolderLineEdit);
|
||||
registerField(QLatin1String("OCFolderLineEdit"), _ui.OCFolderLineEdit);
|
||||
|
||||
connect( _ui.OCFolderLineEdit, SIGNAL(textChanged(QString)),
|
||||
SLOT(slotFolderTextChanged(QString)));
|
||||
@@ -172,12 +176,6 @@ FolderWizardTargetPage::FolderWizardTargetPage()
|
||||
_timer = new QTimer(this);
|
||||
_timer->setSingleShot( true );
|
||||
connect( _timer, SIGNAL(timeout()), SLOT(slotTimerFires()));
|
||||
|
||||
#if QT_Version >= 0x040700
|
||||
_ui.OCFolderLineEdit->setPlaceholderText(QApplication::translate("FolderWizardTargetPage", "root", 0, QApplication::UnicodeUTF8));
|
||||
_ui.localFolder2LineEdit->setPlaceholderText(QApplication::translate("FolderWizardTargetPage", "/home/local", 0, QApplication::UnicodeUTF8));
|
||||
_ui.urlFolderLineEdit->setPlaceholderText(QApplication::translate("FolderWizardTargetPage", "scp://john@host.com//myfolder", 0, QApplication::UnicodeUTF8));
|
||||
#endif
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::slotFolderTextChanged( const QString& t)
|
||||
@@ -217,11 +215,10 @@ void FolderWizardTargetPage::slotDirCheckReply(const QString &url, QNetworkReply
|
||||
|
||||
void FolderWizardTargetPage::slotCreateRemoteFolder()
|
||||
{
|
||||
_ui.OCFolderLineEdit->setEnabled( false );
|
||||
|
||||
const QString folder = _ui.OCFolderLineEdit->text();
|
||||
if( folder.isEmpty() ) return;
|
||||
|
||||
_ui.OCFolderLineEdit->setEnabled( false );
|
||||
qDebug() << "creating folder on ownCloud: " << folder;
|
||||
ownCloudInfo::instance()->mkdirRequest( folder );
|
||||
}
|
||||
@@ -247,26 +244,16 @@ FolderWizardTargetPage::~FolderWizardTargetPage()
|
||||
|
||||
bool FolderWizardTargetPage::isComplete() const
|
||||
{
|
||||
if (_ui.localFolderRadioBtn->isChecked()) {
|
||||
return QFileInfo(_ui.localFolder2LineEdit->text()).isDir();
|
||||
} else if (_ui.urlFolderRadioBtn->isChecked()) {
|
||||
QUrl url(_ui.urlFolderLineEdit->text());
|
||||
return url.isValid() && (url.scheme() == QLatin1String("sftp")
|
||||
|| url.scheme() == QLatin1String("smb"));
|
||||
} else if( _ui.OCRadioBtn->isChecked()) {
|
||||
/* owncloud selected */
|
||||
QString dir = _ui.OCFolderLineEdit->text();
|
||||
if( dir.isEmpty() ) {
|
||||
showWarn( tr("Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder."), false);
|
||||
QString dir = _ui.OCFolderLineEdit->text();
|
||||
if( dir.isEmpty() || dir == QLatin1String("/") ) {
|
||||
showWarn( tr("If you sync the root folder, you can <b>not</b> configure another sync directory."), false);
|
||||
return true;
|
||||
} else {
|
||||
} else {
|
||||
if( _dirChecked ) {
|
||||
showWarn();
|
||||
showWarn();
|
||||
}
|
||||
return _dirChecked;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::cleanupPage()
|
||||
@@ -276,35 +263,31 @@ void FolderWizardTargetPage::cleanupPage()
|
||||
|
||||
void FolderWizardTargetPage::initializePage()
|
||||
{
|
||||
slotToggleItems();
|
||||
showWarn();
|
||||
|
||||
/* check the owncloud configuration file and query the ownCloud */
|
||||
ownCloudInfo *ocInfo = ownCloudInfo::instance();
|
||||
if( ocInfo->isConfigured() ) {
|
||||
connect( ocInfo, SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
connect( ocInfo, SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
connect( ocInfo, SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
SLOT(slotDirCheckReply(QString,QNetworkReply*)));
|
||||
connect( ocInfo, SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||
SLOT(slotCreateRemoteFolderFinished( QNetworkReply::NetworkError )));
|
||||
connect( ocInfo, SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
connect( ocInfo, SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
connect( ocInfo, SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
SLOT(slotDirCheckReply(QString,QNetworkReply*)));
|
||||
connect( ocInfo, SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||
SLOT(slotCreateRemoteFolderFinished( QNetworkReply::NetworkError )));
|
||||
|
||||
connect(_ui._buttCreateFolder, SIGNAL(clicked()), SLOT(slotCreateRemoteFolder()));
|
||||
ocInfo->checkInstallation();
|
||||
connect(_ui._buttCreateFolder, SIGNAL(clicked()), SLOT(slotCreateRemoteFolder()));
|
||||
ocInfo->checkInstallation();
|
||||
|
||||
} else {
|
||||
_ui.OCRadioBtn->setEnabled( false );
|
||||
_ui.OCFolderLineEdit->setEnabled( false );
|
||||
}
|
||||
_ui.OCFolderLineEdit->setEnabled( false );
|
||||
|
||||
QString dir = _ui.OCFolderLineEdit->text();
|
||||
if( !dir.isEmpty() ) {
|
||||
slotFolderTextChanged( dir );
|
||||
QString dir = _ui.OCFolderLineEdit->text();
|
||||
if( !dir.isEmpty() ) {
|
||||
slotFolderTextChanged( dir );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::slotOwnCloudFound( const QString& url, const QString& infoStr, const QString& version, const QString& edition)
|
||||
{
|
||||
Q_UNUSED(version);
|
||||
@@ -312,10 +295,9 @@ void FolderWizardTargetPage::slotOwnCloudFound( const QString& url, const QStrin
|
||||
|
||||
if( infoStr.isEmpty() ) {
|
||||
} else {
|
||||
_ui.OCLabel->setText( tr("to your <a href=\"%1\">%2</a> (version %3)").arg(url)
|
||||
.arg(Theme::instance()->appNameGUI()).arg(infoStr));
|
||||
// _ui.OCLabel->setText( tr("to your <a href=\"%1\">%2</a> (version %3)").arg(url)
|
||||
// .arg(Theme::instance()->appNameGUI()).arg(infoStr));
|
||||
_ui.OCFolderLineEdit->setEnabled( true );
|
||||
_ui.OCRadioBtn->setEnabled( true );
|
||||
qDebug() << "ownCloud found on " << url << " with version: " << infoStr;
|
||||
}
|
||||
}
|
||||
@@ -323,10 +305,9 @@ void FolderWizardTargetPage::slotOwnCloudFound( const QString& url, const QStrin
|
||||
void FolderWizardTargetPage::slotNoOwnCloudFound( QNetworkReply* error )
|
||||
{
|
||||
qDebug() << "No ownCloud configured: " << error->error();
|
||||
_ui.OCLabel->setText( tr("no configured %1 found!").arg(Theme::instance()->appNameGUI()) );
|
||||
// _ui.OCLabel->setText( tr("no configured %1 found!").arg(Theme::instance()->appNameGUI()) );
|
||||
showWarn( tr("%1 could not be reached:<br/><tt>%2</tt>")
|
||||
.arg(Theme::instance()->appNameGUI()).arg(error->errorString()));
|
||||
_ui.OCRadioBtn->setEnabled( false );
|
||||
_ui.OCFolderLineEdit->setEnabled( false );
|
||||
}
|
||||
|
||||
@@ -343,132 +324,37 @@ void FolderWizardTargetPage::showWarn( const QString& msg, bool showCreateButton
|
||||
}
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::on_localFolderRadioBtn_toggled()
|
||||
{
|
||||
slotToggleItems();
|
||||
emit completeChanged();
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::on_urlFolderRadioBtn_toggled()
|
||||
{
|
||||
slotToggleItems();
|
||||
emit completeChanged();
|
||||
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::on_localFolder2LineEdit_textChanged()
|
||||
{
|
||||
emit completeChanged();
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::on_urlFolderLineEdit_textChanged()
|
||||
{
|
||||
emit completeChanged();
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::slotToggleItems()
|
||||
{
|
||||
|
||||
bool enabled = _ui.localFolderRadioBtn->isChecked();
|
||||
_ui.localFolder2LineEdit->setEnabled(enabled);
|
||||
_ui.localFolder2ChooseBtn->setEnabled(enabled);
|
||||
if( enabled ) {
|
||||
_warnWasVisible = _ui.warnFrame->isVisible();
|
||||
_ui.warnFrame->hide();
|
||||
}
|
||||
|
||||
enabled = _ui.urlFolderRadioBtn->isChecked();
|
||||
_ui.urlFolderLineEdit->setEnabled(enabled);
|
||||
if( enabled ) {
|
||||
_warnWasVisible = _ui.warnFrame->isVisible();
|
||||
_ui.warnFrame->hide();
|
||||
}
|
||||
|
||||
enabled = _ui.OCRadioBtn->isChecked();
|
||||
_ui.OCFolderLineEdit->setEnabled(enabled);
|
||||
if( enabled ) _ui.warnFrame->setVisible( _warnWasVisible );
|
||||
}
|
||||
|
||||
void FolderWizardTargetPage::on_localFolder2ChooseBtn_clicked()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory(this,
|
||||
tr("Select the target folder"),
|
||||
QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
|
||||
if (!dir.isEmpty()) {
|
||||
_ui.localFolder2LineEdit->setText(dir);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ====================================================================================
|
||||
|
||||
FolderWizardNetworkPage::FolderWizardNetworkPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField(QLatin1String("onlyNetwork*"), _ui.checkBoxOnlyOnline);
|
||||
registerField(QLatin1String("onlyLocalNetwork*"), _ui.checkBoxOnlyThisLAN );
|
||||
}
|
||||
|
||||
FolderWizardNetworkPage::~FolderWizardNetworkPage()
|
||||
{
|
||||
}
|
||||
|
||||
bool FolderWizardNetworkPage::isComplete() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
FolderWizardOwncloudPage::FolderWizardOwncloudPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField(QLatin1String("OCUrl*"), _ui.lineEditOCUrl);
|
||||
registerField(QLatin1String("OCUser*"), _ui.lineEditOCUser );
|
||||
registerField(QLatin1String("OCPasswd"), _ui.lineEditOCPasswd);
|
||||
registerField(QLatin1String("OCSiteAlias*"), _ui.lineEditOCAlias);
|
||||
}
|
||||
|
||||
FolderWizardOwncloudPage::~FolderWizardOwncloudPage()
|
||||
{
|
||||
}
|
||||
|
||||
void FolderWizardOwncloudPage::initializePage()
|
||||
{
|
||||
_ui.lineEditOCAlias->setText( QLatin1String("ownCloud") );
|
||||
_ui.lineEditOCUrl->setText( QLatin1String("http://localhost/owncloud") );
|
||||
QString user = QString::fromLocal8Bit(qgetenv("USER"));
|
||||
_ui.lineEditOCUser->setText( user );
|
||||
}
|
||||
|
||||
bool FolderWizardOwncloudPage::isComplete() const
|
||||
{
|
||||
|
||||
bool hasAlias = !(_ui.lineEditOCAlias->text().isEmpty());
|
||||
QUrl u( _ui.lineEditOCUrl->text() );
|
||||
bool hasUrl = u.isValid();
|
||||
|
||||
return hasAlias && hasUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Folder wizard itself
|
||||
*/
|
||||
|
||||
FolderWizard::FolderWizard( QWidget *parent )
|
||||
: QWizard(parent),
|
||||
_folderWizardSourcePage(0)
|
||||
_folderWizardSourcePage(0),
|
||||
_folderWizardTargetPage(0)
|
||||
{
|
||||
_folderWizardSourcePage = new FolderWizardSourcePage();
|
||||
setPage(Page_Source, _folderWizardSourcePage );
|
||||
if (!Theme::instance()->singleSyncFolder())
|
||||
setPage(Page_Target, new FolderWizardTargetPage());
|
||||
// setPage(Page_Network, new FolderWizardNetworkPage());
|
||||
// setPage(Page_Owncloud, new FolderWizardOwncloudPage());
|
||||
if (!Theme::instance()->singleSyncFolder()) {
|
||||
_folderWizardTargetPage = new FolderWizardTargetPage();
|
||||
setPage(Page_Target, _folderWizardTargetPage );
|
||||
}
|
||||
|
||||
setWindowTitle( tr( "%1 Folder Wizard" ).arg( Theme::instance()->appNameGUI() ) );
|
||||
#ifdef Q_WS_MAC
|
||||
setWizardStyle( QWizard::ModernStyle );
|
||||
#endif
|
||||
}
|
||||
|
||||
FolderWizard::~FolderWizard()
|
||||
{
|
||||
delete _folderWizardSourcePage;
|
||||
if( _folderWizardTargetPage )
|
||||
delete _folderWizardTargetPage;
|
||||
}
|
||||
|
||||
void FolderWizard::setFolderMap( Folder::Map *fm)
|
||||
{
|
||||
if( _folderWizardSourcePage ) {
|
||||
|
||||
@@ -23,14 +23,10 @@
|
||||
|
||||
#include "ui_folderwizardsourcepage.h"
|
||||
#include "ui_folderwizardtargetpage.h"
|
||||
#include "ui_folderwizardnetworkpage.h"
|
||||
#include "ui_folderwizardowncloudpage.h"
|
||||
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class ownCloudInfo;
|
||||
class ownCloudDirCheck;
|
||||
|
||||
/**
|
||||
* page to ask for the local source folder
|
||||
@@ -74,15 +70,6 @@ public:
|
||||
virtual void cleanupPage();
|
||||
|
||||
protected slots:
|
||||
void slotToggleItems();
|
||||
void on_localFolder2ChooseBtn_clicked();
|
||||
|
||||
void on_localFolderRadioBtn_toggled();
|
||||
void on_urlFolderRadioBtn_toggled();
|
||||
|
||||
void on_localFolder2LineEdit_textChanged();
|
||||
void on_urlFolderLineEdit_textChanged();
|
||||
|
||||
void slotOwnCloudFound( const QString&, const QString&, const QString&, const QString& );
|
||||
void slotNoOwnCloudFound(QNetworkReply*);
|
||||
|
||||
@@ -101,38 +88,6 @@ private:
|
||||
bool _warnWasVisible;
|
||||
};
|
||||
|
||||
class FolderWizardNetworkPage : public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FolderWizardNetworkPage();
|
||||
~FolderWizardNetworkPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
|
||||
protected slots:
|
||||
|
||||
private:
|
||||
Ui_FolderWizardNetworkPage _ui;
|
||||
};
|
||||
|
||||
class FolderWizardOwncloudPage : public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
FolderWizardOwncloudPage();
|
||||
~FolderWizardOwncloudPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
void initializePage();
|
||||
|
||||
protected slots:
|
||||
|
||||
private:
|
||||
Ui_FolderWizardOwncloudPage _ui;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -143,17 +98,17 @@ public:
|
||||
|
||||
enum {
|
||||
Page_Source,
|
||||
Page_Target,
|
||||
Page_Network,
|
||||
Page_Owncloud
|
||||
Page_Target
|
||||
};
|
||||
|
||||
FolderWizard(QWidget *parent = 0);
|
||||
~FolderWizard();
|
||||
void setFolderMap( Folder::Map* );
|
||||
|
||||
private:
|
||||
|
||||
FolderWizardSourcePage *_folderWizardSourcePage;
|
||||
FolderWizardTargetPage *_folderWizardTargetPage;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FolderWizardNetworkPage</class>
|
||||
<widget class="QWidget" name="FolderWizardNetworkPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>435</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Network Settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Set networking options:</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxOnlyOnline">
|
||||
<property name="text">
|
||||
<string>Only enable if network is available</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxOnlyThisLAN">
|
||||
<property name="text">
|
||||
<string>restrict to this local network</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>172</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>FolderWizardOwncloudPage</class>
|
||||
<widget class="QWidget" name="FolderWizardOwncloudPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>435</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="2" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>ownCloud Settings</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineEditOCUrl"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>URL:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>User:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="lineEditOCUser"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Password:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="lineEditOCPasswd">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditOCAlias"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Alias:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>172</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>ownCloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>520</width>
|
||||
<height>360</height>
|
||||
<height>367</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -48,7 +48,7 @@
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Select a destination folder for your data</string>
|
||||
<string>Select a destination folder</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
@@ -57,7 +57,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="1">
|
||||
<item row="0" column="0">
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
@@ -73,31 +73,12 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="OCLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>on your &ownCloud server</string>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>OCRadioBtn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Folder on ownCloud:</string>
|
||||
<string>Remote folder:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -109,163 +90,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../../mirall.qrc">:/mirall/resources/folder-grey-32.png</pixmap>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="LocalFolderLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>to a &local folder</string>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>localFolderRadioBtn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Folder name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLineEdit" name="localFolder2LineEdit"/>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QPushButton" name="localFolder2ChooseBtn">
|
||||
<property name="text">
|
||||
<string>C&hoose..</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QFrame" name="frame_3">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../../mirall.qrc">:/mirall/resources/folder-remote-32.png</pixmap>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<widget class="QLabel" name="OCLabel_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>to a &remote folder (URL)</string>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>urlFolderRadioBtn</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>URL:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLineEdit" name="urlFolderLineEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QRadioButton" name="OCRadioBtn">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QRadioButton" name="localFolderRadioBtn">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QRadioButton" name="urlFolderRadioBtn">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -405,8 +229,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../mirall.qrc"/>
|
||||
</resources>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -97,8 +97,6 @@ void INotify::slotActivated(int fd)
|
||||
foreach (QString path, paths)
|
||||
emit notifyEvent(event->mask, event->cookie, path + "/" + QString::fromUtf8(event->name));
|
||||
}
|
||||
else
|
||||
qWarning() << "n is NULL";
|
||||
|
||||
// increment counter
|
||||
i += sizeof(struct inotify_event) + event->len;
|
||||
@@ -114,6 +112,7 @@ INotify::~INotify()
|
||||
|
||||
close(_fd);
|
||||
free(_buffer);
|
||||
delete _notifier;
|
||||
}
|
||||
|
||||
void INotify::addPath(const QString &path)
|
||||
|
||||
@@ -113,15 +113,12 @@ LogBrowser::LogBrowser(QWidget *parent) :
|
||||
|
||||
setModal(false);
|
||||
|
||||
// needs to be a queued connection as logs from other threads come in
|
||||
connect(Logger::instance(), SIGNAL(newLog(QString)),this,SLOT(slotNewLog(QString)), Qt::QueuedConnection);
|
||||
// Direct connection for log comming from this thread, and queued for the one in a different thread
|
||||
connect(Logger::instance(), SIGNAL(newLog(QString)),this,SLOT(slotNewLog(QString)), Qt::AutoConnection);
|
||||
}
|
||||
|
||||
LogBrowser::~LogBrowser()
|
||||
{
|
||||
if( _logstream ) {
|
||||
_logFile.close();
|
||||
}
|
||||
}
|
||||
|
||||
void LogBrowser::slotNewLog( const QString& msg )
|
||||
@@ -138,6 +135,9 @@ void LogBrowser::slotNewLog( const QString& msg )
|
||||
|
||||
void LogBrowser::setLogFile( const QString & name, bool flush )
|
||||
{
|
||||
if( _logstream ) {
|
||||
_logFile.close();
|
||||
}
|
||||
_logFile.setFileName( name );
|
||||
|
||||
if(!_logFile.open(QIODevice::WriteOnly)) {
|
||||
@@ -150,7 +150,7 @@ void LogBrowser::setLogFile( const QString & name, bool flush )
|
||||
return;
|
||||
}
|
||||
_doFileFlush = flush;
|
||||
_logstream = new QTextStream( &_logFile );
|
||||
_logstream.reset(new QTextStream( &_logFile ));
|
||||
}
|
||||
|
||||
void LogBrowser::slotFind()
|
||||
|
||||
@@ -67,7 +67,7 @@ private:
|
||||
|
||||
QFile _logFile;
|
||||
bool _doFileFlush;
|
||||
QTextStream *_logstream;
|
||||
QScopedPointer<QTextStream> _logstream;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/owncloudinfo.h"
|
||||
#include "mirall/owncloudtheme.h"
|
||||
#include "mirall/miralltheme.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/credentialstore.h"
|
||||
|
||||
#include <QtCore>
|
||||
@@ -30,6 +30,7 @@
|
||||
namespace Mirall {
|
||||
|
||||
QString MirallConfigFile::_oCVersion;
|
||||
QString MirallConfigFile::_confDir = QString::null;
|
||||
bool MirallConfigFile::_askedUser = false;
|
||||
|
||||
MirallConfigFile::MirallConfigFile( const QString& appendix )
|
||||
@@ -37,9 +38,40 @@ MirallConfigFile::MirallConfigFile( const QString& appendix )
|
||||
{
|
||||
}
|
||||
|
||||
void MirallConfigFile::setConfDir(const QString &value)
|
||||
{
|
||||
if( value.isEmpty() ) return;
|
||||
|
||||
QFileInfo fi(value);
|
||||
if( fi.exists() && fi.isDir() ) {
|
||||
qDebug() << "** Using custom config dir " << value;
|
||||
_confDir=value;
|
||||
}
|
||||
}
|
||||
|
||||
QString MirallConfigFile::seenVersion() const
|
||||
{
|
||||
QSettings settings( configFile(), QSettings::IniFormat );
|
||||
settings.setIniCodec( "UTF-8" );
|
||||
settings.beginGroup(QLatin1String("Updater"));
|
||||
return settings.value(QLatin1String("seenVersion")).toString();
|
||||
}
|
||||
|
||||
void MirallConfigFile::setSeenVersion(const QString &version)
|
||||
{
|
||||
QSettings settings( configFile(), QSettings::IniFormat );
|
||||
settings.setIniCodec( "UTF-8" );
|
||||
settings.beginGroup(QLatin1String("Updater"));
|
||||
settings.setValue(QLatin1String("seenVersion"), version);
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
QString MirallConfigFile::configPath() const
|
||||
{
|
||||
QString dir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
|
||||
QString dir = _confDir;
|
||||
if( _confDir.isEmpty() )
|
||||
_confDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
|
||||
|
||||
if( !dir.endsWith(QLatin1Char('/')) ) dir.append(QLatin1Char('/'));
|
||||
return dir;
|
||||
}
|
||||
@@ -121,25 +153,17 @@ bool MirallConfigFile::connectionExists( const QString& conn )
|
||||
void MirallConfigFile::writeOwncloudConfig( const QString& connection,
|
||||
const QString& url,
|
||||
const QString& user,
|
||||
const QString& passwd,
|
||||
bool https, bool skipPwd )
|
||||
const QString& passwd )
|
||||
{
|
||||
const QString file = configFile();
|
||||
bool skipPwd = false; // can be refactored - remove it.
|
||||
qDebug() << "*** writing mirall config to " << file << " Skippwd: " << skipPwd;
|
||||
|
||||
QSettings settings( file, QSettings::IniFormat);
|
||||
settings.setIniCodec( "UTF-8" );
|
||||
QString cloudsUrl( url );
|
||||
|
||||
if( !cloudsUrl.startsWith( QLatin1String("http")) ) {
|
||||
if (https)
|
||||
cloudsUrl.prepend(QLatin1String("https://"));
|
||||
else
|
||||
cloudsUrl.prepend(QLatin1String("http://"));
|
||||
}
|
||||
|
||||
settings.beginGroup( connection );
|
||||
settings.setValue( QLatin1String("url"), cloudsUrl );
|
||||
settings.setValue( QLatin1String("url"), url );
|
||||
settings.setValue( QLatin1String("user"), user );
|
||||
|
||||
|
||||
@@ -491,7 +515,7 @@ void MirallConfigFile::acceptCustomConfig()
|
||||
|
||||
void MirallConfigFile::setProxyType(int proxyType,
|
||||
const QString& host,
|
||||
int port,
|
||||
int port, bool needsAuth,
|
||||
const QString& user,
|
||||
const QString& pass)
|
||||
{
|
||||
@@ -500,11 +524,15 @@ void MirallConfigFile::setProxyType(int proxyType,
|
||||
settings.beginGroup(QLatin1String("proxy"));
|
||||
|
||||
settings.setValue(QLatin1String("type"), proxyType);
|
||||
settings.setValue(QLatin1String("host"), host);
|
||||
settings.setValue(QLatin1String("port"), port);
|
||||
settings.setValue(QLatin1String("user"), user);
|
||||
settings.setValue(QLatin1String("pass"), pass.toUtf8().toBase64());
|
||||
|
||||
if (proxyType == QNetworkProxy::HttpProxy ||
|
||||
proxyType == QNetworkProxy::Socks5Proxy) {
|
||||
settings.setValue(QLatin1String("host"), host);
|
||||
settings.setValue(QLatin1String("port"), port);
|
||||
settings.setValue(QLatin1String("needsAuth"), needsAuth);
|
||||
settings.setValue(QLatin1String("user"), user);
|
||||
settings.setValue(QLatin1String("pass"), pass.toUtf8().toBase64());
|
||||
}
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
@@ -532,6 +560,11 @@ int MirallConfigFile::proxyPort() const
|
||||
return getValue(QLatin1String("port"), QLatin1String("proxy")).toInt();
|
||||
}
|
||||
|
||||
bool MirallConfigFile::proxyNeedsAuth() const
|
||||
{
|
||||
return getValue(QLatin1String("needsAuth"), QLatin1String("proxy")).toInt();
|
||||
}
|
||||
|
||||
QString MirallConfigFile::proxyUser() const
|
||||
{
|
||||
return getValue(QLatin1String("user"), QLatin1String("proxy")).toString();
|
||||
|
||||
@@ -27,6 +27,7 @@ class MirallConfigFile
|
||||
/* let only CredentialStore read the password from the file. All other classes
|
||||
* should work with CredentialStore to get the credentials. */
|
||||
friend class CredentialStore;
|
||||
friend class ConnectionValidator;
|
||||
public:
|
||||
MirallConfigFile( const QString& appendix = QString() );
|
||||
|
||||
@@ -50,8 +51,7 @@ public:
|
||||
void writeOwncloudConfig( const QString& connection,
|
||||
const QString& url,
|
||||
const QString& user,
|
||||
const QString& passwd,
|
||||
bool https, bool skipPwd );
|
||||
const QString& passwd );
|
||||
|
||||
void removeConnection( const QString& connection = QString() );
|
||||
|
||||
@@ -89,16 +89,21 @@ public:
|
||||
// proxy settings
|
||||
void setProxyType(int proxyType,
|
||||
const QString& host = QString(),
|
||||
int port = 0,
|
||||
int port = 0, bool needsAuth = false,
|
||||
const QString& user = QString(),
|
||||
const QString& pass = QString());
|
||||
|
||||
int proxyType() const;
|
||||
QString proxyHostName() const;
|
||||
int proxyPort() const;
|
||||
bool proxyNeedsAuth() const;
|
||||
QString proxyUser() const;
|
||||
QString proxyPassword() const;
|
||||
|
||||
static void setConfDir(const QString &value);
|
||||
|
||||
QString seenVersion() const;
|
||||
void setSeenVersion(const QString &version);
|
||||
protected:
|
||||
// these classes can only be access from CredentialStore as a friend class.
|
||||
QString ownCloudPasswd( const QString& connection = QString() ) const;
|
||||
@@ -112,6 +117,7 @@ private:
|
||||
private:
|
||||
static bool _askedUser;
|
||||
static QString _oCVersion;
|
||||
static QString _confDir;
|
||||
QString _customHandle;
|
||||
|
||||
};
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "miralltheme.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QDebug>
|
||||
#include <QPixmap>
|
||||
#include <QIcon>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
mirallTheme::mirallTheme()
|
||||
{
|
||||
qDebug() << " ** running mirall theme!";
|
||||
}
|
||||
|
||||
QString mirallTheme::appName() const
|
||||
{
|
||||
return QLatin1String("Mirall");
|
||||
}
|
||||
|
||||
QString mirallTheme::configFileName() const
|
||||
{
|
||||
return QLatin1String("mirall.cfg");
|
||||
}
|
||||
|
||||
QPixmap mirallTheme::splashScreen() const
|
||||
{
|
||||
return QPixmap(QLatin1String(":/mirall/resources/owncloud_splash.png")); // FIXME: mirall splash!
|
||||
}
|
||||
|
||||
QIcon mirallTheme::folderIcon( const QString& backend ) const
|
||||
{
|
||||
QString name;
|
||||
|
||||
if( backend == QString::fromLatin1("owncloud")) {
|
||||
name = QLatin1String( "mirall" );
|
||||
}
|
||||
if( backend == QString::fromLatin1("unison" )) {
|
||||
name = QLatin1String( "folder-sync" );
|
||||
}
|
||||
if( backend == QString::fromLatin1("csync" )) {
|
||||
name = QLatin1String( "folder-remote" );
|
||||
}
|
||||
if( backend.isEmpty() || backend == QString::fromLatin1("none") ) {
|
||||
name = QLatin1String("folder-grey.png");
|
||||
}
|
||||
|
||||
qDebug() << "==> load folder icon " << name;
|
||||
return themeIcon( name );
|
||||
}
|
||||
|
||||
QIcon mirallTheme::syncStateIcon( SyncResult::Status status, bool sysTray ) const
|
||||
{
|
||||
QString statusIcon;
|
||||
|
||||
switch( status ) {
|
||||
case SyncResult::Undefined:
|
||||
statusIcon = QLatin1String("dialog-close");
|
||||
break;
|
||||
case SyncResult::NotYetStarted:
|
||||
case SyncResult::SyncPrepare:
|
||||
statusIcon = QLatin1String("task-ongoing");
|
||||
break;
|
||||
case SyncResult::SyncRunning:
|
||||
statusIcon = QLatin1String("view-refresh");
|
||||
break;
|
||||
case SyncResult::Success:
|
||||
statusIcon = QLatin1String("dialog-ok");
|
||||
break;
|
||||
case SyncResult::Error:
|
||||
statusIcon = QLatin1String("dialog-close");
|
||||
break;
|
||||
case SyncResult::SetupError:
|
||||
statusIcon = QLatin1String("dialog-cancel");
|
||||
break;
|
||||
default:
|
||||
statusIcon = QLatin1String("dialog-close");
|
||||
}
|
||||
return themeIcon( statusIcon, sysTray );
|
||||
}
|
||||
|
||||
|
||||
QIcon mirallTheme::folderDisabledIcon() const
|
||||
{
|
||||
// Fixme: Do we really want the dialog-canel from theme here?
|
||||
return themeIcon( QLatin1String("dialog-cancel") );
|
||||
}
|
||||
|
||||
QIcon mirallTheme::applicationIcon( ) const
|
||||
{
|
||||
return themeIcon( QLatin1String("mirall"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#ifndef MIRALL_THEME_H
|
||||
#define MIRALL_THEME_H
|
||||
|
||||
#include "theme.h"
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class mirallTheme : public Theme
|
||||
{
|
||||
public:
|
||||
mirallTheme();
|
||||
|
||||
virtual QString appName() const;
|
||||
virtual QString configFileName() const;
|
||||
QPixmap splashScreen() const;
|
||||
|
||||
QIcon folderIcon( const QString& ) const;
|
||||
QIcon syncStateIcon(SyncResult::Status, bool) const;
|
||||
QIcon folderDisabledIcon() const;
|
||||
QIcon applicationIcon() const;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
#endif // MIRALL_THEME_H
|
||||
@@ -9,6 +9,8 @@
|
||||
#include <QtCore/QtDebug>
|
||||
#include <QtCore/QFile>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
void Owncloudclient::setVersion( const QString &v )
|
||||
{
|
||||
mVersion = v;
|
||||
@@ -147,4 +149,4 @@ bool Owncloudclient::writeFile( const QString &filename )
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
} // namespace Mirall
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <QDomElement>
|
||||
#include <QtXml/QXmlStreamWriter>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class Owncloudclient
|
||||
{
|
||||
public:
|
||||
@@ -31,4 +33,6 @@ class Owncloudclient
|
||||
QString mWeb;
|
||||
};
|
||||
|
||||
} // namespace Mirall
|
||||
|
||||
#endif
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "mirall/owncloudinfo.h"
|
||||
#include "mirall/credentialstore.h"
|
||||
#include "mirall/logger.h"
|
||||
#include "mirall/utility.h"
|
||||
|
||||
#include <csync.h>
|
||||
|
||||
@@ -32,9 +33,19 @@
|
||||
#include <QNetworkProxy>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkProxyFactory>
|
||||
#include <QMessageBox>
|
||||
#include <QPushButton>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
void csyncLogCatcher(CSYNC *ctx,
|
||||
int verbosity,
|
||||
const char *function,
|
||||
const char *buffer,
|
||||
void *userdata)
|
||||
{
|
||||
Logger::instance()->csyncLog( QString::fromUtf8(buffer) );
|
||||
}
|
||||
|
||||
static QString replaceScheme(const QString &urlStr)
|
||||
{
|
||||
@@ -50,11 +61,10 @@ static QString replaceScheme(const QString &urlStr)
|
||||
}
|
||||
|
||||
ownCloudFolder::ownCloudFolder(const QString &alias,
|
||||
const QString &path,
|
||||
const QString &mpath,
|
||||
const QString &secondPath,
|
||||
QObject *parent)
|
||||
: Folder(alias, path, secondPath, parent)
|
||||
, _secondPath(secondPath)
|
||||
: Folder(alias, mpath, secondPath, parent)
|
||||
, _thread(0)
|
||||
, _csync(0)
|
||||
, _csyncError(false)
|
||||
@@ -66,13 +76,162 @@ ownCloudFolder::ownCloudFolder(const QString &alias,
|
||||
connect(this, SIGNAL(syncFinished(SyncResult)), notifier, SLOT(slotSyncFinished(SyncResult)));
|
||||
qDebug() << "****** ownCloud folder using watcher *******";
|
||||
// The folder interval is set in the folder parent class.
|
||||
|
||||
QString url = replaceScheme(secondPath);
|
||||
QString localpath = path();
|
||||
|
||||
if( csync_create( &_csync_ctx, localpath.toUtf8().data(), url.toUtf8().data() ) < 0 ) {
|
||||
qDebug() << "Unable to create csync-context!";
|
||||
_csync_ctx = 0;
|
||||
} else {
|
||||
csync_set_log_callback( _csync_ctx, csyncLogCatcher );
|
||||
csync_set_log_verbosity(_csync_ctx, 11);
|
||||
|
||||
MirallConfigFile cfgFile;
|
||||
csync_set_config_dir( _csync_ctx, cfgFile.configPath().toUtf8() );
|
||||
|
||||
csync_enable_conflictcopys(_csync_ctx);
|
||||
QString excludeList = cfgFile.excludeFile();
|
||||
if( !excludeList.isEmpty() ) {
|
||||
qDebug() << "==== added CSync exclude List: " << excludeList.toUtf8();
|
||||
csync_add_exclude_list( _csync_ctx, excludeList.toUtf8() );
|
||||
}
|
||||
csync_set_auth_callback( _csync_ctx, getauth );
|
||||
|
||||
if( csync_init( _csync_ctx ) < 0 ) {
|
||||
qDebug() << "Could not initialize csync!";
|
||||
_csync_ctx = 0;
|
||||
}
|
||||
setProxy();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
ownCloudFolder::~ownCloudFolder()
|
||||
{
|
||||
|
||||
if( _thread ) {
|
||||
_thread->quit();
|
||||
csync_request_abort(_csync_ctx);
|
||||
_thread->wait();
|
||||
}
|
||||
delete _csync;
|
||||
// Destroy csync here.
|
||||
csync_destroy(_csync_ctx);
|
||||
}
|
||||
|
||||
void ownCloudFolder::setProxy()
|
||||
{
|
||||
if( _csync_ctx ) {
|
||||
/* Store proxy */
|
||||
MirallConfigFile cfgFile;
|
||||
QUrl proxyUrl(cfgFile.ownCloudUrl());
|
||||
QList<QNetworkProxy> proxies = QNetworkProxyFactory::proxyForQuery(proxyUrl);
|
||||
// We set at least one in Application
|
||||
Q_ASSERT(proxies.count() > 0);
|
||||
QNetworkProxy proxy = proxies.first();
|
||||
if (proxy.type() == QNetworkProxy::NoProxy) {
|
||||
qDebug() << "Passing NO proxy to csync for" << cfgFile.ownCloudUrl();
|
||||
} else {
|
||||
qDebug() << "Passing" << proxy.hostName() << "of proxy type " << proxy.type()
|
||||
<< " to csync for" << cfgFile.ownCloudUrl();
|
||||
}
|
||||
int proxyPort = proxy.port();
|
||||
|
||||
csync_set_module_property(_csync_ctx, "proxy_type", (char*) proxyTypeToCStr(proxy.type()) );
|
||||
csync_set_module_property(_csync_ctx, "proxy_host", proxy.hostName().toUtf8().data() );
|
||||
csync_set_module_property(_csync_ctx, "proxy_port", &proxyPort );
|
||||
csync_set_module_property(_csync_ctx, "proxy_user", proxy.user().toUtf8().data() );
|
||||
csync_set_module_property(_csync_ctx, "proxy_pwd" , proxy.password().toUtf8().data() );
|
||||
|
||||
csync_set_module_property(_csync_ctx, "csync_context", _csync_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
const char* ownCloudFolder::proxyTypeToCStr(QNetworkProxy::ProxyType type)
|
||||
{
|
||||
switch (type) {
|
||||
case QNetworkProxy::NoProxy:
|
||||
return "NoProxy";
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
return "DefaultProxy";
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
return "Socks5Proxy";
|
||||
case QNetworkProxy::HttpProxy:
|
||||
return "HttpProxy";
|
||||
case QNetworkProxy::HttpCachingProxy:
|
||||
return "HttpCachingProxy";
|
||||
case QNetworkProxy::FtpCachingProxy:
|
||||
return "FtpCachingProxy";
|
||||
default:
|
||||
return "NoProxy";
|
||||
}
|
||||
}
|
||||
|
||||
int ownCloudFolder::getauth(const char *prompt,
|
||||
char *buf,
|
||||
size_t len,
|
||||
int echo,
|
||||
int verify,
|
||||
void *userdata
|
||||
)
|
||||
{
|
||||
int re = 0;
|
||||
QMutex mutex;
|
||||
|
||||
QString qPrompt = QString::fromLatin1( prompt ).trimmed();
|
||||
QString user = CredentialStore::instance()->user();
|
||||
QString pwd = CredentialStore::instance()->password();
|
||||
|
||||
if( qPrompt == QLatin1String("Enter your username:") ) {
|
||||
// qDebug() << "OOO Username requested!";
|
||||
QMutexLocker locker( &mutex );
|
||||
qstrncpy( buf, user.toUtf8().constData(), len );
|
||||
} else if( qPrompt == QLatin1String("Enter your password:") ) {
|
||||
QMutexLocker locker( &mutex );
|
||||
// qDebug() << "OOO Password requested!";
|
||||
qstrncpy( buf, pwd.toUtf8().constData(), len );
|
||||
} else {
|
||||
if( qPrompt.startsWith( QLatin1String("There are problems with the SSL certificate:"))) {
|
||||
// SSL is requested. If the program came here, the SSL check was done by mirall
|
||||
// It needs to be checked if the chain is still equal to the one which
|
||||
// was verified by the user.
|
||||
QRegExp regexp("fingerprint: ([\\w\\d:]+)");
|
||||
bool certOk = false;
|
||||
|
||||
int pos = 0;
|
||||
|
||||
// This is the set of certificates which QNAM accepted, so we should accept
|
||||
// them as well
|
||||
QList<QSslCertificate> certs = ownCloudInfo::instance()->certificateChain();
|
||||
|
||||
while (!certOk && (pos = regexp.indexIn(qPrompt, 1+pos)) != -1) {
|
||||
QString neon_fingerprint = regexp.cap(1);
|
||||
|
||||
foreach( const QSslCertificate& c, certs ) {
|
||||
QString verified_shasum = Utility::formatFingerprint(c.digest(QCryptographicHash::Sha1).toHex());
|
||||
qDebug() << "SSL Fingerprint from neon: " << neon_fingerprint << " compared to verified: " << verified_shasum;
|
||||
if( verified_shasum == neon_fingerprint ) {
|
||||
certOk = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// certOk = false; DEBUG setting, keep disabled!
|
||||
if( !certOk ) { // Problem!
|
||||
qstrcpy( buf, "no" );
|
||||
re = -1;
|
||||
} else {
|
||||
qstrcpy( buf, "yes" ); // Certificate is fine!
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Unknown prompt: <" << prompt << ">";
|
||||
re = -1;
|
||||
}
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
|
||||
bool ownCloudFolder::isBusy() const
|
||||
{
|
||||
return ( _thread && _thread->isRunning() );
|
||||
@@ -80,9 +239,12 @@ bool ownCloudFolder::isBusy() const
|
||||
|
||||
QString ownCloudFolder::secondPath() const
|
||||
{
|
||||
QString re(_secondPath);
|
||||
QString re(Folder::secondPath());
|
||||
MirallConfigFile cfg;
|
||||
const QString ocUrl = cfg.ownCloudUrl(QString::null, true);
|
||||
QString ocUrl = cfg.ownCloudUrl(QString::null, true);
|
||||
if (ocUrl.endsWith(QLatin1Char('/')))
|
||||
ocUrl.chop(1);
|
||||
|
||||
// qDebug() << "**** " << ocUrl << " <-> " << re;
|
||||
if( re.startsWith( ocUrl ) ) {
|
||||
re.remove( ocUrl );
|
||||
@@ -91,15 +253,6 @@ QString ownCloudFolder::secondPath() const
|
||||
return re;
|
||||
}
|
||||
|
||||
QString ownCloudFolder::nativeSecondPath() const
|
||||
{
|
||||
// TODO: fold into secondPath() after 1.1.0 release
|
||||
QString path = secondPath();
|
||||
if (!path.startsWith(QLatin1Char('/')) || path.isEmpty())
|
||||
path.prepend(QLatin1Char('/'));
|
||||
return path;
|
||||
}
|
||||
|
||||
void ownCloudFolder::startSync()
|
||||
{
|
||||
startSync( QStringList() );
|
||||
@@ -111,7 +264,8 @@ void ownCloudFolder::startSync(const QStringList &pathList)
|
||||
qCritical() << "* ERROR csync is still running and new sync requested.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (_thread)
|
||||
_thread->quit();
|
||||
delete _csync;
|
||||
delete _thread;
|
||||
_errors.clear();
|
||||
@@ -122,27 +276,18 @@ void ownCloudFolder::startSync(const QStringList &pathList)
|
||||
MirallConfigFile cfgFile;
|
||||
|
||||
_syncResult.clearErrors();
|
||||
// we now have watchers for everything, so every sync is remote.
|
||||
_syncResult.setLocalRunOnly( false );
|
||||
_syncResult.setStatus( SyncResult::SyncPrepare );
|
||||
emit syncStateChange();
|
||||
|
||||
QString url = replaceScheme(_secondPath);
|
||||
|
||||
qDebug() << "*** Start syncing url to ownCloud: " << url;
|
||||
qDebug() << "*** Start syncing";
|
||||
_thread = new QThread(this);
|
||||
_csync = new CSyncThread( path(), url);
|
||||
_csync = new CSyncThread( _csync_ctx );
|
||||
_csync->moveToThread(_thread);
|
||||
|
||||
QList<QNetworkProxy> proxies = QNetworkProxyFactory::proxyForQuery(QUrl(cfgFile.ownCloudUrl()));
|
||||
// We set at least one in Application
|
||||
Q_ASSERT(proxies.count() > 0);
|
||||
QNetworkProxy proxy = proxies.first();
|
||||
|
||||
_csync->setConnectionDetails( CredentialStore::instance()->user(),
|
||||
CredentialStore::instance()->password(),
|
||||
proxy );
|
||||
qRegisterMetaType<SyncFileItemVector>("SyncFileItemVector");
|
||||
qRegisterMetaType<SyncFileItem::Direction>("SyncFileItem::Direction");
|
||||
|
||||
connect( _csync, SIGNAL(treeWalkResult(const SyncFileItemVector&)),
|
||||
this, SLOT(slotThreadTreeWalkResult(const SyncFileItemVector&)), Qt::QueuedConnection);
|
||||
|
||||
@@ -150,6 +295,11 @@ void ownCloudFolder::startSync(const QStringList &pathList)
|
||||
connect(_csync, SIGNAL(finished()), SLOT(slotCSyncFinished()), Qt::QueuedConnection);
|
||||
connect(_csync, SIGNAL(csyncError(QString)), SLOT(slotCSyncError(QString)), Qt::QueuedConnection);
|
||||
connect(_csync, SIGNAL(csyncUnavailable()), SLOT(slotCsyncUnavailable()), Qt::QueuedConnection);
|
||||
|
||||
//blocking connection so the message box happens in this thread, but block the csync thread.
|
||||
connect(_csync, SIGNAL(aboutToRemoveAllFiles(SyncFileItem::Direction,bool*)),
|
||||
SLOT(slotAboutToRemoveAllFiles(SyncFileItem::Direction,bool*)), Qt::BlockingQueuedConnection);
|
||||
|
||||
_thread->start();
|
||||
QMetaObject::invokeMethod(_csync, "startSync", Qt::QueuedConnection);
|
||||
emit syncStarted();
|
||||
@@ -204,16 +354,19 @@ void ownCloudFolder::slotThreadTreeWalkResult(const SyncFileItemVector& items)
|
||||
void ownCloudFolder::slotTerminateSync()
|
||||
{
|
||||
qDebug() << "folder " << alias() << " Terminating!";
|
||||
QString configDir = _csync->csyncConfigDir();
|
||||
MirallConfigFile cfg;
|
||||
QString configDir = cfg.configPath();
|
||||
qDebug() << "csync's Config Dir: " << configDir;
|
||||
|
||||
if( _thread ) {
|
||||
_thread->terminate();
|
||||
if( _thread && _csync ) {
|
||||
csync_request_abort(_csync_ctx);
|
||||
_thread->quit();
|
||||
_thread->wait();
|
||||
_csync->deleteLater();
|
||||
delete _thread;
|
||||
_csync = 0;
|
||||
_thread = 0;
|
||||
csync_resume(_csync_ctx);
|
||||
}
|
||||
|
||||
if( ! configDir.isEmpty() ) {
|
||||
@@ -332,18 +485,43 @@ void ServerActionNotifier::slotSyncFinished(const SyncResult &result)
|
||||
if (removedItems == 1)
|
||||
emit guiLog(tr("File removed"), tr("'%1' has been removed.").arg(file));
|
||||
else
|
||||
emit guiLog(tr("New files available"), tr("'%1' and %n other file(s) have been removed.",
|
||||
emit guiLog(tr("Files removed"), tr("'%1' and %n other file(s) have been removed.",
|
||||
"", removedItems-1).arg(file));
|
||||
}
|
||||
if (updatedItems > 0) {
|
||||
QString file = QDir::toNativeSeparators(firstItemUpdated._file);
|
||||
if (updatedItems == 1)
|
||||
emit guiLog(tr("File removed"), tr("'%1' has been updated.").arg(file));
|
||||
emit guiLog(tr("File updated"), tr("'%1' has been updated.").arg(file));
|
||||
else
|
||||
emit guiLog(tr("New files available"), tr("'%1' and %n other file(s) have been updated.",
|
||||
emit guiLog(tr("Files updated"), tr("'%1' and %n other file(s) have been updated.",
|
||||
"", updatedItems-1).arg(file));
|
||||
}
|
||||
}
|
||||
|
||||
void ownCloudFolder::slotAboutToRemoveAllFiles(SyncFileItem::Direction direction, bool *cancel)
|
||||
{
|
||||
QString msg = direction == SyncFileItem::Down ?
|
||||
tr("This sync would remove all the files in the local sync folder '%1'.\n"
|
||||
"If you or your administrator have reset your account on the server, choose"
|
||||
"\"Keep files\". If you want your data to be removed, choose \"Remove all files\".") :
|
||||
tr("This sync would remove all the files in the sync folder '%1'.\n"
|
||||
"This might be because the folder was silently reconfigured, or that all"
|
||||
"the file were manually removed.\n"
|
||||
"Are you sure you want to perform this operation?");
|
||||
QMessageBox msgBox(QMessageBox::Warning, tr("Remove All Files?"),
|
||||
msg.arg(alias()));
|
||||
msgBox.addButton(tr("Remove all files"), QMessageBox::DestructiveRole);
|
||||
QPushButton* keepBtn = msgBox.addButton(tr("Keep files"), QMessageBox::ActionRole);
|
||||
if (msgBox.exec() == -1) {
|
||||
*cancel = true;
|
||||
return;
|
||||
}
|
||||
*cancel = msgBox.clickedButton() == keepBtn;
|
||||
if (*cancel) {
|
||||
wipe();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} // ns
|
||||
|
||||
|
||||
@@ -64,7 +64,6 @@ public:
|
||||
const QString &secondPath, QObject *parent = 0L);
|
||||
virtual ~ownCloudFolder();
|
||||
QString secondPath() const;
|
||||
QString nativeSecondPath() const;
|
||||
virtual bool isBusy() const;
|
||||
virtual void startSync(const QStringList &pathList);
|
||||
|
||||
@@ -73,9 +72,12 @@ public:
|
||||
/* get status about a singel file. */
|
||||
SyncFileStatus fileStatus( const QString& );
|
||||
|
||||
void setProxy();
|
||||
|
||||
public slots:
|
||||
void startSync();
|
||||
void slotTerminateSync();
|
||||
void slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool*);
|
||||
|
||||
protected slots:
|
||||
void slotLocalPathChanged( const QString& );
|
||||
@@ -88,6 +90,15 @@ private slots:
|
||||
void slotCSyncFinished();
|
||||
|
||||
private:
|
||||
static int getauth(const char *prompt,
|
||||
char *buf,
|
||||
size_t len,
|
||||
int echo,
|
||||
int verify,
|
||||
void *userdata
|
||||
);
|
||||
const char* proxyTypeToCStr(QNetworkProxy::ProxyType type);
|
||||
|
||||
QString _secondPath;
|
||||
QThread *_thread;
|
||||
CSyncThread *_csync;
|
||||
@@ -96,6 +107,8 @@ private:
|
||||
bool _csyncUnavail;
|
||||
bool _wipeDb;
|
||||
SyncFileItemVector _items;
|
||||
|
||||
CSYNC *_csync_ctx;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>OwncloudFTPAccessPage</class>
|
||||
<widget class="QWidget" name="OwncloudFTPAccessPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>548</width>
|
||||
<height>324</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>FTP Access to your Webaccount:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_17">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>FTP Details and Credentials</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">The details here are used to install the owncloud data on your web space which is accessible over ftp. </span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>FTP-URL:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="ftpUrlEdit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>FTP-User:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="ftpUserEdit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Password:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="ftpPasswdEdit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>530</width>
|
||||
<height>114</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -14,8 +14,9 @@
|
||||
|
||||
#include "mirall/owncloudinfo.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/version.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/utility.h"
|
||||
#include "mirall/logger.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
@@ -30,6 +31,17 @@
|
||||
namespace Mirall
|
||||
{
|
||||
|
||||
class oCCookieJar : public QNetworkCookieJar
|
||||
{
|
||||
public:
|
||||
QList<QNetworkCookie> cookiesForUrl ( const QUrl & url ) const {
|
||||
QList<QNetworkCookie> list;
|
||||
return list;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
ownCloudInfo *ownCloudInfo::_instance = 0;
|
||||
|
||||
ownCloudInfo* ownCloudInfo::instance()
|
||||
@@ -53,7 +65,8 @@ ownCloudInfo::ownCloudInfo() :
|
||||
_manager(0)
|
||||
{
|
||||
_connection = Theme::instance()->appName();
|
||||
|
||||
connect(this, SIGNAL(guiLog(QString,QString)),
|
||||
Logger::instance(), SIGNAL(guiLog(QString,QString)));
|
||||
setNetworkAccessManager( new QNetworkAccessManager( this ) );
|
||||
|
||||
}
|
||||
@@ -70,8 +83,15 @@ void ownCloudInfo::setNetworkAccessManager( QNetworkAccessManager* qnam )
|
||||
connect( _manager, SIGNAL( sslErrors(QNetworkReply*, QList<QSslError>)),
|
||||
this, SIGNAL(sslFailed(QNetworkReply*, QList<QSslError>)) );
|
||||
|
||||
// The authenticationRequired signal is not handled because the creds are set
|
||||
// in the request header.
|
||||
#if 0
|
||||
connect( _manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
|
||||
this, SLOT(slotAuthentication(QNetworkReply*,QAuthenticator*)));
|
||||
#endif
|
||||
|
||||
// no cookie jar so far.
|
||||
_manager->setCookieJar(new oCCookieJar);
|
||||
|
||||
_certsUntrusted = false;
|
||||
|
||||
@@ -146,10 +166,9 @@ QNetworkReply* ownCloudInfo::mkdirRequest( const QString& dir )
|
||||
connect(qhttp, SIGNAL(requestFinished(int, bool)), this,SLOT(qhttpRequestFinished(int,bool)));
|
||||
connect(qhttp, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(qhttpResponseHeaderReceived(QHttpResponseHeader)));
|
||||
//connect(qhttp, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)), this, SLOT(qhttpAuthenticationRequired(QString,quint16,QAuthenticator*)));
|
||||
|
||||
QHttpRequestHeader header("MKCOL", QString(url.encodedPath()), 1,1); /* header */
|
||||
header.setValue("Host", QString(url.encodedHost()));
|
||||
header.setValue("User-Agent", QString("mirall-%1").arg(MIRALL_STRINGIFY(MIRALL_VERSION)).toAscii() );
|
||||
header.setValue("User-Agent", Utility::userAgentString());
|
||||
header.setValue("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
|
||||
header.setValue("Accept-Language", "it,de-de;q=0.8,it-it;q=0.6,en-us;q=0.4,en;q=0.2");
|
||||
header.setValue("Connection", "keep-alive");
|
||||
@@ -246,6 +265,8 @@ void ownCloudInfo::slotMkdirFinished()
|
||||
}
|
||||
#endif
|
||||
|
||||
// FIXME: remove this later, once the new connection dialog has settled.
|
||||
#if 0
|
||||
void ownCloudInfo::slotAuthentication( QNetworkReply *reply, QAuthenticator *auth )
|
||||
{
|
||||
if( !(auth && reply) ) return;
|
||||
@@ -282,6 +303,7 @@ void ownCloudInfo::slotAuthentication( QNetworkReply *reply, QAuthenticator *aut
|
||||
reply->close();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
QString ownCloudInfo::configHandle(QNetworkReply *reply)
|
||||
{
|
||||
@@ -294,6 +316,7 @@ QString ownCloudInfo::configHandle(QNetworkReply *reply)
|
||||
|
||||
QList<QSslCertificate> ownCloudInfo::certificateChain() const
|
||||
{
|
||||
QMutexLocker lock(const_cast<QMutex*>(&_certChainMutex));
|
||||
return _certificateChain;
|
||||
}
|
||||
|
||||
@@ -321,6 +344,7 @@ void ownCloudInfo::slotReplyFinished()
|
||||
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
|
||||
QSslConfiguration sslConfig = reply->sslConfiguration();
|
||||
if (!sslConfig.isNull()) {
|
||||
QMutexLocker lock(&_certChainMutex);
|
||||
_certificateChain = sslConfig.peerCertificateChain();
|
||||
}
|
||||
|
||||
@@ -414,7 +438,9 @@ void ownCloudInfo::slotReplyFinished()
|
||||
} else if( key == QLatin1String( "edition") ) {
|
||||
// get version out
|
||||
edition = val;
|
||||
} else {
|
||||
} else if(key == QLatin1String("installed")) {
|
||||
// Silently ignoring "installed = true" information
|
||||
} else {
|
||||
qDebug() << "Unknown info from ownCloud status.php: "<< key << "=" << val;
|
||||
}
|
||||
}
|
||||
@@ -457,7 +483,36 @@ bool ownCloudInfo::certsUntrusted()
|
||||
|
||||
void ownCloudInfo::slotError( QNetworkReply::NetworkError err)
|
||||
{
|
||||
qDebug() << "ownCloudInfo Network Error: " << err;
|
||||
qDebug() << "ownCloudInfo Network Error: " << err;
|
||||
|
||||
switch (err) {
|
||||
case QNetworkReply::ProxyConnectionRefusedError:
|
||||
emit guiLog(tr("Proxy Refused Connection "),
|
||||
tr("The configured proxy has refused the connection. "
|
||||
"Please check the proxy settings."));
|
||||
break;
|
||||
case QNetworkReply::ProxyConnectionClosedError:
|
||||
emit guiLog(tr("Proxy Closed Connection"),
|
||||
tr("The configured proxy has closed the connection. "
|
||||
"Please check the proxy settings."));
|
||||
break;
|
||||
case QNetworkReply::ProxyNotFoundError:
|
||||
emit guiLog(tr("Proxy Not Found"),
|
||||
tr("The configured proxy could not be found. "
|
||||
"Please check the proxy settings."));
|
||||
break;
|
||||
case QNetworkReply::ProxyAuthenticationRequiredError:
|
||||
emit guiLog(tr("Proxy Authentication Error"),
|
||||
tr("The configured proxy requires login but the proxy credentials "
|
||||
"are invalid. Please check the proxy settings."));
|
||||
break;
|
||||
case QNetworkReply::ProxyTimeoutError:
|
||||
emit guiLog(tr("Proxy Connection Timed Out"),
|
||||
tr("The connection to the configured proxy has timed out."));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ownCloudInfo::setCredentials( const QString& user, const QString& passwd,
|
||||
@@ -486,8 +541,7 @@ void ownCloudInfo::setupHeaders( QNetworkRequest & req, quint64 size )
|
||||
QUrl url( cfgFile.ownCloudUrl( QString::null, false ) );
|
||||
qDebug() << "Setting up host header: " << url.host();
|
||||
req.setRawHeader( QByteArray("Host"), url.host().toUtf8() );
|
||||
req.setRawHeader( QByteArray("User-Agent"), QString::fromLatin1("mirall-%1")
|
||||
.arg(QLatin1String(MIRALL_STRINGIFY(MIRALL_VERSION))).toAscii());
|
||||
req.setRawHeader( QByteArray("User-Agent"), Utility::userAgentString());
|
||||
|
||||
QString con = _configHandle;
|
||||
if( con.isEmpty() ) con = DEFAULT_CONNECTION;
|
||||
@@ -495,7 +549,7 @@ void ownCloudInfo::setupHeaders( QNetworkRequest & req, quint64 size )
|
||||
oCICredentials creds = _credentials.value(con);
|
||||
QString concatenated = creds.user + QLatin1Char(':') + creds.passwd;
|
||||
const QString b(QLatin1String("Basic "));
|
||||
QByteArray data = b.toLocal8Bit() + concatenated.toLocal8Bit().toBase64();
|
||||
QByteArray data = b.toUtf8() + concatenated.toUtf8().toBase64();
|
||||
req.setRawHeader( QByteArray("Authorization"), data );
|
||||
}
|
||||
|
||||
|
||||
@@ -118,13 +118,13 @@ signals:
|
||||
|
||||
void webdavColCreated( QNetworkReply::NetworkError );
|
||||
void sslFailed( QNetworkReply *reply, QList<QSslError> errors );
|
||||
|
||||
void guiLog( const QString& title, const QString& content );
|
||||
public slots:
|
||||
|
||||
protected slots:
|
||||
void slotReplyFinished( );
|
||||
void slotError( QNetworkReply::NetworkError );
|
||||
void slotAuthentication( QNetworkReply*, QAuthenticator *);
|
||||
// void slotAuthentication( QNetworkReply*, QAuthenticator *);
|
||||
|
||||
#if QT46_IMPL
|
||||
void qhttpRequestFinished(int id, bool success );
|
||||
@@ -160,6 +160,7 @@ private:
|
||||
bool _certsUntrusted;
|
||||
int _authAttempts;
|
||||
QMap<QString, oCICredentials> _credentials;
|
||||
QMutex _certChainMutex;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
475
src/mirall/owncloudsetuppage_ng.ui
Normal file
475
src/mirall/owncloudsetuppage_ng.ui
Normal file
@@ -0,0 +1,475 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>OwncloudSetupPage</class>
|
||||
<widget class="QWidget" name="OwncloudSetupPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>583</width>
|
||||
<height>448</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMinimumSize</enum>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QLabel" name="topLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>68</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="resultLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="3">
|
||||
<widget class="QWidget" name="advancedBox" native="true">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Local Folder</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>pbSelectLocalFolder</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="pbSelectLocalFolder">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>pbSelectLocalFolder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QWidget" name="resolutionWidget" native="true">
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMinimumSize</enum>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QRadioButton" name="radioButton">
|
||||
<property name="text">
|
||||
<string>&Keep local data</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><small>Syncs your existing data to new location.</small></string>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="indent">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QRadioButton" name="cbSyncFromScratch">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>If this box is checked, existing content in the local directory will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers directory.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Start a clean sync</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><small>Erases the contents of the local folder before syncing using the new settings.</small></string>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="indent">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Server &Address</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>leUrl</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="Utils::FancyLineEdit" name="leUrl">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Enter the url of the ownCloud you want to connect to (without http or https).</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>https://...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>&Username</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>leUsername</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="Utils::FancyLineEdit" name="leUsername">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Enter the ownCloud username.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>&Password</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>lePassword</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="Utils::FancyLineEdit" name="lePassword">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Enter the ownCloud password.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="errorLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Error Label</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="cbAdvanced">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Advanced &Settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="3">
|
||||
<widget class="QLabel" name="syncModeLabel">
|
||||
<property name="text">
|
||||
<string>Status message</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>58</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="bottomLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Utils::FancyLineEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header location="global">fancylineedit.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>lePassword</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -12,6 +12,11 @@
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <QtCore>
|
||||
#include <QProcess>
|
||||
#include <QMessageBox>
|
||||
#include <QDesktopServices>
|
||||
|
||||
#include "mirall/owncloudsetupwizard.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/owncloudinfo.h"
|
||||
@@ -19,11 +24,6 @@
|
||||
#include "mirall/credentialstore.h"
|
||||
#include "mirall/utility.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QProcess>
|
||||
#include <QMessageBox>
|
||||
#include <QDesktopServices>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class Theme;
|
||||
@@ -34,61 +34,76 @@ OwncloudSetupWizard::OwncloudSetupWizard( FolderMan *folderMan, Theme *theme, QO
|
||||
_checkInstallationRequest(0),
|
||||
_folderMan(folderMan)
|
||||
{
|
||||
_process = new QProcess( this );
|
||||
|
||||
QObject::connect(_process, SIGNAL(readyReadStandardOutput()),
|
||||
SLOT(slotReadyReadStandardOutput()));
|
||||
|
||||
QObject::connect(_process, SIGNAL(readyReadStandardError()),
|
||||
SLOT(slotReadyReadStandardError()));
|
||||
|
||||
QObject::connect(_process, SIGNAL(stateChanged(QProcess::ProcessState)),
|
||||
SLOT(slotStateChanged(QProcess::ProcessState)));
|
||||
|
||||
QObject::connect(_process, SIGNAL(error(QProcess::ProcessError)),
|
||||
SLOT(slotError(QProcess::ProcessError)));
|
||||
|
||||
QObject::connect(_process, SIGNAL(started()),
|
||||
SLOT(slotStarted()));
|
||||
|
||||
QObject::connect(_process, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||
SLOT(slotProcessFinished(int, QProcess::ExitStatus)));
|
||||
|
||||
|
||||
_ocWizard = new OwncloudWizard();
|
||||
|
||||
connect( _ocWizard, SIGNAL(connectToOCUrl( const QString& ) ),
|
||||
this, SLOT(slotConnectToOCUrl( const QString& )));
|
||||
|
||||
connect( _ocWizard, SIGNAL(installOCServer()),
|
||||
this, SLOT(slotInstallOCServer()));
|
||||
|
||||
connect( _ocWizard, SIGNAL(installOCLocalhost()),
|
||||
this, SLOT(slotCreateOCLocalhost()));
|
||||
|
||||
connect( _ocWizard, SIGNAL(finished(int)),this,SLOT(slotAssistantFinished(int)));
|
||||
|
||||
// in case of cancel, terminate the owncloud-admin script.
|
||||
connect( _ocWizard, SIGNAL(rejected()), _process, SLOT(terminate()));
|
||||
|
||||
connect( _ocWizard, SIGNAL(clearPendingRequests()),
|
||||
this, SLOT(slotClearPendingRequests()));
|
||||
|
||||
_ocWizard->setWindowTitle( tr("%1 Connection Wizard").arg( theme ? theme->appNameGUI() : QLatin1String("Mirall") ) );
|
||||
|
||||
_ocWizard->setWindowTitle( tr("%1 Connection Wizard").arg( theme->appNameGUI() ) );
|
||||
}
|
||||
|
||||
OwncloudSetupWizard::~OwncloudSetupWizard()
|
||||
{
|
||||
|
||||
_ocWizard->deleteLater();
|
||||
}
|
||||
|
||||
OwncloudWizard *OwncloudSetupWizard::wizard() {
|
||||
return _ocWizard;
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::startWizard()
|
||||
{
|
||||
// Set useful default values.
|
||||
MirallConfigFile cfgFile;
|
||||
// Fill the entry fields with existing values.
|
||||
QString url = cfgFile.ownCloudUrl();
|
||||
QString user = cfgFile.ownCloudUser();
|
||||
bool configExists = !( url.isEmpty() || user.isEmpty() );
|
||||
_ocWizard->setConfigExists( configExists );
|
||||
|
||||
if( !user.isEmpty() ) {
|
||||
_ocWizard->setOCUser( user );
|
||||
}
|
||||
|
||||
if( !url.isEmpty() ) {
|
||||
_ocWizard->setOCUrl( url );
|
||||
}
|
||||
|
||||
_remoteFolder = Theme::instance()->defaultServerFolder();
|
||||
// remoteFolder may be empty, which means /
|
||||
|
||||
QString localFolder = Theme::instance()->defaultClientFolder();
|
||||
|
||||
// if its a relative path, prepend with users home dir, otherwise use as absolute path
|
||||
if( !localFolder.startsWith(QLatin1Char('/')) ) {
|
||||
localFolder = QDir::homePath() + QDir::separator() + Theme::instance()->defaultClientFolder();
|
||||
}
|
||||
_ocWizard->setProperty("localFolder", localFolder);
|
||||
_ocWizard->setRemoteFolder(_remoteFolder);
|
||||
|
||||
_ocWizard->setStartId(OwncloudWizard::Page_oCSetup);
|
||||
|
||||
_ocWizard->restart();
|
||||
|
||||
// settings re-initialized in initPage must be set here after restart
|
||||
_ocWizard->setMultipleFoldersExist(_folderMan->map().count() > 1);
|
||||
|
||||
_ocWizard->show();
|
||||
}
|
||||
|
||||
|
||||
// Method executed when the user ends the wizard, either with 'accept' or 'reject'.
|
||||
// accept the custom config to be the main one if Accepted.
|
||||
void OwncloudSetupWizard::slotAssistantFinished( int result )
|
||||
{
|
||||
MirallConfigFile cfg( _configHandle );
|
||||
|
||||
|
||||
if( result == QDialog::Rejected ) {
|
||||
// the old config remains valid. Remove the temporary one.
|
||||
cfg.cleanupCustomConfig();
|
||||
@@ -98,40 +113,67 @@ void OwncloudSetupWizard::slotAssistantFinished( int result )
|
||||
|
||||
// go through all folders and remove the journals if the server changed.
|
||||
MirallConfigFile prevCfg;
|
||||
if( prevCfg.ownCloudUrl() != cfg.ownCloudUrl() ) {
|
||||
qDebug() << "ownCloud URL has changed, journals needs to be wiped.";
|
||||
_folderMan->wipeAllJournals();
|
||||
QUrl prevUrl( prevCfg.ownCloudUrl() );
|
||||
QUrl newUrl( cfg.ownCloudUrl() );
|
||||
|
||||
bool urlHasChanged = (prevUrl.host() != newUrl.host() || prevUrl.path() != newUrl.path());
|
||||
|
||||
// if the user changed, its also a changed url.
|
||||
if( prevCfg.ownCloudUser() != cfg.ownCloudUser() ) {
|
||||
urlHasChanged = true;
|
||||
qDebug() << "The User has changed, same as url change.";
|
||||
}
|
||||
|
||||
// save the user credentials and afterwards clear the cred store.
|
||||
cfg.acceptCustomConfig();
|
||||
const QString localFolder = _ocWizard->localFolder();
|
||||
bool acceptCfg = true;
|
||||
|
||||
// Now write the resulting folder definition if folder names are set.
|
||||
if( !( _localFolder.isEmpty() || _remoteFolder.isEmpty() ) ) { // both variables are set.
|
||||
if( _folderMan ) {
|
||||
_folderMan->addFolderDefinition( QLatin1String("owncloud"), Theme::instance()->appName(),
|
||||
_localFolder, _remoteFolder, false );
|
||||
_ocWizard->appendToResultWidget(tr("<font color=\"green\"><b>Local sync folder %1 successfully created!</b></font>").arg(_localFolder));
|
||||
} else {
|
||||
qDebug() << "WRN: Folderman is zero in Setup Wizzard.";
|
||||
if( urlHasChanged ) {
|
||||
_folderMan->unloadAllFolders();
|
||||
|
||||
bool startFromScratch = _ocWizard->field( "OCSyncFromScratch" ).toBool();
|
||||
if( startFromScratch ) {
|
||||
// first try to rename (backup) the current local dir.
|
||||
bool renameOk = false;
|
||||
while( !renameOk ) {
|
||||
renameOk = _folderMan->startFromScratch(localFolder);
|
||||
if( ! renameOk ) {
|
||||
QMessageBox::StandardButton but;
|
||||
but = QMessageBox::question( 0, tr("Folder rename failed"),
|
||||
tr("Can't remove and back up the folder because the folder or a file in it is open in another program."
|
||||
"Please close the folder or file and hit retry or cancel the setup."), QMessageBox::Retry | QMessageBox::Abort, QMessageBox::Retry);
|
||||
if( but == QMessageBox::Abort ) {
|
||||
renameOk = true;
|
||||
acceptCfg = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// save the user credentials and afterwards clear the cred store.
|
||||
if( acceptCfg ) {
|
||||
cfg.acceptCustomConfig();
|
||||
}
|
||||
|
||||
// Now write the resulting folder definition if folder names are set.
|
||||
if( acceptCfg && urlHasChanged ) {
|
||||
_folderMan->removeAllFolderDefinitions();
|
||||
_folderMan->addFolderDefinition( QLatin1String("owncloud"), Theme::instance()->appName(),
|
||||
localFolder, _remoteFolder, false );
|
||||
_ocWizard->appendToConfigurationLog(tr("<font color=\"green\"><b>Local sync folder %1 successfully created!</b></font>").arg(localFolder));
|
||||
} else {
|
||||
// url is unchanged. Only the password was changed.
|
||||
if( acceptCfg ) {
|
||||
qDebug() << "Only password was changed, no changes to folder configuration.";
|
||||
} else {
|
||||
qDebug() << "User interrupted change of configuration.";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
qDebug() << "WRN: Got unknown dialog result code " << result;
|
||||
}
|
||||
|
||||
// clear the custom config handle
|
||||
_configHandle.clear();
|
||||
ownCloudInfo::instance()->setCustomConfigHandle( QString::null );
|
||||
|
||||
// disconnect the ocInfo object
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
this, SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
this, SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||
this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||
|
||||
// notify others.
|
||||
emit ownCloudWizardDone( result );
|
||||
}
|
||||
@@ -140,7 +182,7 @@ void OwncloudSetupWizard::slotConnectToOCUrl( const QString& url )
|
||||
{
|
||||
qDebug() << "Connect to url: " << url;
|
||||
_ocWizard->setField(QLatin1String("OCUrl"), url );
|
||||
_ocWizard->appendToResultWidget(tr("Trying to connect to %1 at %2...")
|
||||
_ocWizard->appendToConfigurationLog(tr("Trying to connect to %1 at %2...")
|
||||
.arg( Theme::instance()->appNameGUI() ).arg(url) );
|
||||
testOwnCloudConnect();
|
||||
}
|
||||
@@ -156,29 +198,46 @@ void OwncloudSetupWizard::slotClearPendingRequests()
|
||||
qDebug() << "ABORTing pending check installation request.";
|
||||
_checkInstallationRequest->abort();
|
||||
}
|
||||
if( _checkRemoteFolderRequest && _checkRemoteFolderRequest->isRunning() ) {
|
||||
qDebug() << "ABORTing pending remote folder check request.";
|
||||
_checkRemoteFolderRequest->abort();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::testOwnCloudConnect()
|
||||
{
|
||||
// write a temporary config.
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
|
||||
// remove a possibly existing custom config.
|
||||
if( ! _configHandle.isEmpty() ) {
|
||||
// remove the old config file.
|
||||
MirallConfigFile oldConfig( _configHandle );
|
||||
oldConfig.cleanupCustomConfig();
|
||||
}
|
||||
|
||||
_configHandle = now.toString(QLatin1String("MMddyyhhmmss"));
|
||||
|
||||
MirallConfigFile cfgFile( _configHandle );
|
||||
|
||||
QString url = _ocWizard->field(QLatin1String("OCUrl")).toString();
|
||||
if( url.isEmpty() ) return;
|
||||
if( !( url.startsWith(QLatin1String("https://")) || url.startsWith(QLatin1String("http://"))) ) {
|
||||
qDebug() << "url does not start with a valid protocol, assuming https.";
|
||||
url.prepend(QLatin1String("https://"));
|
||||
// FIXME: give a hint about the auto completion
|
||||
_ocWizard->setOCUrl(url);
|
||||
}
|
||||
cfgFile.writeOwncloudConfig( Theme::instance()->appName(),
|
||||
_ocWizard->field(QLatin1String("OCUrl")).toString(),
|
||||
url,
|
||||
_ocWizard->field(QLatin1String("OCUser")).toString(),
|
||||
_ocWizard->field(QLatin1String("OCPasswd")).toString(),
|
||||
_ocWizard->field(QLatin1String("secureConnect")).toBool(),
|
||||
_ocWizard->field(QLatin1String("PwdNoLocalStore")).toBool() );
|
||||
_ocWizard->field(QLatin1String("OCPasswd")).toString() );
|
||||
|
||||
// If there is already a config, take its proxy config.
|
||||
if( ownCloudInfo::instance()->isConfigured() ) {
|
||||
MirallConfigFile prevCfg;
|
||||
if( prevCfg.proxyType() != QNetworkProxy::DefaultProxy ) {
|
||||
cfgFile.setProxyType( prevCfg.proxyType(), prevCfg.proxyHostName(), prevCfg.proxyPort(),
|
||||
prevCfg.proxyUser(), prevCfg.proxyPassword() );
|
||||
prevCfg.proxyNeedsAuth(), prevCfg.proxyUser(), prevCfg.proxyPassword() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,6 +247,10 @@ void OwncloudSetupWizard::testOwnCloudConnect()
|
||||
if( info->isConfigured() ) {
|
||||
// reset the SSL Untrust flag to let the SSL dialog appear again.
|
||||
info->resetSSLUntrust();
|
||||
connect(info, SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
connect(info, SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
_checkInstallationRequest = info->checkInstallation();
|
||||
} else {
|
||||
qDebug() << " ownCloud seems not to be configured, can not start test connect.";
|
||||
@@ -196,7 +259,12 @@ void OwncloudSetupWizard::testOwnCloudConnect()
|
||||
|
||||
void OwncloudSetupWizard::slotOwnCloudFound( const QString& url, const QString& infoString, const QString& version, const QString& )
|
||||
{
|
||||
_ocWizard->appendToResultWidget(tr("<font color=\"green\">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/>")
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
this, SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
this, SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
|
||||
_ocWizard->appendToConfigurationLog(tr("<font color=\"green\">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/>")
|
||||
.arg( url ).arg(Theme::instance()->appNameGUI()).arg(infoString).arg(version));
|
||||
|
||||
// enable the finish button.
|
||||
@@ -208,9 +276,13 @@ void OwncloudSetupWizard::slotOwnCloudFound( const QString& url, const QString&
|
||||
|
||||
void OwncloudSetupWizard::slotNoOwnCloudFound( QNetworkReply *err )
|
||||
{
|
||||
_ocWizard->appendToResultWidget(tr("<font color=\"red\">Failed to connect to %1!</font>")
|
||||
.arg(Theme::instance()->appNameGUI()));
|
||||
_ocWizard->appendToResultWidget(tr("Error: <tt>%1</tt>").arg(err->errorString()) );
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),
|
||||
this, SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(noOwncloudFound(QNetworkReply*)),
|
||||
this, SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
|
||||
_ocWizard->displayError(tr("Failed to connect to %1:<br/>%2").
|
||||
arg(Theme::instance()->appNameGUI()).arg(err->errorString()));
|
||||
|
||||
// remove the config file again
|
||||
MirallConfigFile cfgFile( _configHandle );
|
||||
@@ -218,273 +290,134 @@ void OwncloudSetupWizard::slotNoOwnCloudFound( QNetworkReply *err )
|
||||
finalizeSetup( false );
|
||||
}
|
||||
|
||||
bool OwncloudSetupWizard::isBusy()
|
||||
{
|
||||
return _process->state() > 0;
|
||||
}
|
||||
|
||||
OwncloudWizard *OwncloudSetupWizard::wizard()
|
||||
{
|
||||
return _ocWizard;
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotCreateOCLocalhost()
|
||||
{
|
||||
if( isBusy() ) {
|
||||
qDebug() << "Can not install now, busy. Come back later.";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << "Install OC on localhost";
|
||||
|
||||
QStringList args;
|
||||
|
||||
args << QLatin1String("install");
|
||||
args << QLatin1String("--server-type") << QLatin1String("local");
|
||||
args << QLatin1String("--root_helper") << QLatin1String("kdesu -c");
|
||||
|
||||
const QString adminUser = _ocWizard->field(QLatin1String("OCUser")).toString();
|
||||
const QString adminPwd = _ocWizard->field(QLatin1String("OCPasswd")).toString();
|
||||
|
||||
args << QLatin1String("--admin-user") << adminUser;
|
||||
args << QLatin1String("--admin-password") << adminPwd;
|
||||
|
||||
runOwncloudAdmin( args );
|
||||
|
||||
// define
|
||||
_ocWizard->setField( QLatin1String("OCUrl"), QLatin1String( "http://localhost/owncloud/") );
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotInstallOCServer()
|
||||
{
|
||||
if( isBusy() ) {
|
||||
qDebug() << "Can not install now, busy. Come back later.";
|
||||
return;
|
||||
}
|
||||
|
||||
const QString server = _ocWizard->field(QLatin1String("ftpUrl")).toString();
|
||||
const QString user = _ocWizard->field(QLatin1String("ftpUser")).toString();
|
||||
const QString passwd = _ocWizard->field(QLatin1String("ftpPasswd")).toString();
|
||||
const QString adminUser = _ocWizard->field(QLatin1String("OCUser")).toString();
|
||||
const QString adminPwd = _ocWizard->field(QLatin1String("OCPasswd")).toString();
|
||||
|
||||
qDebug() << "Install OC on " << server << " as user " << user;
|
||||
|
||||
QStringList args;
|
||||
args << QLatin1String("install");
|
||||
args << QLatin1String("--server-type") << QLatin1String("ftp");
|
||||
args << QLatin1String("--server") << server;
|
||||
args << QLatin1String("--ftp-user") << user;
|
||||
if( ! passwd.isEmpty() ) {
|
||||
args << QLatin1String("--ftp-password") << passwd;
|
||||
}
|
||||
args << QLatin1String("--admin-user") << adminUser;
|
||||
args << QLatin1String("--admin-password") << adminPwd;
|
||||
|
||||
runOwncloudAdmin( args );
|
||||
_ocWizard->setField( QLatin1String("OCUrl"), QString::fromLatin1( "%1/owncloud/")
|
||||
.arg(_ocWizard->field(QLatin1String("myOCDomain")).toString() ));
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::runOwncloudAdmin( const QStringList& args )
|
||||
{
|
||||
const QString bin(QLatin1String("/usr/bin/owncloud-admin"));
|
||||
qDebug() << "starting " << bin << " with args. " << args;
|
||||
if( _process->state() != QProcess::NotRunning ) {
|
||||
qDebug() << "Owncloud admin is still running, skip!";
|
||||
return;
|
||||
}
|
||||
if( checkOwncloudAdmin( bin )) {
|
||||
_ocWizard->appendToResultWidget( tr("Starting script owncloud-admin...") );
|
||||
_process->start( bin, args );
|
||||
} else {
|
||||
slotProcessFinished( 1, QProcess::NormalExit );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void OwncloudSetupWizard::slotReadyReadStandardOutput()
|
||||
{
|
||||
QByteArray arr = _process->readAllStandardOutput();
|
||||
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
|
||||
// render the output to status line
|
||||
QString string = codec->toUnicode( arr );
|
||||
_ocWizard->appendToResultWidget( string, OwncloudWizard::LogPlain );
|
||||
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotReadyReadStandardError()
|
||||
{
|
||||
qDebug() << "!! " <<_process->readAllStandardError();
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotStateChanged( QProcess::ProcessState )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotError( QProcess::ProcessError err )
|
||||
{
|
||||
qDebug() << "An Error happend with owncloud-admin: " << err << ", exit-Code: " << _process->exitCode();
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotStarted()
|
||||
{
|
||||
_ocWizard->button( QWizard::FinishButton )->setEnabled( false );
|
||||
_ocWizard->button( QWizard::BackButton )->setEnabled( false );
|
||||
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void OwncloudSetupWizard::slotProcessFinished( int res, QProcess::ExitStatus )
|
||||
{
|
||||
_ocWizard->button( QWizard::FinishButton )->setEnabled( true );
|
||||
_ocWizard->button( QWizard::BackButton)->setEnabled( true );
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
||||
qDebug() << "exit code: " << res;
|
||||
if( res ) {
|
||||
_ocWizard->appendToResultWidget( tr("<font color=\"red\">Installation of %1 failed!</font>").arg(Theme::instance()->appNameGUI()));
|
||||
_ocWizard->showOCUrlLabel( false );
|
||||
emit ownCloudSetupFinished( false );
|
||||
} else {
|
||||
// Successful installation. Write the config.
|
||||
_ocWizard->appendToResultWidget( tr("<font color=\"green\">Installation of %1 succeeded!</font>").arg(Theme::instance()->appNameGUI()));
|
||||
_ocWizard->showOCUrlLabel( true );
|
||||
|
||||
testOwnCloudConnect();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::startWizard(bool intro)
|
||||
{
|
||||
// create the ocInfo object
|
||||
connect(ownCloudInfo::instance(),SIGNAL(ownCloudInfoFound(QString,QString,QString,QString)),SLOT(slotOwnCloudFound(QString,QString,QString,QString)));
|
||||
connect(ownCloudInfo::instance(),SIGNAL(noOwncloudFound(QNetworkReply*)),SLOT(slotNoOwnCloudFound(QNetworkReply*)));
|
||||
connect(ownCloudInfo::instance(),SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||
|
||||
MirallConfigFile cfgFile;
|
||||
|
||||
QString url = cfgFile.ownCloudUrl();
|
||||
if( !url.isEmpty() ) {
|
||||
_ocWizard->setOCUrl( url );
|
||||
}
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
QString user = cfgFile.ownCloudUser();
|
||||
if( !user.isEmpty() ) {
|
||||
_ocWizard->setOCUser( user );
|
||||
}
|
||||
|
||||
bool doStore = cfgFile.passwordStorageAllowed();
|
||||
_ocWizard->setAllowPasswordStorage( doStore );
|
||||
|
||||
if (intro)
|
||||
_ocWizard->setStartId(OwncloudWizard::Page_oCWelcome);
|
||||
else
|
||||
_ocWizard->setStartId(OwncloudWizard::Page_oCSetup);
|
||||
#endif
|
||||
_ocWizard->restart();
|
||||
_ocWizard->show();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* method to check the if the owncloud admin script is existing
|
||||
*/
|
||||
bool OwncloudSetupWizard::checkOwncloudAdmin( const QString& bin )
|
||||
{
|
||||
QFileInfo fi( bin );
|
||||
qDebug() << "checking owncloud-admin " << bin;
|
||||
if( ! (fi.exists() && fi.isExecutable() ) ) {
|
||||
_ocWizard->appendToResultWidget( tr("The owncloud admin script can not be found.\n"
|
||||
"Setup can not be done.") );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::setupLocalSyncFolder()
|
||||
{
|
||||
_localFolder = QDir::homePath() + QDir::separator() + Theme::instance()->defaultClientFolder();
|
||||
|
||||
if( ! _folderMan ) return;
|
||||
|
||||
qDebug() << "Setup local sync folder for new oC connection " << _localFolder;
|
||||
QDir fi( _localFolder );
|
||||
const QString localFolder = _ocWizard->property("localFolder").toString();
|
||||
qDebug() << "Setup local sync folder for new oC connection " << localFolder;
|
||||
QDir fi( localFolder );
|
||||
// FIXME: Show problems with local folder properly.
|
||||
|
||||
bool localFolderOk = true;
|
||||
if( fi.exists() ) {
|
||||
// there is an existing local folder. If its non empty, it can only be synced if the
|
||||
// ownCloud is newly created.
|
||||
_ocWizard->appendToResultWidget( tr("Local sync folder %1 already exists, setting it up for sync.<br/><br/>").arg(_localFolder));
|
||||
_ocWizard->appendToConfigurationLog( tr("Local sync folder %1 already exists, setting it up for sync.<br/><br/>").arg(localFolder));
|
||||
} else {
|
||||
QString res = tr("Creating local sync folder %1... ").arg(_localFolder);
|
||||
if( fi.mkpath( _localFolder ) ) {
|
||||
Utility::setupFavLink( _localFolder );
|
||||
QString res = tr("Creating local sync folder %1... ").arg(localFolder);
|
||||
if( fi.mkpath( localFolder ) ) {
|
||||
Utility::setupFavLink( localFolder );
|
||||
// FIXME: Create a local sync folder.
|
||||
res += tr("ok");
|
||||
} else {
|
||||
res += tr("failed.");
|
||||
qDebug() << "Failed to create " << fi.path();
|
||||
localFolderOk = false;
|
||||
_ocWizard->displayError(tr("Could not create local folder %1").arg(localFolder));
|
||||
}
|
||||
_ocWizard->appendToResultWidget( res );
|
||||
_ocWizard->appendToConfigurationLog( res );
|
||||
}
|
||||
|
||||
if( localFolderOk ) {
|
||||
_remoteFolder = Theme::instance()->defaultServerFolder();
|
||||
slotCreateRemoteFolder(true);
|
||||
checkRemoteFolder();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotCreateRemoteFolder(bool credentialsOk )
|
||||
void OwncloudSetupWizard::checkRemoteFolder()
|
||||
{
|
||||
if( ! credentialsOk ) {
|
||||
// User pressed cancel while being asked for password.
|
||||
_ocWizard->appendToResultWidget("User canceled password dialog. Can not connect.");
|
||||
return;
|
||||
}
|
||||
connect( ownCloudInfo::instance(),SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
this,SLOT(slotAuthCheckReply(QString,QNetworkReply*)));
|
||||
|
||||
if( createRemoteFolder( _remoteFolder ) ) {
|
||||
qDebug() << "Started remote folder creation ok";
|
||||
qDebug() << "# checking for authentication settings.";
|
||||
ownCloudInfo::instance()->setCustomConfigHandle(_configHandle);
|
||||
_checkRemoteFolderRequest = ownCloudInfo::instance()->getRequest(_remoteFolder, true ); // this call needs to be authenticated.
|
||||
// continue in slotAuthCheckReply
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotAuthCheckReply( const QString&, QNetworkReply *reply )
|
||||
{
|
||||
// disconnect from ownCloud Info signals
|
||||
disconnect( ownCloudInfo::instance(),SIGNAL(ownCloudDirExists(QString,QNetworkReply*)),
|
||||
this,SLOT(slotAuthCheckReply(QString,QNetworkReply*)));
|
||||
|
||||
bool ok = true;
|
||||
QString error;
|
||||
QNetworkReply::NetworkError errId = reply->error();
|
||||
|
||||
if( errId == QNetworkReply::NoError ) {
|
||||
qDebug() << "******** Remote folder found, all cool!";
|
||||
} else if( errId == QNetworkReply::AuthenticationRequiredError ) { // returned if the user is wrong.
|
||||
qDebug() << "******** Password is wrong!";
|
||||
error = tr("The given credentials do not authenticate.");
|
||||
ok = false;
|
||||
} else if( errId == QNetworkReply::OperationCanceledError ) {
|
||||
// the username was wrong and ownCloudInfo was closing the request after a couple of auth tries.
|
||||
qDebug() << "******** Username or password is wrong!";
|
||||
error = tr("Username or password is wrong!");
|
||||
ok = false;
|
||||
} else if( errId == QNetworkReply::ContentNotFoundError ) {
|
||||
// FIXME try to create the remote folder!
|
||||
if( !createRemoteFolder() ) {
|
||||
error = tr("The remote folder could not be accessed!");
|
||||
ok = false;
|
||||
} else {
|
||||
return; // Finish here, the mkdir request will go on.
|
||||
}
|
||||
} else {
|
||||
_ocWizard->appendToResultWidget(tr("Creation of remote folder %1 could not be started.").arg(_remoteFolder));
|
||||
error = tr("Error: %1").arg(reply->errorString());
|
||||
ok = false;
|
||||
}
|
||||
|
||||
if( !ok ) {
|
||||
_ocWizard->displayError(error);
|
||||
} else {
|
||||
_ocWizard->setRemoteFolder( _remoteFolder );
|
||||
}
|
||||
|
||||
finalizeSetup( ok );
|
||||
}
|
||||
|
||||
bool OwncloudSetupWizard::createRemoteFolder( const QString& folder )
|
||||
bool OwncloudSetupWizard::createRemoteFolder()
|
||||
{
|
||||
if( folder.isEmpty() ) return false;
|
||||
if( _remoteFolder.isEmpty() ) return false;
|
||||
|
||||
qDebug() << "creating folder on ownCloud: " << folder;
|
||||
_ocWizard->appendToConfigurationLog( tr("creating folder on ownCloud: %1" ).arg( _remoteFolder ));
|
||||
connect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||
this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||
|
||||
_mkdirRequestReply = ownCloudInfo::instance()->mkdirRequest( folder );
|
||||
_mkdirRequestReply = ownCloudInfo::instance()->mkdirRequest( _remoteFolder );
|
||||
|
||||
return true;
|
||||
return (_mkdirRequestReply != NULL);
|
||||
}
|
||||
|
||||
void OwncloudSetupWizard::slotCreateRemoteFolderFinished( QNetworkReply::NetworkError error )
|
||||
{
|
||||
qDebug() << "** webdav mkdir request finished " << error;
|
||||
disconnect(ownCloudInfo::instance(), SIGNAL(webdavColCreated(QNetworkReply::NetworkError)),
|
||||
this, SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError)));
|
||||
|
||||
bool success = true;
|
||||
|
||||
if( error == QNetworkReply::NoError ) {
|
||||
_ocWizard->appendToResultWidget( tr("Remote folder %1 created successfully.").arg(_remoteFolder));
|
||||
_ocWizard->appendToConfigurationLog( tr("Remote folder %1 created successfully.").arg(_remoteFolder));
|
||||
} else if( error == 202 ) {
|
||||
_ocWizard->appendToResultWidget( tr("The remote folder %1 already exists. Connecting it for syncing.").arg(_remoteFolder));
|
||||
_ocWizard->appendToConfigurationLog( tr("The remote folder %1 already exists. Connecting it for syncing.").arg(_remoteFolder));
|
||||
} else if( error > 202 && error < 300 ) {
|
||||
_ocWizard->appendToResultWidget( tr("The folder creation resulted in HTTP error code %1").arg((int)error) );
|
||||
_ocWizard->displayError( tr("The folder creation resulted in HTTP error code %1").arg((int)error ));
|
||||
|
||||
_ocWizard->appendToConfigurationLog( tr("The folder creation resulted in HTTP error code %1").arg((int)error) );
|
||||
} else if( error == QNetworkReply::OperationCanceledError ) {
|
||||
_ocWizard->appendToResultWidget( tr("<p><font color=\"red\">Remote folder creation failed probably because the provided credentials are wrong.</font>"
|
||||
_ocWizard->displayError( tr("The remote folder creation failed because the provided credentials "
|
||||
"are wrong!"
|
||||
"<br/>Please go back and check your credentials.</p>"));
|
||||
_ocWizard->appendToConfigurationLog( tr("<p><font color=\"red\">Remote folder creation failed probably because the provided credentials are wrong.</font>"
|
||||
"<br/>Please go back and check your credentials.</p>"));
|
||||
_localFolder.clear();
|
||||
_remoteFolder.clear();
|
||||
success = false;
|
||||
} else {
|
||||
_ocWizard->appendToResultWidget( tr("Remote folder %1 creation failed with error <tt>%2</tt>.").arg(_remoteFolder).arg(error));
|
||||
_localFolder.clear();
|
||||
_ocWizard->appendToConfigurationLog( tr("Remote folder %1 creation failed with error <tt>%2</tt>.").arg(_remoteFolder).arg(error));
|
||||
_ocWizard->displayError( tr("Remote folder %1 creation failed with error <tt>%2</tt>.").arg(_remoteFolder).arg(error) );
|
||||
_remoteFolder.clear();
|
||||
success = false;
|
||||
}
|
||||
@@ -497,23 +430,24 @@ void OwncloudSetupWizard::finalizeSetup( bool success )
|
||||
// enable/disable the finish button.
|
||||
_ocWizard->enableFinishOnResultWidget(success);
|
||||
|
||||
const QString localFolder = _ocWizard->property("localFolder").toString();
|
||||
if( success ) {
|
||||
if( !(_localFolder.isEmpty() || _remoteFolder.isEmpty() )) {
|
||||
_ocWizard->appendToResultWidget( tr("A sync connection from %1 to remote directory %2 was set up.")
|
||||
.arg(_localFolder).arg(_remoteFolder));
|
||||
if( !(localFolder.isEmpty() || _remoteFolder.isEmpty() )) {
|
||||
_ocWizard->appendToConfigurationLog( tr("A sync connection from %1 to remote directory %2 was set up.")
|
||||
.arg(localFolder).arg(_remoteFolder));
|
||||
}
|
||||
_ocWizard->appendToResultWidget( QLatin1String(" "));
|
||||
_ocWizard->appendToResultWidget( QLatin1String("<p><font color=\"green\"><b>")
|
||||
_ocWizard->appendToConfigurationLog( QLatin1String(" "));
|
||||
_ocWizard->appendToConfigurationLog( QLatin1String("<p><font color=\"green\"><b>")
|
||||
+ tr("Successfully connected to %1!")
|
||||
.arg(Theme::instance()->appNameGUI())
|
||||
+ QLatin1String("</b></font></p>"));
|
||||
_ocWizard->appendToResultWidget( tr("Press Finish to permanently accept this connection."));
|
||||
} else {
|
||||
_ocWizard->appendToResultWidget(QLatin1String("<p><font color=\"red\">")
|
||||
_ocWizard->appendToConfigurationLog(QLatin1String("<p><font color=\"red\">")
|
||||
+ tr("Connection to %1 could not be established. Please check again.")
|
||||
.arg(Theme::instance()->appNameGUI())
|
||||
+ QLatin1String("</font></p>"));
|
||||
}
|
||||
_ocWizard->successfullyConnected(success);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
/**
|
||||
* @intro wether or not to show the intro wizard page
|
||||
*/
|
||||
void startWizard(bool intro = false);
|
||||
void startWizard();
|
||||
|
||||
void installServer();
|
||||
|
||||
@@ -68,20 +68,8 @@ signals:
|
||||
public slots:
|
||||
|
||||
protected slots:
|
||||
// QProcess related slots:
|
||||
void slotReadyReadStandardOutput();
|
||||
void slotReadyReadStandardError();
|
||||
void slotStateChanged( QProcess::ProcessState );
|
||||
void slotError( QProcess::ProcessError );
|
||||
void slotStarted();
|
||||
void slotProcessFinished( int, QProcess::ExitStatus );
|
||||
|
||||
// wizard dialog signals
|
||||
void slotInstallOCServer();
|
||||
void slotConnectToOCUrl( const QString& );
|
||||
void slotCreateOCLocalhost();
|
||||
|
||||
void slotCreateRemoteFolder(bool);
|
||||
|
||||
private slots:
|
||||
void slotOwnCloudFound( const QString&, const QString&, const QString&, const QString& );
|
||||
@@ -89,11 +77,11 @@ private slots:
|
||||
void slotCreateRemoteFolderFinished( QNetworkReply::NetworkError );
|
||||
void slotAssistantFinished( int );
|
||||
void slotClearPendingRequests();
|
||||
|
||||
void slotAuthCheckReply( const QString&, QNetworkReply * );
|
||||
private:
|
||||
bool checkOwncloudAdmin( const QString& );
|
||||
void runOwncloudAdmin( const QStringList& );
|
||||
bool createRemoteFolder( const QString& );
|
||||
bool createRemoteFolder();
|
||||
void checkRemoteFolder();
|
||||
|
||||
void finalizeSetup( bool );
|
||||
|
||||
/* Start a request to the newly installed ownCloud to check the connection */
|
||||
@@ -102,11 +90,11 @@ private:
|
||||
OwncloudWizard *_ocWizard;
|
||||
QPointer<QNetworkReply> _mkdirRequestReply;
|
||||
QPointer<QNetworkReply> _checkInstallationRequest;
|
||||
QPointer<QNetworkReply> _checkRemoteFolderRequest;
|
||||
|
||||
FolderMan *_folderMan;
|
||||
QProcess *_process;
|
||||
|
||||
QString _configHandle;
|
||||
QString _localFolder;
|
||||
QString _remoteFolder;
|
||||
};
|
||||
|
||||
|
||||
@@ -110,33 +110,6 @@ QIcon ownCloudTheme::trayFolderIcon( const QString& ) const
|
||||
return QIcon::fromTheme("folder", fallback);
|
||||
}
|
||||
|
||||
QIcon ownCloudTheme::syncStateIcon( SyncResult::Status status, bool sysTray ) const
|
||||
{
|
||||
// FIXME: Mind the size!
|
||||
QString statusIcon;
|
||||
|
||||
switch( status ) {
|
||||
case SyncResult::Undefined:
|
||||
case SyncResult::NotYetStarted:
|
||||
case SyncResult::Unavailable:
|
||||
statusIcon = QLatin1String("state-offline");
|
||||
break;
|
||||
case SyncResult::SyncRunning:
|
||||
statusIcon = QLatin1String("state-sync");
|
||||
break;
|
||||
case SyncResult::SyncPrepare:
|
||||
case SyncResult::Success:
|
||||
statusIcon = QLatin1String("state-ok");
|
||||
break;
|
||||
case SyncResult::Error:
|
||||
case SyncResult::SetupError:
|
||||
default:
|
||||
statusIcon = QLatin1String("state-error");
|
||||
}
|
||||
|
||||
return themeIcon( statusIcon, sysTray );
|
||||
}
|
||||
|
||||
QIcon ownCloudTheme::folderDisabledIcon( ) const
|
||||
{
|
||||
// Fixme: Do we really want the dialog-canel from theme here?
|
||||
@@ -145,7 +118,17 @@ QIcon ownCloudTheme::folderDisabledIcon( ) const
|
||||
|
||||
QIcon ownCloudTheme::applicationIcon( ) const
|
||||
{
|
||||
return themeIcon( QLatin1String("owncloud") );
|
||||
return themeIcon( QLatin1String("owncloud-icon") );
|
||||
}
|
||||
|
||||
QColor ownCloudTheme::wizardHeaderBackgroundColor() const
|
||||
{
|
||||
return QColor("#1d2d42");
|
||||
}
|
||||
|
||||
QColor ownCloudTheme::wizardHeaderTitleColor() const
|
||||
{
|
||||
return QColor("#ffffff");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,10 +31,12 @@ public:
|
||||
|
||||
QIcon folderIcon( const QString& ) const;
|
||||
QIcon trayFolderIcon( const QString& ) const;
|
||||
QIcon syncStateIcon( SyncResult::Status, bool sysTray ) const;
|
||||
QIcon folderDisabledIcon() const;
|
||||
QIcon applicationIcon() const;
|
||||
|
||||
QColor wizardHeaderBackgroundColor() const;
|
||||
QColor wizardHeaderTitleColor() const;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
@@ -16,16 +16,10 @@
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/theme.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDesktopServices>
|
||||
#include <QFileDialog>
|
||||
#include <QFileInfo>
|
||||
#include <QUrl>
|
||||
#include <QValidator>
|
||||
#include <QWizardPage>
|
||||
#include <QDir>
|
||||
#include <QScrollBar>
|
||||
#include <QSslSocket>
|
||||
#include "QProgressIndicator.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -54,378 +48,398 @@ void setupCustomMedia( QVariant variant, QLabel *label )
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
||||
OwncloudWelcomePage::OwncloudWelcomePage()
|
||||
{
|
||||
setTitle(tr("Welcome to %1").arg(Theme::instance()->appNameGUI()));
|
||||
|
||||
QVBoxLayout *lay = new QVBoxLayout(this);
|
||||
QLabel *content = new QLabel;
|
||||
lay->addWidget(content, 100, Qt::AlignTop);
|
||||
content->setAlignment(Qt::AlignTop);
|
||||
content->setTextFormat(Qt::RichText);
|
||||
content->setWordWrap(true);
|
||||
Theme *theme = Theme::instance();
|
||||
if (theme->overrideServerUrl().isEmpty()) {
|
||||
content->setText(tr("<p>In order to connect to your %1 server, you need to provide the server address "
|
||||
"as well as your credentials.</p><p>This wizard will guide you through the process.<p>"
|
||||
"<p>If you have not received this information, please contact your %1 provider.</p>")
|
||||
.arg(theme->appNameGUI()));
|
||||
} else {
|
||||
content->setText(tr("<p>In order to connect to your %1 server, you need to provide "
|
||||
"your credentials.</p><p>This wizard will guide you through "
|
||||
"the setup process.</p>").arg(theme->appNameGUI()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OwncloudSetupPage::OwncloudSetupPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
|
||||
setTitle(tr("Create Connection to %1").arg(Theme::instance()->appNameGUI()));
|
||||
Theme *theme = Theme::instance();
|
||||
setTitle( tr("<font color=\"%1\" size=\"5\">Connect to %2</font>")
|
||||
.arg(theme->wizardHeaderTitleColor().name()).arg( theme->appNameGUI()));
|
||||
setSubTitle( tr("<font color=\"%1\">Enter user credentials</font>")
|
||||
.arg(theme->wizardHeaderTitleColor().name()));
|
||||
|
||||
connect(_ui.leUrl, SIGNAL(textChanged(QString)), SLOT(handleNewOcUrl(QString)));
|
||||
|
||||
registerField( QLatin1String("OCUrl"), _ui.leUrl );
|
||||
registerField( QLatin1String("OCUrl"), _ui.leUrl );
|
||||
registerField( QLatin1String("OCUser"), _ui.leUsername );
|
||||
registerField( QLatin1String("OCPasswd"), _ui.lePassword);
|
||||
registerField( QLatin1String("connectMyOC"), _ui.cbConnectOC );
|
||||
registerField( QLatin1String("secureConnect"), _ui.cbSecureConnect );
|
||||
registerField( QLatin1String("PwdNoLocalStore"), _ui.cbNoPasswordStore );
|
||||
registerField( QLatin1String("OCSyncFromScratch"), _ui.cbSyncFromScratch);
|
||||
|
||||
_ui.cbSecureConnect->setEnabled(QSslSocket::supportsSsl());
|
||||
_ui.errorLabel->setVisible(true);
|
||||
_ui.advancedBox->setVisible(false);
|
||||
|
||||
_progressIndi = new QProgressIndicator;
|
||||
_ui.resultLayout->addWidget( _progressIndi );
|
||||
_progressIndi->setVisible(false);
|
||||
_ui.resultLayout->setEnabled(false);
|
||||
|
||||
// Error label
|
||||
QString style = QLatin1String("border: 1px solid #eed3d7; border-radius: 5px; padding: 3px;"
|
||||
"background-color: #f2dede; color: #b94a48;");
|
||||
|
||||
|
||||
_ui.errorLabel->setStyleSheet( style );
|
||||
_ui.errorLabel->setWordWrap(true);
|
||||
_ui.errorLabel->setVisible(false);
|
||||
|
||||
_checking = false;
|
||||
|
||||
setupCustomization();
|
||||
|
||||
connect(_ui.leUrl, SIGNAL(textChanged(QString)), SLOT(slotUrlChanged(QString)));
|
||||
connect( _ui.leUsername, SIGNAL(textChanged(QString)), this, SLOT(slotUserChanged(QString)));
|
||||
|
||||
connect( _ui.lePassword, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged()));
|
||||
connect( _ui.leUsername, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged()));
|
||||
|
||||
connect( _ui.cbNoPasswordStore, SIGNAL(stateChanged(int)), this, SLOT(slotPwdStoreChanged(int)));
|
||||
connect( _ui.cbSecureConnect, SIGNAL(stateChanged(int)), this, SLOT(slotSecureConChanged(int)));
|
||||
|
||||
_ui.cbConnectOC->hide();
|
||||
setupCustomization();
|
||||
connect( _ui.cbAdvanced, SIGNAL(stateChanged (int)), SLOT(slotToggleAdvanced(int)));
|
||||
connect( _ui.pbSelectLocalFolder, SIGNAL(clicked()), SLOT(slotSelectFolder()));
|
||||
}
|
||||
|
||||
OwncloudSetupPage::~OwncloudSetupPage()
|
||||
{
|
||||
delete _progressIndi;
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::slotToggleAdvanced(int state)
|
||||
{
|
||||
_ui.advancedBox->setVisible( state == Qt::Checked );
|
||||
slotHandleUserInput();
|
||||
QSize size = wizard()->sizeHint();
|
||||
// need to substract header for some reason
|
||||
size -= QSize(0, 63);
|
||||
|
||||
wizard()->setMinimumSize(size);
|
||||
wizard()->resize(size);
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setOCUser( const QString & user )
|
||||
{
|
||||
if( _ui.leUsername->text().isEmpty() ) {
|
||||
_ui.leUsername->setText(user);
|
||||
}
|
||||
_ocUser = user;
|
||||
_ui.leUsername->setText(user);
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setAllowPasswordStorage( bool allow )
|
||||
void OwncloudSetupPage::setServerUrl( const QString& newUrl )
|
||||
{
|
||||
_ui.cbNoPasswordStore->setChecked( ! allow );
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setOCUrl( const QString& newUrl )
|
||||
{
|
||||
QString url( newUrl );
|
||||
if( url.isEmpty() ) {
|
||||
_oCUrl = newUrl;
|
||||
if( _oCUrl.isEmpty() ) {
|
||||
_ui.leUrl->clear();
|
||||
return;
|
||||
}
|
||||
if( url.startsWith( QLatin1String("https"))) {
|
||||
_ui.cbSecureConnect->setChecked( true );
|
||||
url.remove(0,5);
|
||||
} else if( url.startsWith( QLatin1String("http"))) {
|
||||
_ui.cbSecureConnect->setChecked( false );
|
||||
url.remove(0,4);
|
||||
}
|
||||
if( url.startsWith( QLatin1String("://"))) url.remove(0,3);
|
||||
|
||||
_ui.leUrl->setText( url );
|
||||
_ui.leUrl->setText( _oCUrl );
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setupCustomization()
|
||||
{
|
||||
// set defaults for the customize labels.
|
||||
_ui.sideLabel->setText( QString::null );
|
||||
_ui.sideLabel->setFixedWidth(160);
|
||||
|
||||
_ui.topLabel->hide();
|
||||
// _ui.topLabel->hide();
|
||||
_ui.bottomLabel->hide();
|
||||
|
||||
Theme *theme = Theme::instance();
|
||||
QVariant variant = theme->customMedia( Theme::oCSetupTop );
|
||||
setupCustomMedia( variant, _ui.topLabel );
|
||||
variant = theme->customMedia( Theme::oCSetupSide );
|
||||
setupCustomMedia( variant, _ui.sideLabel );
|
||||
if( variant.isNull() ) {
|
||||
_ui.topLabel->setOpenExternalLinks(true);
|
||||
_ui.topLabel->setText("If you don't have an ownCloud server yet, see <a href=\"https://owncloud.com\">owncloud.com</a> for more info.");
|
||||
} else {
|
||||
setupCustomMedia( variant, _ui.topLabel );
|
||||
}
|
||||
|
||||
variant = theme->customMedia( Theme::oCSetupBottom );
|
||||
setupCustomMedia( variant, _ui.bottomLabel );
|
||||
|
||||
QString fixUrl = theme->overrideServerUrl();
|
||||
if( !fixUrl.isEmpty() ) {
|
||||
setOCUrl( fixUrl );
|
||||
_ui.label_2->hide();
|
||||
setServerUrl( fixUrl );
|
||||
_ui.leUrl->setEnabled( false );
|
||||
_ui.cbSecureConnect->hide();
|
||||
_ui.leUrl->hide();
|
||||
_ui.protocolLabel->hide();
|
||||
_ui.serverAddressLabel->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::slotPwdStoreChanged( int state )
|
||||
void OwncloudSetupPage::slotUserChanged(const QString& user )
|
||||
{
|
||||
_ui.lePassword->setEnabled( state == Qt::Unchecked );
|
||||
emit completeChanged();
|
||||
slotHandleUserInput();
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::slotSecureConChanged( int state )
|
||||
// slot hit from textChanged of the url entry field.
|
||||
void OwncloudSetupPage::slotUrlChanged(const QString& ocUrl)
|
||||
{
|
||||
if( state == Qt::Checked ) {
|
||||
_ui.protocolLabel->setText(QLatin1String("https://"));
|
||||
} else {
|
||||
_ui.protocolLabel->setText(QLatin1String("http://"));
|
||||
}
|
||||
}
|
||||
slotHandleUserInput();
|
||||
|
||||
void OwncloudSetupPage::handleNewOcUrl(const QString& ocUrl)
|
||||
{
|
||||
#if 0
|
||||
QString url = ocUrl;
|
||||
int len = 0;
|
||||
bool visible = false;
|
||||
|
||||
if (url.startsWith(QLatin1String("https://"))) {
|
||||
_ui.cbSecureConnect->setChecked(true);
|
||||
len = 8;
|
||||
_ui.urlLabel->setPixmap( QPixmap(":/mirall/resources/security-high.png"));
|
||||
_ui.urlLabel->setToolTip(tr("This url is secure. You can use it."));
|
||||
visible = true;
|
||||
}
|
||||
if (url.startsWith(QLatin1String("http://"))) {
|
||||
_ui.cbSecureConnect->setChecked(false);
|
||||
len = 7;
|
||||
}
|
||||
if( len ) {
|
||||
int pos = _ui.leUrl->cursorPosition();
|
||||
url.remove(0, len);
|
||||
_ui.leUrl->setText(url);
|
||||
_ui.leUrl->setCursorPosition(qMax(0, pos-len));
|
||||
|
||||
_ui.urlLabel->setPixmap( QPixmap(":/mirall/resources/security-low.png"));
|
||||
_ui.urlLabel->setToolTip(tr("This url is NOT secure. You should not use it."));
|
||||
visible = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool OwncloudSetupPage::isComplete() const
|
||||
{
|
||||
if( _ui.leUrl->text().isEmpty() ) return false;
|
||||
if( _checking ) return false;
|
||||
|
||||
if( _ui.cbNoPasswordStore->checkState() == Qt::Checked ) {
|
||||
return !(_ui.leUsername->text().isEmpty());
|
||||
}
|
||||
return !(_ui.leUsername->text().isEmpty() || _ui.lePassword->text().isEmpty() );
|
||||
return !( _ui.lePassword->text().isEmpty() || _ui.leUsername->text().isEmpty() );
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::initializePage()
|
||||
{
|
||||
_connected = false;
|
||||
_checking = false;
|
||||
_multipleFoldersExist = false;
|
||||
|
||||
// call to init label
|
||||
slotHandleUserInput();
|
||||
|
||||
if( _configExists ) {
|
||||
_ui.lePassword->setFocus();
|
||||
} else {
|
||||
_ui.leUrl->setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
bool OwncloudSetupPage::urlHasChanged()
|
||||
{
|
||||
bool change = false;
|
||||
const QChar slash('/');
|
||||
|
||||
QUrl currentUrl( url() );
|
||||
QUrl initialUrl( _oCUrl );
|
||||
|
||||
QString currentPath = currentUrl.path();
|
||||
QString initialPath = initialUrl.path();
|
||||
|
||||
// add a trailing slash.
|
||||
if( ! currentPath.endsWith( slash )) currentPath += slash;
|
||||
if( ! initialPath.endsWith( slash )) initialPath += slash;
|
||||
|
||||
if( currentUrl.host() != initialUrl.host() ||
|
||||
currentPath != initialPath ) {
|
||||
change = true;
|
||||
}
|
||||
|
||||
if( !change) { // no change yet, check the user.
|
||||
QString user = _ui.leUsername->text().simplified();
|
||||
if( user != _ocUser ) change = true;
|
||||
}
|
||||
|
||||
return change;
|
||||
}
|
||||
|
||||
// Called if the user changes the user- or url field. Adjust the texts and
|
||||
// evtl. warnings on the dialog.
|
||||
void OwncloudSetupPage::slotHandleUserInput()
|
||||
{
|
||||
// if the url has not changed, return.
|
||||
if( ! urlHasChanged() ) {
|
||||
// disable the advanced button as nothing has changed.
|
||||
_ui.cbAdvanced->setEnabled(false);
|
||||
_ui.advancedBox->setEnabled(false);
|
||||
} else {
|
||||
// Enable advanced stuff for new connection configuration.
|
||||
_ui.cbAdvanced->setEnabled(true);
|
||||
_ui.advancedBox->setEnabled(true);
|
||||
}
|
||||
|
||||
const QString locFolder = localFolder();
|
||||
|
||||
// check if the local folder exists. If so, and if its not empty, show a warning.
|
||||
QDir dir( locFolder );
|
||||
QStringList entries = dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot);
|
||||
|
||||
QString t;
|
||||
|
||||
if( !urlHasChanged() && _configExists ) {
|
||||
// This is the password change mode: No change to the url and a config
|
||||
// to an ownCloud exists.
|
||||
t = tr("Change the Password for your configured account.");
|
||||
} else {
|
||||
// Complete new setup.
|
||||
_ui.pbSelectLocalFolder->setText(QDir::toNativeSeparators(locFolder));
|
||||
|
||||
if( _remoteFolder.isEmpty() || _remoteFolder == QLatin1String("/") ) {
|
||||
t = tr("Your entire account will be synced to the local folder '%1'.")
|
||||
.arg(QDir::toNativeSeparators(locFolder));
|
||||
} else {
|
||||
t = tr("%1 folder '%2' is synced to local folder '%3'")
|
||||
.arg(Theme::instance()->appName()).arg(_remoteFolder)
|
||||
.arg(QDir::toNativeSeparators(locFolder));
|
||||
}
|
||||
|
||||
if ( _multipleFoldersExist ) {
|
||||
t += tr("<p><small><strong>Warning:</strong> You currently have multiple folders "
|
||||
"configured. If you continue with the current settings, the folder configurations "
|
||||
"will be discarded and a single root folder sync will be created!</small></p>");
|
||||
}
|
||||
|
||||
if( entries.count() > 0) {
|
||||
// the directory is not empty
|
||||
if (!_ui.cbAdvanced->isChecked()) {
|
||||
t += tr("<p><small><strong>Warning:</strong> The local directory is not empty. "
|
||||
"Pick a resolution in the advanced settings!</small></p>");
|
||||
}
|
||||
_ui.resolutionWidget->setVisible(true);
|
||||
} else {
|
||||
// the dir is empty, which means that there is no problem.
|
||||
_ui.resolutionWidget->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
_ui.syncModeLabel->setText(t);
|
||||
_ui.syncModeLabel->setFixedHeight(_ui.syncModeLabel->sizeHint().height());
|
||||
}
|
||||
|
||||
int OwncloudSetupPage::nextId() const
|
||||
{
|
||||
return OwncloudWizard::Page_Install;
|
||||
return OwncloudWizard::Page_Result;
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
OwncloudWizardSelectTypePage::OwncloudWizardSelectTypePage()
|
||||
QString OwncloudSetupPage::url() const
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField( QLatin1String("connectMyOC"), _ui.connectMyOCRadioBtn );
|
||||
registerField( QLatin1String("createNewOC"), _ui.createNewOCRadioBtn );
|
||||
registerField( QLatin1String("OCUrl"), _ui.OCUrlLineEdit );
|
||||
|
||||
connect( _ui.connectMyOCRadioBtn, SIGNAL(clicked()), SIGNAL(completeChanged()));
|
||||
connect( _ui.createNewOCRadioBtn, SIGNAL(clicked()), SIGNAL(completeChanged()));
|
||||
connect( _ui.OCUrlLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged()));
|
||||
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
_ui.createNewOCRadioBtn->setVisible( false );
|
||||
_ui.createNewOwncloudLabel->setVisible( false );
|
||||
#endif
|
||||
|
||||
#if QT_VERSION >= 0x040700
|
||||
_ui.OCUrlLineEdit->setPlaceholderText(tr("http://owncloud.mydomain.org"));
|
||||
#endif
|
||||
QString url = _ui.leUrl->text().simplified();
|
||||
return url;
|
||||
}
|
||||
|
||||
OwncloudWizardSelectTypePage::~OwncloudWizardSelectTypePage()
|
||||
QString OwncloudSetupPage::localFolder() const
|
||||
{
|
||||
QString folder = wizard()->property("localFolder").toString();
|
||||
return folder;
|
||||
}
|
||||
|
||||
void OwncloudWizardSelectTypePage::initializePage()
|
||||
void OwncloudSetupPage::setConnected( bool comp )
|
||||
{
|
||||
|
||||
_connected = comp;
|
||||
_ui.resultLayout->setEnabled(true);
|
||||
_progressIndi->setVisible(false);
|
||||
_progressIndi->stopAnimation();
|
||||
}
|
||||
|
||||
int OwncloudWizardSelectTypePage::nextId() const
|
||||
bool OwncloudSetupPage::validatePage()
|
||||
{
|
||||
if( _ui.connectMyOCRadioBtn->isChecked() ) {
|
||||
return OwncloudWizard::Page_OC_Credentials;
|
||||
}
|
||||
return OwncloudWizard::Page_Create_OC;
|
||||
}
|
||||
bool re = false;
|
||||
|
||||
bool OwncloudWizardSelectTypePage::isComplete() const
|
||||
{
|
||||
if( _ui.connectMyOCRadioBtn->isChecked() ) {
|
||||
// a valid url is needed.
|
||||
QString u = _ui.OCUrlLineEdit->text();
|
||||
QUrl url( u );
|
||||
if( url.isValid() ) {
|
||||
return true;
|
||||
if( ! _connected) {
|
||||
setErrorString(QString::null);
|
||||
_checking = true;
|
||||
_ui.resultLayout->setEnabled(true);
|
||||
_progressIndi->setVisible(true);
|
||||
_progressIndi->startAnimation();
|
||||
emit completeChanged();
|
||||
|
||||
emit connectToOCUrl( url() );
|
||||
return false;
|
||||
} else {
|
||||
// connecting is running
|
||||
stopSpinner();
|
||||
_checking = false;
|
||||
emit completeChanged();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void OwncloudWizardSelectTypePage::setOCUrl( const QString& url )
|
||||
void OwncloudSetupPage::setErrorString( const QString& err )
|
||||
{
|
||||
_ui.OCUrlLineEdit->setText( url );
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
||||
OwncloudCredentialsPage::OwncloudCredentialsPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField( QLatin1String("OCUser"), _ui.OCUserEdit );
|
||||
registerField( QLatin1String("OCPasswd"), _ui.OCPasswdEdit );
|
||||
registerField( QLatin1String("PwdNoLocalStore"), _ui.cbPwdNoLocalStore );
|
||||
|
||||
connect( _ui.OCPasswdEdit, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged()));
|
||||
|
||||
connect( _ui.cbPwdNoLocalStore, SIGNAL(stateChanged(int)), this, SLOT(slotPwdStoreChanged(int)));
|
||||
}
|
||||
|
||||
OwncloudCredentialsPage::~OwncloudCredentialsPage()
|
||||
{
|
||||
}
|
||||
|
||||
void OwncloudCredentialsPage::slotPwdStoreChanged( int state )
|
||||
{
|
||||
_ui.OCPasswdEdit->setEnabled( state == Qt::Unchecked );
|
||||
if( err.isEmpty()) {
|
||||
_ui.errorLabel->setVisible(false);
|
||||
} else {
|
||||
_ui.errorLabel->setVisible(true);
|
||||
_ui.errorLabel->setText(err);
|
||||
}
|
||||
_checking = false;
|
||||
emit completeChanged();
|
||||
stopSpinner();
|
||||
}
|
||||
|
||||
bool OwncloudCredentialsPage::isComplete() const
|
||||
void OwncloudSetupPage::stopSpinner()
|
||||
{
|
||||
if( _ui.cbPwdNoLocalStore->checkState() == Qt::Checked ) {
|
||||
return !(_ui.OCUserEdit->text().isEmpty());
|
||||
_ui.resultLayout->setEnabled(false);
|
||||
_progressIndi->setVisible(false);
|
||||
_progressIndi->stopAnimation();
|
||||
}
|
||||
|
||||
OwncloudSetupPage::SyncMode OwncloudSetupPage::syncMode()
|
||||
{
|
||||
return BoxMode;
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setRemoteFolder( const QString& remoteFolder )
|
||||
{
|
||||
if( !remoteFolder.isEmpty() ) {
|
||||
_remoteFolder = remoteFolder;
|
||||
}
|
||||
return !(_ui.OCUserEdit->text().isEmpty() || _ui.OCPasswdEdit->text().isEmpty() );
|
||||
}
|
||||
|
||||
void OwncloudCredentialsPage::initializePage()
|
||||
void OwncloudSetupPage::setMultipleFoldersExist(bool exist)
|
||||
{
|
||||
_multipleFoldersExist = exist;
|
||||
}
|
||||
|
||||
int OwncloudCredentialsPage::nextId() const
|
||||
{
|
||||
return OwncloudWizard::Page_Install;
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
||||
OwncloudFTPAccessPage::OwncloudFTPAccessPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField( QLatin1String("ftpUrl"), _ui.ftpUrlEdit );
|
||||
registerField( QLatin1String("ftpUser"), _ui.ftpUserEdit );
|
||||
registerField( QLatin1String("ftpPasswd"), _ui.ftpPasswdEdit );
|
||||
// registerField( QLatin1String("ftpDir"), _ui.ftpDir );
|
||||
|
||||
#if QT_VERSION >= 0x040700
|
||||
_ui.ftpUrlEdit->setPlaceholderText(tr("ftp.mydomain.org"));
|
||||
#endif
|
||||
}
|
||||
|
||||
OwncloudFTPAccessPage::~OwncloudFTPAccessPage()
|
||||
{
|
||||
}
|
||||
|
||||
void OwncloudFTPAccessPage::initializePage()
|
||||
{
|
||||
// _ui.lineEditOCAlias->setText( "Owncloud" );
|
||||
}
|
||||
|
||||
void OwncloudFTPAccessPage::setFTPUrl( const QString& url )
|
||||
{
|
||||
_ui.ftpUrlEdit->setText( url );
|
||||
}
|
||||
|
||||
int OwncloudFTPAccessPage::nextId() const
|
||||
{
|
||||
return OwncloudWizard::Page_OC_Credentials;
|
||||
}
|
||||
|
||||
bool OwncloudFTPAccessPage::isComplete() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
CreateAnOwncloudPage::CreateAnOwncloudPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
registerField(QLatin1String("createLocalOC"), _ui.createLocalRadioBtn );
|
||||
registerField(QLatin1String("createOnDomain"), _ui.createPerFTPRadioBtn );
|
||||
registerField(QLatin1String("myOCDomain"), _ui.myDomainEdit );
|
||||
|
||||
connect( _ui.createLocalRadioBtn, SIGNAL(clicked()), SIGNAL(completeChanged()));
|
||||
connect( _ui.createPerFTPRadioBtn, SIGNAL(clicked()), SIGNAL(completeChanged()));
|
||||
connect( _ui.myDomainEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged()));
|
||||
|
||||
#if QT_VERSION >= 0x040700
|
||||
_ui.myDomainEdit->setPlaceholderText(tr("mydomain.org"));
|
||||
#endif
|
||||
}
|
||||
|
||||
CreateAnOwncloudPage::~CreateAnOwncloudPage()
|
||||
{
|
||||
}
|
||||
|
||||
void CreateAnOwncloudPage::initializePage()
|
||||
{
|
||||
// _ui.lineEditOCAlias->setText( "Owncloud" );
|
||||
}
|
||||
|
||||
int CreateAnOwncloudPage::nextId() const
|
||||
{
|
||||
if( _ui.createLocalRadioBtn->isChecked() ) {
|
||||
return OwncloudWizard::Page_OC_Credentials;
|
||||
}
|
||||
|
||||
return OwncloudWizard::Page_FTP;
|
||||
}
|
||||
|
||||
bool CreateAnOwncloudPage::isComplete() const
|
||||
void OwncloudSetupPage::slotSelectFolder()
|
||||
{
|
||||
|
||||
if( _ui.createPerFTPRadioBtn->isChecked() ) {
|
||||
QString dom = _ui.myDomainEdit->text();
|
||||
qDebug() << "check is Complete with " << dom;
|
||||
return (!dom.isEmpty() && dom.contains( QLatin1Char('.'))
|
||||
&& dom.lastIndexOf(QLatin1Char('.')) < dom.length()-2 );
|
||||
}
|
||||
return true;
|
||||
QString dir = QFileDialog::getExistingDirectory(0, tr("Local Sync Folder"), QDir::homePath());
|
||||
if( !dir.isEmpty() ) {
|
||||
_ui.pbSelectLocalFolder->setText(dir);
|
||||
wizard()->setProperty("localFolder", dir);
|
||||
slotHandleUserInput();
|
||||
}
|
||||
}
|
||||
|
||||
QString CreateAnOwncloudPage::domain() const
|
||||
OwncloudSetupPage::SyncMode OwncloudWizard::syncMode()
|
||||
{
|
||||
return _ui.myDomainEdit->text();
|
||||
return _setupPage->syncMode();
|
||||
return OwncloudSetupPage::BoxMode;
|
||||
}
|
||||
|
||||
void OwncloudWizard::setMultipleFoldersExist(bool exist)
|
||||
{
|
||||
_setupPage->setMultipleFoldersExist(exist);
|
||||
}
|
||||
|
||||
void OwncloudSetupPage::setConfigExists( bool config )
|
||||
{
|
||||
_configExists = config;
|
||||
setSubTitle( tr("<font color=\"%1\">Change your user credentials</font>")
|
||||
.arg(Theme::instance()->wizardHeaderTitleColor().name()));
|
||||
}
|
||||
|
||||
// ======================================================================
|
||||
|
||||
OwncloudWizardResultPage::OwncloudWizardResultPage()
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
// no fields to register.
|
||||
_ui.resultTextEdit->setAcceptRichText(true);
|
||||
_ui.ocLinkLabel->setVisible( false );
|
||||
|
||||
Theme *theme = Theme::instance();
|
||||
setTitle( tr("<font color=\"%1\" size=\"5\">Everything set up!</font>")
|
||||
.arg(theme->wizardHeaderTitleColor().name()));
|
||||
// required to show header in QWizard's modern style
|
||||
setSubTitle( QLatin1String(" ") );
|
||||
|
||||
_ui.pbOpenLocal->setText("Open local folder");
|
||||
_ui.pbOpenServer->setText(tr("Open %1").arg(Theme::instance()->appNameGUI()));
|
||||
|
||||
_ui.pbOpenLocal->setIcon(QIcon(":/mirall/resources/folder-sync.png"));
|
||||
_ui.pbOpenLocal->setText(tr("Open Local Folder"));
|
||||
_ui.pbOpenLocal->setIconSize(QSize(48, 48));
|
||||
connect(_ui.pbOpenLocal, SIGNAL(clicked()), SLOT(slotOpenLocal()));
|
||||
|
||||
_ui.pbOpenLocal->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
||||
|
||||
QIcon appIcon = theme->applicationIcon();
|
||||
_ui.pbOpenServer->setIcon(appIcon.pixmap(48));
|
||||
_ui.pbOpenServer->setText(tr("Open %1").arg(theme->appNameGUI()));
|
||||
_ui.pbOpenServer->setIconSize(QSize(48, 48));
|
||||
_ui.pbOpenServer->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
||||
connect(_ui.pbOpenServer, SIGNAL(clicked()), SLOT(slotOpenServer()));
|
||||
setupCustomization();
|
||||
}
|
||||
|
||||
@@ -433,12 +447,6 @@ OwncloudWizardResultPage::~OwncloudWizardResultPage()
|
||||
{
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::initializePage()
|
||||
{
|
||||
_complete = false;
|
||||
// _ui.lineEditOCAlias->setText( "Owncloud" );
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::setComplete(bool complete)
|
||||
{
|
||||
_complete = complete;
|
||||
@@ -450,32 +458,24 @@ bool OwncloudWizardResultPage::isComplete() const
|
||||
return _complete;
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::appendResultText( const QString& msg, OwncloudWizard::LogType type )
|
||||
void OwncloudWizardResultPage::initializePage()
|
||||
{
|
||||
if( msg.isEmpty() ) {
|
||||
_ui.resultTextEdit->clear();
|
||||
} else {
|
||||
if( type == OwncloudWizard::LogParagraph ) {
|
||||
_ui.resultTextEdit->append( msg );
|
||||
const QString localFolder = wizard()->property("localFolder").toString();
|
||||
QString text;
|
||||
if( _remoteFolder == QLatin1String("/") || _remoteFolder.isEmpty() ) {
|
||||
text = tr("Your entire account is synced to the local folder <i>%1</i>")
|
||||
.arg(QDir::toNativeSeparators(localFolder));
|
||||
} else {
|
||||
// _ui.resultTextEdit->append( msg );
|
||||
_ui.resultTextEdit->insertPlainText(msg );
|
||||
text = tr("ownCloud folder <i>%1</i> is synced to local folder <i>%2</i>")
|
||||
.arg(_remoteFolder).arg(QDir::toNativeSeparators(localFolder));
|
||||
}
|
||||
_ui.resultTextEdit->verticalScrollBar()->setValue( _ui.resultTextEdit->verticalScrollBar()->maximum() );
|
||||
}
|
||||
_ui.localFolderLabel->setText( text );
|
||||
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::showOCUrlLabel( const QString& url, bool show )
|
||||
void OwncloudWizardResultPage::setRemoteFolder(const QString &remoteFolder)
|
||||
{
|
||||
_ui.ocLinkLabel->setText( tr("Congratulations! Your <a href=\"%1\" title=\"%1\">new %2</a> is now up and running!")
|
||||
.arg(url).arg( Theme::instance()->appNameGUI()));
|
||||
_ui.ocLinkLabel->setOpenExternalLinks( true );
|
||||
|
||||
if( show ) {
|
||||
_ui.ocLinkLabel->setVisible( true );
|
||||
} else {
|
||||
_ui.ocLinkLabel->setVisible( false );
|
||||
}
|
||||
_remoteFolder = remoteFolder;
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::setupCustomization()
|
||||
@@ -495,130 +495,133 @@ void OwncloudWizardResultPage::setupCustomization()
|
||||
*/
|
||||
|
||||
OwncloudWizard::OwncloudWizard(QWidget *parent)
|
||||
: QWizard(parent)
|
||||
: QWizard(parent),
|
||||
_configExists(false)
|
||||
{
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
setPage(Page_oCWelcome, new OwncloudWelcomePage() );
|
||||
setPage(Page_oCSetup, new OwncloudSetupPage() );
|
||||
#else
|
||||
setPage(Page_SelectType, new OwncloudWizardSelectTypePage() );
|
||||
setPage(Page_OC_Credentials, new OwncloudCredentialsPage() );
|
||||
#endif
|
||||
setPage(Page_Create_OC, new CreateAnOwncloudPage() );
|
||||
setPage(Page_FTP, new OwncloudFTPAccessPage() );
|
||||
setPage(Page_Install, new OwncloudWizardResultPage() );
|
||||
_setupPage = new OwncloudSetupPage;
|
||||
_resultPage = new OwncloudWizardResultPage;
|
||||
setPage(Page_oCSetup, _setupPage );
|
||||
setPage(Page_Result, _resultPage );
|
||||
|
||||
#ifdef Q_WS_MAC
|
||||
// note: start Id is set by the calling class depending on if the
|
||||
// welcome text is to be shown or not.
|
||||
setWizardStyle( QWizard::ModernStyle );
|
||||
#endif
|
||||
setField(QLatin1String("connectMyOC"), true);
|
||||
|
||||
connect( this, SIGNAL(currentIdChanged(int)), SLOT(slotCurrentPageChanged(int)));
|
||||
|
||||
connect( _setupPage, SIGNAL(connectToOCUrl(QString)), SIGNAL(connectToOCUrl(QString)));
|
||||
|
||||
|
||||
Theme *theme = Theme::instance();
|
||||
setWizardStyle(QWizard::ModernStyle);
|
||||
setPixmap( QWizard::BannerPixmap, theme->wizardHeaderBanner() );
|
||||
setPixmap( QWizard::LogoPixmap, theme->wizardHeaderLogo() );
|
||||
setOption( QWizard::NoBackButtonOnStartPage );
|
||||
setOption( QWizard::NoBackButtonOnLastPage );
|
||||
setOption( QWizard::NoCancelButton );
|
||||
setTitleFormat(Qt::RichText);
|
||||
setSubTitleFormat(Qt::RichText);
|
||||
}
|
||||
|
||||
QString OwncloudWizard::localFolder() const
|
||||
{
|
||||
return(_setupPage->localFolder());
|
||||
}
|
||||
|
||||
QString OwncloudWizard::ocUrl() const
|
||||
{
|
||||
QString url = field("OCUrl").toString().simplified();
|
||||
if( field("secureConnect").toBool() ) {
|
||||
url.prepend(QLatin1String("https://"));
|
||||
} else {
|
||||
url.prepend(QLatin1String("http://"));
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
void OwncloudWizard::enableFinishOnResultWidget(bool enable)
|
||||
{
|
||||
OwncloudWizardResultPage *p = static_cast<OwncloudWizardResultPage*> (page( Page_Install ));
|
||||
p->setComplete(enable);
|
||||
_resultPage->setComplete(enable);
|
||||
}
|
||||
|
||||
void OwncloudWizard::setRemoteFolder( const QString& remoteFolder )
|
||||
{
|
||||
_setupPage->setRemoteFolder( remoteFolder );
|
||||
_resultPage->setRemoteFolder( remoteFolder );
|
||||
}
|
||||
|
||||
void OwncloudWizard::showConnectInfo( const QString& msg )
|
||||
{
|
||||
if( _setupPage ) {
|
||||
_setupPage->setErrorString( msg );
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudWizard::successfullyConnected(bool enable)
|
||||
{
|
||||
_setupPage->setConnected( enable );
|
||||
|
||||
if( enable ) {
|
||||
next();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudWizard::slotCurrentPageChanged( int id )
|
||||
{
|
||||
qDebug() << "Current Wizard page changed to " << id;
|
||||
qDebug() << "Page_install is " << Page_Install;
|
||||
qDebug() << "Current Wizard page changed to " << id;
|
||||
|
||||
if( id == Page_oCSetup ) {
|
||||
setButtonText( QWizard::NextButton, tr("Connect...") );
|
||||
emit clearPendingRequests();
|
||||
_setupPage->initializePage();
|
||||
|
||||
if( id == Page_FTP ) {
|
||||
// preset the ftp url field
|
||||
CreateAnOwncloudPage *p = static_cast<CreateAnOwncloudPage*> (page( Page_Create_OC ));
|
||||
QString domain = p->domain();
|
||||
if( domain.startsWith( QLatin1String("http://") )) {
|
||||
domain = domain.right( domain.length()-7 );
|
||||
}
|
||||
if( domain.startsWith( QLatin1String("https://") )) {
|
||||
domain = domain.right( domain.length()-8 );
|
||||
}
|
||||
|
||||
QString host = QLatin1String("ftp.") +domain;
|
||||
OwncloudFTPAccessPage *p1 = static_cast<OwncloudFTPAccessPage*> (page( Page_FTP ));
|
||||
p1->setFTPUrl( host );
|
||||
}
|
||||
if( id == Page_Install ) {
|
||||
appendToResultWidget( QString::null );
|
||||
showOCUrlLabel( false );
|
||||
if( field(QLatin1String("connectMyOC")).toBool() ) {
|
||||
// check the url and connect.
|
||||
_oCUrl = ocUrl();
|
||||
emit connectToOCUrl( _oCUrl);
|
||||
} else if( field(QLatin1String("createLocalOC")).toBool() ) {
|
||||
qDebug() << "Connect to local!";
|
||||
emit installOCLocalhost();
|
||||
} else if( field(QLatin1String("createNewOC")).toBool() ) {
|
||||
// call in installation mode and install to ftp site.
|
||||
emit installOCServer();
|
||||
} else {
|
||||
if( id == Page_Result ) {
|
||||
appendToConfigurationLog( QString::null );
|
||||
}
|
||||
}
|
||||
if( id == Page_oCSetup ) {
|
||||
emit clearPendingRequests();
|
||||
}
|
||||
}
|
||||
|
||||
void OwncloudWizard::showOCUrlLabel( bool show )
|
||||
void OwncloudWizard::displayError( const QString& msg )
|
||||
{
|
||||
OwncloudWizardResultPage *p = static_cast<OwncloudWizardResultPage*> (page( Page_Install ));
|
||||
p->showOCUrlLabel( _oCUrl, show );
|
||||
_setupPage->setErrorString( msg );
|
||||
}
|
||||
|
||||
void OwncloudWizard::appendToResultWidget( const QString& msg, LogType type )
|
||||
void OwncloudWizard::appendToConfigurationLog( const QString& msg, LogType type )
|
||||
{
|
||||
OwncloudWizardResultPage *p = static_cast<OwncloudWizardResultPage*> (page( Page_Install ));
|
||||
p->appendResultText( msg, type );
|
||||
_setupLog << msg;
|
||||
qDebug() << "Setup-Log: " << msg;
|
||||
}
|
||||
|
||||
void OwncloudWizard::setOCUrl( const QString& url )
|
||||
{
|
||||
_oCUrl = url;
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
OwncloudSetupPage *p = static_cast<OwncloudSetupPage*>(page(Page_oCSetup));
|
||||
#else
|
||||
OwncloudWizardSelectTypePage *p = static_cast<OwncloudWizardSelectTypePage*>(page( Page_SelectType ));
|
||||
#endif
|
||||
if( p )
|
||||
p->setOCUrl( url );
|
||||
|
||||
_setupPage->setServerUrl( url );
|
||||
}
|
||||
|
||||
void OwncloudWizard::setOCUser( const QString& user )
|
||||
{
|
||||
_oCUser = user;
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
OwncloudSetupPage *p = static_cast<OwncloudSetupPage*>(page(Page_oCSetup));
|
||||
if( p )
|
||||
p->setOCUser( user );
|
||||
#else
|
||||
OwncloudWizardSelectTypePage *p = static_cast<OwncloudWizardSelectTypePage*>(page( Page_SelectType ));
|
||||
#endif
|
||||
_setupPage->setOCUser( user );
|
||||
}
|
||||
|
||||
void OwncloudWizard::setAllowPasswordStorage( bool allow )
|
||||
void OwncloudWizard::setConfigExists( bool config )
|
||||
{
|
||||
#ifdef OWNCLOUD_CLIENT
|
||||
OwncloudSetupPage *p = static_cast<OwncloudSetupPage*>(page(Page_oCSetup));
|
||||
if( p )
|
||||
p->setAllowPasswordStorage( allow );
|
||||
#endif
|
||||
_configExists = config;
|
||||
_setupPage->setConfigExists( config );
|
||||
}
|
||||
|
||||
bool OwncloudWizard::configExists()
|
||||
{
|
||||
return _configExists;
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::slotOpenLocal()
|
||||
{
|
||||
const QString localFolder = wizard()->property("localFolder").toString();
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(localFolder));
|
||||
}
|
||||
|
||||
void OwncloudWizardResultPage::slotOpenServer()
|
||||
{
|
||||
QUrl url = field("OCUrl").toUrl();
|
||||
qDebug() << Q_FUNC_INFO << url;
|
||||
QDesktopServices::openUrl(url);
|
||||
}
|
||||
|
||||
|
||||
} // end namespace
|
||||
|
||||
@@ -18,18 +18,18 @@
|
||||
|
||||
#include <QWizard>
|
||||
|
||||
#include "ui_owncloudwizardselecttypepage.h"
|
||||
#include "ui_createanowncloudpage.h"
|
||||
#include "ui_owncloudftpaccesspage.h"
|
||||
#include "ui_owncloudsetuppage_ng.h"
|
||||
#include "ui_owncloudwizardresultpage.h"
|
||||
#include "ui_owncloudcredentialspage.h"
|
||||
#include "ui_owncloudsetuppage.h"
|
||||
|
||||
class QLabel;
|
||||
class QVariant;
|
||||
class QProgressIndicator;
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class OwncloudSetupPage;
|
||||
class OwncloudWizardResultPage;
|
||||
|
||||
class OwncloudSetupPage: public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -37,20 +37,62 @@ public:
|
||||
OwncloudSetupPage();
|
||||
~OwncloudSetupPage();
|
||||
|
||||
enum SyncMode {
|
||||
SelectiveMode,
|
||||
BoxMode
|
||||
};
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
virtual int nextId() const;
|
||||
void setOCUrl( const QString& );
|
||||
void setServerUrl( const QString& );
|
||||
void setOCUser( const QString& );
|
||||
void setAllowPasswordStorage( bool );
|
||||
bool validatePage();
|
||||
QString url() const;
|
||||
QString localFolder() const;
|
||||
void setConnected(bool complete);
|
||||
void setRemoteFolder( const QString& remoteFolder);
|
||||
void setMultipleFoldersExist( bool exist );
|
||||
|
||||
SyncMode syncMode();
|
||||
|
||||
public slots:
|
||||
void setErrorString( const QString& );
|
||||
void setConfigExists( bool );
|
||||
void stopSpinner();
|
||||
|
||||
protected slots:
|
||||
void slotPwdStoreChanged( int );
|
||||
void slotSecureConChanged( int );
|
||||
void handleNewOcUrl(const QString& ocUrl);
|
||||
void slotUrlChanged(const QString&);
|
||||
void slotUserChanged(const QString&);
|
||||
|
||||
void setupCustomization();
|
||||
void slotToggleAdvanced(int state);
|
||||
void slotSelectFolder();
|
||||
|
||||
signals:
|
||||
void connectToOCUrl( const QString& );
|
||||
|
||||
protected:
|
||||
void updateFoldersInfo();
|
||||
|
||||
private slots:
|
||||
void slotHandleUserInput();
|
||||
|
||||
private:
|
||||
bool urlHasChanged();
|
||||
|
||||
Ui_OwncloudSetupPage _ui;
|
||||
QString _oCUrl;
|
||||
QString _ocUser;
|
||||
bool _connected;
|
||||
bool _checking;
|
||||
bool _configExists;
|
||||
bool _multipleFoldersExist;
|
||||
|
||||
QProgressIndicator *_progressIndi;
|
||||
QButtonGroup *_selectiveSyncButtons;
|
||||
QString _remoteFolder;
|
||||
};
|
||||
|
||||
class OwncloudWizard: public QWizard
|
||||
@@ -59,13 +101,8 @@ class OwncloudWizard: public QWizard
|
||||
public:
|
||||
|
||||
enum {
|
||||
Page_oCWelcome,
|
||||
Page_oCSetup,
|
||||
Page_SelectType,
|
||||
Page_Create_OC,
|
||||
Page_OC_Credentials,
|
||||
Page_FTP,
|
||||
Page_Install
|
||||
Page_Result
|
||||
};
|
||||
|
||||
enum LogType {
|
||||
@@ -73,46 +110,43 @@ public:
|
||||
LogParagraph
|
||||
};
|
||||
|
||||
OwncloudWizard(QWidget *parent = 0L);
|
||||
OwncloudWizard(QWidget *parent = 0);
|
||||
|
||||
void setOCUrl( const QString& );
|
||||
void setOCUser( const QString& );
|
||||
void setAllowPasswordStorage( bool );
|
||||
|
||||
void setupCustomMedia( QVariant, QLabel* );
|
||||
QString ocUrl() const;
|
||||
QString localFolder() const;
|
||||
|
||||
void enableFinishOnResultWidget(bool enable);
|
||||
|
||||
public slots:
|
||||
void appendToResultWidget( const QString& msg, LogType type = LogParagraph );
|
||||
void slotCurrentPageChanged( int );
|
||||
void showOCUrlLabel( bool );
|
||||
void displayError( const QString& );
|
||||
OwncloudSetupPage::SyncMode syncMode();
|
||||
void setMultipleFoldersExist( bool );
|
||||
void setConfigExists( bool );
|
||||
bool configExists();
|
||||
|
||||
public slots:
|
||||
void setRemoteFolder( const QString& );
|
||||
void appendToConfigurationLog( const QString& msg, LogType type = LogParagraph );
|
||||
void slotCurrentPageChanged( int );
|
||||
|
||||
void showConnectInfo( const QString& );
|
||||
void successfullyConnected(bool);
|
||||
|
||||
signals:
|
||||
void connectToOCUrl( const QString& );
|
||||
void installOCServer();
|
||||
void installOCLocalhost();
|
||||
void clearPendingRequests();
|
||||
void connectToOCUrl( const QString& );
|
||||
|
||||
private:
|
||||
OwncloudSetupPage *_setupPage;
|
||||
OwncloudWizardResultPage *_resultPage;
|
||||
|
||||
QString _configFile;
|
||||
QString _oCUrl;
|
||||
QString _oCUser;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* page for first launch only
|
||||
*/
|
||||
class OwncloudWelcomePage: public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
OwncloudWelcomePage();
|
||||
|
||||
virtual int nextId() const { return OwncloudWizard::Page_oCSetup; }
|
||||
QStringList _setupLog;
|
||||
bool _configExists;
|
||||
};
|
||||
|
||||
|
||||
@@ -120,79 +154,6 @@ public:
|
||||
* page to ask for the type of Owncloud to connect to
|
||||
*/
|
||||
|
||||
class OwncloudWizardSelectTypePage: public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
OwncloudWizardSelectTypePage();
|
||||
~OwncloudWizardSelectTypePage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
int nextId() const;
|
||||
void setOCUrl( const QString& );
|
||||
void showOCUrlLabel( const QString& );
|
||||
|
||||
private:
|
||||
Ui_OwncloudWizardSelectTypePage _ui;
|
||||
};
|
||||
|
||||
class CreateAnOwncloudPage: public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CreateAnOwncloudPage();
|
||||
~CreateAnOwncloudPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
virtual int nextId() const;
|
||||
|
||||
QString domain() const;
|
||||
|
||||
private:
|
||||
Ui_CreateAnOwncloudPage _ui;
|
||||
|
||||
};
|
||||
|
||||
class OwncloudCredentialsPage: public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
OwncloudCredentialsPage();
|
||||
~OwncloudCredentialsPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
virtual int nextId() const;
|
||||
|
||||
protected slots:
|
||||
void slotPwdStoreChanged( int );
|
||||
|
||||
private:
|
||||
Ui_OwncloudCredentialsPage _ui;
|
||||
|
||||
};
|
||||
/**
|
||||
* page to ask for the ftp credentials etc. for ftp install
|
||||
*/
|
||||
class OwncloudFTPAccessPage : public QWizardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
OwncloudFTPAccessPage();
|
||||
~OwncloudFTPAccessPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
void setFTPUrl( const QString& );
|
||||
virtual int nextId() const;
|
||||
|
||||
private:
|
||||
Ui_OwncloudFTPAccessPage _ui;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* page to display the install result
|
||||
*/
|
||||
@@ -203,22 +164,26 @@ public:
|
||||
OwncloudWizardResultPage();
|
||||
~OwncloudWizardResultPage();
|
||||
|
||||
virtual bool isComplete() const;
|
||||
virtual void initializePage();
|
||||
|
||||
void setComplete(bool complete);
|
||||
bool isComplete() const;
|
||||
void initializePage();
|
||||
void setRemoteFolder( const QString& remoteFolder);
|
||||
|
||||
public slots:
|
||||
void appendResultText( const QString&, OwncloudWizard::LogType type = OwncloudWizard::LogParagraph );
|
||||
void showOCUrlLabel( const QString&, bool );
|
||||
void setComplete(bool complete);
|
||||
|
||||
protected slots:
|
||||
void slotOpenLocal();
|
||||
void slotOpenServer();
|
||||
|
||||
protected:
|
||||
void setupCustomization();
|
||||
|
||||
private:
|
||||
QString _localFolder;
|
||||
QString _remoteFolder;
|
||||
bool _complete;
|
||||
Ui_OwncloudWizardResultPage _ui;
|
||||
|
||||
Ui_OwncloudWizardResultPage _ui;
|
||||
};
|
||||
|
||||
} // ns Mirall
|
||||
|
||||
@@ -6,79 +6,14 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>526</width>
|
||||
<height>357</height>
|
||||
<width>469</width>
|
||||
<height>325</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="3" column="0">
|
||||
<widget class="QTextEdit" name="resultTextEdit">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="ocLinkLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Result</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_17">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">This page shows the status of the connection.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="topLabel">
|
||||
<property name="text">
|
||||
@@ -86,6 +21,140 @@ p, li { white-space: pre-wrap; }
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="localFolderLabel">
|
||||
<property name="text">
|
||||
<string>Your entire account is synced to the local folder </string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QToolButton" name="pbOpenLocal">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>PushButton</string>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="pbOpenServer">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>PushButton</string>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextUnderIcon</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>48</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>OwncloudWizardSelectTypePage</class>
|
||||
<widget class="QWidget" name="OwncloudWizardSelectTypePage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>520</width>
|
||||
<height>321</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>14</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create an ownCloud Connection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_17">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Select the ownCloud you want to connect to</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QRadioButton" name="connectMyOCRadioBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>connect my ownCloud</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt; color:#585858;">Specify the ownCloud you want to connect to.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt; color:#585858;">Enter the web address of your ownCloud server below.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>ownCloud-Link:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLineEdit" name="OCUrlLineEdit"/>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Note: To specify an SSL secured connection, start the url with https.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="3">
|
||||
<widget class="QRadioButton" name="createNewOCRadioBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>create a new ownCloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>13</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="1" colspan="2">
|
||||
<widget class="QLabel" name="createNewOwncloudLabel">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Sans Serif'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">Select if you want to create a new ownCloud either on the local machine or on your server. </span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#585858;"></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" color:#585858;">This wizard will guide you through all necessary steps.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::AutoText</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>512</width>
|
||||
<height>48</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -35,21 +35,33 @@ Mirall::ProxyDialog::ProxyDialog( QWidget* parent )
|
||||
|
||||
// load current proxy settings
|
||||
Mirall::MirallConfigFile cfgFile;
|
||||
if (cfgFile.proxyType() == QNetworkProxy::NoProxy)
|
||||
switch (cfgFile.proxyType()) {
|
||||
case QNetworkProxy::NoProxy:
|
||||
noProxyRadioButton->setChecked(true);
|
||||
if (cfgFile.proxyType() == QNetworkProxy::DefaultProxy)
|
||||
break;
|
||||
case QNetworkProxy::DefaultProxy:
|
||||
systemProxyRadioButton->setChecked(true);
|
||||
if (cfgFile.proxyType() == QNetworkProxy::HttpProxy)
|
||||
{
|
||||
break;
|
||||
case QNetworkProxy::Socks5Proxy:
|
||||
cbSocks->setChecked(true);
|
||||
// fall through
|
||||
case QNetworkProxy::HttpProxy:
|
||||
case QNetworkProxy::HttpCachingProxy:
|
||||
manualProxyRadioButton->setChecked(true);
|
||||
hostLineEdit->setText(cfgFile.proxyHostName());
|
||||
portSpinBox->setValue(cfgFile.proxyPort());
|
||||
if (!cfgFile.proxyUser().isEmpty())
|
||||
{
|
||||
authRequiredcheckBox->setChecked(true);
|
||||
userLineEdit->setText(cfgFile.proxyUser());
|
||||
passwordLineEdit->setText(cfgFile.proxyPassword());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
hostLineEdit->setText(cfgFile.proxyHostName());
|
||||
int port = cfgFile.proxyPort();
|
||||
if (port == 0) port = 8080;
|
||||
portSpinBox->setValue(port);
|
||||
if (!cfgFile.proxyUser().isEmpty())
|
||||
{
|
||||
authRequiredcheckBox->setChecked(true);
|
||||
userLineEdit->setText(cfgFile.proxyUser());
|
||||
passwordLineEdit->setText(cfgFile.proxyPassword());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,18 +79,14 @@ void Mirall::ProxyDialog::saveSettings()
|
||||
}
|
||||
if (manualProxyRadioButton->isChecked())
|
||||
{
|
||||
if (authRequiredcheckBox->isChecked())
|
||||
{
|
||||
QString user = userLineEdit->text();
|
||||
QString pass = passwordLineEdit->text();
|
||||
cfgFile.setProxyType(QNetworkProxy::HttpProxy, hostLineEdit->text(),
|
||||
portSpinBox->value(), user, pass);
|
||||
}
|
||||
else
|
||||
{
|
||||
cfgFile.setProxyType(QNetworkProxy::HttpProxy, hostLineEdit->text(),
|
||||
portSpinBox->value(), QString::null, QString::null);
|
||||
}
|
||||
int proxyType = cbSocks->isChecked() ? QNetworkProxy::Socks5Proxy
|
||||
: QNetworkProxy::HttpProxy;
|
||||
QString user = userLineEdit->text();
|
||||
QString pass = passwordLineEdit->text();
|
||||
cfgFile.setProxyType(proxyType, hostLineEdit->text(),
|
||||
portSpinBox->value(),
|
||||
authRequiredcheckBox->isChecked(),
|
||||
user, pass);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,38 +6,15 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>465</width>
|
||||
<height>291</height>
|
||||
<width>405</width>
|
||||
<height>319</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Proxy Settings</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
@@ -76,18 +53,82 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>40</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="hostLabel">
|
||||
<property name="text">
|
||||
<string>Host</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="hostLineEdit">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>300</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="portLabel">
|
||||
<property name="text">
|
||||
<string>Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QSpinBox" name="portSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>65535</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>8080</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="cbSocks">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Use as SOCKSv5 proxy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="authRequiredcheckBox">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Proxy server requires password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="proxyUserLabel">
|
||||
<property name="enabled">
|
||||
@@ -143,70 +184,34 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="portLabel">
|
||||
<property name="text">
|
||||
<string>Port</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="hostLabel">
|
||||
<property name="text">
|
||||
<string>Host</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="hostLineEdit">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>300</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="authRequiredcheckBox">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Proxy server requires password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="portSpinBox">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>65535</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>8080</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@@ -64,40 +64,33 @@ FolderViewDelegate::~FolderViewDelegate()
|
||||
QSize FolderViewDelegate::sizeHint(const QStyleOptionViewItem & option ,
|
||||
const QModelIndex & index) const
|
||||
{
|
||||
int w = 0;
|
||||
|
||||
QString p = qvariant_cast<QString>(index.data(FolderPathRole));
|
||||
QFont aliasFont = QApplication::font();
|
||||
QFont font = QApplication::font();
|
||||
Q_UNUSED(option)
|
||||
QFont aliasFont = option.font;
|
||||
QFont font = option.font;
|
||||
aliasFont.setPointSize( font.pointSize() +2 );
|
||||
|
||||
QFontMetrics fm(font);
|
||||
QFontMetrics aliasFm(aliasFont);
|
||||
|
||||
int margin = aliasFm.height()/2;
|
||||
|
||||
w = 8 + fm.boundingRect( p ).width();
|
||||
int aliasMargin = aliasFm.height()/2;
|
||||
int margin = fm.height()/4;
|
||||
|
||||
// calc height
|
||||
|
||||
int h = margin; // margin to top
|
||||
int h = aliasMargin; // margin to top
|
||||
h += aliasFm.height(); // alias
|
||||
h += fm.height()/2; // between alias and local path
|
||||
h += margin; // between alias and local path
|
||||
h += fm.height(); // local path
|
||||
h += fm.height()/2; // between local and remote path
|
||||
h += margin; // between local and remote path
|
||||
h += fm.height(); // remote path
|
||||
h += margin; // bottom margin
|
||||
|
||||
int minHeight = 48 + margin + margin; // icon + margins
|
||||
|
||||
if( h < minHeight ) h = minHeight;
|
||||
h += aliasMargin; // bottom margin
|
||||
|
||||
// add some space to show an error condition.
|
||||
if( ! qvariant_cast<QString>(index.data(FolderErrorMsg)).isEmpty() ) {
|
||||
h += margin+fm.height();
|
||||
h += aliasMargin*2+fm.height();
|
||||
}
|
||||
|
||||
return QSize( w, h );
|
||||
return QSize( 0, h);
|
||||
}
|
||||
|
||||
void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||
@@ -107,8 +100,8 @@ void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
|
||||
|
||||
painter->save();
|
||||
|
||||
QFont aliasFont = QApplication::font();
|
||||
QFont subFont = QApplication::font();
|
||||
QFont aliasFont = option.font;
|
||||
QFont subFont = option.font;
|
||||
QFont errorFont = subFont;
|
||||
|
||||
//font.setPixelSize(font.weight()+);
|
||||
@@ -117,10 +110,11 @@ void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
|
||||
|
||||
QFontMetrics subFm( subFont );
|
||||
QFontMetrics aliasFm( aliasFont );
|
||||
int margin = aliasFm.height()/2;
|
||||
|
||||
QIcon folderIcon = qvariant_cast<QIcon>(index.data(FolderIconRole));
|
||||
QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIcon));
|
||||
int aliasMargin = aliasFm.height()/2;
|
||||
int margin = subFm.height()/4;
|
||||
|
||||
QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole));
|
||||
QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole));
|
||||
QString pathText = qvariant_cast<QString>(index.data(FolderPathRole));
|
||||
QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole));
|
||||
@@ -130,72 +124,80 @@ void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
|
||||
bool syncEnabled = index.data(FolderSyncEnabled).toBool();
|
||||
// QString syncStatus = syncEnabled? tr( "Enabled" ) : tr( "Disabled" );
|
||||
|
||||
QSize iconsize(48, 48); // = icon.actualSize(option.decorationSize);
|
||||
|
||||
QRect aliasRect = option.rect;
|
||||
QRect iconRect = option.rect;
|
||||
QRect aliasRect = option.rect;
|
||||
|
||||
iconRect.setLeft( margin );
|
||||
iconRect.setWidth( 48 );
|
||||
iconRect.setTop( iconRect.top() + margin ); // (iconRect.height()-iconsize.height())/2);
|
||||
iconRect.setLeft( aliasMargin );
|
||||
iconRect.setTop( iconRect.top() + aliasMargin ); // (iconRect.height()-iconsize.height())/2);
|
||||
|
||||
QRect statusRect = iconRect;
|
||||
statusRect.setLeft( option.rect.right() - margin - 48 );
|
||||
statusRect.setRight( option.rect.right() - margin );
|
||||
|
||||
aliasRect.setLeft(iconRect.right()+margin);
|
||||
|
||||
aliasRect.setTop(aliasRect.top() + aliasFm.height()/2 );
|
||||
aliasRect.setBottom(aliasRect.top()+subFm.height());
|
||||
// local directory box
|
||||
aliasRect.setTop(aliasRect.top() + aliasMargin );
|
||||
aliasRect.setBottom(aliasRect.top() + aliasFm.height());
|
||||
aliasRect.setRight(aliasRect.right() - aliasMargin );
|
||||
|
||||
// local directory box
|
||||
QRect localPathRect = aliasRect;
|
||||
localPathRect.setTop(aliasRect.bottom() + margin / 3);
|
||||
localPathRect.setBottom(localPathRect.top()+subFm.height());
|
||||
localPathRect.setTop(aliasRect.bottom() + margin );
|
||||
localPathRect.setBottom(localPathRect.top() + subFm.height());
|
||||
|
||||
// remote directory box
|
||||
QRect remotePathRect = localPathRect;
|
||||
remotePathRect.setTop( localPathRect.bottom() + subFm.height()/2 );
|
||||
remotePathRect.setTop( localPathRect.bottom() + margin );
|
||||
remotePathRect.setBottom( remotePathRect.top() + subFm.height());
|
||||
|
||||
iconRect.setBottom(remotePathRect.bottom());
|
||||
iconRect.setWidth(iconRect.height());
|
||||
|
||||
//painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height()));
|
||||
if( syncEnabled ) {
|
||||
painter->drawPixmap(QPoint(iconRect.left(),iconRect.top()), folderIcon.pixmap(iconsize.width(),iconsize.height()));
|
||||
int nextToIcon = iconRect.right()+aliasMargin;
|
||||
aliasRect.setLeft(nextToIcon);
|
||||
localPathRect.setLeft(nextToIcon);
|
||||
remotePathRect.setLeft(nextToIcon);
|
||||
|
||||
int iconSize = iconRect.width();
|
||||
|
||||
QPixmap pm = statusIcon.pixmap(iconSize, iconSize, syncEnabled ? QIcon::Normal : QIcon::Disabled );
|
||||
painter->drawPixmap(QPoint(iconRect.left(), iconRect.top()), pm);
|
||||
|
||||
if ((option.state & QStyle::State_Selected)
|
||||
&& (option.state & QStyle::State_Active)
|
||||
// Hack: Windows Vista's light blue is not contrasting enough for white
|
||||
&& !Application::style()->inherits("QWindowsVistaStyle")) {
|
||||
painter->setPen(option.palette.color(QPalette::HighlightedText));
|
||||
} else {
|
||||
painter->drawPixmap(QPoint(iconRect.left(),iconRect.top()), folderIcon.pixmap(iconsize.width(),iconsize.height(), QIcon::Disabled ));
|
||||
painter->setPen(option.palette.color(QPalette::Text));
|
||||
}
|
||||
|
||||
painter->drawPixmap(QPoint(statusRect.left(), statusRect.top()), statusIcon.pixmap(48,48));
|
||||
|
||||
QString elidedAlias = aliasFm.elidedText(aliasText, Qt::ElideRight, aliasRect.width());
|
||||
painter->setFont(aliasFont);
|
||||
painter->drawText(aliasRect, aliasText);
|
||||
painter->drawText(aliasRect, elidedAlias);
|
||||
|
||||
painter->setFont(subFont);
|
||||
painter->drawText(localPathRect.left(),localPathRect.top()+17, pathText);
|
||||
painter->drawText(remotePathRect, tr("Remote path: %1").arg(remotePath));
|
||||
QString elidedPathText = subFm.elidedText(pathText, Qt::ElideMiddle, localPathRect.width());
|
||||
painter->drawText(localPathRect, elidedPathText);
|
||||
QString elidedRemotePathText = subFm.elidedText(tr("Remote path: %1").arg(remotePath),
|
||||
Qt::ElideMiddle, remotePathRect.width());
|
||||
painter->drawText(remotePathRect, elidedRemotePathText);
|
||||
|
||||
// paint an error overlay if there is an error string
|
||||
if( !errorText.isEmpty() ) {
|
||||
QRect errorRect = localPathRect;
|
||||
errorRect.setLeft( iconRect.left());
|
||||
errorRect.setTop( iconRect.bottom()+subFm.height()/2 );
|
||||
errorRect.setHeight(subFm.height()+margin);
|
||||
errorRect.setRight( statusRect.right() );
|
||||
errorRect.setHeight(subFm.height()+aliasMargin);
|
||||
errorRect.setRight( option.rect.right()-aliasMargin );
|
||||
|
||||
painter->setBrush( QColor(0xbb, 0x4d, 0x4d) );
|
||||
painter->setPen( QColor(0xaa, 0xaa, 0xaa));
|
||||
painter->drawRoundedRect( errorRect, 4, 4 );
|
||||
|
||||
QIcon warnIcon(":/mirall/resources/warning-16");
|
||||
painter->drawPixmap( QPoint(errorRect.left()+2, errorRect.top()+2), warnIcon.pixmap(QSize(16,16)));
|
||||
QPoint warnPos(errorRect.left()+aliasMargin/2, errorRect.top()+aliasMargin/2);
|
||||
painter->drawPixmap( warnPos, warnIcon.pixmap(QSize(16,16)));
|
||||
|
||||
painter->setPen( Qt::white );
|
||||
painter->setFont(errorFont);
|
||||
QRect errorTextRect = errorRect;
|
||||
errorTextRect.setLeft( errorTextRect.left()+margin/2 +16);
|
||||
errorTextRect.setTop( errorTextRect.top()+margin/2 );
|
||||
errorTextRect.setLeft( errorTextRect.left()+aliasMargin +16);
|
||||
errorTextRect.setTop( errorTextRect.top()+aliasMargin/2 );
|
||||
|
||||
int linebreak = errorText.indexOf(QLatin1String("<br"));
|
||||
QString eText = errorText;
|
||||
@@ -227,9 +229,9 @@ StatusDialog::StatusDialog( Theme *theme, QWidget *parent) :
|
||||
setWindowTitle( QString::fromLatin1( "%1 %2" ).arg(_theme->appNameGUI(), _theme->version() ) );
|
||||
|
||||
_model = new FolderStatusModel();
|
||||
FolderViewDelegate *delegate = new FolderViewDelegate();
|
||||
_delegate = new FolderViewDelegate();
|
||||
|
||||
_folderList->setItemDelegate( delegate );
|
||||
_folderList->setItemDelegate( _delegate );
|
||||
_folderList->setModel( _model );
|
||||
_folderList->setMinimumWidth( 300 );
|
||||
_folderList->setEditTriggers( QAbstractItemView::NoEditTriggers );
|
||||
@@ -259,6 +261,8 @@ StatusDialog::StatusDialog( Theme *theme, QWidget *parent) :
|
||||
|
||||
StatusDialog::~StatusDialog()
|
||||
{
|
||||
delete _model;
|
||||
delete _delegate;
|
||||
}
|
||||
|
||||
void StatusDialog::slotFolderActivated( const QModelIndex& indx )
|
||||
@@ -368,9 +372,9 @@ void StatusDialog::folderToModelItem( QStandardItem *item, Folder *f )
|
||||
if( ! item || !f ) return;
|
||||
|
||||
QIcon icon = _theme->folderIcon( f->backend() );
|
||||
item->setData( icon, FolderViewDelegate::FolderIconRole );
|
||||
item->setData( icon, FolderViewDelegate::FolderStatusIconRole );
|
||||
item->setData( f->nativePath(), FolderViewDelegate::FolderPathRole );
|
||||
item->setData( f->nativeSecondPath(), FolderViewDelegate::FolderSecondPathRole );
|
||||
item->setData( f->secondPath(), FolderViewDelegate::FolderSecondPathRole );
|
||||
item->setData( f->alias(), FolderViewDelegate::FolderAliasRole );
|
||||
item->setData( f->syncEnabled(), FolderViewDelegate::FolderSyncEnabled );
|
||||
|
||||
@@ -381,9 +385,9 @@ void StatusDialog::folderToModelItem( QStandardItem *item, Folder *f )
|
||||
|
||||
item->setData( _theme->statusHeaderText( status ), Qt::ToolTipRole );
|
||||
if( f->syncEnabled() ) {
|
||||
item->setData( _theme->syncStateIcon( status ), FolderViewDelegate::FolderStatusIcon );
|
||||
item->setData( _theme->syncStateIcon( status ), FolderViewDelegate::FolderStatusIconRole );
|
||||
} else {
|
||||
item->setData( _theme->folderDisabledIcon( ), FolderViewDelegate::FolderStatusIcon ); // size 48 before
|
||||
item->setData( _theme->folderDisabledIcon( ), FolderViewDelegate::FolderStatusIconRole ); // size 48 before
|
||||
}
|
||||
item->setData( _theme->statusHeaderText( status ), FolderViewDelegate::FolderStatus );
|
||||
item->setData( errors, FolderViewDelegate::FolderErrorMsg );
|
||||
|
||||
@@ -45,15 +45,14 @@ class FolderViewDelegate : public QStyledItemDelegate
|
||||
FolderViewDelegate();
|
||||
virtual ~FolderViewDelegate();
|
||||
|
||||
enum datarole { FolderAliasRole = Qt::UserRole + 100,
|
||||
FolderPathRole = Qt::UserRole + 101,
|
||||
FolderSecondPathRole = Qt::UserRole + 102,
|
||||
FolderIconRole = Qt::UserRole + 103,
|
||||
FolderRemotePath = Qt::UserRole + 104,
|
||||
FolderStatus = Qt::UserRole + 105,
|
||||
FolderErrorMsg = Qt::UserRole + 106,
|
||||
FolderStatusIcon = Qt::UserRole + 107,
|
||||
FolderSyncEnabled = Qt::UserRole + 108
|
||||
enum datarole { FolderAliasRole = Qt::UserRole + 100,
|
||||
FolderPathRole,
|
||||
FolderSecondPathRole,
|
||||
FolderRemotePath,
|
||||
FolderStatus,
|
||||
FolderErrorMsg,
|
||||
FolderSyncEnabled,
|
||||
FolderStatusIconRole
|
||||
};
|
||||
void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const;
|
||||
QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const;
|
||||
@@ -106,6 +105,7 @@ private:
|
||||
void folderToModelItem( QStandardItem*, Folder* );
|
||||
|
||||
QStandardItemModel *_model;
|
||||
FolderViewDelegate *_delegate;
|
||||
QUrl _OCUrl;
|
||||
Theme *_theme;
|
||||
};
|
||||
|
||||
@@ -19,13 +19,11 @@ namespace Mirall
|
||||
|
||||
SyncResult::SyncResult()
|
||||
: _status( Undefined )
|
||||
, _localRunOnly(false)
|
||||
{
|
||||
}
|
||||
|
||||
SyncResult::SyncResult(SyncResult::Status status )
|
||||
: _status(status)
|
||||
, _localRunOnly(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -115,16 +113,6 @@ void SyncResult::clearErrors()
|
||||
_errors.clear();
|
||||
}
|
||||
|
||||
bool SyncResult::localRunOnly() const
|
||||
{
|
||||
return _localRunOnly;
|
||||
}
|
||||
|
||||
void SyncResult::setLocalRunOnly( bool lor )
|
||||
{
|
||||
_localRunOnly = lor;
|
||||
}
|
||||
|
||||
SyncResult::~SyncResult()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -57,8 +57,6 @@ public:
|
||||
QString statusString() const;
|
||||
QDateTime syncTime() const;
|
||||
|
||||
bool localRunOnly() const;
|
||||
void setLocalRunOnly( bool );
|
||||
private:
|
||||
Status _status;
|
||||
SyncFileItemVector _syncItems;
|
||||
@@ -67,8 +65,6 @@ private:
|
||||
* when the sync tool support this...
|
||||
*/
|
||||
QStringList _errors;
|
||||
|
||||
bool _localRunOnly;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
42
src/mirall/systray.cpp
Normal file
42
src/mirall/systray.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) by Cédric Bellegarde <gnumdk@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "systray.h"
|
||||
|
||||
#ifdef USE_FDO_NOTIFICATIONS
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusMessage>
|
||||
#include <QDBusPendingCall>
|
||||
#define NOTIFICATIONS_SERVICE "org.freedesktop.Notifications"
|
||||
#define NOTIFICATIONS_PATH "/org/freedesktop/Notifications"
|
||||
#define NOTIFICATIONS_IFACE "org.freedesktop.Notifications"
|
||||
#endif
|
||||
|
||||
void Systray::showMessage(const QString & title, const QString & message, MessageIcon icon, int millisecondsTimeoutHint)
|
||||
{
|
||||
|
||||
#ifdef USE_FDO_NOTIFICATIONS
|
||||
if(QDBusInterface(NOTIFICATIONS_SERVICE, NOTIFICATIONS_PATH, NOTIFICATIONS_IFACE).isValid()) {
|
||||
QList<QVariant> args = QList<QVariant>() << "owncloud" << quint32(0) << "owncloud"
|
||||
<< title << message << QStringList () << QVariantMap() << qint32(-1);
|
||||
QDBusMessage method = QDBusMessage::createMethodCall(NOTIFICATIONS_SERVICE, NOTIFICATIONS_PATH, NOTIFICATIONS_IFACE, "Notify");
|
||||
method.setArguments(args);
|
||||
QDBusConnection::sessionBus().asyncCall(method);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
QSystemTrayIcon::showMessage(title, message, icon, millisecondsTimeoutHint);
|
||||
}
|
||||
}
|
||||
29
src/mirall/systray.h
Normal file
29
src/mirall/systray.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) by Cédric Bellegarde <gnumdk@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#ifndef SYSTRAY_H
|
||||
#define SYSTRAY_H
|
||||
|
||||
#include <QSystemTrayIcon>
|
||||
|
||||
class QIcon;
|
||||
|
||||
class Systray : public QSystemTrayIcon
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
void showMessage(const QString & title, const QString & message, MessageIcon icon = Information, int millisecondsTimeoutHint = 10000);
|
||||
};
|
||||
|
||||
#endif //SYSTRAY_H
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
|
||||
#include "mirall/miralltheme.h"
|
||||
#include "mirall/owncloudtheme.h"
|
||||
|
||||
#ifdef THEME_INCLUDE
|
||||
@@ -136,7 +135,7 @@ bool Theme::singleSyncFolder() const {
|
||||
|
||||
QString Theme::defaultServerFolder() const
|
||||
{
|
||||
return QLatin1String("clientsync");
|
||||
return QLatin1String("/");
|
||||
}
|
||||
|
||||
QString Theme::overrideServerUrl() const
|
||||
@@ -198,5 +197,58 @@ QVariant Theme::customMedia( CustomMediaType type )
|
||||
return re;
|
||||
}
|
||||
|
||||
QIcon Theme::syncStateIcon( SyncResult::Status status, bool sysTray ) const
|
||||
{
|
||||
// FIXME: Mind the size!
|
||||
QString statusIcon;
|
||||
|
||||
switch( status ) {
|
||||
case SyncResult::Undefined:
|
||||
case SyncResult::NotYetStarted:
|
||||
case SyncResult::Unavailable:
|
||||
statusIcon = QLatin1String("state-offline");
|
||||
break;
|
||||
case SyncResult::SyncRunning:
|
||||
statusIcon = QLatin1String("state-sync");
|
||||
break;
|
||||
case SyncResult::SyncPrepare:
|
||||
case SyncResult::Success:
|
||||
statusIcon = QLatin1String("state-ok");
|
||||
break;
|
||||
case SyncResult::Error:
|
||||
case SyncResult::SetupError:
|
||||
default:
|
||||
statusIcon = QLatin1String("state-error");
|
||||
}
|
||||
|
||||
return themeIcon( statusIcon, sysTray );
|
||||
}
|
||||
|
||||
QColor Theme::wizardHeaderTitleColor() const
|
||||
{
|
||||
return qApp->palette().text().color();
|
||||
}
|
||||
|
||||
QColor Theme::wizardHeaderBackgroundColor() const
|
||||
{
|
||||
return QColor();
|
||||
}
|
||||
|
||||
QPixmap Theme::wizardHeaderLogo() const
|
||||
{
|
||||
return QPixmap(":/mirall/theme/colored/wizard_logo.png");
|
||||
}
|
||||
|
||||
QPixmap Theme::wizardHeaderBanner() const
|
||||
{
|
||||
QColor c = wizardHeaderBackgroundColor();
|
||||
if (!c.isValid())
|
||||
return QPixmap();
|
||||
|
||||
QPixmap pix(QSize(600, 78));
|
||||
pix.fill(wizardHeaderBackgroundColor());
|
||||
return pix;
|
||||
}
|
||||
|
||||
} // end namespace mirall
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ class QIcon;
|
||||
class QString;
|
||||
class QObject;
|
||||
class QPixmap;
|
||||
class QColor;
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
@@ -82,7 +83,7 @@ public:
|
||||
/**
|
||||
* get an sync state icon
|
||||
*/
|
||||
virtual QIcon syncStateIcon( SyncResult::Status, bool sysTray = false ) const = 0;
|
||||
virtual QIcon syncStateIcon( SyncResult::Status, bool sysTray = false ) const;
|
||||
|
||||
virtual QIcon folderDisabledIcon() const = 0;
|
||||
virtual QPixmap splashScreen() const = 0;
|
||||
@@ -127,6 +128,24 @@ public:
|
||||
*/
|
||||
virtual QVariant customMedia( CustomMediaType type );
|
||||
|
||||
/** @return color for the setup wizard */
|
||||
virtual QColor wizardHeaderTitleColor() const;
|
||||
|
||||
/** @return color for the setup wizard. */
|
||||
virtual QColor wizardHeaderBackgroundColor() const;
|
||||
|
||||
/** @return logo for the setup wizard. */
|
||||
virtual QPixmap wizardHeaderLogo() const;
|
||||
|
||||
/**
|
||||
* The default implementation creates a
|
||||
* background based on
|
||||
* \ref wizardHeaderTitleColor().
|
||||
*
|
||||
* @return banner for the setup wizard.
|
||||
*/
|
||||
virtual QPixmap wizardHeaderBanner() const;
|
||||
|
||||
/**
|
||||
* About dialog contents
|
||||
*/
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "mirall/unisonfolder.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QMutexLocker>
|
||||
#include <QStringList>
|
||||
#include <QTextStream>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
UnisonFolder::UnisonFolder(const QString &alias,
|
||||
const QString &path,
|
||||
const QString &secondPath,
|
||||
QObject *parent)
|
||||
: Folder(alias, path, secondPath, parent),
|
||||
_unison(new QProcess(this)),
|
||||
_syncCount(0)
|
||||
{
|
||||
QObject::connect(_unison, SIGNAL(readyReadStandardOutput()),
|
||||
SLOT(slotReadyReadStandardOutput()));
|
||||
|
||||
QObject::connect(_unison, SIGNAL(readyReadStandardError()),
|
||||
SLOT(slotReadyReadStandardError()));
|
||||
|
||||
QObject::connect(_unison, SIGNAL(stateChanged(QProcess::ProcessState)),
|
||||
SLOT(slotStateChanged(QProcess::ProcessState)));
|
||||
|
||||
QObject::connect(_unison, SIGNAL(error(QProcess::ProcessError)),
|
||||
SLOT(slotError(QProcess::ProcessError)));
|
||||
|
||||
QObject::connect(_unison, SIGNAL(started()),
|
||||
SLOT(slotStarted()));
|
||||
|
||||
QObject::connect(_unison, SIGNAL(finished(int, QProcess::ExitStatus)),
|
||||
SLOT(slotFinished(int, QProcess::ExitStatus)));
|
||||
}
|
||||
|
||||
UnisonFolder::~UnisonFolder()
|
||||
{
|
||||
}
|
||||
|
||||
bool UnisonFolder::isBusy() const
|
||||
{
|
||||
return (_unison->state() != QProcess::NotRunning);
|
||||
}
|
||||
|
||||
void UnisonFolder::startSync(const QStringList &pathList)
|
||||
{
|
||||
QMutexLocker locker(&_syncMutex);
|
||||
_syncResult.setStatus( SyncResult::SyncRunning );
|
||||
emit syncStateChange();
|
||||
|
||||
emit syncStarted();
|
||||
|
||||
QString program = QLatin1String("unison");
|
||||
QStringList args;
|
||||
args << QLatin1String("-ui") << QLatin1String("text");
|
||||
args << QLatin1String("-auto") << QLatin1String("-batch");
|
||||
|
||||
args << QLatin1String("-confirmbigdel=false");
|
||||
|
||||
// only use -path in after a full synchronization
|
||||
// already happened, which we do only on the first
|
||||
// sync when the program is started
|
||||
if (_syncCount > 0 ) {
|
||||
// may be we should use a QDir in the API itself?
|
||||
QDir root(path());
|
||||
foreach( const QString& changedPath, pathList) {
|
||||
args << QLatin1String("-path") << root.relativeFilePath(changedPath);
|
||||
}
|
||||
}
|
||||
|
||||
args << path();
|
||||
args << secondPath();
|
||||
|
||||
qDebug() << " * Unison: will use" << pathList.size() << "path arguments";
|
||||
_unison->start(program, args);
|
||||
}
|
||||
|
||||
void UnisonFolder::slotTerminateSync()
|
||||
{
|
||||
if( _unison )
|
||||
_unison->terminate();
|
||||
}
|
||||
|
||||
void UnisonFolder::slotStarted()
|
||||
{
|
||||
qDebug() << " * Unison process started ( PID " << _unison->pid() << ")";
|
||||
_syncCount++;
|
||||
|
||||
//qDebug() << _unison->readAllStandardOutput();;
|
||||
}
|
||||
|
||||
void UnisonFolder::slotFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
{
|
||||
qDebug() << " * Unison process finished with status" << exitCode;
|
||||
|
||||
//if (exitCode != 0) {
|
||||
qDebug() << _lastOutput;
|
||||
//}
|
||||
|
||||
// parse a summary from here:
|
||||
//[BGN] Copying zw.png from //piscola//space/store/folder1 to /space/mirall/folder1
|
||||
//[BGN] Deleting gn.png from /space/mirall/folder1
|
||||
//[END] Deleting gn.png
|
||||
|
||||
// from stderr:
|
||||
//Reconciling changes
|
||||
// <---- new file Package.h
|
||||
|
||||
_lastOutput.clear();
|
||||
|
||||
emit syncFinished((exitCode != 0) ?
|
||||
SyncResult(SyncResult::Error)
|
||||
: SyncResult(SyncResult::Success));
|
||||
}
|
||||
|
||||
void UnisonFolder::slotReadyReadStandardOutput()
|
||||
{
|
||||
QTextStream stream(&_lastOutput);
|
||||
stream << _unison->readAllStandardOutput();;
|
||||
}
|
||||
|
||||
void UnisonFolder::slotReadyReadStandardError()
|
||||
{
|
||||
QTextStream stream(&_lastOutput);
|
||||
stream << _unison->readAllStandardError();;
|
||||
}
|
||||
|
||||
void UnisonFolder::slotStateChanged(QProcess::ProcessState state)
|
||||
{
|
||||
//qDebug() << "changed: " << state;
|
||||
}
|
||||
|
||||
void UnisonFolder::slotError(QProcess::ProcessError error)
|
||||
{
|
||||
//qDebug() << "error: " << error;
|
||||
}
|
||||
|
||||
} // ns
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#ifndef MIRALL_UNISONFOLDER_H
|
||||
#define MIRALL_UNISONFOLDER_H
|
||||
|
||||
#include <QMutex>
|
||||
#include <QProcess>
|
||||
#include <QStringList>
|
||||
|
||||
#include "mirall/folder.h"
|
||||
|
||||
class QProcess;
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class UnisonFolder : public Folder
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
UnisonFolder(const QString &alias,
|
||||
const QString &path,
|
||||
const QString &secondPath, QObject *parent = 0L);
|
||||
virtual ~UnisonFolder();
|
||||
|
||||
virtual void startSync(const QStringList &pathList);
|
||||
|
||||
virtual bool isBusy() const;
|
||||
|
||||
public slots:
|
||||
void slotTerminateSync();
|
||||
|
||||
protected slots:
|
||||
void slotReadyReadStandardOutput();
|
||||
void slotReadyReadStandardError();
|
||||
void slotStateChanged(QProcess::ProcessState);
|
||||
void slotFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||
void slotStarted();
|
||||
void slotError(QProcess::ProcessError);
|
||||
private:
|
||||
QMutex _syncMutex;
|
||||
QProcess *_unison;
|
||||
int _syncCount;
|
||||
|
||||
QString _lastOutput;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -15,7 +15,9 @@
|
||||
#include "mirall/updatedetector.h"
|
||||
#include "mirall/theme.h"
|
||||
#include "mirall/version.h"
|
||||
#include "mirall/mirallconfigfile.h"
|
||||
#include "mirall/occinfo.h"
|
||||
#include "mirall/utility.h"
|
||||
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
@@ -55,9 +57,24 @@ void UpdateDetector::versionCheck( Theme *theme )
|
||||
}
|
||||
url.addQueryItem( QLatin1String("version"), ver );
|
||||
url.addQueryItem( QLatin1String("platform"), platform );
|
||||
url.addQueryItem( QLatin1String("oem"), theme->appName());
|
||||
url.addQueryItem( QLatin1String("oem"), theme->appName() );
|
||||
|
||||
_accessManager->get( QNetworkRequest( url ));
|
||||
QNetworkRequest req( url );
|
||||
req.setRawHeader( QByteArray("Host"), url.host().toUtf8() );
|
||||
req.setRawHeader( QByteArray("User-Agent"), Utility::userAgentString() );
|
||||
|
||||
_accessManager->get( req );
|
||||
}
|
||||
|
||||
void UpdateDetector::slotOpenUpdateUrl()
|
||||
{
|
||||
QDesktopServices::openUrl(ocClient.web());
|
||||
}
|
||||
|
||||
void UpdateDetector::slotSetVersionSeen()
|
||||
{
|
||||
MirallConfigFile cfg;
|
||||
cfg.setSeenVersion(ocClient.version());
|
||||
}
|
||||
|
||||
QString UpdateDetector::getSystemInfo()
|
||||
@@ -76,6 +93,57 @@ QString UpdateDetector::getSystemInfo()
|
||||
#endif
|
||||
}
|
||||
|
||||
void UpdateDetector::showDialog()
|
||||
{
|
||||
// if the version tag is set, there is a newer version.
|
||||
QString ver = QString::fromLatin1("%1.%2.%3")
|
||||
.arg(MIRALL_VERSION_MAJOR).arg(MIRALL_VERSION_MINOR).arg(MIRALL_VERSION_MICRO);
|
||||
QDialog *msgBox = new QDialog;
|
||||
|
||||
QIcon info = msgBox->style()->standardIcon(QStyle::SP_MessageBoxInformation, 0, 0);
|
||||
int iconSize = msgBox->style()->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, 0);
|
||||
|
||||
msgBox->setWindowIcon(info);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(msgBox);
|
||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||
layout->addLayout(hlayout);
|
||||
|
||||
msgBox->setWindowTitle(tr("New Version Available"));
|
||||
|
||||
QLabel *ico = new QLabel;
|
||||
ico->setFixedSize(iconSize, iconSize);
|
||||
ico->setPixmap(info.pixmap(iconSize));
|
||||
QLabel *lbl = new QLabel;
|
||||
QString txt = tr("<p>A new version of the %1 Client is available.</p>"
|
||||
"<p><b>%2</b> is available for download. The installed version is %3.<p>")
|
||||
.arg(Theme::instance()->appNameGUI()).arg(ocClient.versionstring()).arg(ver);
|
||||
|
||||
lbl->setText(txt);
|
||||
lbl->setTextFormat(Qt::RichText);
|
||||
lbl->setWordWrap(true);
|
||||
|
||||
hlayout->addWidget(ico);
|
||||
hlayout->addWidget(lbl);
|
||||
|
||||
QDialogButtonBox *bb = new QDialogButtonBox;
|
||||
QPushButton *skip = bb->addButton(tr("Skip update"), QDialogButtonBox::ResetRole);
|
||||
QPushButton *reject = bb->addButton(tr("Skip this time"), QDialogButtonBox::AcceptRole);
|
||||
QPushButton *getupdate = bb->addButton(tr("Get update"), QDialogButtonBox::AcceptRole);
|
||||
|
||||
connect(skip, SIGNAL(clicked()), msgBox, SLOT(reject()));
|
||||
connect(reject, SIGNAL(clicked()), msgBox, SLOT(reject()));
|
||||
connect(getupdate, SIGNAL(clicked()), msgBox, SLOT(accept()));
|
||||
|
||||
connect(skip, SIGNAL(clicked()), SLOT(slotSetVersionSeen()));
|
||||
connect(getupdate, SIGNAL(clicked()), SLOT(slotOpenUpdateUrl()));
|
||||
|
||||
layout->addWidget(bb);
|
||||
|
||||
msgBox->open();
|
||||
msgBox->resize(400, msgBox->sizeHint().height());
|
||||
}
|
||||
|
||||
void UpdateDetector::slotVersionInfoArrived( QNetworkReply* reply )
|
||||
{
|
||||
if( reply->error() != QNetworkReply::NoError ) {
|
||||
@@ -83,10 +151,10 @@ void UpdateDetector::slotVersionInfoArrived( QNetworkReply* reply )
|
||||
return;
|
||||
}
|
||||
|
||||
QString xml = QString::fromAscii( reply->readAll() );
|
||||
QString xml = QString::fromUtf8(reply->readAll());
|
||||
|
||||
bool ok;
|
||||
Owncloudclient ocClient = Owncloudclient::parseString( xml, &ok );
|
||||
ocClient = Owncloudclient::parseString( xml, &ok );
|
||||
if( ok ) {
|
||||
|
||||
// Thats how it looks like if a new version is available:
|
||||
@@ -104,24 +172,11 @@ void UpdateDetector::slotVersionInfoArrived( QNetworkReply* reply )
|
||||
// <versionstring></versionstring>
|
||||
// <web></web>
|
||||
// </owncloudclient>
|
||||
if( ocClient.version().isEmpty() ) {
|
||||
MirallConfigFile cfg;
|
||||
if( ocClient.version().isEmpty() || ocClient.version() == cfg.seenVersion() ) {
|
||||
qDebug() << "Client is on latest version!";
|
||||
} else {
|
||||
// if the version tag is set, there is a newer version.
|
||||
QString ver = QString::fromLatin1("%1.%2.%3")
|
||||
.arg(MIRALL_VERSION_MAJOR).arg(MIRALL_VERSION_MINOR).arg(MIRALL_VERSION_MICRO);
|
||||
QMessageBox msgBox;
|
||||
msgBox.setTextFormat( Qt::RichText );
|
||||
msgBox.setWindowTitle(tr("Client Version Check"));
|
||||
msgBox.setIcon( QMessageBox::Information );
|
||||
msgBox.setText(tr("<p>A new version of the %1 client is available.").arg(Theme::instance()->appNameGUI()));
|
||||
QString txt = tr("%1 is available. The installed version is %3.<p/><p>For more information see <a href=\"%2\">%2</a></p>")
|
||||
.arg(ocClient.versionstring()).arg(ocClient.web()).arg(ver);
|
||||
|
||||
msgBox.setInformativeText( txt );
|
||||
msgBox.setStandardButtons( QMessageBox::Ok );
|
||||
msgBox.setDefaultButton( QMessageBox::Ok );
|
||||
msgBox.exec();
|
||||
showDialog();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Could not parse update information.";
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "mirall/occinfo.h"
|
||||
|
||||
class QNetworkAccessManager;
|
||||
class QNetworkReply;
|
||||
|
||||
@@ -35,13 +37,17 @@ signals:
|
||||
|
||||
public slots:
|
||||
|
||||
protected slots:
|
||||
private slots:
|
||||
void slotOpenUpdateUrl();
|
||||
void slotSetVersionSeen();
|
||||
void slotVersionInfoArrived( QNetworkReply* );
|
||||
|
||||
private:
|
||||
QString getSystemInfo();
|
||||
void showDialog();
|
||||
|
||||
QNetworkAccessManager *_accessManager;
|
||||
Owncloudclient ocClient;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
|
||||
#include "utility.h"
|
||||
|
||||
#include "mirall/version.h"
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QUrl>
|
||||
@@ -90,4 +93,36 @@ void Utility::setupFavLink(const QString &folder)
|
||||
#endif
|
||||
}
|
||||
|
||||
// Qtified version of get_platforms() in csync_owncloud.c
|
||||
QString Utility::platform()
|
||||
{
|
||||
#if defined(Q_OS_WIN32)
|
||||
return QLatin1String("Windows");
|
||||
#elif defined(Q_OS_MAC)
|
||||
return QLatin1String("Macintosh");
|
||||
#elif defined(Q_OS_LINUX)
|
||||
return QLatin1String("Linux");
|
||||
#elif defined(__DragonFly__) // Q_OS_FREEBSD also defined
|
||||
return "DragonFlyBSD";
|
||||
#elif defined(Q_OS_FREEBSD)
|
||||
return QLatin1String("FreeBSD");
|
||||
#elif defined(Q_OS_NETBSD)
|
||||
return QLatin1String("NetBSD");
|
||||
#elif defined(Q_OS_OPENBSD)
|
||||
return QLatin1String("OpenBSD");
|
||||
#elif defined(Q_OS_SOLARIS)
|
||||
return "Solaris";
|
||||
#else
|
||||
return "Unknown OS"
|
||||
#endif
|
||||
}
|
||||
|
||||
QByteArray Utility::userAgentString()
|
||||
{
|
||||
return QString::fromLatin1("Mozilla/5.0 (%1) mirall/%2")
|
||||
.arg(Utility::platform())
|
||||
.arg(QLatin1String(MIRALL_STRINGIFY(MIRALL_VERSION)))
|
||||
.toLatin1();
|
||||
}
|
||||
|
||||
} // namespace Mirall
|
||||
|
||||
@@ -25,6 +25,8 @@ class Utility
|
||||
public:
|
||||
static QString formatFingerprint( const QByteArray& );
|
||||
static void setupFavLink( const QString &folder );
|
||||
static QString platform();
|
||||
static QByteArray userAgentString();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -22,9 +22,9 @@ Thumbs.db
|
||||
|
||||
*_conflict-*
|
||||
|
||||
.Temporary Items
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.Document Revisions-V100
|
||||
.DocumentRevisions-V100
|
||||
.fseventd
|
||||
.apdisk
|
||||
|
||||
|
||||
48
test/scripts/README.rst
Normal file
48
test/scripts/README.rst
Normal file
@@ -0,0 +1,48 @@
|
||||
Torture for Mirall
|
||||
==================
|
||||
|
||||
This is a set of scripts comprising of two parts:
|
||||
|
||||
* ``torture_gen_layout.pl``: Generation of layout files (random)
|
||||
* ``torture_create_files.pl``: Generation of a real file tree based on the
|
||||
layout files (deterministic)
|
||||
|
||||
These scripts allow to produce a data set with the following criteria:
|
||||
|
||||
* realistic in naming
|
||||
* realistic in file size
|
||||
* realistic in structural size
|
||||
|
||||
without checking in the actual data. Instead, a layout file that gets generated
|
||||
once (reference.lay) is checked in. This makes it possible to produce
|
||||
standardized benchmarks for mirall. It allows allows to check for files gone
|
||||
missing in action and other kinds of corruption produced during sync run.
|
||||
|
||||
``torture_create_files.pl`` can be fine tuned via variables in the script
|
||||
header. It sources its file names from ``dict`` wordlist, file extensions and
|
||||
other parameters can be added as needed. The defaults should be reasonable
|
||||
in terms of size.
|
||||
|
||||
The ``references/`` directory contains default folder layouts.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
In order to create a reference layout and create a tree from it::
|
||||
|
||||
./torture_gen_layout.pl > reference.lay
|
||||
./torture_create_files.pl reference.lay <targetdir>
|
||||
|
||||
TODO
|
||||
----
|
||||
|
||||
* Based on the layout file, write a validator that checks files for existence
|
||||
and size without requiring a full reference tree to be created via
|
||||
``./torture_gen_layout.pl``.
|
||||
|
||||
* The current file naming is fairly tame (i.e. almost within ASCII range).
|
||||
Extending it randomly is dangerous, we first need to filter all
|
||||
characters forbidden by various OSes. Or maybe not, because we want to
|
||||
see what happens? :-). Anyway, you have been warned.
|
||||
|
||||
|
||||
6698
test/scripts/references/default.lay
Normal file
6698
test/scripts/references/default.lay
Normal file
File diff suppressed because it is too large
Load Diff
23
test/scripts/torture_create_files.pl
Executable file
23
test/scripts/torture_create_files.pl
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use File::Path qw(make_path);
|
||||
use File::Basename qw(dirname);
|
||||
|
||||
if (scalar @ARGV < 2) {
|
||||
print "Usage: $0 input.lay <offsetdir>\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
my ($file, $offset_dir) = @ARGV;
|
||||
|
||||
open FILE, "<", $file or die $!;
|
||||
while (<FILE>) {
|
||||
my ($fillfile, $size) = split(/:/, $_);
|
||||
$fillfile = $offset_dir . '/' . $fillfile;
|
||||
my $dir = dirname $fillfile;
|
||||
if (!-d $dir) { make_path $dir; }
|
||||
open FILLFILE, ">", $fillfile;
|
||||
print "writing $fillfile with $size bytes\n...";
|
||||
print FILLFILE 0x01 x $size;
|
||||
close FILLFILE;
|
||||
}
|
||||
71
test/scripts/torture_gen_layout.pl
Executable file
71
test/scripts/torture_gen_layout.pl
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use Data::Random::WordList;
|
||||
|
||||
############################################################################
|
||||
|
||||
# Which extensions to randomly assign
|
||||
my @exts = ('txt', 'pdf', 'html', 'docx', 'xlsx', 'pptx', 'odt', 'ods', 'odp');
|
||||
# Maximum depth of the target structure
|
||||
my $depth = 4;
|
||||
# Maximum amount of subfolders within a folder
|
||||
my $max_subfolder = 10;
|
||||
# Maximum amount of files within a folder
|
||||
my $max_files_per_folder = 100;
|
||||
# Maximum file size
|
||||
my $max_file_size = 1024**2;
|
||||
|
||||
############################################################################
|
||||
|
||||
sub gen_entries($)
|
||||
{
|
||||
my ($count) = @_;
|
||||
my $wl = new Data::Random::WordList( wordlist => '/usr/share/dict/words' );
|
||||
my @rand_words = $wl->get_words($count);
|
||||
foreach(@rand_words) {
|
||||
$_ =~ s/\'//g;
|
||||
}
|
||||
$wl->close();
|
||||
return @rand_words;
|
||||
}
|
||||
|
||||
sub create_subdir($)
|
||||
{
|
||||
my ($depth) = @_;
|
||||
$depth--;
|
||||
my %dir_tree = ( );
|
||||
|
||||
my @dirs = gen_entries(int(rand($max_subfolders)));
|
||||
my @files = gen_entries(int(rand($max_files_per_folder)));
|
||||
|
||||
foreach my $file(@files) {
|
||||
$dir_tree{$file} = int(rand($max_file_size));
|
||||
}
|
||||
|
||||
if ($depth > 0) {
|
||||
foreach my $dir(@dirs) {
|
||||
$dir_tree{$dir} = create_subdir($depth);
|
||||
}
|
||||
}
|
||||
|
||||
return \%dir_tree;
|
||||
}
|
||||
|
||||
sub create_dir_listing(@)
|
||||
{
|
||||
my ($tree, $prefix) = @_;
|
||||
foreach my $key(keys %$tree) {
|
||||
my $entry = $tree->{$key};
|
||||
#print "$entry:".scalar $entry.":".ref $entry."\n";
|
||||
if (ref $entry eq "HASH") {
|
||||
create_dir_listing($tree->{$key}, "$prefix/$key");
|
||||
} else {
|
||||
my $ext = @exts[rand @exts];
|
||||
print "$prefix/$key.$ext:$entry\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
srand();
|
||||
my $dir = create_subdir($depth);
|
||||
create_dir_listing($dir, '.');
|
||||
@@ -15,7 +15,6 @@
|
||||
<file>theme/white/state-ok-32.png</file>
|
||||
<file>theme/white/state-offline-32.png</file>
|
||||
<file>theme/white/state-error-32.png</file>
|
||||
|
||||
<file>theme/colored/state-sync-64.png</file>
|
||||
<file>theme/colored/state-pause-64.png</file>
|
||||
<file>theme/colored/state-ok-64.png</file>
|
||||
@@ -31,13 +30,12 @@
|
||||
<file>theme/white/state-ok-64.png</file>
|
||||
<file>theme/white/state-offline-64.png</file>
|
||||
<file>theme/white/state-error-64.png</file>
|
||||
|
||||
<file>theme/colored/owncloud-icon-22.png</file>
|
||||
<file>theme/colored/owncloud-icon-32.png</file>
|
||||
<file>theme/colored/owncloud-icon-48.png</file>
|
||||
<file>theme/colored/owncloud-icon-64.png</file>
|
||||
<file>theme/colored/owncloud-icon-128.png</file>
|
||||
|
||||
<file>theme/colored/owncloud-framed-64.png</file>
|
||||
<file>theme/colored/wizard_logo.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
BIN
theme/colored/wizard_logo.png
Normal file
BIN
theme/colored/wizard_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
@@ -195,9 +195,13 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>en el vostre servidor &ownCloud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Folder on ownCloud:</source>
|
||||
<translation>Carpeta a ownCloud:</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Remote folder:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="149"/>
|
||||
@@ -235,17 +239,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>crea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="177"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="184"/>
|
||||
<source>root</source>
|
||||
<translation>root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="178"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="185"/>
|
||||
<source>/home/local</source>
|
||||
<translation>/home/local</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="179"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="186"/>
|
||||
<source>scp://john@host.com//myfolder</source>
|
||||
<translation>scp://john@host.com//lamevacarpeta</translation>
|
||||
</message>
|
||||
@@ -293,7 +297,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="362"/>
|
||||
<location filename="../src/mirall/application.cpp" line="349"/>
|
||||
<source>Sync started for %1 configured sync folder(s).</source>
|
||||
<translation>la sincronització ha començat per les carpetes %1 configurades.</translation>
|
||||
</message>
|
||||
@@ -302,27 +306,27 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="429"/>
|
||||
<location filename="../src/mirall/application.cpp" line="415"/>
|
||||
<source>Open status...</source>
|
||||
<translation>Obre l'estat...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="432"/>
|
||||
<location filename="../src/mirall/application.cpp" line="418"/>
|
||||
<source>Add folder...</source>
|
||||
<translation>Afegeix una carpeta...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="434"/>
|
||||
<location filename="../src/mirall/application.cpp" line="420"/>
|
||||
<source>Configure...</source>
|
||||
<translation>Configura...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="436"/>
|
||||
<location filename="../src/mirall/application.cpp" line="422"/>
|
||||
<source>Configure proxy...</source>
|
||||
<translation>Configura proxy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="440"/>
|
||||
<location filename="../src/mirall/application.cpp" line="426"/>
|
||||
<source>Quit</source>
|
||||
<translation>Surt</translation>
|
||||
</message>
|
||||
@@ -331,94 +335,94 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="231"/>
|
||||
<location filename="../src/mirall/application.cpp" line="218"/>
|
||||
<source>%1 Server Mismatch</source>
|
||||
<translation>%1 Servidor no coincideix</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="232"/>
|
||||
<location filename="../src/mirall/application.cpp" line="219"/>
|
||||
<source><p>The configured server for this client is too old.</p><p>Please update to the latest %1 server and restart the client.</p></source>
|
||||
<translation><p>El servidor configurat per aquest client és massa antic.</p><p>Actualitzeu a l'última versió del sevidor %1 i reinicieu el client.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="271"/>
|
||||
<source>Too many attempts to get a valid password.</source>
|
||||
<translation>Massa intents d'obtenir una contrasenya vàlida.</translation>
|
||||
<location filename="../src/mirall/application.cpp" line="258"/>
|
||||
<source>Too many incorrect password attempts.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="275"/>
|
||||
<location filename="../src/mirall/application.cpp" line="262"/>
|
||||
<source>%1 user credentials are wrong. Please check configuration.</source>
|
||||
<translation>Les credencials de l'usuari %1 són incorrectes. Comproveu la configuració.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<location filename="../src/mirall/application.cpp" line="299"/>
|
||||
<location filename="../src/mirall/application.cpp" line="267"/>
|
||||
<location filename="../src/mirall/application.cpp" line="286"/>
|
||||
<source>Credentials</source>
|
||||
<translation>Credencials</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="291"/>
|
||||
<location filename="../src/mirall/application.cpp" line="278"/>
|
||||
<source>Error: Could not retrieve the password!</source>
|
||||
<translation>Error no s'ha pogut obtenir la contrasenya!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="293"/>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<source>Password dialog was canceled!</source>
|
||||
<translation>El diàleg de contrasenya s'ha cancel·lat!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="331"/>
|
||||
<location filename="../src/mirall/application.cpp" line="340"/>
|
||||
<location filename="../src/mirall/application.cpp" line="318"/>
|
||||
<location filename="../src/mirall/application.cpp" line="327"/>
|
||||
<source>No %1 Connection</source>
|
||||
<translation>No %1 Connexió</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="332"/>
|
||||
<location filename="../src/mirall/application.cpp" line="319"/>
|
||||
<source><p>Your %1 credentials are not correct.</p><p>Please correct them by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Les credencials %1 no són correctes.</p><p>Corregiu-les inicant el diàleg de configuració des de la safata!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="341"/>
|
||||
<location filename="../src/mirall/application.cpp" line="328"/>
|
||||
<source><p>Either your user name or your password are not correct.</p><p>Please correct it by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>El nom d'usuari o la contrasenya ownCloud no són correctes.</p><p>Corregiu-les iniciant el diàleg de configuració des de la safata!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="361"/>
|
||||
<location filename="../src/mirall/application.cpp" line="348"/>
|
||||
<source>%1 Sync Started</source>
|
||||
<translation>%1 Sincronització iniciada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="427"/>
|
||||
<location filename="../src/mirall/application.cpp" line="413"/>
|
||||
<source>Open %1 in browser...</source>
|
||||
<translation>Obre %1 en el navegador...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="438"/>
|
||||
<location filename="../src/mirall/application.cpp" line="424"/>
|
||||
<source>About...</source>
|
||||
<translation>Sobre...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="494"/>
|
||||
<location filename="../src/mirall/application.cpp" line="480"/>
|
||||
<source>Open %1 folder</source>
|
||||
<translation>Obre la carpeta %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="507"/>
|
||||
<location filename="../src/mirall/application.cpp" line="493"/>
|
||||
<source>Managed Folders:</source>
|
||||
<translation>Fitxers gestionats:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="755"/>
|
||||
<location filename="../src/mirall/application.cpp" line="741"/>
|
||||
<source>About %1</source>
|
||||
<translation>Sobre %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="765"/>
|
||||
<location filename="../src/mirall/application.cpp" line="751"/>
|
||||
<source>Confirm Folder Remove</source>
|
||||
<translation>Confirma l'eliminació de la carpeta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="766"/>
|
||||
<location filename="../src/mirall/application.cpp" line="752"/>
|
||||
<source>Do you really want to remove upload folder <i>%1</i>?</source>
|
||||
<translation>Esteu segurs d'eliminar la carpeta de pujada <i>%1</i>?</translation>
|
||||
</message>
|
||||
@@ -431,32 +435,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="935"/>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>S'està sincronitzant.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="939"/>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>El servidor no està disponible actualment.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="944"/>
|
||||
<location filename="../src/mirall/application.cpp" line="936"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>La darrera sincronització va ser correcta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="950"/>
|
||||
<location filename="../src/mirall/application.cpp" line="942"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Error de sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<location filename="../src/mirall/application.cpp" line="948"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Error de configuració.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="959"/>
|
||||
<location filename="../src/mirall/application.cpp" line="951"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Estat d'error no definit.</translation>
|
||||
</message>
|
||||
@@ -484,32 +488,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="808"/>
|
||||
<location filename="../src/mirall/application.cpp" line="794"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>S'està sincronitzant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="809"/>
|
||||
<location filename="../src/mirall/application.cpp" line="795"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>S'està sincronitzant.<br/>Voleu parar-la?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="924"/>
|
||||
<location filename="../src/mirall/application.cpp" line="916"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Estat indefinit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<location filename="../src/mirall/application.cpp" line="919"/>
|
||||
<source>Waits to start syncing.</source>
|
||||
<translation>Espera per començar la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<location filename="../src/mirall/application.cpp" line="923"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation>Perparant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="964"/>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<source> (Sync is paused)</source>
|
||||
<translation>(La sincronització està pausada)</translation>
|
||||
</message>
|
||||
@@ -518,7 +522,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="981"/>
|
||||
<location filename="../src/mirall/application.cpp" line="973"/>
|
||||
<source>No sync folders configured.</source>
|
||||
<translation>No hi ha fitxers de sincronització configurats</translation>
|
||||
</message>
|
||||
@@ -526,27 +530,26 @@ p, li { white-space: pre-wrap; }
|
||||
<context>
|
||||
<name>Mirall::CSyncThread</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="338"/>
|
||||
<source>CSync create failed.</source>
|
||||
<translation>CSync create ha fallat.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="88"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="73"/>
|
||||
<source>CSync failed to create a lock file.</source>
|
||||
<translation>CSync ha fallat en crear un fitxer de bloqueig.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="67"/>
|
||||
<source>Success.</source>
|
||||
<translation>Èxit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="85"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="70"/>
|
||||
<source>CSync Logging setup failed.</source>
|
||||
<translation>Ha fallat en establir l'acreditació CSync.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="91"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="76"/>
|
||||
<source>CSync failed to load the state db.</source>
|
||||
<translation>CSync ha fallat en carregar la db d'estat.</translation>
|
||||
</message>
|
||||
@@ -555,17 +558,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="97"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<source>The system time on this client is different than the system time on the server. Please use a time synchronization service (NTP) on the server and client machines so that the times remain the same.</source>
|
||||
<translation>L'hora del sistema d'aquest client és diferent de l'hora del sistema del servidor. Useu un servei de sincronització de temps (NTP) en el servidor i al client perquè l'hora sigui la mateixa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="87"/>
|
||||
<source>CSync could not detect the filesystem type.</source>
|
||||
<translation>CSync no ha pogut detectar el tipus de fitxers del sistema.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="90"/>
|
||||
<source>CSync got an error while processing internal trees.</source>
|
||||
<translation>CSync ha patit un error mentre processava els àrbres interns.</translation>
|
||||
</message>
|
||||
@@ -573,117 +576,117 @@ p, li { white-space: pre-wrap; }
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="123"/>
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>La carpeta destí %1 no existeix.</p><p>Comproveu la configuració de sincronització.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="118"/>
|
||||
<source>The local filesystem can not be written. Please check permissions.</source>
|
||||
<translation>No es pot escriure al sistema de fitxers local. Reviseu els permisos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="129"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<source>A remote file can not be written. Please check the remote access.</source>
|
||||
<translation>No es pot escriure el fitxer remot. Reviseu l'acces remot.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="93"/>
|
||||
<source>CSync failed to reserve memory.</source>
|
||||
<translation>CSync ha fallat en reservar memòria.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="111"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="96"/>
|
||||
<source>CSync fatal parameter error.</source>
|
||||
<translation>Error fatal de paràmetre en CSync.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="99"/>
|
||||
<source>CSync processing step update failed.</source>
|
||||
<translation>El pas d'actualització del processat de CSync ha fallat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="117"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<source>CSync processing step reconcile failed.</source>
|
||||
<translation>El pas de reconciliació del processat de CSync ha fallat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="120"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<source>CSync processing step propagate failed.</source>
|
||||
<translation>El pas de propagació del processat de CSync ha fallat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<source><p>The target directory does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="121"/>
|
||||
<source>CSync failed to connect through a proxy.</source>
|
||||
<translation>CSync ha fallat en connectar a través d'un proxy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="124"/>
|
||||
<source>CSync failed to lookup proxy or server.</source>
|
||||
<translation>CSync ha fallat en cercar el proxy o el servidor.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="127"/>
|
||||
<source>CSync failed to authenticate at the %1 server.</source>
|
||||
<translation>L'autenticació de CSync ha fallat al servidor %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="130"/>
|
||||
<source>CSync failed to authenticate at the proxy.</source>
|
||||
<translation>L'autenticació de CSync ha fallat al proxy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<source>CSync failed to connect to the network.</source>
|
||||
<translation>CSync ha fallat en connectar-se a la xarxa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<source>A network connection timeout happend.</source>
|
||||
<translation>S'ha superat el temps d'espera de la connexió a la xarxa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<source>A HTTP transmission error happened.</source>
|
||||
<translation>S'ha produït un error en la transmissió HTTP.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<source>CSync failed due to not handled permission deniend.</source>
|
||||
<translation>CSync ha fallat en no implementar el permís denegat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="160"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<source>CSync failed to find a specific file.</source>
|
||||
<translation>CSync ha fallat en trobar un fitxer específic.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="163"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<source>CSync tried to create a directory that already exists.</source>
|
||||
<translation>CSync ha intentat crear una carpeta que ja existeix.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="166"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<source>CSync: No space on %1 server available.</source>
|
||||
<translation>CSync: No hi ha espai disponible al servidor %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="169"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<source>CSync unspecified error.</source>
|
||||
<translation>Error inespecífic de CSync.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="172"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<source>An internal error number %1 happend.</source>
|
||||
<translation>S'ha produït l'error intern número %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="176"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="161"/>
|
||||
<source><br/>Backend Message: </source>
|
||||
<translation><br/>Missatge dorsal:</translation>
|
||||
</message>
|
||||
@@ -698,7 +701,7 @@ Please make sure that all directories are writeable.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="94"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="79"/>
|
||||
<source><p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation><p>No s'ha pogut carregar el connector %1 per csync.<br/>Comproveu la instal·lació!</p></translation>
|
||||
</message>
|
||||
@@ -744,115 +747,125 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FileItemDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="41"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<source>Files</source>
|
||||
<translation>Fitxers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="43"/>
|
||||
<source>File Count</source>
|
||||
<translation>Compta fitxers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="50"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="52"/>
|
||||
<source>Copy</source>
|
||||
<translation>Copia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="53"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="55"/>
|
||||
<source>Sync Protocol</source>
|
||||
<translation>Protocol de soncronització</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="64"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="66"/>
|
||||
<source>Undefined Folder State</source>
|
||||
<translation>Estat de carpeta indefinit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="67"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="69"/>
|
||||
<source>The folder waits to start syncing.</source>
|
||||
<translation>La carpeta espera per iniciar la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="70"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="72"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>El servidor no està disponible actualment.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="73"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="75"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>S'està sincronitzant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="76"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="78"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>L'última sincronització és correcte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="79"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="81"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Error de sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="82"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="84"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Error de configuració.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="85"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="87"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Estat d'error no identificat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="121"/>
|
||||
<source>%1 (finished %2 sec. ago)</source>
|
||||
<translation>%1 (ha acabat fa %2 s.)</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="123"/>
|
||||
<source>%1 (finished %n sec. ago)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="166"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>Copied to clipboard</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>The sync protocol has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="225"/>
|
||||
<source>Uploaded</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="226"/>
|
||||
<source>Downloaded</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="169"/>
|
||||
<source>Synced Files</source>
|
||||
<translation>Fitxers sincronitzats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="172"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="175"/>
|
||||
<source>New Files</source>
|
||||
<translation>Fitxers nous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="178"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="181"/>
|
||||
<source>Deleted Files</source>
|
||||
<translation>Fitxers eliminats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="184"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="187"/>
|
||||
<source>Renamed Files</source>
|
||||
<translation>Fitxers reanomenats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="190"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="193"/>
|
||||
<source>Ignored Files</source>
|
||||
<translation>Fitxers ignorats</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="196"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="199"/>
|
||||
<source>Errors</source>
|
||||
<translation>Errors</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="202"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="205"/>
|
||||
<source>Conflicts</source>
|
||||
<translation>Conflictes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="222"/>
|
||||
<source>Up</source>
|
||||
<translation>Amunt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="223"/>
|
||||
<source>Down</source>
|
||||
<translation>Avall</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::Folder</name>
|
||||
@@ -883,7 +896,7 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FolderWizard</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="466"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="475"/>
|
||||
<source>%1 Folder Wizard</source>
|
||||
<translation>Assistent de carpeta %1</translation>
|
||||
</message>
|
||||
@@ -896,32 +909,32 @@ Please write a bug report.</source>
|
||||
<translation>No heu seleccionat cap carpeta local!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="90"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="97"/>
|
||||
<source>The local path %1 is already an upload folder.<br/>Please pick another one!</source>
|
||||
<translation>El camí local %1 ja és una carpeta de pujada.<br/>Seleccioneu-ne un altre!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="94"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="101"/>
|
||||
<source>An already configured folder is contained in the current entry.</source>
|
||||
<translation>L'entrada actual conté una carpeta ja configurada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="99"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="106"/>
|
||||
<source>An already configured folder contains the currently entered directory.</source>
|
||||
<translation>La carpeta que heu entrat conté una carpeta ja configurada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="109"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="116"/>
|
||||
<source>The alias can not be empty. Please provide a descriptive alias word.</source>
|
||||
<translation>L'àlies no pot ser buit. Faciliteu una paraula descriptiva.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="120"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="127"/>
|
||||
<source><br/>The alias <i>%1</i> is already in use. Please pick another alias.</source>
|
||||
<translation><br/>L'àlies <i>%1</i> ja està en ús. Seleccioneu-ne un altre.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="141"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="148"/>
|
||||
<source>Select the source folder</source>
|
||||
<translation>Seleccioneu la carpeta font</translation>
|
||||
</message>
|
||||
@@ -941,37 +954,37 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="211"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="218"/>
|
||||
<source>The folder is not available on your %1.<br/>Click to create it.</source>
|
||||
<translation>La carpeta no està dispobnible en %1.<br/>Feu clic per crear-la.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="237"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="244"/>
|
||||
<source>Folder was successfully created on %1.</source>
|
||||
<translation>La carpeta s'ha creat correctament a %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="240"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="247"/>
|
||||
<source>Failed to create the folder on %1.<br/>Please check manually.</source>
|
||||
<translation>Ha fallat en crear la carpeta a %1.<br/>Comproveu-ho manualment.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="260"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="267"/>
|
||||
<source>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</source>
|
||||
<translation>És millor no usar la carpeta root remota.<br/>Si ho feu <b>no</b> podreu replicar cap altre carpeta local.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="315"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="322"/>
|
||||
<source>to your <a href="%1">%2</a> (version %3)</source>
|
||||
<translation>a la <a href="%1">%2</a> (versió %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="326"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="333"/>
|
||||
<source>no configured %1 found!</source>
|
||||
<translation>no s'ha trobat %1 configurat!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="327"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="334"/>
|
||||
<source>%1 could not be reached:<br/><tt>%2</tt></source>
|
||||
<translation>%1 no s'ha pogut accedir:<br/><tt>%2</tt></translation>
|
||||
</message>
|
||||
@@ -988,7 +1001,7 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="395"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="402"/>
|
||||
<source>Select the target folder</source>
|
||||
<translation>Seleccioneu la carpeta de destí</translation>
|
||||
</message>
|
||||
@@ -1323,53 +1336,65 @@ No s'ha pogut configurar</translation>
|
||||
<context>
|
||||
<name>Mirall::ServerActionNotifier</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>New file available</source>
|
||||
<translation>Fitxers nous disponibles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>'%1' has been synced to this machine.</source>
|
||||
<translation>%1' s'ha sincronitzat amb aquesta màquina.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>New files available</source>
|
||||
<translation>Fitxers nous disponibles</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>'%1' and %n other file(s) have been synced to this machine.</source>
|
||||
<translation><numerusform>'%1' i %n altres fitxer(s) s'han sincronitzat amb aquest equip.</numerusform><numerusform>'%1' i %n altres fitxer(s) s'han sincronitzat amb aquest equip.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>File removed</source>
|
||||
<translation>Fitxer esborrat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>'%1' has been removed.</source>
|
||||
<translation>S'ha esborrat '%1'</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>'%1' and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>'%1' i %n altres fitxer(s) s'han esborrat.</numerusform><numerusform>'%1' i %n altres fitxer(s) s'han esborrat.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>Files removed</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>'%1' has been updated.</source>
|
||||
<translation>'%1' s'ha actualitzat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>File updated</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>'%1' and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>'%1' i %n altres fitxer(s) s'han actualitzat.</numerusform><numerusform>'%1' i %n altres fitxer(s) s'han actualitzat.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>Files updated</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::SslErrorDialog</name>
|
||||
@@ -1379,62 +1404,62 @@ No s'ha pogut configurar</translation>
|
||||
<translation>Connexió SSL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="88"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="97"/>
|
||||
<source>Warnings about current SSL Connection:</source>
|
||||
<translation>Avisos quant a la connexió SSL actual:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="124"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<source>with Certificate %1</source>
|
||||
<translation>amb certificat %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="132"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="134"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="141"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="142"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="143"/>
|
||||
<source>&lt;not specified&gt;</source>
|
||||
<translation>&lt;no especificat&gt;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="135"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="157"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="144"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="166"/>
|
||||
<source>Organization: %1</source>
|
||||
<translation>Organització %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="136"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="145"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="167"/>
|
||||
<source>Unit: %1</source>
|
||||
<translation>Unitat: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="137"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="168"/>
|
||||
<source>Country: %1</source>
|
||||
<translation>País: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="155"/>
|
||||
<source>Fingerprint (MD5): <tt>%1</tt></source>
|
||||
<translation>Empremta digital (MD5): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="147"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="156"/>
|
||||
<source>Fingerprint (SHA1): <tt>%1</tt></source>
|
||||
<translation>Empremta digital (SHA1): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="149"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<source>Effective Date: %1</source>
|
||||
<translation>Data d'efecte: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="150"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<source>Expiry Date: %1</source>
|
||||
<translation>Data d'expiració: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="154"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="163"/>
|
||||
<source>Issuer: %1</source>
|
||||
<translation>Emissor: %1</translation>
|
||||
</message>
|
||||
@@ -1442,37 +1467,37 @@ No s'ha pogut configurar</translation>
|
||||
<context>
|
||||
<name>Mirall::StatusDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="278"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<source>Pause</source>
|
||||
<translation>Pausa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="282"/>
|
||||
<source>Resume</source>
|
||||
<translation>Continua</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="483"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="485"/>
|
||||
<source>Checking %1 connection...</source>
|
||||
<translation>Comprovant la connexió %1...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="488"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="490"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>La connexió %1 no està configurada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="511"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<source>Connected to <a href="%1">%1</a> as <i>%2</i>.</source>
|
||||
<translation>Connectat amb <a href="%1">%1</a> com a <i>%2</i>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="515"/>
|
||||
<source>Version: %1 (%2)</source>
|
||||
<translation>Versió: %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="529"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="531"/>
|
||||
<source><p>Failed to connect to %1: <tt>%2</tt></p></source>
|
||||
<translation><p>La connexió amb %1 ha fallat: <tt>%2</tt></p></translation>
|
||||
</message>
|
||||
@@ -1493,7 +1518,7 @@ No s'ha pogut configurar</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="526"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="528"/>
|
||||
<source>unknown problem.</source>
|
||||
<translation>Problema desconegut.</translation>
|
||||
</message>
|
||||
@@ -1554,7 +1579,7 @@ No s'ha pogut configurar</translation>
|
||||
<context>
|
||||
<name>Mirall::ownCloudFolder</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="227"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="351"/>
|
||||
<source>The CSync thread terminated.</source>
|
||||
<translation>El fil de CSync ha acabat.</translation>
|
||||
</message>
|
||||
|
||||
@@ -205,9 +205,13 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>na Vašem &ownCloud serveru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Folder on ownCloud:</source>
|
||||
<translation>Složka v ownCloud:</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Remote folder:</source>
|
||||
<translation>Vzdálená složka:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="149"/>
|
||||
@@ -245,17 +249,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>vytvořit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="177"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="184"/>
|
||||
<source>root</source>
|
||||
<translation>kořen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="178"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="185"/>
|
||||
<source>/home/local</source>
|
||||
<translation>/home/local</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="179"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="186"/>
|
||||
<source>scp://john@host.com//myfolder</source>
|
||||
<translation>scp://john@host.com//mojesložka</translation>
|
||||
</message>
|
||||
@@ -303,7 +307,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="362"/>
|
||||
<location filename="../src/mirall/application.cpp" line="349"/>
|
||||
<source>Sync started for %1 configured sync folder(s).</source>
|
||||
<translation>Synchronizace spuštěna pro %1 nastavené synchronizované složky.</translation>
|
||||
</message>
|
||||
@@ -312,27 +316,27 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="429"/>
|
||||
<location filename="../src/mirall/application.cpp" line="415"/>
|
||||
<source>Open status...</source>
|
||||
<translation>Otevřít stav...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="432"/>
|
||||
<location filename="../src/mirall/application.cpp" line="418"/>
|
||||
<source>Add folder...</source>
|
||||
<translation>Přidat složku...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="434"/>
|
||||
<location filename="../src/mirall/application.cpp" line="420"/>
|
||||
<source>Configure...</source>
|
||||
<translation>Nastavit...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="436"/>
|
||||
<location filename="../src/mirall/application.cpp" line="422"/>
|
||||
<source>Configure proxy...</source>
|
||||
<translation>Nastavit proxy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="440"/>
|
||||
<location filename="../src/mirall/application.cpp" line="426"/>
|
||||
<source>Quit</source>
|
||||
<translation>Ukončit</translation>
|
||||
</message>
|
||||
@@ -341,94 +345,94 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="231"/>
|
||||
<location filename="../src/mirall/application.cpp" line="218"/>
|
||||
<source>%1 Server Mismatch</source>
|
||||
<translation>Neshoda serveru %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="232"/>
|
||||
<location filename="../src/mirall/application.cpp" line="219"/>
|
||||
<source><p>The configured server for this client is too old.</p><p>Please update to the latest %1 server and restart the client.</p></source>
|
||||
<translation><p>Nastavený server je příliš starý pro tohoto klienta.</p><p>Aktualizujte, prosím, na nejnovější verzi %1 a znovu spusťte klienta.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="271"/>
|
||||
<source>Too many attempts to get a valid password.</source>
|
||||
<translation>Příliš mnoho pokusů o zadání hesla.</translation>
|
||||
<location filename="../src/mirall/application.cpp" line="258"/>
|
||||
<source>Too many incorrect password attempts.</source>
|
||||
<translation>Příliš mnoho špatných pokusů o zadaní hesla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="275"/>
|
||||
<location filename="../src/mirall/application.cpp" line="262"/>
|
||||
<source>%1 user credentials are wrong. Please check configuration.</source>
|
||||
<translation>Přihlašovací údaje %1 jsou neplatné. Zkontrolujte prosím nastavení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<location filename="../src/mirall/application.cpp" line="299"/>
|
||||
<location filename="../src/mirall/application.cpp" line="267"/>
|
||||
<location filename="../src/mirall/application.cpp" line="286"/>
|
||||
<source>Credentials</source>
|
||||
<translation>Přihlašovací údaje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="291"/>
|
||||
<location filename="../src/mirall/application.cpp" line="278"/>
|
||||
<source>Error: Could not retrieve the password!</source>
|
||||
<translation>Chyba: nelze získat heslo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="293"/>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<source>Password dialog was canceled!</source>
|
||||
<translation>Dialog zadání hesla byl zrušen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="331"/>
|
||||
<location filename="../src/mirall/application.cpp" line="340"/>
|
||||
<location filename="../src/mirall/application.cpp" line="318"/>
|
||||
<location filename="../src/mirall/application.cpp" line="327"/>
|
||||
<source>No %1 Connection</source>
|
||||
<translation>Žádné spojení s %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="332"/>
|
||||
<location filename="../src/mirall/application.cpp" line="319"/>
|
||||
<source><p>Your %1 credentials are not correct.</p><p>Please correct them by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Vaše přihlašovací údaje k %1 nejsou správné.</p><p>Prosím opravte je spuštěním dialogu nastavení ze systémové části panelu.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="341"/>
|
||||
<location filename="../src/mirall/application.cpp" line="328"/>
|
||||
<source><p>Either your user name or your password are not correct.</p><p>Please correct it by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Vaše uživatelské jméno, nebo heslo, nejsou správné.</p><p>Prosím opravte je spuštěním dialogu nastavení ze systémové části panelu.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="361"/>
|
||||
<location filename="../src/mirall/application.cpp" line="348"/>
|
||||
<source>%1 Sync Started</source>
|
||||
<translation>Synchronizace s %1 zahájena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="427"/>
|
||||
<location filename="../src/mirall/application.cpp" line="413"/>
|
||||
<source>Open %1 in browser...</source>
|
||||
<translation>Otevřít %1 v prohlížeči...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="438"/>
|
||||
<location filename="../src/mirall/application.cpp" line="424"/>
|
||||
<source>About...</source>
|
||||
<translation>O aplikaci...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="494"/>
|
||||
<location filename="../src/mirall/application.cpp" line="480"/>
|
||||
<source>Open %1 folder</source>
|
||||
<translation>Otevřít složku %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="507"/>
|
||||
<location filename="../src/mirall/application.cpp" line="493"/>
|
||||
<source>Managed Folders:</source>
|
||||
<translation>Spravované složky:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="755"/>
|
||||
<location filename="../src/mirall/application.cpp" line="741"/>
|
||||
<source>About %1</source>
|
||||
<translation>O %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="765"/>
|
||||
<location filename="../src/mirall/application.cpp" line="751"/>
|
||||
<source>Confirm Folder Remove</source>
|
||||
<translation>Potvrdit odstranění složky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="766"/>
|
||||
<location filename="../src/mirall/application.cpp" line="752"/>
|
||||
<source>Do you really want to remove upload folder <i>%1</i>?</source>
|
||||
<translation>Opravdu si přejete odstranit odesílací složku <i>%1</i>?</translation>
|
||||
</message>
|
||||
@@ -441,32 +445,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="935"/>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Synchronizace probíhá.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="939"/>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>Server nyní není dostupný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="944"/>
|
||||
<location filename="../src/mirall/application.cpp" line="936"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Poslední synchronizace byla úspěšná.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="950"/>
|
||||
<location filename="../src/mirall/application.cpp" line="942"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Chyba synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<location filename="../src/mirall/application.cpp" line="948"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Chyba nastavení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="959"/>
|
||||
<location filename="../src/mirall/application.cpp" line="951"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Nedefinovatelná chyba.</translation>
|
||||
</message>
|
||||
@@ -494,32 +498,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="808"/>
|
||||
<location filename="../src/mirall/application.cpp" line="794"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Synchronizace probíhá</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="809"/>
|
||||
<location filename="../src/mirall/application.cpp" line="795"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>Probíhá operace synchronizace.<br/>Přejete si ji přerušit?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="924"/>
|
||||
<location filename="../src/mirall/application.cpp" line="916"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Nedefinovatelný stav.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<location filename="../src/mirall/application.cpp" line="919"/>
|
||||
<source>Waits to start syncing.</source>
|
||||
<translation>Vyčkává na spuštění synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<location filename="../src/mirall/application.cpp" line="923"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation>Připravuji pro synchronizaci.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="964"/>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<source> (Sync is paused)</source>
|
||||
<translation>(Synchronizace je pozastavena)</translation>
|
||||
</message>
|
||||
@@ -528,7 +532,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="981"/>
|
||||
<location filename="../src/mirall/application.cpp" line="973"/>
|
||||
<source>No sync folders configured.</source>
|
||||
<translation>Nejsou nastaveny žádné synchronizované složky.</translation>
|
||||
</message>
|
||||
@@ -536,27 +540,26 @@ p, li { white-space: pre-wrap; }
|
||||
<context>
|
||||
<name>Mirall::CSyncThread</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="338"/>
|
||||
<source>CSync create failed.</source>
|
||||
<translation>CSync vytvoření selhalo.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="88"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="73"/>
|
||||
<source>CSync failed to create a lock file.</source>
|
||||
<translation>CSync nelze vytvořit soubor zámku.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="67"/>
|
||||
<source>Success.</source>
|
||||
<translation>Úspěch.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="85"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="70"/>
|
||||
<source>CSync Logging setup failed.</source>
|
||||
<translation>CSync se nezdařilo nastavit přihlášení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="91"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="76"/>
|
||||
<source>CSync failed to load the state db.</source>
|
||||
<translation>CSync nelze načíst databázi stavu.</translation>
|
||||
</message>
|
||||
@@ -565,17 +568,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="97"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<source>The system time on this client is different than the system time on the server. Please use a time synchronization service (NTP) on the server and client machines so that the times remain the same.</source>
|
||||
<translation>Systémový čas na klientu je rozdílný od systémového času serveru. Použijte, prosím, službu synchronizace času (NTP) na na serveru i klientu, aby byl čas na obou strojích stejný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="87"/>
|
||||
<source>CSync could not detect the filesystem type.</source>
|
||||
<translation>CSync nelze detekovat typ souborového systému.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="90"/>
|
||||
<source>CSync got an error while processing internal trees.</source>
|
||||
<translation>CSync obdrželo chybu při zpracování vnitřních stromů.</translation>
|
||||
</message>
|
||||
@@ -583,117 +586,117 @@ p, li { white-space: pre-wrap; }
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="123"/>
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>Cílový adresář %1 neexistuje.</p><p>Zkontrolujte, prosím, nastavení synchronizace.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="118"/>
|
||||
<source>The local filesystem can not be written. Please check permissions.</source>
|
||||
<translation>Do místního souborového systému nelze zapisovat. Ověřte, prosím, práva.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="129"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<source>A remote file can not be written. Please check the remote access.</source>
|
||||
<translation>Vzdálený soubor nelze zapsat. Ověřte prosím vzdálený přístup.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="93"/>
|
||||
<source>CSync failed to reserve memory.</source>
|
||||
<translation>CSync se nezdařilo rezervovat paměť.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="111"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="96"/>
|
||||
<source>CSync fatal parameter error.</source>
|
||||
<translation>CSync: kritická chyba parametrů.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="99"/>
|
||||
<source>CSync processing step update failed.</source>
|
||||
<translation>CSync se nezdařilo zpracovat krok aktualizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="117"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<source>CSync processing step reconcile failed.</source>
|
||||
<translation>CSync se nezdařilo zpracovat krok sladění.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="120"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<source>CSync processing step propagate failed.</source>
|
||||
<translation>CSync se nezdařilo zpracovat krok propagace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<source><p>The target directory does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>Cílový adresář neexistuje.</p><p>Zkontrolujte, prosím, nastavení synchronizace.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="121"/>
|
||||
<source>CSync failed to connect through a proxy.</source>
|
||||
<translation>CSync se nezdařilo připojit skrze proxy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="124"/>
|
||||
<source>CSync failed to lookup proxy or server.</source>
|
||||
<translation>CSync se nezdařilo najít proxy, nebo server.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="127"/>
|
||||
<source>CSync failed to authenticate at the %1 server.</source>
|
||||
<translation>CSync se nezdařilo přihlásit k serveru %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="130"/>
|
||||
<source>CSync failed to authenticate at the proxy.</source>
|
||||
<translation>CSync se nezdařilo přihlásit k proxy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<source>CSync failed to connect to the network.</source>
|
||||
<translation>CSync se nezdařilo připojit k síti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<source>A network connection timeout happend.</source>
|
||||
<translation>Nastalo vypršení časového limitu síťového spojení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<source>A HTTP transmission error happened.</source>
|
||||
<translation>Nastala chyba HTTP přenosu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<source>CSync failed due to not handled permission deniend.</source>
|
||||
<translation>CSync selhalo z důvodu nezpracovaného odmítnutí práv.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="160"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<source>CSync failed to find a specific file.</source>
|
||||
<translation>CSync se nezdařilo najít požadovaný soubor.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="163"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<source>CSync tried to create a directory that already exists.</source>
|
||||
<translation>CSync se pokusilo vytvořit adresář, který již existuje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="166"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<source>CSync: No space on %1 server available.</source>
|
||||
<translation>CSync: Žádné dostupné místo na serveru %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="169"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<source>CSync unspecified error.</source>
|
||||
<translation>Nespecifikovaná chyba CSync.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="172"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<source>An internal error number %1 happend.</source>
|
||||
<translation>Nastala vnitřní chyba číslo %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="176"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="161"/>
|
||||
<source><br/>Backend Message: </source>
|
||||
<translation><br/>Zpráva podpůrné vrstvy:</translation>
|
||||
</message>
|
||||
@@ -708,7 +711,7 @@ Please make sure that all directories are writeable.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="94"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="79"/>
|
||||
<source><p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation><p>Modul %1 pro csync nelze načíst<br/>Zkontrolujte prosím instalaci.</p></translation>
|
||||
</message>
|
||||
@@ -754,115 +757,125 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FileItemDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="41"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<source>Files</source>
|
||||
<translation>Soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="43"/>
|
||||
<source>File Count</source>
|
||||
<translation>Počet souborů</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="50"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="52"/>
|
||||
<source>Copy</source>
|
||||
<translation>Kopírovat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="53"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="55"/>
|
||||
<source>Sync Protocol</source>
|
||||
<translation>Protokol synchronizace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="64"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="66"/>
|
||||
<source>Undefined Folder State</source>
|
||||
<translation>Nedefinovaný stav složky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="67"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="69"/>
|
||||
<source>The folder waits to start syncing.</source>
|
||||
<translation>Složka čeká na zahájení synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="70"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="72"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>Server nyní není dostupný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="73"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="75"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Probíhá synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="76"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="78"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Poslední synchronizace byla úspěšná.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="79"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="81"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Chyba synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="82"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="84"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Chyba nastavení.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="85"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="87"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Nedefinovaná chyba.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="121"/>
|
||||
<source>%1 (finished %2 sec. ago)</source>
|
||||
<translation>%1 (dokončeno před %2 s)</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="123"/>
|
||||
<source>%1 (finished %n sec. ago)</source>
|
||||
<translation><numerusform>%1 (dokončeno před %n sekundou)</numerusform><numerusform>%1 (dokončeno před %n sekundami)</numerusform><numerusform>%1 (dokončeno před %n sekundami)</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="166"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>Copied to clipboard</source>
|
||||
<translation>Zkopírováno do schránky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>The sync protocol has been copied to the clipboard.</source>
|
||||
<translation>Protokol synchronizace byl zkopírován do schránky.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="225"/>
|
||||
<source>Uploaded</source>
|
||||
<translation>Odesláno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="226"/>
|
||||
<source>Downloaded</source>
|
||||
<translation>Staženo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="169"/>
|
||||
<source>Synced Files</source>
|
||||
<translation>Synchronizované soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="172"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="175"/>
|
||||
<source>New Files</source>
|
||||
<translation>Nové soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="178"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="181"/>
|
||||
<source>Deleted Files</source>
|
||||
<translation>Smazané soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="184"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="187"/>
|
||||
<source>Renamed Files</source>
|
||||
<translation>Přejmenované soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="190"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="193"/>
|
||||
<source>Ignored Files</source>
|
||||
<translation>Ignorované soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="196"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="199"/>
|
||||
<source>Errors</source>
|
||||
<translation>Chyby</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="202"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="205"/>
|
||||
<source>Conflicts</source>
|
||||
<translation>Konflikty</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="222"/>
|
||||
<source>Up</source>
|
||||
<translation>Nahoru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="223"/>
|
||||
<source>Down</source>
|
||||
<translation>Dolů</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::Folder</name>
|
||||
@@ -893,7 +906,7 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FolderWizard</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="466"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="475"/>
|
||||
<source>%1 Folder Wizard</source>
|
||||
<translation>%1 průvodce složkou</translation>
|
||||
</message>
|
||||
@@ -906,32 +919,32 @@ Please write a bug report.</source>
|
||||
<translation>Nebyl zvolen místní adresář.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="90"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="97"/>
|
||||
<source>The local path %1 is already an upload folder.<br/>Please pick another one!</source>
|
||||
<translation>Cesta %1 je již nastavena jako adresář pro odesílání.<br/>Zvolte, prosím, jinou!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="94"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="101"/>
|
||||
<source>An already configured folder is contained in the current entry.</source>
|
||||
<translation>Nastavená složka je již obsažena v aktuálním záznamu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="99"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="106"/>
|
||||
<source>An already configured folder contains the currently entered directory.</source>
|
||||
<translation>Nastavená složka již obsahuje právě zadaný adresář.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="109"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="116"/>
|
||||
<source>The alias can not be empty. Please provide a descriptive alias word.</source>
|
||||
<translation>Alias nemůže být prázdný. Zadejte prosím slovo, kterým složku popíšete.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="120"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="127"/>
|
||||
<source><br/>The alias <i>%1</i> is already in use. Please pick another alias.</source>
|
||||
<translation><br/>Alias <i>%1</i> je již používán. Zvolte prosím jiný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="141"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="148"/>
|
||||
<source>Select the source folder</source>
|
||||
<translation>Zvolte zdrojovou složku</translation>
|
||||
</message>
|
||||
@@ -951,37 +964,37 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="211"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="218"/>
|
||||
<source>The folder is not available on your %1.<br/>Click to create it.</source>
|
||||
<translation>Složka není dostupná ve Vašem %1.<br/>Kliknutím ji vytvořte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="237"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="244"/>
|
||||
<source>Folder was successfully created on %1.</source>
|
||||
<translation>Složka byla úspěšně vytvořena na %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="240"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="247"/>
|
||||
<source>Failed to create the folder on %1.<br/>Please check manually.</source>
|
||||
<translation>Na %1 selhalo vytvoření složky.<br/>Zkontrolujte jej, prosím ručně.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="260"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="267"/>
|
||||
<source>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</source>
|
||||
<translation>Nepoužívejte vzdálený kořenový adresář.<br/>Pokud tak učiníte, <b>nebudete</b> moci zrcadlit jiný místní adresář.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="315"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="322"/>
|
||||
<source>to your <a href="%1">%2</a> (version %3)</source>
|
||||
<translation>k Vašemu <a href="%1">%2</a> (verze %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="326"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="333"/>
|
||||
<source>no configured %1 found!</source>
|
||||
<translation>nenalezen žádný nastavený %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="327"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="334"/>
|
||||
<source>%1 could not be reached:<br/><tt>%2</tt></source>
|
||||
<translation>%1 je nedostupný:<br/><tt>%2</tt></translation>
|
||||
</message>
|
||||
@@ -998,7 +1011,7 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="395"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="402"/>
|
||||
<source>Select the target folder</source>
|
||||
<translation>Zvolte cílovou složku</translation>
|
||||
</message>
|
||||
@@ -1333,53 +1346,65 @@ Nastavení nelze provést.</translation>
|
||||
<context>
|
||||
<name>Mirall::ServerActionNotifier</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>New file available</source>
|
||||
<translation>Je dostupný nový soubor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>'%1' has been synced to this machine.</source>
|
||||
<translation>'%1' byl synchronizován s tímto počítačem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>New files available</source>
|
||||
<translation>Jsou dostupné nové soubory</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>'%1' and %n other file(s) have been synced to this machine.</source>
|
||||
<translation><numerusform> '%1' a %n další soubor byly synchronizovány s tímto počítačem.</numerusform><numerusform> '%1' a %n další soubory byly synchronizovány s tímto počítačem.</numerusform><numerusform> '%1' a %n dalších souborů bylo synchronizováno s tímto počítačem.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>File removed</source>
|
||||
<translation>Soubor odebrán</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>'%1' has been removed.</source>
|
||||
<translation>'%1' byl odebrán.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>'%1' and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform> '%1' a %n další soubor byly odebrány.</numerusform><numerusform> '%1' a %n další soubory byly odebrány.</numerusform><numerusform> '%1' a %n dalších souborů bylo odebráno.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>Files removed</source>
|
||||
<translation>Soubory odebrány</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>'%1' has been updated.</source>
|
||||
<translation>'%1' byl aktualizován.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>File updated</source>
|
||||
<translation>Soubor aktualizován</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>'%1' and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform> '%1' a %n další soubor byly aktualizovány.</numerusform><numerusform> '%1' a %n další soubory byly aktualizovány.</numerusform><numerusform> '%1' a %n dalších souborů bylo aktualizováno.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>Files updated</source>
|
||||
<translation>Soubory aktualizovány</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::SslErrorDialog</name>
|
||||
@@ -1389,62 +1414,62 @@ Nastavení nelze provést.</translation>
|
||||
<translation>SSL připojení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="88"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="97"/>
|
||||
<source>Warnings about current SSL Connection:</source>
|
||||
<translation>Varování v aktuálním SSL spojení:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="124"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<source>with Certificate %1</source>
|
||||
<translation>s certifikátem %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="132"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="134"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="141"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="142"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="143"/>
|
||||
<source>&lt;not specified&gt;</source>
|
||||
<translation>&lt;nespecifikováno&gt;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="135"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="157"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="144"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="166"/>
|
||||
<source>Organization: %1</source>
|
||||
<translation>Organizace: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="136"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="145"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="167"/>
|
||||
<source>Unit: %1</source>
|
||||
<translation>Jednotka: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="137"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="168"/>
|
||||
<source>Country: %1</source>
|
||||
<translation>Země: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="155"/>
|
||||
<source>Fingerprint (MD5): <tt>%1</tt></source>
|
||||
<translation>Otisk (MD5): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="147"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="156"/>
|
||||
<source>Fingerprint (SHA1): <tt>%1</tt></source>
|
||||
<translation>Otisk (SHA1): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="149"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<source>Effective Date: %1</source>
|
||||
<translation>Datum účinnosti: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="150"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<source>Expiry Date: %1</source>
|
||||
<translation>Datum vypršení platnosti: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="154"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="163"/>
|
||||
<source>Issuer: %1</source>
|
||||
<translation>Vydavatel: %1</translation>
|
||||
</message>
|
||||
@@ -1452,37 +1477,37 @@ Nastavení nelze provést.</translation>
|
||||
<context>
|
||||
<name>Mirall::StatusDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="278"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<source>Pause</source>
|
||||
<translation>Pozastavit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="282"/>
|
||||
<source>Resume</source>
|
||||
<translation>Obnovit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="483"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="485"/>
|
||||
<source>Checking %1 connection...</source>
|
||||
<translation>Kontroluji spojení s %1....</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="488"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="490"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>Žádné spojení s %1 nenastaveno.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="511"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<source>Connected to <a href="%1">%1</a> as <i>%2</i>.</source>
|
||||
<translation>Spojeno s <a href="%1">%1</a> jako <i>%2</i>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="515"/>
|
||||
<source>Version: %1 (%2)</source>
|
||||
<translation>Verze: %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="529"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="531"/>
|
||||
<source><p>Failed to connect to %1: <tt>%2</tt></p></source>
|
||||
<translation><p>Spojení s %1 selhalo: <tt>%2</tt></p></translation>
|
||||
</message>
|
||||
@@ -1503,7 +1528,7 @@ Nastavení nelze provést.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="526"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="528"/>
|
||||
<source>unknown problem.</source>
|
||||
<translation>neznámý problém.</translation>
|
||||
</message>
|
||||
@@ -1564,7 +1589,7 @@ Nastavení nelze provést.</translation>
|
||||
<context>
|
||||
<name>Mirall::ownCloudFolder</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="227"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="351"/>
|
||||
<source>The CSync thread terminated.</source>
|
||||
<translation>Vlákno CSync přerušeno.</translation>
|
||||
</message>
|
||||
|
||||
@@ -205,9 +205,13 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>auf Ihrem &ownCloud-Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Folder on ownCloud:</source>
|
||||
<translation>Verzeichnis auf ownCloud:</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Remote folder:</source>
|
||||
<translation>Entferntes Verzeichnis:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="149"/>
|
||||
@@ -245,17 +249,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="177"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="184"/>
|
||||
<source>root</source>
|
||||
<translation>root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="178"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="185"/>
|
||||
<source>/home/local</source>
|
||||
<translation>/home/local</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="179"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="186"/>
|
||||
<source>scp://john@host.com//myfolder</source>
|
||||
<translation>scp://john@host.com//myfolder</translation>
|
||||
</message>
|
||||
@@ -303,7 +307,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="362"/>
|
||||
<location filename="../src/mirall/application.cpp" line="349"/>
|
||||
<source>Sync started for %1 configured sync folder(s).</source>
|
||||
<translation>Synchronisation wurde für %1 konfigurierte Sync-Ordner gestartet</translation>
|
||||
</message>
|
||||
@@ -312,27 +316,27 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="429"/>
|
||||
<location filename="../src/mirall/application.cpp" line="415"/>
|
||||
<source>Open status...</source>
|
||||
<translation>Status anzeigen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="432"/>
|
||||
<location filename="../src/mirall/application.cpp" line="418"/>
|
||||
<source>Add folder...</source>
|
||||
<translation>Ordner hinzufügen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="434"/>
|
||||
<location filename="../src/mirall/application.cpp" line="420"/>
|
||||
<source>Configure...</source>
|
||||
<translation>Konfiguriere...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="436"/>
|
||||
<location filename="../src/mirall/application.cpp" line="422"/>
|
||||
<source>Configure proxy...</source>
|
||||
<translation>Proxy-Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="440"/>
|
||||
<location filename="../src/mirall/application.cpp" line="426"/>
|
||||
<source>Quit</source>
|
||||
<translation>Beenden</translation>
|
||||
</message>
|
||||
@@ -341,94 +345,94 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="231"/>
|
||||
<location filename="../src/mirall/application.cpp" line="218"/>
|
||||
<source>%1 Server Mismatch</source>
|
||||
<translation>%1-Server-Konflikt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="232"/>
|
||||
<location filename="../src/mirall/application.cpp" line="219"/>
|
||||
<source><p>The configured server for this client is too old.</p><p>Please update to the latest %1 server and restart the client.</p></source>
|
||||
<translation><p>Der konfigurierte Server ist für diesen Client zu alt.</p><p>Bitte nutzen Sie einen aktuellen %1-Server und starten Sie den Client erneut.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="271"/>
|
||||
<source>Too many attempts to get a valid password.</source>
|
||||
<translation>Zu viele Versuche ein gültiges Passwort zu erstellen</translation>
|
||||
<location filename="../src/mirall/application.cpp" line="258"/>
|
||||
<source>Too many incorrect password attempts.</source>
|
||||
<translation>Zu viele falsche Passworteingaben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="275"/>
|
||||
<location filename="../src/mirall/application.cpp" line="262"/>
|
||||
<source>%1 user credentials are wrong. Please check configuration.</source>
|
||||
<translation>%1-Benutzerdaten sind nicht korrekt. Bitte überprüfen Sie die Konfiguration.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<location filename="../src/mirall/application.cpp" line="299"/>
|
||||
<location filename="../src/mirall/application.cpp" line="267"/>
|
||||
<location filename="../src/mirall/application.cpp" line="286"/>
|
||||
<source>Credentials</source>
|
||||
<translation>Zugangsdaten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="291"/>
|
||||
<location filename="../src/mirall/application.cpp" line="278"/>
|
||||
<source>Error: Could not retrieve the password!</source>
|
||||
<translation>Fehler: Das Passwort konnte nicht abgerufen werden!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="293"/>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<source>Password dialog was canceled!</source>
|
||||
<translation>Die Passwortabfrage wurde abgebrochen!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="331"/>
|
||||
<location filename="../src/mirall/application.cpp" line="340"/>
|
||||
<location filename="../src/mirall/application.cpp" line="318"/>
|
||||
<location filename="../src/mirall/application.cpp" line="327"/>
|
||||
<source>No %1 Connection</source>
|
||||
<translation>Keine %1-Verbindung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="332"/>
|
||||
<location filename="../src/mirall/application.cpp" line="319"/>
|
||||
<source><p>Your %1 credentials are not correct.</p><p>Please correct them by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Ihre %1 Eingaben sind nicht korrekt.</p><p>Bitte berichtigen Sie diese, indem Sie den Konfigurations-Bildschirm über den Tray öffnen!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="341"/>
|
||||
<location filename="../src/mirall/application.cpp" line="328"/>
|
||||
<source><p>Either your user name or your password are not correct.</p><p>Please correct it by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Entweder Ihr Benutzername oder Ihr Passwort ist nicht korrekt.</p><p>Bitte berichtigen Sie dies, indem Sie den Konfigurations-Bildschirm öffnen!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="361"/>
|
||||
<location filename="../src/mirall/application.cpp" line="348"/>
|
||||
<source>%1 Sync Started</source>
|
||||
<translation>%1 Sync gestartet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="427"/>
|
||||
<location filename="../src/mirall/application.cpp" line="413"/>
|
||||
<source>Open %1 in browser...</source>
|
||||
<translation>%1 im Browser öffnen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="438"/>
|
||||
<location filename="../src/mirall/application.cpp" line="424"/>
|
||||
<source>About...</source>
|
||||
<translation>Über...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="494"/>
|
||||
<location filename="../src/mirall/application.cpp" line="480"/>
|
||||
<source>Open %1 folder</source>
|
||||
<translation>Ordner %1 öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="507"/>
|
||||
<location filename="../src/mirall/application.cpp" line="493"/>
|
||||
<source>Managed Folders:</source>
|
||||
<translation>Verwaltete Ordner:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="755"/>
|
||||
<location filename="../src/mirall/application.cpp" line="741"/>
|
||||
<source>About %1</source>
|
||||
<translation>Über %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="765"/>
|
||||
<location filename="../src/mirall/application.cpp" line="751"/>
|
||||
<source>Confirm Folder Remove</source>
|
||||
<translation>Löschen des Ordners bestätigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="766"/>
|
||||
<location filename="../src/mirall/application.cpp" line="752"/>
|
||||
<source>Do you really want to remove upload folder <i>%1</i>?</source>
|
||||
<translation>Soll der Upload-Ordner <i>%1</i> wirklich gelöscht werden?</translation>
|
||||
</message>
|
||||
@@ -441,32 +445,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="935"/>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Synchronisation läuft.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="939"/>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>Der Server ist momentan nicht erreichbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="944"/>
|
||||
<location filename="../src/mirall/application.cpp" line="936"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Die letzte Synchronisation war erfolgreich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="950"/>
|
||||
<location filename="../src/mirall/application.cpp" line="942"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Fehler bei der Synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<location filename="../src/mirall/application.cpp" line="948"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Setup-Fehler.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="959"/>
|
||||
<location filename="../src/mirall/application.cpp" line="951"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Undefinierter Fehler-Zustand.</translation>
|
||||
</message>
|
||||
@@ -494,32 +498,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="808"/>
|
||||
<location filename="../src/mirall/application.cpp" line="794"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Synchronisation läuft</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="809"/>
|
||||
<location filename="../src/mirall/application.cpp" line="795"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>Die Synchronistation läuft gerade.<br/>Wollen Sie diese beenden?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="924"/>
|
||||
<location filename="../src/mirall/application.cpp" line="916"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Undefinierter Zustand.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<location filename="../src/mirall/application.cpp" line="919"/>
|
||||
<source>Waits to start syncing.</source>
|
||||
<translation>Wartet auf Beginn der Synchronistation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<location filename="../src/mirall/application.cpp" line="923"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation>Synchronisation wird vorbereitet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="964"/>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<source> (Sync is paused)</source>
|
||||
<translation>(Synchronisation pausiert)</translation>
|
||||
</message>
|
||||
@@ -528,7 +532,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="981"/>
|
||||
<location filename="../src/mirall/application.cpp" line="973"/>
|
||||
<source>No sync folders configured.</source>
|
||||
<translation>Keine Sync-Ordner konfiguriert.</translation>
|
||||
</message>
|
||||
@@ -536,27 +540,26 @@ p, li { white-space: pre-wrap; }
|
||||
<context>
|
||||
<name>Mirall::CSyncThread</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="338"/>
|
||||
<source>CSync create failed.</source>
|
||||
<translation>CSync-Erstellung fehlgeschlagen.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="88"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="73"/>
|
||||
<source>CSync failed to create a lock file.</source>
|
||||
<translation>CSync konnte keine lock-Datei erstellen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="67"/>
|
||||
<source>Success.</source>
|
||||
<translation>Erfolgreich</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="85"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="70"/>
|
||||
<source>CSync Logging setup failed.</source>
|
||||
<translation>CSync Protokollsetup fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="91"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="76"/>
|
||||
<source>CSync failed to load the state db.</source>
|
||||
<translation>CSync konnte die state db nicht laden.</translation>
|
||||
</message>
|
||||
@@ -565,17 +568,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="97"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<source>The system time on this client is different than the system time on the server. Please use a time synchronization service (NTP) on the server and client machines so that the times remain the same.</source>
|
||||
<translation>Die Uhrzeit auf diesem Klienten und dem Server sind verschieden. Bitte verwenden Sie ein Zeitsynchronisationsprotokolls (NTP) auf Ihrem Server und Klienten, damit die gleiche Uhrzeit verwendet wird.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="87"/>
|
||||
<source>CSync could not detect the filesystem type.</source>
|
||||
<translation>CSync konnte den Typ des Dateisystem nicht feststellen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="90"/>
|
||||
<source>CSync got an error while processing internal trees.</source>
|
||||
<translation>CSync hatte einen Fehler bei der Verarbeitung von internen Strukturen.</translation>
|
||||
</message>
|
||||
@@ -583,117 +586,117 @@ p, li { white-space: pre-wrap; }
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="123"/>
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>Das Zielverzeichnis %1 existiert nicht.</p><p>Bitte prüfen Sie die Synchronisationseinstellungen.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="118"/>
|
||||
<source>The local filesystem can not be written. Please check permissions.</source>
|
||||
<translation>Kann auf dem lokalen Dateisystem nicht schreiben. Bitte Berechtigungen überprüfen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="129"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<source>A remote file can not be written. Please check the remote access.</source>
|
||||
<translation>Eine Remote-Datei konnte nicht geschrieben werden. Bitte den Remote-Zugriff überprüfen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="93"/>
|
||||
<source>CSync failed to reserve memory.</source>
|
||||
<translation>CSync konnte keinen Speicher reservieren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="111"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="96"/>
|
||||
<source>CSync fatal parameter error.</source>
|
||||
<translation>CSync hat einen schwerwiegender Parameterfehler festgestellt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="99"/>
|
||||
<source>CSync processing step update failed.</source>
|
||||
<translation>CSync Verarbeitungsschritt "Aktualisierung" fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="117"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<source>CSync processing step reconcile failed.</source>
|
||||
<translation>CSync Verarbeitungsschritt "Abgleich" fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="120"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<source>CSync processing step propagate failed.</source>
|
||||
<translation>CSync Verarbeitungsschritt "Übertragung" fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<source><p>The target directory does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>Das Zielverzeichnis existiert nicht.</p><p>Bitte prüfe die Synchronisationseinstellungen.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="121"/>
|
||||
<source>CSync failed to connect through a proxy.</source>
|
||||
<translation>CSync konnte sich nicht über einen Proxy verbinden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="124"/>
|
||||
<source>CSync failed to lookup proxy or server.</source>
|
||||
<translation>CSync konnte den Proxy oder Server nicht auflösen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="127"/>
|
||||
<source>CSync failed to authenticate at the %1 server.</source>
|
||||
<translation>CSync konnte sich nicht am Server %1 authentifizieren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="130"/>
|
||||
<source>CSync failed to authenticate at the proxy.</source>
|
||||
<translation>CSync konnte sich nicht am Proxy authentifizieren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<source>CSync failed to connect to the network.</source>
|
||||
<translation>CSync konnte sich nicht mit dem Netzwerk verbinden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<source>A network connection timeout happend.</source>
|
||||
<translation>Es ist zu einer Zeitüberschreitung der Netzwerkverbindung gekommen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<source>A HTTP transmission error happened.</source>
|
||||
<translation>Es hat sich ein HTTP-Übertragungsfehler ereignet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<source>CSync failed due to not handled permission deniend.</source>
|
||||
<translation>CSync wegen fehlender Berechtigung fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="160"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<source>CSync failed to find a specific file.</source>
|
||||
<translation>CSync konnte eine bestimmte Datei nicht finden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="163"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<source>CSync tried to create a directory that already exists.</source>
|
||||
<translation>CSync versuchte, ein Verzeichnis zu erstellen, welches bereits existiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="166"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<source>CSync: No space on %1 server available.</source>
|
||||
<translation>CSync: Kein Platz auf Server %1 frei.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="169"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<source>CSync unspecified error.</source>
|
||||
<translation>CSync unbekannter Fehler.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="172"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<source>An internal error number %1 happend.</source>
|
||||
<translation>Interne Fehlernummer %1 aufgetreten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="176"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="161"/>
|
||||
<source><br/>Backend Message: </source>
|
||||
<translation><br/>Systemnachricht:</translation>
|
||||
</message>
|
||||
@@ -708,7 +711,7 @@ Please make sure that all directories are writeable.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="94"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="79"/>
|
||||
<source><p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation><p>Das %1-Plugin für csync konnte nicht geladen werden.<br/>Bitte überprüfen Sie die Installation!</p></translation>
|
||||
</message>
|
||||
@@ -754,115 +757,125 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FileItemDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="41"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<source>Files</source>
|
||||
<translation>Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="43"/>
|
||||
<source>File Count</source>
|
||||
<translation>Anzahl Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="50"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="52"/>
|
||||
<source>Copy</source>
|
||||
<translation>Kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="53"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="55"/>
|
||||
<source>Sync Protocol</source>
|
||||
<translation>Synchronisationsprotokoll</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="64"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="66"/>
|
||||
<source>Undefined Folder State</source>
|
||||
<translation>Nicht definierter Ordner-Zustand</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="67"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="69"/>
|
||||
<source>The folder waits to start syncing.</source>
|
||||
<translation>Der Ordner wartet auf den Beginn der Synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="70"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="72"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation>Der Server ist momentan nicht erreichbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="73"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="75"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Synchronisation läuft.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="76"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="78"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Die letzte Synchronisation war erfolgreich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="79"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="81"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Fehler bei der Synchronisation .</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="82"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="84"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Setup-Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="85"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="87"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Undefinierter Fehler-Zustand.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="121"/>
|
||||
<source>%1 (finished %2 sec. ago)</source>
|
||||
<translation>%1 (fertiggestellt vor %2 Sekunden)</translation>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="123"/>
|
||||
<source>%1 (finished %n sec. ago)</source>
|
||||
<translation><numerusform>%1 (vor %n Sek. fertiggestellt)</numerusform><numerusform>%1 (vor %n Sek. fertiggestellt)</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="166"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>Copied to clipboard</source>
|
||||
<translation>In die Zwischenablage kopiert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>The sync protocol has been copied to the clipboard.</source>
|
||||
<translation>Das Synchronisierungs-Protokoll wurde in die Zwischenablage kopiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="225"/>
|
||||
<source>Uploaded</source>
|
||||
<translation>Hochgeladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="226"/>
|
||||
<source>Downloaded</source>
|
||||
<translation>Heruntergeladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="169"/>
|
||||
<source>Synced Files</source>
|
||||
<translation>Synchronisierte Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="172"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="175"/>
|
||||
<source>New Files</source>
|
||||
<translation>Neue Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="178"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="181"/>
|
||||
<source>Deleted Files</source>
|
||||
<translation>gelöschte Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="184"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="187"/>
|
||||
<source>Renamed Files</source>
|
||||
<translation>Umbenannte Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="190"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="193"/>
|
||||
<source>Ignored Files</source>
|
||||
<translation>ignorierte Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="196"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="199"/>
|
||||
<source>Errors</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="202"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="205"/>
|
||||
<source>Conflicts</source>
|
||||
<translation>Konflikte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="222"/>
|
||||
<source>Up</source>
|
||||
<translation>nach oben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="223"/>
|
||||
<source>Down</source>
|
||||
<translation>nach unten</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::Folder</name>
|
||||
@@ -893,7 +906,7 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FolderWizard</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="466"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="475"/>
|
||||
<source>%1 Folder Wizard</source>
|
||||
<translation>%1 Ordner-Assistent</translation>
|
||||
</message>
|
||||
@@ -906,32 +919,32 @@ Please write a bug report.</source>
|
||||
<translation>Kein lokales Verzeichnis ausgewählt!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="90"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="97"/>
|
||||
<source>The local path %1 is already an upload folder.<br/>Please pick another one!</source>
|
||||
<translation>Der lokale Pfad %1 ist bereits ein Upload-Ordner.<br/>Bitte wählen Sie einen anderen aus!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="94"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="101"/>
|
||||
<source>An already configured folder is contained in the current entry.</source>
|
||||
<translation>Ein bereits konfigurierter Ordner ist im aktuellen Verzeichnis vorhanden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="99"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="106"/>
|
||||
<source>An already configured folder contains the currently entered directory.</source>
|
||||
<translation>Ein bereits konfigurierter Ordner beinhaltet das angegebene Verzeichnis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="109"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="116"/>
|
||||
<source>The alias can not be empty. Please provide a descriptive alias word.</source>
|
||||
<translation>Der Alias darf nicht leer sein. Bitte ein anschauliches Alias-Wort eingeben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="120"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="127"/>
|
||||
<source><br/>The alias <i>%1</i> is already in use. Please pick another alias.</source>
|
||||
<translation><br/>Der Alias <i>%1</i> wird bereits verwendet. Bitte einen anderen Alias wählen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="141"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="148"/>
|
||||
<source>Select the source folder</source>
|
||||
<translation>Den Quellordner wählen</translation>
|
||||
</message>
|
||||
@@ -951,37 +964,37 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="211"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="218"/>
|
||||
<source>The folder is not available on your %1.<br/>Click to create it.</source>
|
||||
<translation>Der Ordner ist nicht verfügbar auf Ihrer %1.<br/>Klicken Sie um ihn zu erstellen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="237"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="244"/>
|
||||
<source>Folder was successfully created on %1.</source>
|
||||
<translation>Order erfolgreich auf %1 erstellt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="240"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="247"/>
|
||||
<source>Failed to create the folder on %1.<br/>Please check manually.</source>
|
||||
<translation>Erstellen des Ordners fehlgeschlagen unter %1.<br/>Bitte überprüfen Sie dies manuell.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="260"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="267"/>
|
||||
<source>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</source>
|
||||
<translation>Es ist besser, nicht das Wurzel-Verzeichnis auf dem Server zu wählen.<br/>Falls Sie dies dennoch tun möchten, können <b>keine</b> anderen lokalen Ordner synchronisiert werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="315"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="322"/>
|
||||
<source>to your <a href="%1">%2</a> (version %3)</source>
|
||||
<translation>zu Ihrer <a href="%1">%2</a> (version %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="326"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="333"/>
|
||||
<source>no configured %1 found!</source>
|
||||
<translation>Keine konfigurierte %1 gefunden!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="327"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="334"/>
|
||||
<source>%1 could not be reached:<br/><tt>%2</tt></source>
|
||||
<translation>%1 konnte nicht erreicht werden: <br/><tt>%2</tt></translation>
|
||||
</message>
|
||||
@@ -998,7 +1011,7 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="395"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="402"/>
|
||||
<source>Select the target folder</source>
|
||||
<translation>Zielordner auswählen</translation>
|
||||
</message>
|
||||
@@ -1333,53 +1346,65 @@ Das Setup kann nicht ausgeführt werden.</translation>
|
||||
<context>
|
||||
<name>Mirall::ServerActionNotifier</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>New file available</source>
|
||||
<translation>Neue Datei verfügbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>'%1' has been synced to this machine.</source>
|
||||
<translation>'%1' wurde mit diesem Gerät synchronisiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>New files available</source>
|
||||
<translation>Neue Dateien sind verfügbar</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>'%1' and %n other file(s) have been synced to this machine.</source>
|
||||
<translation><numerusform>%1' und %n andere Dateien wurden mit der Gerät synchronisiert.</numerusform><numerusform>'%1' und %n andere Dateien wurden mit der Gerät synchronisiert.</numerusform></translation>
|
||||
<translation><numerusform>'%1' und %n andere Datei wurden mit der Gerät synchronisiert.</numerusform><numerusform>'%1' und %n andere Dateien wurden mit den Gerät synchronisiert.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>File removed</source>
|
||||
<translation>Datei gelöscht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>'%1' has been removed.</source>
|
||||
<translation>'%1' wurde gelöscht.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>'%1' and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1' und %n andere Dateien wurden entfernt.</numerusform><numerusform>%1' und %n andere Dateien wurden entfernt.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>Files removed</source>
|
||||
<translation>Dateien gelöscht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>'%1' has been updated.</source>
|
||||
<translation>'%1' wurde aktualisiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>File updated</source>
|
||||
<translation>Datei aktualisiert</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>'%1' and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1' und %n andere Dateien wurden aktualisiert.</numerusform><numerusform>%1' und %n andere Dateien wurden aktualisiert.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>Files updated</source>
|
||||
<translation>Dateien aktualisiert</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::SslErrorDialog</name>
|
||||
@@ -1389,62 +1414,62 @@ Das Setup kann nicht ausgeführt werden.</translation>
|
||||
<translation>SSL-Verbindung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="88"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="97"/>
|
||||
<source>Warnings about current SSL Connection:</source>
|
||||
<translation>Warnungen zur aktuellen SSL-Verbindung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="124"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<source>with Certificate %1</source>
|
||||
<translation>mit Zertifikat %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="132"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="134"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="141"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="142"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="143"/>
|
||||
<source>&lt;not specified&gt;</source>
|
||||
<translation>&lt;nicht angegeben&gt;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="135"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="157"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="144"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="166"/>
|
||||
<source>Organization: %1</source>
|
||||
<translation>Organisation: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="136"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="145"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="167"/>
|
||||
<source>Unit: %1</source>
|
||||
<translation>Einheit: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="137"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="168"/>
|
||||
<source>Country: %1</source>
|
||||
<translation>Land: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="155"/>
|
||||
<source>Fingerprint (MD5): <tt>%1</tt></source>
|
||||
<translation>Fingerabdruck (MD5): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="147"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="156"/>
|
||||
<source>Fingerprint (SHA1): <tt>%1</tt></source>
|
||||
<translation>Fingerabdruck (SHA1): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="149"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<source>Effective Date: %1</source>
|
||||
<translation>Aktuelles Datum: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="150"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<source>Expiry Date: %1</source>
|
||||
<translation>Auslaufdatum: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="154"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="163"/>
|
||||
<source>Issuer: %1</source>
|
||||
<translation>Aussteller: %1</translation>
|
||||
</message>
|
||||
@@ -1452,37 +1477,37 @@ Das Setup kann nicht ausgeführt werden.</translation>
|
||||
<context>
|
||||
<name>Mirall::StatusDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="278"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<source>Pause</source>
|
||||
<translation>Anhalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="282"/>
|
||||
<source>Resume</source>
|
||||
<translation>Fortsetzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="483"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="485"/>
|
||||
<source>Checking %1 connection...</source>
|
||||
<translation>Überprüfe %1-Verbindung...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="488"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="490"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>Keine %1-Verbindung konfiguriert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="511"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<source>Connected to <a href="%1">%1</a> as <i>%2</i>.</source>
|
||||
<translation>Verbunden mit <a href="%1">%1</a> als <i>%2</i>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="515"/>
|
||||
<source>Version: %1 (%2)</source>
|
||||
<translation>Version: %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="529"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="531"/>
|
||||
<source><p>Failed to connect to %1: <tt>%2</tt></p></source>
|
||||
<translation><p>Verbindung mit %1 fehlgeschlagen <tt>%2</tt></p></translation>
|
||||
</message>
|
||||
@@ -1503,7 +1528,7 @@ Das Setup kann nicht ausgeführt werden.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="526"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="528"/>
|
||||
<source>unknown problem.</source>
|
||||
<translation>unbekanntes Problem.</translation>
|
||||
</message>
|
||||
@@ -1564,7 +1589,7 @@ Das Setup kann nicht ausgeführt werden.</translation>
|
||||
<context>
|
||||
<name>Mirall::ownCloudFolder</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="227"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="351"/>
|
||||
<source>The CSync thread terminated.</source>
|
||||
<translation>Der CSync-Thread wurde beendet.</translation>
|
||||
</message>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -207,9 +207,13 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Folder on ownCloud:</source>
|
||||
<translation>Folder on ownCloud:</translation>
|
||||
<translation type="obsolete">Folder on ownCloud:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Remote folder:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="149"/>
|
||||
@@ -247,17 +251,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>create</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="177"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="184"/>
|
||||
<source>root</source>
|
||||
<translation>root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="178"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="185"/>
|
||||
<source>/home/local</source>
|
||||
<translation>/home/local</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="179"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="186"/>
|
||||
<source>scp://john@host.com//myfolder</source>
|
||||
<translation>scp://john@host.com//myfolder</translation>
|
||||
</message>
|
||||
@@ -305,7 +309,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">ownCloud Sync Started</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="362"/>
|
||||
<location filename="../src/mirall/application.cpp" line="349"/>
|
||||
<source>Sync started for %1 configured sync folder(s).</source>
|
||||
<translation>Sync started for %1 configured sync folder(s).</translation>
|
||||
</message>
|
||||
@@ -314,27 +318,27 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">Open ownCloud...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="429"/>
|
||||
<location filename="../src/mirall/application.cpp" line="415"/>
|
||||
<source>Open status...</source>
|
||||
<translation>Open status...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="432"/>
|
||||
<location filename="../src/mirall/application.cpp" line="418"/>
|
||||
<source>Add folder...</source>
|
||||
<translation>Add folder...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="434"/>
|
||||
<location filename="../src/mirall/application.cpp" line="420"/>
|
||||
<source>Configure...</source>
|
||||
<translation>Configure...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="436"/>
|
||||
<location filename="../src/mirall/application.cpp" line="422"/>
|
||||
<source>Configure proxy...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="440"/>
|
||||
<location filename="../src/mirall/application.cpp" line="426"/>
|
||||
<source>Quit</source>
|
||||
<translation>Quit</translation>
|
||||
</message>
|
||||
@@ -343,94 +347,94 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">open folder %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="231"/>
|
||||
<location filename="../src/mirall/application.cpp" line="218"/>
|
||||
<source>%1 Server Mismatch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="232"/>
|
||||
<location filename="../src/mirall/application.cpp" line="219"/>
|
||||
<source><p>The configured server for this client is too old.</p><p>Please update to the latest %1 server and restart the client.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="271"/>
|
||||
<source>Too many attempts to get a valid password.</source>
|
||||
<location filename="../src/mirall/application.cpp" line="258"/>
|
||||
<source>Too many incorrect password attempts.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="275"/>
|
||||
<location filename="../src/mirall/application.cpp" line="262"/>
|
||||
<source>%1 user credentials are wrong. Please check configuration.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<location filename="../src/mirall/application.cpp" line="299"/>
|
||||
<location filename="../src/mirall/application.cpp" line="267"/>
|
||||
<location filename="../src/mirall/application.cpp" line="286"/>
|
||||
<source>Credentials</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="291"/>
|
||||
<location filename="../src/mirall/application.cpp" line="278"/>
|
||||
<source>Error: Could not retrieve the password!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="293"/>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<source>Password dialog was canceled!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="331"/>
|
||||
<location filename="../src/mirall/application.cpp" line="340"/>
|
||||
<location filename="../src/mirall/application.cpp" line="318"/>
|
||||
<location filename="../src/mirall/application.cpp" line="327"/>
|
||||
<source>No %1 Connection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="332"/>
|
||||
<location filename="../src/mirall/application.cpp" line="319"/>
|
||||
<source><p>Your %1 credentials are not correct.</p><p>Please correct them by starting the configuration dialog from the tray!</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="341"/>
|
||||
<location filename="../src/mirall/application.cpp" line="328"/>
|
||||
<source><p>Either your user name or your password are not correct.</p><p>Please correct it by starting the configuration dialog from the tray!</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="361"/>
|
||||
<location filename="../src/mirall/application.cpp" line="348"/>
|
||||
<source>%1 Sync Started</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="427"/>
|
||||
<location filename="../src/mirall/application.cpp" line="413"/>
|
||||
<source>Open %1 in browser...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="438"/>
|
||||
<location filename="../src/mirall/application.cpp" line="424"/>
|
||||
<source>About...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="494"/>
|
||||
<location filename="../src/mirall/application.cpp" line="480"/>
|
||||
<source>Open %1 folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="507"/>
|
||||
<location filename="../src/mirall/application.cpp" line="493"/>
|
||||
<source>Managed Folders:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="755"/>
|
||||
<location filename="../src/mirall/application.cpp" line="741"/>
|
||||
<source>About %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="765"/>
|
||||
<location filename="../src/mirall/application.cpp" line="751"/>
|
||||
<source>Confirm Folder Remove</source>
|
||||
<translation>Confirm Folder Remove</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="766"/>
|
||||
<location filename="../src/mirall/application.cpp" line="752"/>
|
||||
<source>Do you really want to remove upload folder <i>%1</i>?</source>
|
||||
<translation>Do you really want to remove upload folder <i>%1</i>?</translation>
|
||||
</message>
|
||||
@@ -443,32 +447,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">The folder waits to start syncing.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="935"/>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Sync is running.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="939"/>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="944"/>
|
||||
<location filename="../src/mirall/application.cpp" line="936"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>Last Sync was successful.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="950"/>
|
||||
<location filename="../src/mirall/application.cpp" line="942"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Syncing Error.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<location filename="../src/mirall/application.cpp" line="948"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Setup Error.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="959"/>
|
||||
<location filename="../src/mirall/application.cpp" line="951"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Undefined Error State.</translation>
|
||||
</message>
|
||||
@@ -499,32 +503,32 @@ p, li { white-space: pre-wrap; }
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="808"/>
|
||||
<location filename="../src/mirall/application.cpp" line="794"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Sync Running</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="809"/>
|
||||
<location filename="../src/mirall/application.cpp" line="795"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>The syncing operation is running.<br/>Do you want to terminate it?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="924"/>
|
||||
<location filename="../src/mirall/application.cpp" line="916"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Undefined State.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<location filename="../src/mirall/application.cpp" line="919"/>
|
||||
<source>Waits to start syncing.</source>
|
||||
<translation>Waits to start syncing.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<location filename="../src/mirall/application.cpp" line="923"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="964"/>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<source> (Sync is paused)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -533,7 +537,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">Sync is paused.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="981"/>
|
||||
<location filename="../src/mirall/application.cpp" line="973"/>
|
||||
<source>No sync folders configured.</source>
|
||||
<translation>No sync folders configured.</translation>
|
||||
</message>
|
||||
@@ -541,27 +545,26 @@ p, li { white-space: pre-wrap; }
|
||||
<context>
|
||||
<name>Mirall::CSyncThread</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="338"/>
|
||||
<source>CSync create failed.</source>
|
||||
<translation>CSync create failed.</translation>
|
||||
<translation type="obsolete">CSync create failed.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="88"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="73"/>
|
||||
<source>CSync failed to create a lock file.</source>
|
||||
<translation>CSync failed to create a lock file.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="67"/>
|
||||
<source>Success.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="85"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="70"/>
|
||||
<source>CSync Logging setup failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="91"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="76"/>
|
||||
<source>CSync failed to load the state db.</source>
|
||||
<translation>CSync failed to load the state db.</translation>
|
||||
</message>
|
||||
@@ -570,17 +573,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="obsolete">The system time between the local machine and the server differs too much. Please use a time syncronization service (ntp) on both machines.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="97"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<source>The system time on this client is different than the system time on the server. Please use a time synchronization service (NTP) on the server and client machines so that the times remain the same.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="87"/>
|
||||
<source>CSync could not detect the filesystem type.</source>
|
||||
<translation>CSync could not detect the filesystem type.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="90"/>
|
||||
<source>CSync got an error while processing internal trees.</source>
|
||||
<translation>CSync got an error while processing internal trees.</translation>
|
||||
</message>
|
||||
@@ -588,117 +591,117 @@ p, li { white-space: pre-wrap; }
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></source>
|
||||
<translation type="obsolete"><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="123"/>
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="obsolete"><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="118"/>
|
||||
<source>The local filesystem can not be written. Please check permissions.</source>
|
||||
<translation>The local filesystem can not be written. Please check permissions.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="129"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<source>A remote file can not be written. Please check the remote access.</source>
|
||||
<translation>A remote file can not be written. Please check the remote access.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="93"/>
|
||||
<source>CSync failed to reserve memory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="111"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="96"/>
|
||||
<source>CSync fatal parameter error.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="99"/>
|
||||
<source>CSync processing step update failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="117"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<source>CSync processing step reconcile failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="120"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<source>CSync processing step propagate failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<source><p>The target directory does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="121"/>
|
||||
<source>CSync failed to connect through a proxy.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="124"/>
|
||||
<source>CSync failed to lookup proxy or server.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="127"/>
|
||||
<source>CSync failed to authenticate at the %1 server.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="130"/>
|
||||
<source>CSync failed to authenticate at the proxy.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<source>CSync failed to connect to the network.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<source>A network connection timeout happend.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<source>A HTTP transmission error happened.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<source>CSync failed due to not handled permission deniend.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="160"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<source>CSync failed to find a specific file.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="163"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<source>CSync tried to create a directory that already exists.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="166"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<source>CSync: No space on %1 server available.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="169"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<source>CSync unspecified error.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="172"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<source>An internal error number %1 happend.</source>
|
||||
<translation>An internal error number %1 happend.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="176"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="161"/>
|
||||
<source><br/>Backend Message: </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -715,7 +718,7 @@ That prevents ownCloud from successful syncing.
|
||||
Please make sure that all directories are writeable.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="94"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="79"/>
|
||||
<source><p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -763,115 +766,128 @@ Please write a bug report.</translation>
|
||||
<context>
|
||||
<name>Mirall::FileItemDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="41"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<source>Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="43"/>
|
||||
<source>File Count</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="50"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="52"/>
|
||||
<source>Copy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="53"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="55"/>
|
||||
<source>Sync Protocol</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="64"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="66"/>
|
||||
<source>Undefined Folder State</source>
|
||||
<translation type="unfinished">Undefined Folder State</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="67"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="69"/>
|
||||
<source>The folder waits to start syncing.</source>
|
||||
<translation type="unfinished">The folder waits to start syncing.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="70"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="72"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="73"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="75"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation type="unfinished">Sync is running.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="76"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="78"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation type="unfinished">Last Sync was successful.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="79"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="81"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation type="unfinished">Syncing Error.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="82"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="84"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation type="unfinished">Setup Error.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="85"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="87"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation type="unfinished">Undefined Error State.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="123"/>
|
||||
<source>%1 (finished %n sec. ago)</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="121"/>
|
||||
<source>%1 (finished %2 sec. ago)</source>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>Copied to clipboard</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="166"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>The sync protocol has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="225"/>
|
||||
<source>Uploaded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="226"/>
|
||||
<source>Downloaded</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="169"/>
|
||||
<source>Synced Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="172"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="175"/>
|
||||
<source>New Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="178"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="181"/>
|
||||
<source>Deleted Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="184"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="187"/>
|
||||
<source>Renamed Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="190"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="193"/>
|
||||
<source>Ignored Files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="196"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="199"/>
|
||||
<source>Errors</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="202"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="205"/>
|
||||
<source>Conflicts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="222"/>
|
||||
<source>Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="223"/>
|
||||
<source>Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::Folder</name>
|
||||
@@ -902,7 +918,7 @@ Please write a bug report.</translation>
|
||||
<context>
|
||||
<name>Mirall::FolderWizard</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="466"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="475"/>
|
||||
<source>%1 Folder Wizard</source>
|
||||
<translation>%1 Folder Wizard</translation>
|
||||
</message>
|
||||
@@ -915,32 +931,32 @@ Please write a bug report.</translation>
|
||||
<translation>No local directory selected!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="90"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="97"/>
|
||||
<source>The local path %1 is already an upload folder.<br/>Please pick another one!</source>
|
||||
<translation>The local path %1 is already an upload folder.<br/>Please pick another one!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="94"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="101"/>
|
||||
<source>An already configured folder is contained in the current entry.</source>
|
||||
<translation>An already configured folder is contained in the current entry.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="99"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="106"/>
|
||||
<source>An already configured folder contains the currently entered directory.</source>
|
||||
<translation>An already configured folder contains the currently entered directory.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="109"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="116"/>
|
||||
<source>The alias can not be empty. Please provide a descriptive alias word.</source>
|
||||
<translation>The alias can not be empty. Please provide a descriptive alias word.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="120"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="127"/>
|
||||
<source><br/>The alias <i>%1</i> is already in use. Please pick another alias.</source>
|
||||
<translation><br/>The alias <i>%1</i> is already in use. Please pick another alias.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="141"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="148"/>
|
||||
<source>Select the source folder</source>
|
||||
<translation>Select the source folder</translation>
|
||||
</message>
|
||||
@@ -960,37 +976,37 @@ Please write a bug report.</translation>
|
||||
<translation type="obsolete">Failed to create the folder on ownCloud.<br/>Please check manually.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="211"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="218"/>
|
||||
<source>The folder is not available on your %1.<br/>Click to create it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="237"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="244"/>
|
||||
<source>Folder was successfully created on %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="240"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="247"/>
|
||||
<source>Failed to create the folder on %1.<br/>Please check manually.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="260"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="267"/>
|
||||
<source>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</source>
|
||||
<translation>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="315"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="322"/>
|
||||
<source>to your <a href="%1">%2</a> (version %3)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="326"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="333"/>
|
||||
<source>no configured %1 found!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="327"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="334"/>
|
||||
<source>%1 could not be reached:<br/><tt>%2</tt></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -1007,7 +1023,7 @@ Please write a bug report.</translation>
|
||||
<translation type="obsolete">Your ownCloud could not be reached:<br/><tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="395"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="402"/>
|
||||
<source>Select the target folder</source>
|
||||
<translation>Select the target folder</translation>
|
||||
</message>
|
||||
@@ -1342,24 +1358,22 @@ Setup can not be done.</translation>
|
||||
<context>
|
||||
<name>Mirall::ServerActionNotifier</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>New file available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>'%1' has been synced to this machine.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>New files available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>'%1' and %n other file(s) have been synced to this machine.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -1367,18 +1381,17 @@ Setup can not be done.</translation>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>File removed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>'%1' has been removed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>'%1' and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -1386,18 +1399,33 @@ Setup can not be done.</translation>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>Files removed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>'%1' has been updated.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>File updated</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>'%1' and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>Files updated</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::SslErrorDialog</name>
|
||||
@@ -1407,62 +1435,62 @@ Setup can not be done.</translation>
|
||||
<translation>SSL Connection</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="88"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="97"/>
|
||||
<source>Warnings about current SSL Connection:</source>
|
||||
<translation>Warnings about current SSL Connection:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="124"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<source>with Certificate %1</source>
|
||||
<translation>with Certificate %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="132"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="134"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="141"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="142"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="143"/>
|
||||
<source>&lt;not specified&gt;</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="135"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="157"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="144"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="166"/>
|
||||
<source>Organization: %1</source>
|
||||
<translation>Organization: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="136"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="145"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="167"/>
|
||||
<source>Unit: %1</source>
|
||||
<translation>Unit: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="137"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="168"/>
|
||||
<source>Country: %1</source>
|
||||
<translation>Country: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="155"/>
|
||||
<source>Fingerprint (MD5): <tt>%1</tt></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="147"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="156"/>
|
||||
<source>Fingerprint (SHA1): <tt>%1</tt></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="149"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<source>Effective Date: %1</source>
|
||||
<translation>Effective Date: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="150"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<source>Expiry Date: %1</source>
|
||||
<translation>Expiry Date: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="154"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="163"/>
|
||||
<source>Issuer: %1</source>
|
||||
<translation>Issuer: %1</translation>
|
||||
</message>
|
||||
@@ -1470,37 +1498,37 @@ Setup can not be done.</translation>
|
||||
<context>
|
||||
<name>Mirall::StatusDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="278"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<source>Pause</source>
|
||||
<translation>Pause</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="282"/>
|
||||
<source>Resume</source>
|
||||
<translation>Resume</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="483"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="485"/>
|
||||
<source>Checking %1 connection...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="488"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="490"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="511"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<source>Connected to <a href="%1">%1</a> as <i>%2</i>.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="515"/>
|
||||
<source>Version: %1 (%2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="529"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="531"/>
|
||||
<source><p>Failed to connect to %1: <tt>%2</tt></p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -1521,7 +1549,7 @@ Setup can not be done.</translation>
|
||||
<translation type="obsolete">Version: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="526"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="528"/>
|
||||
<source>unknown problem.</source>
|
||||
<translation>unknown problem.</translation>
|
||||
</message>
|
||||
@@ -1582,7 +1610,7 @@ Setup can not be done.</translation>
|
||||
<context>
|
||||
<name>Mirall::ownCloudFolder</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="227"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="351"/>
|
||||
<source>The CSync thread terminated.</source>
|
||||
<translation>The CSync thread terminated.</translation>
|
||||
</message>
|
||||
|
||||
@@ -199,9 +199,13 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>en via &ownCloud-servilo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Folder on ownCloud:</source>
|
||||
<translation>Dosierujo en ownCloud:</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="100"/>
|
||||
<source>Remote folder:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizardtargetpage.ui" line="149"/>
|
||||
@@ -239,17 +243,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>krei</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="177"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="184"/>
|
||||
<source>root</source>
|
||||
<translation>radiko</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="178"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="185"/>
|
||||
<source>/home/local</source>
|
||||
<translation>/home/loka</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="179"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="186"/>
|
||||
<source>scp://john@host.com//myfolder</source>
|
||||
<translation>scp://johano@gastigo.com//miadosierujo</translation>
|
||||
</message>
|
||||
@@ -297,7 +301,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="362"/>
|
||||
<location filename="../src/mirall/application.cpp" line="349"/>
|
||||
<source>Sync started for %1 configured sync folder(s).</source>
|
||||
<translation>Sinkronigo komencis por %1 agordita(j) sinkroniga(j) dosierujo(j).</translation>
|
||||
</message>
|
||||
@@ -306,27 +310,27 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="429"/>
|
||||
<location filename="../src/mirall/application.cpp" line="415"/>
|
||||
<source>Open status...</source>
|
||||
<translation>Malfermi staton...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="432"/>
|
||||
<location filename="../src/mirall/application.cpp" line="418"/>
|
||||
<source>Add folder...</source>
|
||||
<translation>Aldoni dosierujon...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="434"/>
|
||||
<location filename="../src/mirall/application.cpp" line="420"/>
|
||||
<source>Configure...</source>
|
||||
<translation>Agordi...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="436"/>
|
||||
<location filename="../src/mirall/application.cpp" line="422"/>
|
||||
<source>Configure proxy...</source>
|
||||
<translation>Agordi prokuran servilon...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="440"/>
|
||||
<location filename="../src/mirall/application.cpp" line="426"/>
|
||||
<source>Quit</source>
|
||||
<translation>Forlasi</translation>
|
||||
</message>
|
||||
@@ -335,94 +339,94 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="231"/>
|
||||
<location filename="../src/mirall/application.cpp" line="218"/>
|
||||
<source>%1 Server Mismatch</source>
|
||||
<translation>Malĝusta kongruo de servilo%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="232"/>
|
||||
<location filename="../src/mirall/application.cpp" line="219"/>
|
||||
<source><p>The configured server for this client is too old.</p><p>Please update to the latest %1 server and restart the client.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="271"/>
|
||||
<source>Too many attempts to get a valid password.</source>
|
||||
<translation>Tro multaj provoj ekhavi validan pasvorton.</translation>
|
||||
<location filename="../src/mirall/application.cpp" line="258"/>
|
||||
<source>Too many incorrect password attempts.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="275"/>
|
||||
<location filename="../src/mirall/application.cpp" line="262"/>
|
||||
<source>%1 user credentials are wrong. Please check configuration.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<location filename="../src/mirall/application.cpp" line="299"/>
|
||||
<location filename="../src/mirall/application.cpp" line="267"/>
|
||||
<location filename="../src/mirall/application.cpp" line="286"/>
|
||||
<source>Credentials</source>
|
||||
<translation>Aŭtentigiloj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="291"/>
|
||||
<location filename="../src/mirall/application.cpp" line="278"/>
|
||||
<source>Error: Could not retrieve the password!</source>
|
||||
<translation>Eraro: ne eblis venigi la pasvorton!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="293"/>
|
||||
<location filename="../src/mirall/application.cpp" line="280"/>
|
||||
<source>Password dialog was canceled!</source>
|
||||
<translation>Pasvorta dialogo nuliĝis!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="331"/>
|
||||
<location filename="../src/mirall/application.cpp" line="340"/>
|
||||
<location filename="../src/mirall/application.cpp" line="318"/>
|
||||
<location filename="../src/mirall/application.cpp" line="327"/>
|
||||
<source>No %1 Connection</source>
|
||||
<translation>Neniu konekto %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="332"/>
|
||||
<location filename="../src/mirall/application.cpp" line="319"/>
|
||||
<source><p>Your %1 credentials are not correct.</p><p>Please correct them by starting the configuration dialog from the tray!</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="341"/>
|
||||
<location filename="../src/mirall/application.cpp" line="328"/>
|
||||
<source><p>Either your user name or your password are not correct.</p><p>Please correct it by starting the configuration dialog from the tray!</p></source>
|
||||
<translation><p>Aŭ via uzantonomo aŭ via pasvorto ne ĝustas.</p><p>Bonvolu ĝustigi ĝin per lanĉo de la agorda dialogujo el la pleto!</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="361"/>
|
||||
<location filename="../src/mirall/application.cpp" line="348"/>
|
||||
<source>%1 Sync Started</source>
|
||||
<translation>Sinkronigo %1 komencis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="427"/>
|
||||
<location filename="../src/mirall/application.cpp" line="413"/>
|
||||
<source>Open %1 in browser...</source>
|
||||
<translation>Malfermi %1 en foliumilo...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="438"/>
|
||||
<location filename="../src/mirall/application.cpp" line="424"/>
|
||||
<source>About...</source>
|
||||
<translation>Pri...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="494"/>
|
||||
<location filename="../src/mirall/application.cpp" line="480"/>
|
||||
<source>Open %1 folder</source>
|
||||
<translation>Malfermi la dosierujon %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="507"/>
|
||||
<location filename="../src/mirall/application.cpp" line="493"/>
|
||||
<source>Managed Folders:</source>
|
||||
<translation>Mastrumataj dosierujoj:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="755"/>
|
||||
<location filename="../src/mirall/application.cpp" line="741"/>
|
||||
<source>About %1</source>
|
||||
<translation>Pri %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="765"/>
|
||||
<location filename="../src/mirall/application.cpp" line="751"/>
|
||||
<source>Confirm Folder Remove</source>
|
||||
<translation>Konfirmi forigon de dosierujo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="766"/>
|
||||
<location filename="../src/mirall/application.cpp" line="752"/>
|
||||
<source>Do you really want to remove upload folder <i>%1</i>?</source>
|
||||
<translation>Ĉu vi vere volas forigi la alŝutan dosierujon <i>%1</i>?</translation>
|
||||
</message>
|
||||
@@ -435,32 +439,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="935"/>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Sinkronigo okazas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="939"/>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="944"/>
|
||||
<location filename="../src/mirall/application.cpp" line="936"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>La lasta sinkronigo sukcesis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="950"/>
|
||||
<location filename="../src/mirall/application.cpp" line="942"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Sinkroniga eraro.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<location filename="../src/mirall/application.cpp" line="948"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation>Agorda eraro.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="959"/>
|
||||
<location filename="../src/mirall/application.cpp" line="951"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation>Sendifina erarostato.</translation>
|
||||
</message>
|
||||
@@ -488,32 +492,32 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="808"/>
|
||||
<location filename="../src/mirall/application.cpp" line="794"/>
|
||||
<source>Sync Running</source>
|
||||
<translation>Sinkronigo okazanta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="809"/>
|
||||
<location filename="../src/mirall/application.cpp" line="795"/>
|
||||
<source>The syncing operation is running.<br/>Do you want to terminate it?</source>
|
||||
<translation>La sinkroniga operacio funkcias.<br/>Ĉu vi volas fini ĝin?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="924"/>
|
||||
<location filename="../src/mirall/application.cpp" line="916"/>
|
||||
<source>Undefined State.</source>
|
||||
<translation>Sendifina stato.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="927"/>
|
||||
<location filename="../src/mirall/application.cpp" line="919"/>
|
||||
<source>Waits to start syncing.</source>
|
||||
<translation>Atendanta komencon de sinkronigo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="931"/>
|
||||
<location filename="../src/mirall/application.cpp" line="923"/>
|
||||
<source>Preparing for sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="964"/>
|
||||
<location filename="../src/mirall/application.cpp" line="956"/>
|
||||
<source> (Sync is paused)</source>
|
||||
<translation>(Sinkronigo paŭzas)</translation>
|
||||
</message>
|
||||
@@ -522,7 +526,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/application.cpp" line="981"/>
|
||||
<location filename="../src/mirall/application.cpp" line="973"/>
|
||||
<source>No sync folders configured.</source>
|
||||
<translation>Neniu sinkroniga dosierujo agordita.</translation>
|
||||
</message>
|
||||
@@ -530,27 +534,26 @@ p, li { white-space: pre-wrap; }
|
||||
<context>
|
||||
<name>Mirall::CSyncThread</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="338"/>
|
||||
<source>CSync create failed.</source>
|
||||
<translation>CSync malsukcesis je kreo.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="88"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="73"/>
|
||||
<source>CSync failed to create a lock file.</source>
|
||||
<translation>CSync malsukcesis je kreo de blokdosiero.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="67"/>
|
||||
<source>Success.</source>
|
||||
<translation>Sukceso.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="85"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="70"/>
|
||||
<source>CSync Logging setup failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="91"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="76"/>
|
||||
<source>CSync failed to load the state db.</source>
|
||||
<translation>CSync malsukcesis pri ŝargo de la stata datumbazo.</translation>
|
||||
</message>
|
||||
@@ -559,17 +562,17 @@ p, li { white-space: pre-wrap; }
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="97"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="82"/>
|
||||
<source>The system time on this client is different than the system time on the server. Please use a time synchronization service (NTP) on the server and client machines so that the times remain the same.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="87"/>
|
||||
<source>CSync could not detect the filesystem type.</source>
|
||||
<translation>CSync ne povis detekti la dosiersistemtipon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="90"/>
|
||||
<source>CSync got an error while processing internal trees.</source>
|
||||
<translation>CSync eraris dum ĝi procezis enajn arbojn.</translation>
|
||||
</message>
|
||||
@@ -577,117 +580,117 @@ p, li { white-space: pre-wrap; }
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please create it and try again.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="123"/>
|
||||
<source><p>The target directory %1 does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation><p>La cela dosierujo %1 ne ekzistas.</p><p>Bonvolu kontroli la sinkronigan agordon.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><p>The ownCloud plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="118"/>
|
||||
<source>The local filesystem can not be written. Please check permissions.</source>
|
||||
<translation>La loka dosiersistemo ne eblas esti skribita. Bonvolu kontroli permesojn.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="129"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<source>A remote file can not be written. Please check the remote access.</source>
|
||||
<translation>Mallokan dosieron ne eblas skribi. Bonvolu kontroli la mallokan alireblon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="93"/>
|
||||
<source>CSync failed to reserve memory.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="111"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="96"/>
|
||||
<source>CSync fatal parameter error.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="114"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="99"/>
|
||||
<source>CSync processing step update failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="117"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="102"/>
|
||||
<source>CSync processing step reconcile failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="120"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="105"/>
|
||||
<source>CSync processing step propagate failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="108"/>
|
||||
<source><p>The target directory does not exist.</p><p>Please check the sync setup.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="121"/>
|
||||
<source>CSync failed to connect through a proxy.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="124"/>
|
||||
<source>CSync failed to lookup proxy or server.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="127"/>
|
||||
<source>CSync failed to authenticate at the %1 server.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="130"/>
|
||||
<source>CSync failed to authenticate at the proxy.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="133"/>
|
||||
<source>CSync failed to connect to the network.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="136"/>
|
||||
<source>A network connection timeout happend.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="139"/>
|
||||
<source>A HTTP transmission error happened.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="142"/>
|
||||
<source>CSync failed due to not handled permission deniend.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="160"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="145"/>
|
||||
<source>CSync failed to find a specific file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="163"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="148"/>
|
||||
<source>CSync tried to create a directory that already exists.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="166"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="151"/>
|
||||
<source>CSync: No space on %1 server available.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="169"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="154"/>
|
||||
<source>CSync unspecified error.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="172"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="157"/>
|
||||
<source>An internal error number %1 happend.</source>
|
||||
<translation>Ena eraro numerigita %1 okazis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="176"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="161"/>
|
||||
<source><br/>Backend Message: </source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -702,7 +705,7 @@ Please make sure that all directories are writeable.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="94"/>
|
||||
<location filename="../src/mirall/csyncthread.cpp" line="79"/>
|
||||
<source><p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p></source>
|
||||
<translation><p>La kromaĵo %1 por CSync ne povis ŝargiĝi.<br/>Bonvolu kontroli la instalon!</p></translation>
|
||||
</message>
|
||||
@@ -748,115 +751,125 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FileItemDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="41"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<source>Files</source>
|
||||
<translation>Dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="42"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="43"/>
|
||||
<source>File Count</source>
|
||||
<translation>Dosierkiamo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="50"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="52"/>
|
||||
<source>Copy</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="53"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="55"/>
|
||||
<source>Sync Protocol</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="64"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="66"/>
|
||||
<source>Undefined Folder State</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="67"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="69"/>
|
||||
<source>The folder waits to start syncing.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="70"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="72"/>
|
||||
<source>Server is currently not available.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="73"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="75"/>
|
||||
<source>Sync is running.</source>
|
||||
<translation>Sinkronigo funkcias.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="76"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="78"/>
|
||||
<source>Last Sync was successful.</source>
|
||||
<translation>La lasta sinkronigo sukcesis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="79"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="81"/>
|
||||
<source>Syncing Error.</source>
|
||||
<translation>Sinkroniga eraro.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="82"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="84"/>
|
||||
<source>Setup Error.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="85"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="87"/>
|
||||
<source>Undefined Error State.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="123"/>
|
||||
<source>%1 (finished %n sec. ago)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="121"/>
|
||||
<source>%1 (finished %2 sec. ago)</source>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>Copied to clipboard</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="166"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="152"/>
|
||||
<source>The sync protocol has been copied to the clipboard.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="225"/>
|
||||
<source>Uploaded</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="226"/>
|
||||
<source>Downloaded</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="169"/>
|
||||
<source>Synced Files</source>
|
||||
<translation>Sinkronigitaj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="172"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="175"/>
|
||||
<source>New Files</source>
|
||||
<translation>Novaj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="178"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="181"/>
|
||||
<source>Deleted Files</source>
|
||||
<translation>Forigitaj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="184"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="187"/>
|
||||
<source>Renamed Files</source>
|
||||
<translation>Alinomigitaj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="190"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="193"/>
|
||||
<source>Ignored Files</source>
|
||||
<translation>Ignoritaj dosieroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="196"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="199"/>
|
||||
<source>Errors</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="202"/>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="205"/>
|
||||
<source>Conflicts</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="222"/>
|
||||
<source>Up</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/fileitemdialog.cpp" line="223"/>
|
||||
<source>Down</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::Folder</name>
|
||||
@@ -887,7 +900,7 @@ Please write a bug report.</source>
|
||||
<context>
|
||||
<name>Mirall::FolderWizard</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="466"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="475"/>
|
||||
<source>%1 Folder Wizard</source>
|
||||
<translation>Asistilo pri dosierujo %1</translation>
|
||||
</message>
|
||||
@@ -900,32 +913,32 @@ Please write a bug report.</source>
|
||||
<translation>Neniu loka dosierujo elektiĝis!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="90"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="97"/>
|
||||
<source>The local path %1 is already an upload folder.<br/>Please pick another one!</source>
|
||||
<translation>La loka vojo %1 jam estas alŝuta dosierujo.<br/>Bonvolu preni alian!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="94"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="101"/>
|
||||
<source>An already configured folder is contained in the current entry.</source>
|
||||
<translation>Jam agorditan dosierujon enhavas la nuna ero.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="99"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="106"/>
|
||||
<source>An already configured folder contains the currently entered directory.</source>
|
||||
<translation>Dosierujo jam agordita enhavas la dosierujon nun enigitan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="109"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="116"/>
|
||||
<source>The alias can not be empty. Please provide a descriptive alias word.</source>
|
||||
<translation>La alinomo devas ne esti malplena. Bonvolu provizii priskribecan alinoman vorton.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="120"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="127"/>
|
||||
<source><br/>The alias <i>%1</i> is already in use. Please pick another alias.</source>
|
||||
<translation><br/>La alinomo <i>%1</i> jam estas uzata. Bonvolu preni alian alinomon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="141"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="148"/>
|
||||
<source>Select the source folder</source>
|
||||
<translation>Elektu la fontan dosierujon</translation>
|
||||
</message>
|
||||
@@ -945,37 +958,37 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="211"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="218"/>
|
||||
<source>The folder is not available on your %1.<br/>Click to create it.</source>
|
||||
<translation>La dosiero ne haveblas en via %1.<br/>Klaku por krei ĝin.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="237"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="244"/>
|
||||
<source>Folder was successfully created on %1.</source>
|
||||
<translation>Dosierujo sukcese kreiĝis en %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="240"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="247"/>
|
||||
<source>Failed to create the folder on %1.<br/>Please check manually.</source>
|
||||
<translation>Malsukcesis kreo de la dosierujo en %1.<br/>Bonvolu kontroli mane.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="260"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="267"/>
|
||||
<source>Better do not use the remote root directory.<br/>If you do, you can <b>not</b> mirror another local folder.</source>
|
||||
<translation>Pli bone, ne uzu la mallokan radikan dosierujon.<br/>Se vi tion ja faras, vi <b>ne</b> povos speguli alian lokan dosierujon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="315"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="322"/>
|
||||
<source>to your <a href="%1">%2</a> (version %3)</source>
|
||||
<translation>al via <a href="%1">%2</a> (eldono %3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="326"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="333"/>
|
||||
<source>no configured %1 found!</source>
|
||||
<translation>ne troviĝis agordita %1!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="327"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="334"/>
|
||||
<source>%1 could not be reached:<br/><tt>%2</tt></source>
|
||||
<translation>%1 ne povis atingiĝi:<br/><tt>%2</tt></translation>
|
||||
</message>
|
||||
@@ -992,7 +1005,7 @@ Please write a bug report.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="395"/>
|
||||
<location filename="../src/mirall/folderwizard.cpp" line="402"/>
|
||||
<source>Select the target folder</source>
|
||||
<translation>Elektu la celan dosierujon</translation>
|
||||
</message>
|
||||
@@ -1327,53 +1340,65 @@ Agordado ne povas fariĝi.</translation>
|
||||
<context>
|
||||
<name>Mirall::ServerActionNotifier</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>New file available</source>
|
||||
<translation>Nova dosiero haveblas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="325"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="449"/>
|
||||
<source>'%1' has been synced to this machine.</source>
|
||||
<translation>“%1” sinkroniĝis kun ĉi tiu maŝino.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>New files available</source>
|
||||
<translation>Novaj dosieroj haveblas</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="327"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="451"/>
|
||||
<source>'%1' and %n other file(s) have been synced to this machine.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>File removed</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="333"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="457"/>
|
||||
<source>'%1' has been removed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="335"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>'%1' and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="341"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="459"/>
|
||||
<source>Files removed</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>'%1' has been updated.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="465"/>
|
||||
<source>File updated</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="343"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>'%1' and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="467"/>
|
||||
<source>Files updated</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Mirall::SslErrorDialog</name>
|
||||
@@ -1383,62 +1408,62 @@ Agordado ne povas fariĝi.</translation>
|
||||
<translation>SSL-konekto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="88"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="97"/>
|
||||
<source>Warnings about current SSL Connection:</source>
|
||||
<translation>Avertoj pri la nuna SSL-konekto:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="124"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<source>with Certificate %1</source>
|
||||
<translation>kun atestilo %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="132"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="133"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="134"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="141"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="142"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="143"/>
|
||||
<source>&lt;not specified&gt;</source>
|
||||
<translation>&lt;ne indikita&gt;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="135"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="157"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="144"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="166"/>
|
||||
<source>Organization: %1</source>
|
||||
<translation>Organizaĵo: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="136"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="145"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="167"/>
|
||||
<source>Unit: %1</source>
|
||||
<translation>Unuo: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="137"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="168"/>
|
||||
<source>Country: %1</source>
|
||||
<translation>Lando: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="146"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="155"/>
|
||||
<source>Fingerprint (MD5): <tt>%1</tt></source>
|
||||
<translation>Fingropremo (MD5): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="147"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="156"/>
|
||||
<source>Fingerprint (SHA1): <tt>%1</tt></source>
|
||||
<translation>Fingropremo (SHA1): <tt>%1</tt></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="149"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="158"/>
|
||||
<source>Effective Date: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="150"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="159"/>
|
||||
<source>Expiry Date: %1</source>
|
||||
<translation>Limdato: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="154"/>
|
||||
<location filename="../src/mirall/sslerrordialog.cpp" line="163"/>
|
||||
<source>Issuer: %1</source>
|
||||
<translation>Sendinto: %1</translation>
|
||||
</message>
|
||||
@@ -1446,37 +1471,37 @@ Agordado ne povas fariĝi.</translation>
|
||||
<context>
|
||||
<name>Mirall::StatusDialog</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="278"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<source>Pause</source>
|
||||
<translation>Paŭzigi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="280"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="282"/>
|
||||
<source>Resume</source>
|
||||
<translation>Malpaŭzi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="483"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="485"/>
|
||||
<source>Checking %1 connection...</source>
|
||||
<translation>Kontrolanta la konekton %1...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="488"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="490"/>
|
||||
<source>No %1 connection configured.</source>
|
||||
<translation>Neniu konekto %1 agordiĝis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="511"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<source>Connected to <a href="%1">%1</a> as <i>%2</i>.</source>
|
||||
<translation>Konektita al <a href="%1">%1</a> kiel <i>%2</i>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="513"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="515"/>
|
||||
<source>Version: %1 (%2)</source>
|
||||
<translation>Eldono: %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="529"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="531"/>
|
||||
<source><p>Failed to connect to %1: <tt>%2</tt></p></source>
|
||||
<translation><p>Malsukcesis konektado al %1: <tt>%2</tt></p></translation>
|
||||
</message>
|
||||
@@ -1497,7 +1522,7 @@ Agordado ne povas fariĝi.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="526"/>
|
||||
<location filename="../src/mirall/statusdialog.cpp" line="528"/>
|
||||
<source>unknown problem.</source>
|
||||
<translation>nekonata problemo.</translation>
|
||||
</message>
|
||||
@@ -1558,7 +1583,7 @@ Agordado ne povas fariĝi.</translation>
|
||||
<context>
|
||||
<name>Mirall::ownCloudFolder</name>
|
||||
<message>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="227"/>
|
||||
<location filename="../src/mirall/owncloudfolder.cpp" line="351"/>
|
||||
<source>The CSync thread terminated.</source>
|
||||
<translation>La fadeno de CSync finiĝis.</translation>
|
||||
</message>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user