Compare commits
227 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78d782601e | ||
|
|
86a83dc32c | ||
|
|
c67e53c7b2 | ||
|
|
5659e04e89 | ||
|
|
5f43c9cfad | ||
|
|
4c9bc42b69 | ||
|
|
d09de79491 | ||
|
|
24a801dfd3 | ||
|
|
af79bc9211 | ||
|
|
a3904f4d32 | ||
|
|
b7c927f349 | ||
|
|
64718fe567 | ||
|
|
79f14e0933 | ||
|
|
3ad8c692a4 | ||
|
|
546cab3f62 | ||
|
|
83edb7fb8a | ||
|
|
0c59c85127 | ||
|
|
d6098c39dc | ||
|
|
af721118cd | ||
|
|
0d5f2b5d31 | ||
|
|
1790a128aa | ||
|
|
87fa1794a1 | ||
|
|
4df828d0b0 | ||
|
|
4d1d6dff3b | ||
|
|
81e30cd8d2 | ||
|
|
983671c8cb | ||
|
|
eb6b254dc5 | ||
|
|
745cf55abb | ||
|
|
e1c634d000 | ||
|
|
49a3a3ba7b | ||
|
|
9982211ced | ||
|
|
10f59bf3ad | ||
|
|
7487d02a70 | ||
|
|
c39f6c3fae | ||
|
|
f4365dcca0 | ||
|
|
fd75d5c679 | ||
|
|
014a53f990 | ||
|
|
da76ba6c64 | ||
|
|
afeb9e07e2 | ||
|
|
f22535e18a | ||
|
|
0f4e88eeaa | ||
|
|
70476c332a | ||
|
|
79145ff9fd | ||
|
|
a0eb4b9c85 | ||
|
|
f6631443a1 | ||
|
|
87ad4dd264 | ||
|
|
bb289f63f1 | ||
|
|
67a71ff10f | ||
|
|
6b1bfb4474 | ||
|
|
8158984ad6 | ||
|
|
7b61bcfe10 | ||
|
|
3cbd63a77a | ||
|
|
62eeed5201 | ||
|
|
9558822a7c | ||
|
|
7bf31e56ab | ||
|
|
d8c5e58fa1 | ||
|
|
d0c2ce276a | ||
|
|
9e813c7dcf | ||
|
|
440687af21 | ||
|
|
77a9b28e14 | ||
|
|
f84654c9b3 | ||
|
|
641dece89a | ||
|
|
2c9d418423 | ||
|
|
a897a1805e | ||
|
|
fe88b48fb1 | ||
|
|
574c699382 | ||
|
|
7b97b96115 | ||
|
|
e7e0e5b57f | ||
|
|
b72e2b146d | ||
|
|
a1421ff74f | ||
|
|
57f10c0c8e | ||
|
|
1f5834b74a | ||
|
|
836d7e1e5d | ||
|
|
48df009cea | ||
|
|
6343417def | ||
|
|
8c02034838 | ||
|
|
290cc58a63 | ||
|
|
5274b2485f | ||
|
|
fc95e47790 | ||
|
|
caaf8c841e | ||
|
|
6816cdd1c3 | ||
|
|
5f857a49b8 | ||
|
|
70ab7f04b3 | ||
|
|
c1045af500 | ||
|
|
c5c1a7a1c3 | ||
|
|
4144d4672f | ||
|
|
9cfa63eed8 | ||
|
|
68ed64e11d | ||
|
|
043655bd7a | ||
|
|
c71058980a | ||
|
|
68947525a0 | ||
|
|
38eaf241fa | ||
|
|
8f8bf98ca6 | ||
|
|
ef0ab93e05 | ||
|
|
95e370b70c | ||
|
|
5f06e3f738 | ||
|
|
3ba4e38693 | ||
|
|
c09b4e1477 | ||
|
|
ca95276298 | ||
|
|
5caf1ffb17 | ||
|
|
c2431f2c3b | ||
|
|
15e4d9e317 | ||
|
|
ef607e29de | ||
|
|
25d1defd73 | ||
|
|
abfd97949d | ||
|
|
5347a991cf | ||
|
|
f1a9e669b4 | ||
|
|
2d4bb31beb | ||
|
|
57e9f96836 | ||
|
|
5a791ec11e | ||
|
|
9dc9a7eac4 | ||
|
|
e695144cd8 | ||
|
|
cb6522e735 | ||
|
|
78a3453953 | ||
|
|
a08cb3846c | ||
|
|
d0aef138c3 | ||
|
|
6930cd6687 | ||
|
|
7bafc92df3 | ||
|
|
223a162a8b | ||
|
|
1f6efab318 | ||
|
|
7128b0122e | ||
|
|
ba542cacb8 | ||
|
|
2f20c15824 | ||
|
|
6058b507c8 | ||
|
|
0d55562869 | ||
|
|
c2fd708ce9 | ||
|
|
1aff9bca95 | ||
|
|
d76f76f429 | ||
|
|
1de4d96ab1 | ||
|
|
78ed4866ce | ||
|
|
d061a4b434 | ||
|
|
429f8229b3 | ||
|
|
eb154de2a1 | ||
|
|
8c2b5af7f0 | ||
|
|
9004fd6d11 | ||
|
|
5f660bf080 | ||
|
|
1f55598010 | ||
|
|
9eec45f9c4 | ||
|
|
cf7726353a | ||
|
|
93e1ad088c | ||
|
|
13b6b3989a | ||
|
|
2a8aa8a108 | ||
|
|
b490be2267 | ||
|
|
593ad20e69 | ||
|
|
bae552f386 | ||
|
|
16d6418d10 | ||
|
|
995b42d0fc | ||
|
|
c0f8ff1030 | ||
|
|
8e2b9c6f12 | ||
|
|
7d191763b5 | ||
|
|
144a1a1922 | ||
|
|
be3529ebcb | ||
|
|
e00cc4ed5b | ||
|
|
613736aa41 | ||
|
|
b83c723e3f | ||
|
|
6b222c3db7 | ||
|
|
088c0d471a | ||
|
|
5e657aadee | ||
|
|
98e6d61d1b | ||
|
|
df534753b1 | ||
|
|
02c077e3f8 | ||
|
|
ba2145032e | ||
|
|
bff9d646f7 | ||
|
|
8495d097bb | ||
|
|
66f340734c | ||
|
|
794f071561 | ||
|
|
c6794afc3a | ||
|
|
8920ba3de2 | ||
|
|
14c55083f3 | ||
|
|
c832a9eee5 | ||
|
|
699acc99e4 | ||
|
|
90338499d3 | ||
|
|
641f56664e | ||
|
|
419deff861 | ||
|
|
69f8dd896f | ||
|
|
e49a8a9ffe | ||
|
|
b6e0802203 | ||
|
|
e03fe8bcbf | ||
|
|
7bfbc21770 | ||
|
|
d853b4f083 | ||
|
|
d8939184db | ||
|
|
e54253d845 | ||
|
|
141d43a1ee | ||
|
|
0fac72f3b3 | ||
|
|
cc4bc2e47a | ||
|
|
0fa4353841 | ||
|
|
688aaadb60 | ||
|
|
f77ae28ed1 | ||
|
|
0d08bbec74 | ||
|
|
ebee6f0bc2 | ||
|
|
db8f9586cb | ||
|
|
35318ea9b5 | ||
|
|
7aeb27d5ee | ||
|
|
c48c5b9286 | ||
|
|
d503221b2e | ||
|
|
b3a462d452 | ||
|
|
916f522010 | ||
|
|
967b533e37 | ||
|
|
9172a5fc4c | ||
|
|
17e9b65cad | ||
|
|
a976f75783 | ||
|
|
3ebc422bb5 | ||
|
|
9f765c940e | ||
|
|
1a0d0c0a31 | ||
|
|
ce769cb1ef | ||
|
|
8fb4adf40d | ||
|
|
03954b5918 | ||
|
|
ab4fa905fc | ||
|
|
530552820d | ||
|
|
cb1bcdc8e0 | ||
|
|
1f43c47861 | ||
|
|
5414c65442 | ||
|
|
f38deb44fb | ||
|
|
937526b881 | ||
|
|
7ba97d88d5 | ||
|
|
64b211f5db | ||
|
|
32c636a471 | ||
|
|
2d421a8275 | ||
|
|
ed28a21cb0 | ||
|
|
3db0db451e | ||
|
|
035e57cf37 | ||
|
|
07ca0be3c5 | ||
|
|
e71cca128d | ||
|
|
fe49255bff | ||
|
|
20f4ec6b67 | ||
|
|
92f6134ed3 | ||
|
|
a0f9b834b6 |
@@ -32,7 +32,7 @@ include(Warnings)
|
|||||||
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
||||||
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/")
|
||||||
|
|
||||||
# disable the crashrepoter if libcrashreporter-qt is not available or we're building for ARM
|
# disable the crashreporter if libcrashreporter-qt is not available or we're building for ARM
|
||||||
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt")
|
if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt")
|
||||||
set( WITH_CRASHREPORTER OFF )
|
set( WITH_CRASHREPORTER OFF )
|
||||||
endif()
|
endif()
|
||||||
@@ -114,16 +114,16 @@ endif()
|
|||||||
# this option creates only libocsync and libowncloudsync
|
# this option creates only libocsync and libowncloudsync
|
||||||
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
|
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
|
||||||
|
|
||||||
# When this option is enabled, 5xx errors are not added to the clacklist
|
# When this option is enabled, 5xx errors are not added to the blacklist
|
||||||
# Normaly you don't want to enable this option because if a particular file
|
# Normally you don't want to enable this option because if a particular file
|
||||||
# trigger a bug on the server, you want the file to be blacklisted.
|
# triggers a bug on the server, you want the file to be blacklisted.
|
||||||
option(OWNCLOUD_5XX_NO_BLACKLIST "OWNCLOUD_5XX_NO_BLACKLIST" OFF)
|
option(OWNCLOUD_5XX_NO_BLACKLIST "OWNCLOUD_5XX_NO_BLACKLIST" OFF)
|
||||||
if(OWNCLOUD_5XX_NO_BLACKLIST)
|
if(OWNCLOUD_5XX_NO_BLACKLIST)
|
||||||
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesigh key's TeamIdentifier/Organizational Unit" )
|
set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#### find libs
|
#### find libs
|
||||||
@@ -138,7 +138,7 @@ if(HAVE_QT5)
|
|||||||
message(STATUS "Using Qt ${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}.x")
|
message(STATUS "Using Qt ${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}.x")
|
||||||
if (${Qt5Core_VERSION_MAJOR} EQUAL "5")
|
if (${Qt5Core_VERSION_MAJOR} EQUAL "5")
|
||||||
if (${Qt5Core_VERSION_MINOR} EQUAL "4" OR ${Qt5Core_VERSION_MINOR} GREATER 4)
|
if (${Qt5Core_VERSION_MINOR} EQUAL "4" OR ${Qt5Core_VERSION_MINOR} GREATER 4)
|
||||||
message(STATUS "We would not require Neon in this setup, compile without!")
|
message(STATUS "We do not require Neon in this setup, compile without!")
|
||||||
set(USE_NEON FALSE)
|
set(USE_NEON FALSE)
|
||||||
else()
|
else()
|
||||||
message(STATUS "If possible compile me with Qt 5.4 or higher.")
|
message(STATUS "If possible compile me with Qt 5.4 or higher.")
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ We are also available on [IRC][irc].
|
|||||||
|
|
||||||
### Bug Reporting Guidelines
|
### Bug Reporting Guidelines
|
||||||
* __Important__: Report the issue using our [template][template], it includes all the
|
* __Important__: Report the issue using our [template][template], it includes all the
|
||||||
informations we need to track down the issue.
|
information we need to track down the issue.
|
||||||
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
|
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
|
||||||
* This repository is *only* for issues within the ownCloud desktop client.
|
* This repository is *only* for issues within the ownCloud desktop client.
|
||||||
Issues in other compontents should be reported in their own repositores:
|
Issues in other components should be reported in their own repositores:
|
||||||
- [ownCloud server](https://github.com/owncloud/core/issues)
|
- [ownCloud server](https://github.com/owncloud/core/issues)
|
||||||
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
|
- [ownCloud apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
|
||||||
Contacts...)
|
Contacts...)
|
||||||
@@ -36,7 +36,7 @@ Before we're able to merge your code to ownCloud Desktop Client, you need to sig
|
|||||||
our [Contributor Agreement][agreement].
|
our [Contributor Agreement][agreement].
|
||||||
|
|
||||||
Please read the [Desktop Client Manual][desktopman] and the [Developer
|
Please read the [Desktop Client Manual][desktopman] and the [Developer
|
||||||
Manuals][devmanual] to get useful infos like how to create your first
|
Manuals][devmanual] to get useful info like how to create your first
|
||||||
application or how to test the ownCloud code with phpunit.
|
application or how to test the ownCloud code with phpunit.
|
||||||
|
|
||||||
[agreement]: http://owncloud.org/about/contributor-agreement/
|
[agreement]: http://owncloud.org/about/contributor-agreement/
|
||||||
|
|||||||
45
ChangeLog
@@ -1,5 +1,50 @@
|
|||||||
ChangeLog
|
ChangeLog
|
||||||
=========
|
=========
|
||||||
|
version 2.0.2 (release 2015-10-21)
|
||||||
|
* csync_file_stat_s: Save a bit of memory
|
||||||
|
* Shibboleth: Add our base user agent to WebKit
|
||||||
|
* SelectiveSync: Increase folder list timeout to 60
|
||||||
|
* Propagation: Try another sync on 423 Locked (#3387)
|
||||||
|
* Propagation: Make 423 Locked a soft error (#3387)
|
||||||
|
* Propagation: Reset upload blacklist if a chunk suceeds
|
||||||
|
* Application: Fix crash on early shutdown (#3898)
|
||||||
|
* Linux: Don't show settings dialog always when launched twice (#3273, #3771, #3485)
|
||||||
|
* win32 vio: Add the OPEN_REPARSE_POINTS flag to the CreateFileW call. (#3813)
|
||||||
|
* AccountSettings: only expand root elements on single click.
|
||||||
|
* AccountSettings: Do not allow to expand the folder list when disconnected.
|
||||||
|
* Use application SHORT name for the name of the MacOSX pkg file (ownBrander).
|
||||||
|
* FolderMan: Fix for removing a syncing folder (#3843)
|
||||||
|
* ConnectionMethodDialog: Don't be insecure on close (#3863)
|
||||||
|
* Updater: Ensure folders are not removed (#3747)
|
||||||
|
* Folder settings: Ensure path is cleaned (#3811)
|
||||||
|
* Propagator: Simplify sub job finished counting (#3844)
|
||||||
|
* Share dialog: Hide settings dialog before showing (#3783)
|
||||||
|
* UI: Only expand 1 level in folder list (#3585)
|
||||||
|
* UI: Allow folder expanding from button click (#3585)
|
||||||
|
* UI: Expand folder treeview on single click (#3585)
|
||||||
|
* GUI: Change tray menu order (#3657)
|
||||||
|
* GUI: Replace term "sign in" with "Log in" and friends.
|
||||||
|
* SetupPage: Fix crash caused by uninitialized Account object.
|
||||||
|
* Use a themable WebDAV path all over.
|
||||||
|
* Units: Back to the "usual" mix units (JEDEC standard).
|
||||||
|
* csync io: Full UNC path support on Win (#3748)
|
||||||
|
* Tray: Don't use the tray workaround with the KDE theme (#3706, #3765)
|
||||||
|
* ShareDialog: Fix folder display (#3659)
|
||||||
|
* AccountSettings: Restore from legacy only once (#3565)
|
||||||
|
* SSL Certificate Error Dialog: show account name (#3729)
|
||||||
|
* Tray notification: Don't show a message about modified folder (#3613)
|
||||||
|
* PropagateLocalRemove: remove entries from the DB even if there was an error.
|
||||||
|
* Settings UI improvements (eg. #3713, #3721, #3619 and others)
|
||||||
|
* Folder: Do not create the sync folder if it does not exist (#3692)
|
||||||
|
* Shell integratioon: don't show share menu item for top level folders
|
||||||
|
* Tray: Hide while modifying menus (#3656, #3672)
|
||||||
|
* AddFolder: Improve remote path selection error handling (#3573)
|
||||||
|
* csync_update: Use excluded_traversal() to improve performance (#3638)
|
||||||
|
* csync_excluded: Add fast _traversal() function (#3638)
|
||||||
|
* csync_exclude: Speed up siginificantly (#3638)
|
||||||
|
* AccountSettings: Adjust quota info design (#3644, #3651)
|
||||||
|
* Adjust buttons on remove folder/account questions (#3654)
|
||||||
|
|
||||||
version 2.0.1 (release 2015-09-01)
|
version 2.0.1 (release 2015-09-01)
|
||||||
* AccountWizard: fix when the theme specify a override URL (#3699)
|
* AccountWizard: fix when the theme specify a override URL (#3699)
|
||||||
|
|
||||||
|
|||||||
@@ -14,5 +14,5 @@ set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-back
|
|||||||
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
||||||
|
|
||||||
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
option( WITH_CRASHREPORTER "Build crashreporter" OFF )
|
||||||
set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash repoter" )
|
set( CRASHREPORTER_SUBMIT_URL "https://crash-reports.owncloud.com/submit" CACHE string "URL for crash reporter" )
|
||||||
set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
set( CRASHREPORTER_ICON ":/owncloud-icon.png" )
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ https://github.com/owncloud/client.
|
|||||||
|
|
||||||
## Building the source code
|
## Building the source code
|
||||||
|
|
||||||
[Building the Client](http://doc.owncloud.org/desktop/1.7/building.html)
|
[Building the Client](http://doc.owncloud.org/desktop/2.0/building.html)
|
||||||
in the ownCloud Desktop Client manual.
|
in the ownCloud Desktop Client manual.
|
||||||
|
|
||||||
## Maintainers and Contributors
|
## Maintainers and Contributors
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
set( MIRALL_VERSION_MAJOR 2 )
|
set( MIRALL_VERSION_MAJOR 2 )
|
||||||
set( MIRALL_VERSION_MINOR 0 )
|
set( MIRALL_VERSION_MINOR 0 )
|
||||||
set( MIRALL_VERSION_PATCH 1 )
|
set( MIRALL_VERSION_PATCH 2 )
|
||||||
set( MIRALL_SOVERSION 0 )
|
set( MIRALL_SOVERSION 0 )
|
||||||
|
|
||||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ identity="$3"
|
|||||||
prjfile=$build_path/admin/osx/macosx.pkgproj
|
prjfile=$build_path/admin/osx/macosx.pkgproj
|
||||||
|
|
||||||
# The name of the installer package
|
# The name of the installer package
|
||||||
installer="@APPLICATION_NAME@-@MIRALL_VERSION_FULL@@MIRALL_VERSION_SUFFIX@"
|
installer="@APPLICATION_SHORTNAME@-@MIRALL_VERSION_FULL@@MIRALL_VERSION_SUFFIX@"
|
||||||
installer_file="$installer.pkg"
|
installer_file="$installer.pkg"
|
||||||
installer_file_tar="$installer.pkg.tar"
|
installer_file_tar="$installer.pkg.tar"
|
||||||
installer_file_tar_bz2="$installer.pkg.tar.bz2"
|
installer_file_tar_bz2="$installer.pkg.tar.bz2"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Ez desinstalatu"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Dagoeneko Instalatuta"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Dagoeneko Instalatuta"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Hautatu nola nahi duzun ${APPLICATION_NAME} instalatzea."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME}ren bertsio berriago bat instalatuta dago! Ez da aholkatzen bertsio zaharrago bat instalatzea. Benetan bertsio zaharrago hau instalatu nahi baduzu, hobe da lehenengo bertsio berria desinstalatzea. Hautatu nahi duzun aukera eta sakatu Hurrengoa jarraitzeko."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} dagoeneko instalatuta dago.\nHautatu zer operazio egin nahi duzu eta klikatu Hurrengoa jarraitzeko."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Gehitu/Berrinstalatu osagaiak"
|
StrCpy $PageReinstall_SAME_Field_2 "Gehitu/Berrinstalatu osagaiak"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalatu ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalatu ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalatu ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalatu ${APPLICATION_NAME}"
|
||||||
@@ -39,5 +38,6 @@ StrCpy $INIT_INSTALLER_RUNNING "Instalatzailea dagoeneko martxan da."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Desinstalatzaile honek administratzaile baimenak behar ditu, saiatu berriro"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Desinstalatzaile honek administratzaile baimenak behar ditu, saiatu berriro"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
||||||
StrCpy $SectionGroup_Shortcuts "Lasterbideak"
|
StrCpy $SectionGroup_Shortcuts "Lasterbideak"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
StrCpy $UAC_ERROR_ELEVATE "Unable to elevate, error:"
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "No instal·lar"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ja instal·lat"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ja instal·lat"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Trieu la manera com voleu instal·lar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Una versió més recent de ${APPLICATION_NAME} ja està instal.lada!! No es recomana instal.lar una versió més antiga. Si realment voleu instal.lar una versió més antiga, és millor primer desinstal.lar la versió actual. Seleccioni l'operació que desitjeu realitzar i feu clic a Següent per a continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ja està instal.lat.↩\nSeleccioneu l'operació que desitjeu realitzar i feu clic a Següent per continuar."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Afegir/Reinstal.lar components"
|
StrCpy $PageReinstall_SAME_Field_2 "Afegir/Reinstal.lar components"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstal.lar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstal.lar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstal.lar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstal.lar ${APPLICATION_NAME}"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "L'instal·lador ja s'està executant."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
||||||
StrCpy $SectionGroup_Shortcuts "Dreceres"
|
StrCpy $SectionGroup_Shortcuts "Dreceres"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Neodinstalov
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ji§ nainstalov no"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ji§ nainstalov no"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Zvolte, jak chcete ${APPLICATION_NAME} nainstalovat."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "NovØjç¡ verze aplikace ${APPLICATION_NAME} je ji§ nainstalov na. Instalace starç¡ verze se nedoporuŸuje. Pokud opravdu chcete tuto starç¡ verzi nainstalovat, je lepç¡ nejprve odinstalovat souŸasnou verzi. Zvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
StrCpy $PageReinstall_OLD_Field_1 "NovØjç¡ verze aplikace ${APPLICATION_NAME} je ji§ nainstalov na. Instalace starç¡ verze se nedoporuŸuje. Pokud opravdu chcete tuto starç¡ verzi nainstalovat, je lepç¡ nejprve odinstalovat souŸasnou verzi. Zvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je ji§ nainstalov na.\nZvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je ji§ nainstalov na.$\n$\nZvolte po§adovanou operaci a kliknØte na Dalç¡ pro pokraŸov n¡."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Pýidat Ÿi znovu instalovat komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Pýidat Ÿi znovu instalovat komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
||||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Z
|
|||||||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
StrCpy $UNINSTALLER_FINISHED_Detail "DokonŸeno"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na ve slo§ce '$INSTDIR'.\nChcete pokraŸovat (nedoporuŸuje se)?"
|
StrCpy $UNINSTALL_MESSAGEBOX "Nezd se, §e ${APPLICATION_NAME} je nainstalov na ve slo§ce '$INSTDIR'.$\n$\nChcete pokraŸovat (nedoporuŸuje se)?"
|
||||||
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
StrCpy $UNINSTALL_ABORT "Odinstalace zruçena u§ivatelem"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Z stupce rychl‚ho spuçtØn¡ (nen¡ k dispozici)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Z stupce rychl‚ho spuçtØn¡ (nen¡ k dispozici)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Z stupce na ploçe (pýep¡çe existuj¡c¡)"
|
StrCpy $INIT_NO_DESKTOP "Z stupce na ploçe (pýep¡çe existuj¡c¡)"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Niet de-installeren"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Al geïnstalleerd"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Kies hoe u ${APPLICATION_NAME} wilt installeren."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Kies hoe u ${APPLICATION_NAME} wilt installeren."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
StrCpy $PageReinstall_OLD_Field_1 "Er is al een recentere versie van ${APPLICATION_NAME} geïnstalleerd! Installeren van een oudere versie wordt niet aangeraden. Als u echt de oudere versie wilt installeren, adviseren we de huidige versie eerst te verwijderen. Kies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.\nKies de actie die u wilt uitvoeren en druk op Verder om door te gaan."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is al geïnstalleerd.$\n$\nKies de actie die u uit wil voeren en druk op Verder om door te gaan."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Toevoegen/herinstalleren componenten"
|
StrCpy $PageReinstall_SAME_Field_2 "Toevoegen/herinstalleren componenten"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "De-installeer ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "De-installeer ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "De-installeer ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "De-installeer ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Do not uninstall"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Already Installed"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Already Installed"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Add/Reinstall components"
|
StrCpy $PageReinstall_SAME_Field_2 "Add/Reinstall components"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Juba paigaldatud"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Juba paigaldatud"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vali, kuidas sa soovid paigaldada ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
StrCpy $PageReinstall_OLD_Field_1 "Uuem versioon ${APPLICATION_NAME} on juba paigaldatud! Vanema versiooni paigaldus ei ole soovitatav. Kui tõesti tahad paigaldada vanemat versiooni, siis on parem esmalt eemaldada olemasolev. Vali tehtav toiming ning kliki Jätka."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on juba paigaldatud.\nVali tehtav toiming ning kliki Jätka."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lisa/Taaspaigalda komponente"
|
StrCpy $PageReinstall_SAME_Field_2 "Lisa/Taaspaigalda komponente"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalli ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalli ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalli ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalli ${APPLICATION_NAME}"
|
||||||
@@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "See desinstallija vajab admini ligip
|
|||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Sisselogimisteenus ei tööta, katkestamine!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
StrCpy $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||||
StrCpy $SectionGroup_Shortcuts "Otseteed"
|
StrCpy $SectionGroup_Shortcuts "Otseteed"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|||||||
@@ -1,10 +1,22 @@
|
|||||||
# Auto-generated - do not modify
|
# Auto-generated - do not modify
|
||||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "نمایش پادداشت های انتشار نسخه"
|
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "نمایش پادداشت های انتشار نسخه"
|
||||||
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} پردازش (ها) که باید متوقف شوند را پیدا کرد. $\nآیا میخواهیم برنامه نصاب این پردازشها را برای شما متوقف کند ؟"
|
||||||
|
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "حذف پردازشهای ${APPLICATION_EXECUTABLE}."
|
||||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "پردازش برای از بین بردن یافت نشد!"
|
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "پردازش برای از بین بردن یافت نشد!"
|
||||||
|
StrCpy $PageReinstall_NEW_Field_1 "نسخهی قدیمی از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، پیشنهاد میشود نسخهی فعلی را قبل از نصب حذف کنید. عملیات مورد نظر را انتخاب کنید و برای ادامه روی دکمه Next کلیک کنید."
|
||||||
StrCpy $PageReinstall_NEW_Field_2 "عمل حذف را قبل از نصب انجام دهید"
|
StrCpy $PageReinstall_NEW_Field_2 "عمل حذف را قبل از نصب انجام دهید"
|
||||||
StrCpy $PageReinstall_NEW_Field_3 "حذف نکن"
|
StrCpy $PageReinstall_NEW_Field_3 "حذف نکن"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "از قبل نصب شده است"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "از قبل نصب شده است"
|
||||||
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "نحوهی نصب ${APPLICATION_NAME} را انتخاب کنید."
|
||||||
|
StrCpy $PageReinstall_OLD_Field_1 "نسخه جدیدتری از برنامه ${APPLICATION_NAME} بر روی سیستم شما نصب شده است، نصب نسخهی قدیمیتر پیشنهاد نمیشود. درصورتیکه میخواهید نسخهی قدیمی را نصب کنید، حذف نسخهی کنونی قبل از اجرای نصب جدید پیشنهاد میشود. عملیات مورد نظر را انتخاب و بر روی دکمهی Next کلیک کنید."
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "نسخه ${VERSION} از ${APPLICATION_NAME} هماکنون نصب شده است.$↩$\nعملیات مورد نظر را انتخاب و بر روی دکمه Next کلیک کنید."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "افزودن/نصب مجدد اجزا"
|
StrCpy $PageReinstall_SAME_Field_2 "افزودن/نصب مجدد اجزا"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_3 "حذف ${APPLICATION_NAME}"
|
||||||
|
StrCpy $UNINSTALLER_APPDATA_TITLE "حذف ${APPLICATION_NAME}"
|
||||||
|
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "گزینه نگهداری را به منظور اجرا انتخاب کنید."
|
||||||
|
StrCpy $SEC_APPLICATION_DETAILS "نصب ضروریات ${APPLICATION_NAME}"
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "یکپارچهسازی با Windows Explorer"
|
||||||
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "نصب یکپارچهساز با Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "بازکردن میانبر منو برنامه"
|
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "بازکردن میانبر منو برنامه"
|
||||||
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "افزودن میانبر ${APPLICATION_NAME} به استارت منو ."
|
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "افزودن میانبر ${APPLICATION_NAME} به استارت منو ."
|
||||||
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "میانبر دسکتاپ"
|
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "میانبر دسکتاپ"
|
||||||
@@ -23,21 +35,9 @@ StrCpy $UNINSTALL_ABORT "عمل حذف توسط کاربر متوقف شد"
|
|||||||
StrCpy $INIT_NO_QUICK_LAUNCH "میانبر بازکردن سریع ( N/A )"
|
StrCpy $INIT_NO_QUICK_LAUNCH "میانبر بازکردن سریع ( N/A )"
|
||||||
StrCpy $INIT_NO_DESKTOP "میانبر دسکتاپ (رونویسی وجود دارد)"
|
StrCpy $INIT_NO_DESKTOP "میانبر دسکتاپ (رونویسی وجود دارد)"
|
||||||
StrCpy $UAC_ERROR_ELEVATE "مشکل در بالااوردن ، خطا : "
|
StrCpy $UAC_ERROR_ELEVATE "مشکل در بالااوردن ، خطا : "
|
||||||
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "برای نصب، دسترسی مدیر سیستم نیاز است، مجددا تلاش کنید"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "نصاب از قبل در حال اجراست."
|
StrCpy $INIT_INSTALLER_RUNNING "نصاب از قبل در حال اجراست."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "حذف برنامه نیاز به دسترسی مدیر دارد ، لطفا دوباره سعی کنید"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "حذف برنامه نیاز به دسترسی مدیر دارد ، لطفا دوباره سعی کنید"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "سرویس ورود اجرا نیست، درحال لغو نصب!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "حذف کننده از قبل در حال اجراست."
|
StrCpy $INIT_UNINSTALLER_RUNNING "حذف کننده از قبل در حال اجراست."
|
||||||
StrCpy $SectionGroup_Shortcuts "میانبرها"
|
StrCpy $SectionGroup_Shortcuts "میانبرها"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
|
||||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Killing ${APPLICATION_EXECUTABLE} processes."
|
|
||||||
StrCpy $PageReinstall_NEW_Field_1 "An older version of ${APPLICATION_NAME} is installed on your system. It is recommended that you uninstall the current version before installing. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choose how you want to install ${APPLICATION_NAME}."
|
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A newer version of ${APPLICATION_NAME} is already installed! It is not recommended that you install an older version. If you really want to install this older version, it is better to uninstall the current version first. Select the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Uninstall ${APPLICATION_NAME}"
|
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Uninstall ${APPLICATION_NAME}"
|
|
||||||
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Choose the maintenance option to perform."
|
|
||||||
StrCpy $SEC_APPLICATION_DETAILS "Installing ${APPLICATION_NAME} essentials."
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
|
||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "This installer requires admin access, try again"
|
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Valitse miten ${APPLICATION_NAME} asennetaan."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Valitse miten ${APPLICATION_NAME} asennetaan."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
|
StrCpy $PageReinstall_OLD_Field_1 "Uudempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu! Vanhan version asennus ei ole suositeltavaa. Jos todella haluat asentaa vanhemman version, kannattaa poistaa nykyisen version asennus ensin. Valitse minkä toimenpiteen haluat suorittaa ja paina Seuraava jatkaaksesi."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on jo asennettu.\nValitse suoritettava toimenpide ja napsauta Seuraava jatkaaksesi."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} on jo asennettu.$\n$\nValitse haluamasi toiminto ja napsauta Seuraava jatkaaksesi."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
StrCpy $PageReinstall_SAME_Field_2 "Lisää/uudelleenasenna komponentteja"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Poista ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Poista ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Ne pas désinstaller"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Déjà installé"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Déjà installé"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choisissez comment installer ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Choisissez comment installer ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
StrCpy $PageReinstall_OLD_Field_1 "Une version plus récente de ${APPLICATION_NAME} est déjà installée ! Il n'est pas recommandé d'installer une version plus ancienne. Si vous voulez vraiment installer cette version plus ancienne, il est préférable de d'abord désinstaller la version courante. Sélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} est déjà installé.\nSélectionnez l'opération que vous voulez exécuter et cliquez sur Suivant pour continuer."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} est déjà installé.$\n$\nSélectionnez l'opération que vous souhaitez effectuer et cliquez sur Suivant pour continuer."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Ajouter/Réinstaller des composants"
|
StrCpy $PageReinstall_SAME_Field_2 "Ajouter/Réinstaller des composants"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Désinstaller ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Désinstaller ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Désinstaller ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Désinstaller ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Non desinstalar"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolla como quere instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolla como quere instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Ten instalada unha versión actualizada do ${APPLICATION_NAME}! recomendámoslle que non instale unha versión anterior. Se realmente quere instalar esta versión máis antiga, é preferíbel que desinstale a versión actual antes de instalar. Seleccione a operación que quere realizar e prema en Seguinte para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} xa está instalado.\nSeleccione a operación que que quere realizar e prema en Seguinte para continuar."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Engadir/reinstalar compoñentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este desinstalador require acceso de admi
|
|||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "O servizo de acceso non está en execución, cancelando!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "O servizo de acceso non está en execución, cancelando!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
StrCpy $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||||
StrCpy $SectionGroup_Shortcuts "Atallos"
|
StrCpy $SectionGroup_Shortcuts "Atallos"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Nicht entfernen"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Bereits installiert"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Bereits installiert"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wählen Sie die Methode, mit der sie ${APPLICATION_NAME} installieren wollen."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
StrCpy $PageReinstall_OLD_Field_1 "Eine neuere Version von ${APPLICATION_NAME} ist bereits installiert! Es wird nicht empfohlen, eine ältere Version zu installieren. Wollen Sie dies trotzdem tun, so sollten Sie die aktuelle Version zunächst entfernen. Wählen Sie eine Vorgehensweise und wählen dann $\"Weiter$\"."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ist bereits installiert.\nWählen Sie eine Vorgehensweise und klicken Sie auf $\"Weiter$\"."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
StrCpy $PageReinstall_SAME_Field_2 "Komponenten hinzufügen"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} entfernen"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} entfernen"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} entfernen"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} entfernen"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Das Installationsprogramm wird bereits ausgef
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Das Deinstallationsprogramm erfordert Administrator-Rechte. Bitte erneut versuchen."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||||
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
StrCpy $SectionGroup_Shortcuts "Verknüpfungen"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
StrCpy $PageReinstall_OLD_Field_1 "Μια νεώτερη έκδοση της ${APPLICATION_NAME} είναι ήδη εγκατεστημένη! Δεν συνίσταται να εγκαταστείσετε μια παλαιότερη έκδοση. Εάν θέλετε πραγματικά να εγκαταστήσετε αυτήν την παλαιότερη έκδοση, είναι καλύτερο να απεγκαταστήσετε την τρέχουσα έκδοση πρώτα. Επιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.\n\nΕπιλέξτε τη διαδικασία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
StrCpy $PageReinstall_SAME_Field_1 "Η ${APPLICATION_NAME} ${VERSION} είναι ήδη εγκατεστημένη.$\n$\nΕπιλέξτε τη λειτουργία που επιθυμείτε να εκτελέσετε και επιλέξτε Επόμενο για να συνεχίσετε."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
StrCpy $PageReinstall_SAME_Field_2 "Προσθήκη/ Επανεγκατάσταση συνιστωσών"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Απεγκατάσταση ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Ne távolítsa el"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Már telepítve"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Már telepítve"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Válaszd ki, hogy szeretnéd telepíteni a következő alkalmazást ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Válaszd ki, hogy szeretnéd telepíteni a következő alkalmazást ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Az ${APPLICATION_NAME} alklamazás egy újabb verziója már megtalálható a rendszeren. Nem ajánlott egy régebbi verzió telepítése. Ha valóban szeretné a régebbi verziót telepíteni, akkor ajánlott a jelenleg telepített verzió eltávolítása. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
|
StrCpy $PageReinstall_OLD_Field_1 "Az ${APPLICATION_NAME} alklamazás egy újabb verziója már megtalálható a rendszeren. Nem ajánlott egy régebbi verzió telepítése. Ha valóban szeretné a régebbi verziót telepíteni, akkor ajánlott a jelenleg telepített verzió eltávolítása. Válassza ki milyen műveletet szeretne végrehajtani, és nyomja meg a $\"Következő$\" gombot a folytatáshoz."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "Az ${APPLICATION_NAME} alkalmazás ${VERSION} verziója már telepítve van.\nKérem válassza ki milyen műveletet szeretne végrehajtan, és nyomja meg a $\"Következő$\" gombot."
|
StrCpy $PageReinstall_SAME_Field_1 "Az ${APPLICATION_NAME} alkalmazás ${VERSION} verziója már telepítve van.$↩$\nKérjük válaszd ki milyen műveletet szeretnél végrehajtani, és nyomd meg a „Következő” gombot."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Komponens hozzáadása/újratelepítése"
|
StrCpy $PageReinstall_SAME_Field_2 "Komponens hozzáadása/újratelepítése"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} eltávolítása"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} eltávolítása"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} eltávolítása"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} eltávolítása"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Non disinstallare"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Già installato"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Scegli come desideri installare ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Scegli come desideri installare ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
StrCpy $PageReinstall_OLD_Field_1 "Una versione più recente di ${APPLICATION_NAME} è già installata! Non è consigliabile installare una versione più vecchia. Se vuoi davvero installare una versione più vecchia, ti consigliamo di rimuovere prima la versione attuale. Scegli l'operazione da eseguire e fai clic su Avanti per continuare."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} è già installato.$\n$\nSeleziona l'operazione che desideri eseguire e fai clic su Avanti per continuare.."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
|
StrCpy $PageReinstall_SAME_Field_2 "Aggiungi/Reinstalla i componenti"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Disinstalla ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Disinstalla ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。\nオペレーションを選択し、次へをクリックする。"
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。\nオペレーションを選択し、次へをクリックする。"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} はすでにインストールされています。\n実行するオペレーションを選択し、次へをクリックする"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} は、${VERSION} が既にインストールされています。$\n$\n実行したい操作を選択し、次へをクリックする。"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Ikke avinstaller"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Allerede installert"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Velg hvordan du vil installere ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Velg hvordan du vil installere ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
StrCpy $PageReinstall_OLD_Field_1 "En nyere versjon av ${APPLICATION_NAME} er allerede installert! Det anbefales ikke at du installerer en eldre versjon. Hvis du virkelig ønsker å installere denne eldre versjonen, er det bedre å avinstallere gjeldende versjon først. Velg hva du vil gjøre og klikk Neste for å fortsette."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er allerede installert.\nVelg hva du vil gjøre og klikk Neste for å fortsette."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} er installert allerede.$\n$\nVelg hva du ønsker å gjøre og klikk Neste for å fortsette."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
StrCpy $PageReinstall_SAME_Field_2 "Legg til/installer komponenter på nytt"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstaller ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Avinstaller ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstaller ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstaller ${APPLICATION_NAME}"
|
||||||
@@ -38,6 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Klarte ikke
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Dette installasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
StrCpy $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Avinstallasjonsprogrammet krever administrasjonstilgang. Prøv igjen"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Påloggingstjenesten kjører ikke, avbryter!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallasjonsprogrammet kjører allerede."
|
||||||
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
StrCpy $SectionGroup_Shortcuts "Snarveier"
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Nie usuwaj "
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ju¿ zainstalowane"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ju¿ zainstalowane"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wybierz jak chcesz zainstalowaæ ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Wybierz jak chcesz zainstalowaæ ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeœli naprawdê chcesz zainstalowaæ starsz¹ wersjê lepiej najpierw odinstalowaæ obecn¹ aplikacjê. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
|
StrCpy $PageReinstall_OLD_Field_1 "Zainstalowana jest nowsza wersja ${APPLICATION_NAME}! Niezalecane jest instalowanie starszej wersji. Jeœli naprawdê chcesz zainstalowaæ starsz¹ wersjê lepiej najpierw odinstalowaæ obecn¹ aplikacjê. Wybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} jest ju¿ zainstalowany.\nWybierz operacjê któr¹ chcesz wykonaæ i naciœnij przycisk Dalej."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Doda/Przeinstaluj komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Doda/Przeinstaluj komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstaluj ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinstaluj ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstaluj ${APPLICATION_NAME}"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Instalator ju
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ten dezinstalator potrzebuje uprawnieñ administratora, spróbuj ponownie"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator ju¿ jest uruchomiony."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Dezinstalator ju¿ jest uruchomiony."
|
||||||
StrCpy $SectionGroup_Shortcuts "Skróty"
|
StrCpy $SectionGroup_Shortcuts "Skróty"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Não desinstale"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como pretende instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como pretende instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Uma versão mais recente do ${APPLICATION_NAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão, aconselha-se a desinstalação da versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalado.\nSelecione a operação que deseja fazer, e clique Seguinte para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalada.\nSelecione a operação que deseja realizar e clique em 'Seguinte' para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/Reinstalar Componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/Reinstalar Componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "N
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Já Instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como você deseja instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Escolha como você deseja instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "A versão mais recente do ${APPLICATION_NAME} já está instalado! Não é recomendado que você instale uma versão mais antiga. Se você realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja executar e clique em Avançar para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${version} já está instalado. \nSelecione a operação que deseja executar e clique em Avançar para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} já está instalado.$\n$\nSelecione a operação que você quer realizar e clique Próximo para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/reinstalar componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Adicionar/reinstalar componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Не устанавливать"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Уже установлено"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Уже установлено"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Выберите, как вы хотите установить ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Выберите, как вы хотите установить ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
|
StrCpy $PageReinstall_OLD_Field_1 "Новая версия ${APPLICATION_NAME} уже установлена! Не рекомендуется устанавливать старую версию. Если вы действительно хотите установить эту старую версию, то сначала лучше удалить текущую версию. Выберите желаемое действие и нажмите Далее для продолжения."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} уже установлена.\nВыберите желаемое действие и нажмите Далее для продолжения."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} уже установлен.$\n$\nУкажите действие и нажмите Далее для продолжения."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Добавить/Переустановить компоненты"
|
StrCpy $PageReinstall_SAME_Field_2 "Добавить/Переустановить компоненты"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Удалить ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Удалить ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Удалить ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Удалить ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "不要卸载"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "已经安装"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "已经安装"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "选择如何安装${APPLICATION_NAME}。"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "选择如何安装${APPLICATION_NAME}。"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "较新版本的 ${APPLICATION_NAME} 已经安装!安装较旧版本的程序是不推荐的。如果您希望继续安装较旧版本,建议先卸载较新版本。选择您想要执行的操作并点击下一步以继续。"
|
StrCpy $PageReinstall_OLD_Field_1 "较新版本的 ${APPLICATION_NAME} 已经安装!安装较旧版本的程序是不推荐的。如果您希望继续安装较旧版本,建议先卸载较新版本。选择您想要执行的操作并点击下一步以继续。"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} 已经安装。\n请选择想要执行的操作并点击下一步。"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} 已经安装。$\n$\n请选择想要执行的操作并点击下一步。"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "增加/重装组件"
|
StrCpy $PageReinstall_SAME_Field_2 "增加/重装组件"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "卸载${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "卸载${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "卸载${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "卸载${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Neodin
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Už je nainštalovaný"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Vyberte si, ako chcete nainštalova<76> ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
StrCpy $PageReinstall_OLD_Field_1 "Novšia verzia ${APPLICATION_NAME} je už nainštalovaná! Neodporúèam vám nainštalova<76> staršiu verziu. Ak naozaj chcete nainštalova<76> túto staršiu verziu, je lepšie najprv odinštalova<76> aktuálnu verziu. Vyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je už nainštalovaná.\nVyberte operáciu, ktorú chcete vykona<6E>, a kliknite na tlaèidlo Ïalej pre pokraèovanie."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Prida<EFBFBD>/Preinštalova<76> komponenty"
|
StrCpy $PageReinstall_SAME_Field_2 "Prida<EFBFBD>/Preinštalova<76> komponenty"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<EFBFBD> ${APPLICATION_NAME}"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "In
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinštalátor vyžaduje admin prístup, skúste to znova"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinštalátor vyžaduje admin prístup, skúste to znova"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
||||||
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
StrCpy $SectionGroup_Shortcuts "Zástupcovia"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Ne odstrani namestitve"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Program je že nameščen"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Izberite način namestitve programa ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
StrCpy $PageReinstall_OLD_Field_1 "Novejša različica programa ${APPLICATION_NAME} je že nameščena! Ni priporočljivo namestiti starejše. V kolikor želite vseeno nadaljevati z namestitvijo, prej odstranite obstoječo različico. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "Program ${APPLICATION_NAME} ${VERSION} je že nameščen. Izberite opravilo in pritisnite gumb za nadaljevanje."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/Ponovno namesti programe"
|
StrCpy $PageReinstall_SAME_Field_2 "Dodaj/Ponovno namesti programe"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Odstrani ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Odstrani ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odstrani ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Odstrani ${APPLICATION_NAME}"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Namestilnik je
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
||||||
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
StrCpy $SectionGroup_Shortcuts "Bližnjice"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
|
|||||||
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ya está instalado"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Elija cómo quiere instalar ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Elija cómo quiere instalar ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Next para continuar."
|
StrCpy $PageReinstall_OLD_Field_1 "Una nueva versión de ${APPLICATION_NAME} ya está instalada. No es recomendable instalar una versión anterior. Si realmente quiere instalar esta versión anterior, es mejor que desinstale la versión actual primero. Seleccione la operación que desea realizar y pulse Siguiente para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalada.\nSeleccione la operación que desea realizar y pulse Next para continuar."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ya está instalado.$\n$\nSeleccione la operación que desea realizar y haga click en Siguiente para continuar."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
StrCpy $PageReinstall_SAME_Field_2 "Añadir/Reinstalar componentes"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Desinstalar ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Lanzador R
|
|||||||
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo desinstalador"
|
StrCpy $UNINSTALLER_FILE_Detail "Escribiendo desinstalador"
|
||||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves en el registro del instalador"
|
StrCpy $UNINSTALLER_REGISTRY_Detail "Escribiendo claves en el registro del instalador"
|
||||||
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
StrCpy $UNINSTALLER_FINISHED_Detail "Terminado"
|
||||||
StrCpy $UNINSTALL_MESSAGEBOX "Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No Recomendado)"
|
StrCpy $UNINSTALL_MESSAGEBOX "Parece que ${APPLICATION_NAME} no está instalado en el directorio '$INSTDIR'.$$ ¿Continuar de todos modos? (No recomendado)"
|
||||||
StrCpy $UNINSTALL_ABORT "Desinstalación cancelada por el usuario"
|
StrCpy $UNINSTALL_ABORT "Desinstalación cancelada por el usuario"
|
||||||
StrCpy $INIT_NO_QUICK_LAUNCH "Atajo de inicio rápido (N/A)"
|
StrCpy $INIT_NO_QUICK_LAUNCH "Atajo de inicio rápido (N/A)"
|
||||||
StrCpy $INIT_NO_DESKTOP "Atajo de escritorio (sobreescribe el existente)"
|
StrCpy $INIT_NO_DESKTOP "Atajo de escritorio (sobreescribe el existente)"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Este des-instalador requiere acceso admin
|
|||||||
StrCpy $INIT_UNINSTALLER_RUNNING "El des-instalador ya esta corriendo"
|
StrCpy $INIT_UNINSTALLER_RUNNING "El des-instalador ya esta corriendo"
|
||||||
StrCpy $SectionGroup_Shortcuts "Accesos Directos"
|
StrCpy $SectionGroup_Shortcuts "Accesos Directos"
|
||||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Found ${APPLICATION_EXECUTABLE} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Quick Launch Shortcut"
|
StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_SECTION "Quick Launch Shortcut"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Avinstallera inte"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Redan installerad"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Redan installerad"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Välj hur du vill installera ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Välj hur du vill installera ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
StrCpy $PageReinstall_OLD_Field_1 "En nyare version av ${APPLICATION_NAME} är redan installerad! Det rekommenderas inte att du installerar en äldre version. Om du verkligen vill installera denna äldre versionen, är det bättre att du avinstallerar den nuvarande versionen först. Välj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} är redan installerad.\nVälj den åtgärd du vill utföra och klicka Nästa för att fortsätta."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Lägg till/Ominstallera komponenter"
|
StrCpy $PageReinstall_SAME_Field_2 "Lägg till/Ominstallera komponenter"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Avinstallera ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Avinstallera ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstallera ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Avinstallera ${APPLICATION_NAME}"
|
||||||
@@ -38,6 +37,7 @@ StrCpy $INIT_INSTALLER_RUNNING "Installationsprogrammet körs redan."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Detta avinstallationsprogram kräver administratörsrättigheter, försök igen"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Detta avinstallationsprogram kräver administratörsrättigheter, försök igen"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
||||||
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
StrCpy $SectionGroup_Shortcuts "Genvägar"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
|
||||||
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "อย่าถอนการติดตั
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "ติดตั้งแล้ว"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "ติดตั้งแล้ว"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "เลือกวิธีที่คุณต้องการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "เลือกวิธีที่คุณต้องการติดตั้ง ${APPLICATION_NAME}"
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "รุ่นใหม่ของ ${APPLICATION_NAME} ถูกติดตั้งแล้ว! เราไม่แนะนำให้คุณติดตั้งรุ่นเก่า ถ้าคุณอยากจะติดตั้งรุ่นเก่าก็สามารถสอนการติดตั้งได้"
|
StrCpy $PageReinstall_OLD_Field_1 "รุ่นใหม่ของ ${APPLICATION_NAME} ถูกติดตั้งแล้ว! เราไม่แนะนำให้คุณติดตั้งรุ่นเก่า ถ้าคุณอยากจะติดตั้งรุ่นเก่าก็สามารถสอนการติดตั้งได้"
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ได้ถูกติดตั้งแล้ว เลือกการดำเนินการที่คุณต้องการที่จะดำเนินการและคลิกถัดไปเพื่อดำเนินการต่อ"
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} ถูกติดตั้งไปแล้ว$ $\nเลือกดำเนินงานที่คุณต้องการและคลิกถัดไปเพื่อดำเนินการต่อ"
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "ส่วนประกอบ เพิ่ม/ติดตั้งใหม่ "
|
StrCpy $PageReinstall_SAME_Field_2 "ส่วนประกอบ เพิ่ม/ติดตั้งใหม่ "
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "Kald
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Zaten Yüklü"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} uygulamasýný nasýl yüklemek istediðinizi seçin."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} uygulamasýný nasýl yüklemek istediðinizi seçin."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} uygulamasýnýn daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldýrmanýz tavsiye edilir. Yapmak istediðiniz iþlemi seçin ve devam etmek üzere Ýleri týklayýn."
|
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} uygulamasýnýn daha yeni sürümü zaten yüklü! Daha eski bir sürümünü yüklemeniz önerilmez. Gerçekten bu eski sürümü yüklemek isterseniz, ilk olarak geçerli sürümü kaldýrmanýz tavsiye edilir. Yapmak istediðiniz iþlemi seçin ve devam etmek üzere Ýleri týklayýn."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} zaten yüklü.\n\nYapmak istediðiniz iþlemi seçin ve devam etmek için Ýleri týklayýn."
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} zaten yüklü.$\n$\nYapmak istediðiniz iþlemi seçin ve devam etmek için Ýleri týklayýn."
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Bileþenleri ekle/yeniden yükle"
|
StrCpy $PageReinstall_SAME_Field_2 "Bileþenleri ekle/yeniden yükle"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasýný kaldýr"
|
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasýný kaldýr"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasýný kaldýr"
|
||||||
@@ -38,6 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Y
|
|||||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici eriþimi gerektiriyor, yeniden deneyin"
|
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Bu yükleyici yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||||
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalýþýyor."
|
StrCpy $INIT_INSTALLER_RUNNING "Yükleyici zaten çalýþýyor."
|
||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kaldýrýcý yönetici eriþimi gerektiriyor, yeniden deneyin"
|
||||||
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Oturum açýlacak sunucu çalýþmadýðýndan iptal ediliyor!"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Kaldýrýcý zaten çalýþýyor."
|
||||||
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
StrCpy $SectionGroup_Shortcuts "Kýsayollar"
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Не видаляти"
|
|||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Установлено"
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Установлено"
|
||||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Оберіть, як ви хочете установити ${APPLICATION_NAME}."
|
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Оберіть, як ви хочете установити ${APPLICATION_NAME}."
|
||||||
StrCpy $PageReinstall_OLD_Field_1 "Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
|
StrCpy $PageReinstall_OLD_Field_1 "Знайдено новішу версію ${APPLICATION_NAME}! Ми не рекомендуємо встановлювати стару версію. Якщо ви все ж бажаєте встановити цю версію, спочатку видаліть поточну версію. Оберіть подальшу дію та натисніть $\"Далі$\"."
|
||||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} вже встановлено.↩\nОберіть подальшу дію та натисніть $\"Далі$\"."
|
|
||||||
StrCpy $PageReinstall_SAME_Field_2 "Додати/Перевстановити компоненти"
|
StrCpy $PageReinstall_SAME_Field_2 "Додати/Перевстановити компоненти"
|
||||||
StrCpy $PageReinstall_SAME_Field_3 "Видалити ${APPLICATION_NAME}"
|
StrCpy $PageReinstall_SAME_Field_3 "Видалити ${APPLICATION_NAME}"
|
||||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Видалити ${APPLICATION_NAME}"
|
StrCpy $UNINSTALLER_APPDATA_TITLE "Видалити ${APPLICATION_NAME}"
|
||||||
@@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Установка вже запущена."
|
|||||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
||||||
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
||||||
StrCpy $SectionGroup_Shortcuts "Ярлики"
|
StrCpy $SectionGroup_Shortcuts "Ярлики"
|
||||||
|
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
StrCpy $UAC_ERROR_LOGON_SERVICE "Logon service is not running, aborting!"
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ msgstr "A newer version of ${APPLICATION_NAME} is already installed! It is not r
|
|||||||
|
|
||||||
#. PageReinstall_SAME_Field_1
|
#. PageReinstall_SAME_Field_1
|
||||||
msgid ""
|
msgid ""
|
||||||
"${APPLICATION_NAME} ${VERSION} is already installed.\r\n"
|
"${APPLICATION_NAME} ${VERSION} is already installed.$\r$\n"
|
||||||
"Select the operation you want to perform and click Next to continue."
|
"Select the operation you want to perform and click Next to continue."
|
||||||
msgstr "${APPLICATION_NAME} ${VERSION} is already installed.\r\nSelect the operation you want to perform and click Next to continue."
|
msgstr "${APPLICATION_NAME} ${VERSION} is already installed.$\r$\nSelect the operation you want to perform and click Next to continue."
|
||||||
|
|
||||||
#. PageReinstall_SAME_Field_2
|
#. PageReinstall_SAME_Field_2
|
||||||
msgid "Add/Reinstall components"
|
msgid "Add/Reinstall components"
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ else(UNIX AND NOT WIN32)
|
|||||||
endif (UNIX AND NOT WIN32)
|
endif (UNIX AND NOT WIN32)
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
# Use secure functions by defaualt and suppress warnings about
|
# Use secure functions by default and suppress warnings about
|
||||||
#"deprecated" functions
|
#"deprecated" functions
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1")
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
|||||||
!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
|
!define MEMENTO_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPLICATION_NAME}"
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; Modern User Interface (MUI) defintions and setup.
|
; Modern User Interface (MUI) definitions and setup.
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
!define MUI_ABORTWARNING
|
!define MUI_ABORTWARNING
|
||||||
!define MUI_ICON ${NSI_PATH}\installer.ico
|
!define MUI_ICON ${NSI_PATH}\installer.ico
|
||||||
@@ -556,7 +556,7 @@ Section -post
|
|||||||
DetailPrint $UNINSTALLER_REGISTRY_Detail
|
DetailPrint $UNINSTALLER_REGISTRY_Detail
|
||||||
SetDetailsPrint listonly
|
SetDetailsPrint listonly
|
||||||
|
|
||||||
;Version numbers used to detect existing installation version for comparisson.
|
;Version numbers used to detect existing installation version for comparison.
|
||||||
WriteRegStr HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "" $INSTDIR
|
WriteRegStr HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "" $INSTDIR
|
||||||
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
|
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
|
||||||
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
|
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMinor" "${VER_MINOR}"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ IF (DOXYGEN_FOUND)
|
|||||||
# we need latex for doxygen because of the formulas
|
# we need latex for doxygen because of the formulas
|
||||||
FIND_PACKAGE(LATEX)
|
FIND_PACKAGE(LATEX)
|
||||||
IF (NOT LATEX_COMPILER)
|
IF (NOT LATEX_COMPILER)
|
||||||
MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.")
|
MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user interaction on doxy run.")
|
||||||
ENDIF (NOT LATEX_COMPILER)
|
ENDIF (NOT LATEX_COMPILER)
|
||||||
IF (NOT MAKEINDEX_COMPILER)
|
IF (NOT MAKEINDEX_COMPILER)
|
||||||
MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
|
MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ project=gets.chomp
|
|||||||
|
|
||||||
printf("\n")
|
printf("\n")
|
||||||
|
|
||||||
print("Other projects to includes (e.g. \"owutil tinyxml\", leave emtpy to skip): ")
|
print("Other projects to include (e.g. \"owutil tinyxml\", leave emtpy to skip): ")
|
||||||
otherprojects=gets.chomp
|
otherprojects=gets.chomp
|
||||||
|
|
||||||
printf("\n")
|
printf("\n")
|
||||||
|
|
||||||
print("Defininitions (leave empty to skip): ")
|
print("Definitions (leave empty to skip): ")
|
||||||
definitions=gets.chomp
|
definitions=gets.chomp
|
||||||
|
|
||||||
cmakePublicIncDirName = project.upcase+"_PUBLIC_INCLUDE_DIRS"
|
cmakePublicIncDirName = project.upcase+"_PUBLIC_INCLUDE_DIRS"
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ version 0.91.3 (released 2013-12-11, ownCloud Client 1.5.0rc1)
|
|||||||
version 0.91.2 (released 2013-12-10, ownCloud Client 1.5.0beta3)
|
version 0.91.2 (released 2013-12-10, ownCloud Client 1.5.0beta3)
|
||||||
* have translatable error message for indiv. file errors.
|
* have translatable error message for indiv. file errors.
|
||||||
* Use uint64_t for inode on win32 to fix a type glitch.
|
* Use uint64_t for inode on win32 to fix a type glitch.
|
||||||
* Add test that directrories are properly moved.
|
* Add test that directories are properly moved.
|
||||||
* Handle symlinks correctly.
|
* Handle symlinks correctly.
|
||||||
* Do not longer recurse into ignored directories in update
|
* No longer recurse into ignored directories in update
|
||||||
phase.
|
phase.
|
||||||
* Added proper symlink detection for win32 platform.
|
* Added proper symlink detection for win32 platform.
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ version 0.90.0 (released 2013-09-04, ownCloud Client 1.4.0)
|
|||||||
* Added c_rename function to csync std.
|
* Added c_rename function to csync std.
|
||||||
* Fix: Do renames of files before any puts.
|
* Fix: Do renames of files before any puts.
|
||||||
* Improved database integrity checks.
|
* Improved database integrity checks.
|
||||||
* Improvements of database writing efficiendy.
|
* Improvements of database writing efficiency.
|
||||||
* Fix: stat file on win32 even if its opened by application.
|
* Fix: stat file on win32 even if its opened by application.
|
||||||
* httpbf: configurable block size and threshold.
|
* httpbf: configurable block size and threshold.
|
||||||
* Many fixes found by a Coverity check.
|
* Many fixes found by a Coverity check.
|
||||||
@@ -159,7 +159,7 @@ version 0.70.0 and 0.70.1 were beta versions.
|
|||||||
|
|
||||||
version 0.60.2 (released 2012-11-26)
|
version 0.60.2 (released 2012-11-26)
|
||||||
* Migration to cross platform testing system cmocka.
|
* Migration to cross platform testing system cmocka.
|
||||||
* Fixed variuos minor things incl. potential mem leaks.
|
* Fixed various minor things incl. potential mem leaks.
|
||||||
* Clang fixes.
|
* Clang fixes.
|
||||||
* Moved journal database to sync directory.
|
* Moved journal database to sync directory.
|
||||||
* Fixed more csync->ocsync renaming issues.
|
* Fixed more csync->ocsync renaming issues.
|
||||||
@@ -247,7 +247,7 @@ version 0.50.0 (released 2013-08-01)
|
|||||||
* Added new logging framework (removed log4c dependency).
|
* Added new logging framework (removed log4c dependency).
|
||||||
* Added new config parser (removed iniparser dependency).
|
* Added new config parser (removed iniparser dependency).
|
||||||
* Added cmocka tests.
|
* Added cmocka tests.
|
||||||
* Added a way to exported file_tree_walk functions.
|
* Added a way to export file_tree_walk functions.
|
||||||
* Added capabilities for modules.
|
* Added capabilities for modules.
|
||||||
* Added possiblity to push information to the modules.
|
* Added possiblity to push information to the modules.
|
||||||
* Added iconv support to support various char sets.
|
* Added iconv support to support various char sets.
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ sqlite3 is a runtime requirement. libsmbclient is needed for
|
|||||||
the smb plugin, libssh for the sftp plugin. libneon is required for the
|
the smb plugin, libssh for the sftp plugin. libneon is required for the
|
||||||
ownCloud plugin.
|
ownCloud plugin.
|
||||||
|
|
||||||
Note that these version numbers are version we know works correctly. If you
|
Note that these version numbers are versions we know work correctly. If you
|
||||||
build and run csync successfully with an older version, please let us know.
|
build and run csync successfully with an older version, please let us know.
|
||||||
|
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ CMake options using `cmakesetup` (Windows) or `ccmake` (GNU/Linux and MacOS X).
|
|||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
Befor installing you can run the tests if everything is working:
|
Before installing you can run the tests if everything is working:
|
||||||
|
|
||||||
make test
|
make test
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ CONTRIBUTIONS
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
If you want to contribute to the development of the software then please join
|
If you want to contribute to the development of the software then please join
|
||||||
the mailing list. Patches are accepted preferebly created with git and we are
|
the mailing list. Patches are accepted preferably created with git and we are
|
||||||
always glad to receive feedback or suggestions to the address
|
always glad to receive feedback or suggestions to the address
|
||||||
csync-devel@csync.org.
|
csync-devel@csync.org.
|
||||||
More information on the various mailing lists can be found at
|
More information on the various mailing lists can be found at
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ enum csync_ftw_type_e {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define FILE_ID_BUF_SIZE 21
|
#define FILE_ID_BUF_SIZE 36
|
||||||
|
|
||||||
// currently specified at https://github.com/owncloud/core/issues/8322 are 9 to 10
|
// currently specified at https://github.com/owncloud/core/issues/8322 are 9 to 10
|
||||||
#define REMOTE_PERM_BUF_SIZE 15
|
#define REMOTE_PERM_BUF_SIZE 15
|
||||||
|
|||||||
@@ -44,24 +44,7 @@
|
|||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
|
int _csync_exclude_add(c_strlist_t **inList, const char *string) {
|
||||||
c_strlist_t *list;
|
return c_strlist_add_grow(inList, string);
|
||||||
|
|
||||||
if (*inList == NULL) {
|
|
||||||
*inList = c_strlist_new(32);
|
|
||||||
if (*inList == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((*inList)->count == (*inList)->size) {
|
|
||||||
list = c_strlist_expand(*inList, 2 * (*inList)->size);
|
|
||||||
if (list == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*inList = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
return c_strlist_add(*inList, string);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
int csync_exclude_load(const char *fname, c_strlist_t **list) {
|
||||||
@@ -186,210 +169,190 @@ bool csync_is_windows_reserved_word(const char* filename) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) {
|
static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const char *path, int filetype, bool check_leading_dirs) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
const char *p = NULL;
|
const char *p = NULL;
|
||||||
char *bname = NULL;
|
const char *bname = NULL;
|
||||||
char *dname = NULL;
|
size_t blen = 0;
|
||||||
char *prev_dname = NULL;
|
char *conflict = NULL;
|
||||||
char *conflict = NULL;
|
int rc = -1;
|
||||||
int rc = -1;
|
CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
|
||||||
CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
|
CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED;
|
||||||
CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED;
|
|
||||||
|
|
||||||
for (p = path; *p; p++) {
|
for (p = path; *p; p++) {
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case '\\':
|
case '\\':
|
||||||
case ':':
|
case ':':
|
||||||
case '?':
|
case '?':
|
||||||
case '*':
|
case '*':
|
||||||
case '"':
|
case '"':
|
||||||
case '>':
|
case '>':
|
||||||
case '<':
|
case '<':
|
||||||
case '|':
|
case '|':
|
||||||
return CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
return CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* split up the path */
|
||||||
|
bname = strrchr(path, '/');
|
||||||
|
if (bname) {
|
||||||
|
bname += 1; // don't include the /
|
||||||
|
} else {
|
||||||
|
bname = path;
|
||||||
|
}
|
||||||
|
blen = strlen(bname);
|
||||||
|
|
||||||
|
rc = csync_fnmatch(".csync_journal.db*", bname, 0);
|
||||||
|
if (rc == 0) {
|
||||||
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* split up the path */
|
// check the strlen and ignore the file if its name is longer than 254 chars.
|
||||||
dname = c_dirname(path);
|
// whenever changing this also check createDownloadTmpFileName
|
||||||
bname = c_basename(path);
|
if (blen > 254) {
|
||||||
|
match = CSYNC_FILE_EXCLUDE_LONG_FILENAME;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (bname == NULL || dname == NULL) {
|
#ifdef _WIN32
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
// Windows cannot sync files ending in spaces (#2176). It also cannot
|
||||||
SAFE_FREE(bname);
|
// distinguish files ending in '.' from files without an ending,
|
||||||
SAFE_FREE(dname);
|
// as '.' is a separator that is not stored internally, so let's
|
||||||
goto out;
|
// not allow to sync those to avoid file loss/ambiguities (#416)
|
||||||
}
|
if (blen > 1 && (bname[blen-1]== ' ' || bname[blen-1]== '.' )) {
|
||||||
|
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
rc = csync_fnmatch(".csync_journal.db*", bname, 0);
|
if (csync_is_windows_reserved_word(bname)) {
|
||||||
if (rc == 0) {
|
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check the strlen and ignore the file if its name is longer than 254 chars.
|
|
||||||
// whenever changing this also check createDownloadTmpFileName
|
|
||||||
if (strlen(bname) > 254) {
|
|
||||||
match = CSYNC_FILE_EXCLUDE_LONG_FILENAME;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
// Windows cannot sync files ending in spaces (#2176). It also cannot
|
|
||||||
// distinguish files ending in '.' from files without an ending,
|
|
||||||
// as '.' is a separator that is not stored internally, so let's
|
|
||||||
// not allow to sync those to avoid file loss/ambiguities (#416)
|
|
||||||
size_t blen = strlen(bname);
|
|
||||||
if (blen > 1 && (bname[blen-1]== ' ' || bname[blen-1]== '.' )) {
|
|
||||||
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (csync_is_windows_reserved_word(bname)) {
|
rc = csync_fnmatch(".owncloudsync.log*", bname, 0);
|
||||||
match = CSYNC_FILE_EXCLUDE_INVALID_CHAR;
|
if (rc == 0) {
|
||||||
SAFE_FREE(bname);
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
SAFE_FREE(dname);
|
goto out;
|
||||||
goto out;
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
rc = csync_fnmatch(".owncloudsync.log*", bname, 0);
|
/* Always ignore conflict files, not only via the exclude list */
|
||||||
if (rc == 0) {
|
rc = csync_fnmatch("*_conflict-*", bname, 0);
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
if (rc == 0) {
|
||||||
SAFE_FREE(bname);
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
SAFE_FREE(dname);
|
goto out;
|
||||||
goto out;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Always ignore conflict files, not only via the exclude list */
|
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
|
||||||
rc = csync_fnmatch("*_conflict-*", bname, 0);
|
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
|
||||||
if (rc == 0) {
|
if (rc < 0) {
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
goto out;
|
||||||
SAFE_FREE(bname);
|
}
|
||||||
SAFE_FREE(dname);
|
rc = csync_fnmatch(conflict, path, 0);
|
||||||
goto out;
|
if (rc == 0) {
|
||||||
}
|
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
||||||
|
SAFE_FREE(conflict);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
SAFE_FREE(conflict);
|
||||||
|
}
|
||||||
|
|
||||||
if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) {
|
if( ! excludes ) {
|
||||||
rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME"));
|
goto out;
|
||||||
if (rc < 0) {
|
}
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
rc = csync_fnmatch(conflict, path, 0);
|
|
||||||
if (rc == 0) {
|
|
||||||
match = CSYNC_FILE_SILENTLY_EXCLUDED;
|
|
||||||
SAFE_FREE(conflict);
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
SAFE_FREE(conflict);
|
|
||||||
}
|
|
||||||
|
|
||||||
SAFE_FREE(bname);
|
/* Build a list of path components to check. */
|
||||||
SAFE_FREE(dname);
|
c_strlist_t *path_components = c_strlist_new(32);
|
||||||
|
char *path_split = strdup(path);
|
||||||
|
size_t len = strlen(path_split);
|
||||||
|
for (i = len; ; --i) {
|
||||||
|
// read backwards until a path separator is found
|
||||||
|
if (i != 0 && path_split[i-1] != '/') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if( ! excludes ) {
|
// check 'basename', i.e. for "/foo/bar/fi" we'd check 'fi', 'bar', 'foo'
|
||||||
goto out;
|
if (path_split[i] != 0) {
|
||||||
}
|
c_strlist_add_grow(&path_components, path_split + i);
|
||||||
|
}
|
||||||
|
|
||||||
/* Loop over all exclude patterns and evaluate the given path */
|
if (i == 0 || !check_leading_dirs) {
|
||||||
for (i = 0; match == CSYNC_NOT_EXCLUDED && i < excludes->count; i++) {
|
break;
|
||||||
bool match_dirs_only = false;
|
}
|
||||||
char *pattern_stored = c_strdup(excludes->vector[i]);
|
|
||||||
char* pattern = pattern_stored;
|
|
||||||
|
|
||||||
type = CSYNC_FILE_EXCLUDE_LIST;
|
// check 'dirname', i.e. for "/foo/bar/fi" we'd check '/foo/bar', '/foo'
|
||||||
if (strlen(pattern) < 1) {
|
path_split[i-1] = '\0';
|
||||||
SAFE_FREE(pattern_stored);
|
c_strlist_add_grow(&path_components, path_split);
|
||||||
continue;
|
}
|
||||||
}
|
SAFE_FREE(path_split);
|
||||||
/* Ecludes starting with ']' means it can be cleanup */
|
|
||||||
if (pattern[0] == ']') {
|
|
||||||
++pattern;
|
|
||||||
if (filetype == CSYNC_FTW_TYPE_FILE) {
|
|
||||||
type = CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Check if the pattern applies to pathes only. */
|
|
||||||
if (pattern[strlen(pattern)-1] == '/') {
|
|
||||||
match_dirs_only = true;
|
|
||||||
pattern[strlen(pattern)-1] = '\0'; /* Cut off the slash */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check if the pattern contains a / and if, compare to the whole path */
|
/* Loop over all exclude patterns and evaluate the given path */
|
||||||
if (strchr(pattern, '/')) {
|
for (i = 0; match == CSYNC_NOT_EXCLUDED && i < excludes->count; i++) {
|
||||||
rc = csync_fnmatch(pattern, path, FNM_PATHNAME);
|
bool match_dirs_only = false;
|
||||||
if( rc == 0 ) {
|
char *pattern_stored = c_strdup(excludes->vector[i]);
|
||||||
match = type;
|
char* pattern = pattern_stored;
|
||||||
}
|
|
||||||
/* if the pattern requires a dir, but path is not, its still not excluded. */
|
|
||||||
if (match_dirs_only && filetype != CSYNC_FTW_TYPE_DIR) {
|
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if still not excluded, check each component of the path */
|
type = CSYNC_FILE_EXCLUDE_LIST;
|
||||||
if (match == CSYNC_NOT_EXCLUDED) {
|
if (strlen(pattern) < 1) {
|
||||||
int trailing_component = 1;
|
SAFE_FREE(pattern_stored);
|
||||||
dname = c_dirname(path);
|
continue;
|
||||||
bname = c_basename(path);
|
}
|
||||||
|
/* Excludes starting with ']' means it can be cleanup */
|
||||||
|
if (pattern[0] == ']') {
|
||||||
|
++pattern;
|
||||||
|
if (filetype == CSYNC_FTW_TYPE_FILE) {
|
||||||
|
type = CSYNC_FILE_EXCLUDE_AND_REMOVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Check if the pattern applies to pathes only. */
|
||||||
|
if (pattern[strlen(pattern)-1] == '/') {
|
||||||
|
match_dirs_only = true;
|
||||||
|
pattern[strlen(pattern)-1] = '\0'; /* Cut off the slash */
|
||||||
|
}
|
||||||
|
|
||||||
if (bname == NULL || dname == NULL) {
|
/* check if the pattern contains a / and if, compare to the whole path */
|
||||||
match = CSYNC_NOT_EXCLUDED;
|
if (strchr(pattern, '/')) {
|
||||||
SAFE_FREE(bname);
|
rc = csync_fnmatch(pattern, path, FNM_PATHNAME);
|
||||||
SAFE_FREE(dname);
|
if( rc == 0 ) {
|
||||||
SAFE_FREE(pattern_stored);
|
match = type;
|
||||||
goto out;
|
}
|
||||||
}
|
/* if the pattern requires a dir, but path is not, its still not excluded. */
|
||||||
|
if (match_dirs_only && filetype != CSYNC_FTW_TYPE_DIR) {
|
||||||
|
match = CSYNC_NOT_EXCLUDED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check each component of the path */
|
/* if still not excluded, check each component and leading directory of the path */
|
||||||
do {
|
if (match == CSYNC_NOT_EXCLUDED) {
|
||||||
/* Do not check the bname if its a file and the pattern matches dirs only. */
|
size_t j = 0;
|
||||||
if ( !(trailing_component == 1 /* it is the trailing component */
|
if (match_dirs_only && filetype == CSYNC_FTW_TYPE_FILE) {
|
||||||
&& match_dirs_only /* but only directories are matched by the pattern */
|
j = 1; // skip the first entry, which is bname
|
||||||
&& filetype == CSYNC_FTW_TYPE_FILE) ) {
|
}
|
||||||
/* Check the name component against the pattern */
|
for (; j < path_components->count; ++j) {
|
||||||
rc = csync_fnmatch(pattern, bname, 0);
|
rc = csync_fnmatch(pattern, path_components->vector[j], 0);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
match = type;
|
match = type;
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
if (!(c_streq(dname, ".") || c_streq(dname, "/"))) {
|
}
|
||||||
rc = csync_fnmatch(pattern, dname, 0);
|
}
|
||||||
if (rc == 0) {
|
SAFE_FREE(pattern_stored);
|
||||||
match = type;
|
}
|
||||||
}
|
c_strlist_destroy(path_components);
|
||||||
}
|
|
||||||
trailing_component = 0;
|
|
||||||
prev_dname = dname;
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
bname = c_basename(prev_dname);
|
|
||||||
dname = c_dirname(prev_dname);
|
|
||||||
SAFE_FREE(prev_dname);
|
|
||||||
|
|
||||||
} while( match == CSYNC_NOT_EXCLUDED && !c_streq(dname, ".")
|
out:
|
||||||
&& !c_streq(dname, "/") );
|
|
||||||
}
|
|
||||||
SAFE_FREE(pattern_stored);
|
|
||||||
SAFE_FREE(bname);
|
|
||||||
SAFE_FREE(dname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return match;
|
||||||
out:
|
}
|
||||||
|
|
||||||
return match;
|
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype) {
|
||||||
|
return _csync_excluded_common(excludes, path, filetype, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) {
|
||||||
|
return _csync_excluded_common(excludes, path, filetype, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,11 @@ void csync_exclude_destroy(CSYNC *ctx);
|
|||||||
*
|
*
|
||||||
* This excludes also paths which can't be used without unix extensions.
|
* This excludes also paths which can't be used without unix extensions.
|
||||||
*
|
*
|
||||||
|
* The exclude list is checked against the full path, each component of
|
||||||
|
* the path and all leading directory strings, e.g.
|
||||||
|
* '/foo/bar/file' checks ('/foo/bar/file', 'foo', 'bar', 'file',
|
||||||
|
* '/foo/bar', '/foo').
|
||||||
|
*
|
||||||
* @param ctx The synchronizer context.
|
* @param ctx The synchronizer context.
|
||||||
* @param path The patch to check.
|
* @param path The patch to check.
|
||||||
*
|
*
|
||||||
@@ -73,6 +78,23 @@ void csync_exclude_destroy(CSYNC *ctx);
|
|||||||
*/
|
*/
|
||||||
CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
|
CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if the given path should be excluded in a traversal situation.
|
||||||
|
*
|
||||||
|
* It does only part of the work that csync_excluded does because it's assumed
|
||||||
|
* that all leading directories have been run through csync_excluded_traversal()
|
||||||
|
* before. This can be significantly faster.
|
||||||
|
*
|
||||||
|
* That means for '/foo/bar/file' only ('/foo/bar/file', 'file') is checked
|
||||||
|
* against the exclude patterns.
|
||||||
|
*
|
||||||
|
* @param ctx The synchronizer context.
|
||||||
|
* @param path The patch to check.
|
||||||
|
*
|
||||||
|
* @return 2 if excluded and needs cleanup, 1 if excluded, 0 if not.
|
||||||
|
*/
|
||||||
|
CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief csync_excluded_no_ctx
|
* @brief csync_excluded_no_ctx
|
||||||
* @param excludes
|
* @param excludes
|
||||||
|
|||||||
@@ -185,11 +185,11 @@ struct csync_file_stat_s {
|
|||||||
size_t pathlen; /* u64 */
|
size_t pathlen; /* u64 */
|
||||||
uint64_t inode; /* u64 */
|
uint64_t inode; /* u64 */
|
||||||
mode_t mode; /* u32 */
|
mode_t mode; /* u32 */
|
||||||
int type; /* u32 */
|
unsigned int type : 4;
|
||||||
int child_modified;/*bool*/
|
unsigned int child_modified : 1;
|
||||||
int should_update_metadata; /*bool: specify that the etag, or the remote perm or fileid has
|
unsigned int should_update_metadata : 1; /*specify that the etag, or the remote perm or fileid has
|
||||||
changed and need to be updated on the db even for INSTRUCTION_NONE */
|
changed and need to be updated on the db even for INSTRUCTION_NONE */
|
||||||
int has_ignored_files; /*bool: specify that a directory, or child directory contains ignored files */
|
unsigned int has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */
|
||||||
|
|
||||||
char *destpath; /* for renames */
|
char *destpath; /* for renames */
|
||||||
const char *etag;
|
const char *etag;
|
||||||
|
|||||||
@@ -488,7 +488,7 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
|
|||||||
/* Check for exclusion from the tree.
|
/* Check for exclusion from the tree.
|
||||||
* Note that this is only a safety net in case the ignore list changes
|
* Note that this is only a safety net in case the ignore list changes
|
||||||
* without a full remote discovery being triggered. */
|
* without a full remote discovery being triggered. */
|
||||||
CSYNC_EXCLUDE_TYPE excluded = csync_excluded(ctx, st->path, st->type);
|
CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type);
|
||||||
if (excluded != CSYNC_NOT_EXCLUDED) {
|
if (excluded != CSYNC_NOT_EXCLUDED) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path, excluded);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path, excluded);
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
|||||||
excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED;
|
excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED;
|
||||||
} else {
|
} else {
|
||||||
/* Check if file is excluded */
|
/* Check if file is excluded */
|
||||||
excluded = csync_excluded(ctx, path,type);
|
excluded = csync_excluded_traversal(ctx->excludes, path, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( excluded == CSYNC_NOT_EXCLUDED ) {
|
if( excluded == CSYNC_NOT_EXCLUDED ) {
|
||||||
@@ -630,7 +630,15 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
/* permission denied */
|
/* permission denied */
|
||||||
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR);
|
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR);
|
||||||
if (errno == EACCES) {
|
if (errno == EACCES) {
|
||||||
return 0;
|
if (ctx->current_fs) {
|
||||||
|
ctx->current_fs->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||||
|
ctx->current_fs->error_status = CSYNC_STATUS_PERMISSION_DENIED;
|
||||||
|
/* If a directory has ignored files, put the flag on the parent directory as well */
|
||||||
|
if( previous_fs ) {
|
||||||
|
previous_fs->has_ignored_files = true;
|
||||||
|
}
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
} else if(errno == ENOENT) {
|
} else if(errno == ENOENT) {
|
||||||
asp = asprintf( &ctx->error_string, "%s", uri);
|
asp = asprintf( &ctx->error_string, "%s", uri);
|
||||||
if (asp < 0) {
|
if (asp < 0) {
|
||||||
@@ -652,6 +660,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
/* if current_fs is not defined here, better throw an error */
|
||||||
} else {
|
} else {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno);
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -393,8 +393,8 @@ int c_parse_uri(const char *uri,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This function takes a path and converts it to a UNC representation of the
|
* This function takes a path and converts it to a UNC representation of the
|
||||||
* string. That means that it prepends a \\?\ and convertes all slashes to
|
* string. That means that it prepends a \\?\ (unless already UNC) and converts
|
||||||
* backslashes.
|
* all slashes to backslashes.
|
||||||
*
|
*
|
||||||
* Note the following:
|
* Note the following:
|
||||||
* - The string must be absolute.
|
* - The string must be absolute.
|
||||||
@@ -408,27 +408,28 @@ int c_parse_uri(const char *uri,
|
|||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
char *longStr = NULL;
|
char *longStr = NULL;
|
||||||
int i = 4; // index where to start changing "/"=>"\"
|
|
||||||
|
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
longStr = c_malloc(len+5);
|
longStr = c_malloc(len+5);
|
||||||
*longStr = '\0';
|
*longStr = '\0';
|
||||||
|
|
||||||
// prepend \\?\ and convert '/' => '\' to support long names
|
// prepend \\?\ and convert '/' => '\' to support long names
|
||||||
if( str[0] == '/' ) {
|
if( str[0] == '/' || str[0] == '\\' ) {
|
||||||
strncpy( longStr, "\\\\?", 4);
|
// Don't prepend if already UNC
|
||||||
i=3;
|
if( !(len > 1 && (str[1] == '/' || str[1] == '\\')) ) {
|
||||||
|
strcpy( longStr, "\\\\?");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
strncpy( longStr, "\\\\?\\", 5); // prepend string by this four magic chars.
|
strcpy( longStr, "\\\\?\\"); // prepend string by this four magic chars.
|
||||||
}
|
}
|
||||||
strncat( longStr, str, len );
|
strncat( longStr, str, len );
|
||||||
|
|
||||||
/* replace all occurences of / with the windows native \ */
|
/* replace all occurences of / with the windows native \ */
|
||||||
while(longStr[i] != '\0') {
|
char *c = longStr;
|
||||||
if(longStr[i] == '/') {
|
for (; *c; ++c) {
|
||||||
longStr[i] = '\\';
|
if(*c == '/') {
|
||||||
|
*c = '\\';
|
||||||
}
|
}
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
return longStr;
|
return longStr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,6 +215,25 @@ int c_strlist_add(c_strlist_t *strlist, const char *string) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int c_strlist_add_grow(c_strlist_t **strlist, const char *string) {
|
||||||
|
if (*strlist == NULL) {
|
||||||
|
*strlist = c_strlist_new(32);
|
||||||
|
if (*strlist == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*strlist)->count == (*strlist)->size) {
|
||||||
|
c_strlist_t *list = c_strlist_expand(*strlist, 2 * (*strlist)->size);
|
||||||
|
if (list == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*strlist = list;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c_strlist_add(*strlist, string);
|
||||||
|
}
|
||||||
|
|
||||||
void c_strlist_clear(c_strlist_t *strlist) {
|
void c_strlist_clear(c_strlist_t *strlist) {
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -112,6 +112,19 @@ c_strlist_t *c_strlist_expand(c_strlist_t *strlist, size_t size);
|
|||||||
*/
|
*/
|
||||||
int c_strlist_add(c_strlist_t *strlist, const char *string);
|
int c_strlist_add(c_strlist_t *strlist, const char *string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Add a string to the stringlist, growing it if necessary
|
||||||
|
*
|
||||||
|
* Duplicates the string and stores it in the stringlist.
|
||||||
|
* It also initializes the stringlist if it starts out as null.
|
||||||
|
*
|
||||||
|
* @param strlist Stringlist to add the string.
|
||||||
|
* @param string String to add.
|
||||||
|
*
|
||||||
|
* @return 0 on success, less than 0 and errno set if an error occured.
|
||||||
|
*/
|
||||||
|
int c_strlist_add_grow(c_strlist_t **strlist, const char *string);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Removes all strings from the list.
|
* @brief Removes all strings from the list.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -74,6 +74,12 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!dirname || handle->hFind == INVALID_HANDLE_VALUE) {
|
if (!dirname || handle->hFind == INVALID_HANDLE_VALUE) {
|
||||||
|
int retcode = GetLastError();
|
||||||
|
if( retcode == ERROR_FILE_NOT_FOUND ) {
|
||||||
|
errno = ENOENT;
|
||||||
|
} else {
|
||||||
|
errno = EACCES;
|
||||||
|
}
|
||||||
SAFE_FREE(handle);
|
SAFE_FREE(handle);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -99,6 +105,9 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
|||||||
// FindClose returns non-zero on success
|
// FindClose returns non-zero on success
|
||||||
if( FindClose(handle->hFind) != 0 ) {
|
if( FindClose(handle->hFind) != 0 ) {
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
} else {
|
||||||
|
// error case, set errno
|
||||||
|
errno = EBADF;
|
||||||
}
|
}
|
||||||
|
|
||||||
SAFE_FREE(handle->path);
|
SAFE_FREE(handle->path);
|
||||||
@@ -117,7 +126,8 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
|||||||
errno = 0;
|
errno = 0;
|
||||||
file_stat = csync_vio_file_stat_new();
|
file_stat = csync_vio_file_stat_new();
|
||||||
if (file_stat == NULL) {
|
if (file_stat == NULL) {
|
||||||
goto err;
|
errno = ENOMEM;
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
|
||||||
|
|
||||||
@@ -179,7 +189,7 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
|||||||
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
mbchar_t *wuri = c_utf8_path_to_locale( uri );
|
||||||
|
|
||||||
h = CreateFileW( wuri, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
h = CreateFileW( wuri, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS, NULL );
|
FILE_ATTRIBUTE_NORMAL+FILE_FLAG_BACKUP_SEMANTICS+FILE_FLAG_OPEN_REPARSE_POINT, NULL );
|
||||||
if( h == INVALID_HANDLE_VALUE ) {
|
if( h == INVALID_HANDLE_VALUE ) {
|
||||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
|
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
|
||||||
errno = GetLastError();
|
errno = GetLastError();
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "config_csync.h"
|
#include "config_csync.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
#include "torture.h"
|
#include "torture.h"
|
||||||
|
|
||||||
@@ -89,6 +90,11 @@ static void check_csync_excluded(void **state)
|
|||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
rc = csync_excluded(csync, "/", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
rc = csync_excluded(csync, "krawel_krawel", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, "krawel_krawel", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
rc = csync_excluded(csync, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE);
|
||||||
@@ -141,6 +147,56 @@ static void check_csync_excluded(void **state)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_csync_excluded_traversal(void **state)
|
||||||
|
{
|
||||||
|
CSYNC *csync = *state;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
_csync_exclude_add( &(csync->excludes), "/exclude" );
|
||||||
|
|
||||||
|
/* Check toplevel dir, the pattern only works for toplevel dir. */
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
/* check for a file called exclude. Must still work */
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
/* Add an exclude for directories only: excl/ */
|
||||||
|
_csync_exclude_add( &(csync->excludes), "excl/" );
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "meep/excl/file", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked!
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
_csync_exclude_add(&csync->excludes, "/excludepath/withsubdir");
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked!
|
||||||
|
}
|
||||||
|
|
||||||
static void check_csync_pathes(void **state)
|
static void check_csync_pathes(void **state)
|
||||||
{
|
{
|
||||||
CSYNC *csync = *state;
|
CSYNC *csync = *state;
|
||||||
@@ -170,8 +226,25 @@ static void check_csync_pathes(void **state)
|
|||||||
rc = csync_excluded(csync, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
rc = csync_excluded(csync, "meep/excl", CSYNC_FTW_TYPE_DIR);
|
||||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "meep/excl/file", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
rc = csync_excluded(csync, "/excl", CSYNC_FTW_TYPE_FILE);
|
rc = csync_excluded(csync, "/excl", CSYNC_FTW_TYPE_FILE);
|
||||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
_csync_exclude_add(&csync->excludes, "/excludepath/withsubdir");
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||||
|
|
||||||
|
rc = csync_excluded(csync, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR);
|
||||||
|
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_csync_is_windows_reserved_word() {
|
static void check_csync_is_windows_reserved_word() {
|
||||||
@@ -190,7 +263,51 @@ static void check_csync_is_windows_reserved_word() {
|
|||||||
assert_true(csync_is_windows_reserved_word("Z:"));
|
assert_true(csync_is_windows_reserved_word("Z:"));
|
||||||
assert_true(csync_is_windows_reserved_word("M:"));
|
assert_true(csync_is_windows_reserved_word("M:"));
|
||||||
assert_true(csync_is_windows_reserved_word("m:"));
|
assert_true(csync_is_windows_reserved_word("m:"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void check_csync_excluded_performance(void **state)
|
||||||
|
{
|
||||||
|
CSYNC *csync = *state;
|
||||||
|
|
||||||
|
const int N = 10000;
|
||||||
|
int totalRc = 0;
|
||||||
|
|
||||||
|
// Being able to use QElapsedTimer for measurement would be nice...
|
||||||
|
{
|
||||||
|
struct timeval before, after;
|
||||||
|
gettimeofday(&before, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
totalRc += csync_excluded(csync, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR);
|
||||||
|
totalRc += csync_excluded(csync, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE);
|
||||||
|
}
|
||||||
|
assert_int_equal(totalRc, CSYNC_NOT_EXCLUDED); // mainly to avoid optimization
|
||||||
|
|
||||||
|
gettimeofday(&after, 0);
|
||||||
|
|
||||||
|
const double total = (after.tv_sec - before.tv_sec)
|
||||||
|
+ (after.tv_usec - before.tv_usec) / 1.0e6;
|
||||||
|
const double perCallMs = total / 2 / N * 1000;
|
||||||
|
printf("csync_excluded: %f ms per call\n", perCallMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
struct timeval before, after;
|
||||||
|
gettimeofday(&before, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < N; ++i) {
|
||||||
|
totalRc += csync_excluded_traversal(csync->excludes, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR);
|
||||||
|
totalRc += csync_excluded_traversal(csync->excludes, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE);
|
||||||
|
}
|
||||||
|
assert_int_equal(totalRc, CSYNC_NOT_EXCLUDED); // mainly to avoid optimization
|
||||||
|
|
||||||
|
gettimeofday(&after, 0);
|
||||||
|
|
||||||
|
const double total = (after.tv_sec - before.tv_sec)
|
||||||
|
+ (after.tv_usec - before.tv_usec) / 1.0e6;
|
||||||
|
const double perCallMs = total / 2 / N * 1000;
|
||||||
|
printf("csync_excluded_traversal: %f ms per call\n", perCallMs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int torture_run_tests(void)
|
int torture_run_tests(void)
|
||||||
@@ -199,8 +316,10 @@ int torture_run_tests(void)
|
|||||||
unit_test_setup_teardown(check_csync_exclude_add, setup, teardown),
|
unit_test_setup_teardown(check_csync_exclude_add, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_exclude_load, setup, teardown),
|
unit_test_setup_teardown(check_csync_exclude_load, setup, teardown),
|
||||||
unit_test_setup_teardown(check_csync_excluded, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_excluded, setup_init, teardown),
|
||||||
|
unit_test_setup_teardown(check_csync_excluded_traversal, setup_init, teardown),
|
||||||
unit_test_setup_teardown(check_csync_pathes, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_pathes, setup_init, teardown),
|
||||||
unit_test_setup_teardown(check_csync_is_windows_reserved_word, setup_init, teardown),
|
unit_test_setup_teardown(check_csync_is_windows_reserved_word, setup_init, teardown),
|
||||||
|
unit_test_setup_teardown(check_csync_excluded_performance, setup_init, teardown),
|
||||||
};
|
};
|
||||||
|
|
||||||
return run_tests(tests);
|
return run_tests(tests);
|
||||||
|
|||||||
@@ -146,13 +146,47 @@ static void check_to_multibyte(void **state)
|
|||||||
|
|
||||||
static void check_long_win_path(void **state)
|
static void check_long_win_path(void **state)
|
||||||
{
|
{
|
||||||
const char *path = "C://DATA/FILES/MUSIC/MY_MUSIC.mp3"; // check a short path
|
|
||||||
const char *exp_path = "\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3";
|
|
||||||
const char *new_short = c_path_to_UNC(path);
|
|
||||||
|
|
||||||
(void) state; /* unused */
|
(void) state; /* unused */
|
||||||
|
|
||||||
assert_string_equal(new_short, exp_path);
|
{
|
||||||
|
const char *path = "C://DATA/FILES/MUSIC/MY_MUSIC.mp3"; // check a short path
|
||||||
|
const char *exp_path = "\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "\\\\foo\\bar/MY_MUSIC.mp3";
|
||||||
|
const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "//foo\\bar/MY_MUSIC.mp3";
|
||||||
|
const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "\\foo\\bar";
|
||||||
|
const char *exp_path = "\\\\?\\foo\\bar";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *path = "/foo/bar";
|
||||||
|
const char *exp_path = "\\\\?\\foo\\bar";
|
||||||
|
const char *new_short = c_path_to_UNC(path);
|
||||||
|
assert_string_equal(new_short, exp_path);
|
||||||
|
SAFE_FREE(new_short);
|
||||||
|
}
|
||||||
|
|
||||||
const char *longPath = "D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/"
|
const char *longPath = "D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/"
|
||||||
"elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/"
|
"elonglonglonglong/flonglonglonglong/glonglonglonglong/hlonglonglonglong/ilonglonglonglong/"
|
||||||
@@ -170,7 +204,7 @@ static void check_long_win_path(void **state)
|
|||||||
|
|
||||||
// printf( "YYYYYYYYYYYY %ld\n", strlen(new_long));
|
// printf( "YYYYYYYYYYYY %ld\n", strlen(new_long));
|
||||||
assert_int_equal( strlen(new_long), 286);
|
assert_int_equal( strlen(new_long), 286);
|
||||||
|
SAFE_FREE(new_long);
|
||||||
}
|
}
|
||||||
|
|
||||||
int torture_run_tests(void)
|
int torture_run_tests(void)
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ ownCloud Client 1.1 or later. Using an incompatible time stamp-based
|
|||||||
synchronization mechanism can lead to data loss in rare cases, especially when
|
synchronization mechanism can lead to data loss in rare cases, especially when
|
||||||
multiple clients are involved and one utilizes a non-synchronized NTP time.
|
multiple clients are involved and one utilizes a non-synchronized NTP time.
|
||||||
|
|
||||||
.. _`NTP time synchronisation`: http://en.wikipedia.org/wiki/Network_Time_Protocol
|
.. _`NTP time synchronization`: http://en.wikipedia.org/wiki/Network_Time_Protocol
|
||||||
.. _Etag: http://en.wikipedia.org/wiki/HTTP_ETag
|
.. _Etag: http://en.wikipedia.org/wiki/HTTP_ETag
|
||||||
|
|
||||||
Comparison and Conflict Cases
|
Comparison and Conflict Cases
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ To prevent automatic updates and disallow manual overrides:
|
|||||||
.. note::This is the preferred method of controlling the updater behavior using
|
.. note::This is the preferred method of controlling the updater behavior using
|
||||||
Group Policies.
|
Group Policies.
|
||||||
|
|
||||||
1. Migrate to the following directory::
|
1. Edit this Registry key:
|
||||||
|
|
||||||
HKEY_LOCAL_MACHINE\Software\Policies\ownCloud\ownCloud
|
HKEY_LOCAL_MACHINE\Software\Policies\ownCloud\ownCloud
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
.. _building-label:
|
.. _building-label:
|
||||||
|
|
||||||
|
===============================
|
||||||
Appendix A: Building the Client
|
Appendix A: Building the Client
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ Linux
|
|||||||
* openSUSE: ``zypper ref; zypper si -d owncloud-client``
|
* openSUSE: ``zypper ref; zypper si -d owncloud-client``
|
||||||
* Fedora/CentOS: ``yum install yum-utils; yum-builddep owncloud-client``
|
* Fedora/CentOS: ``yum install yum-utils; yum-builddep owncloud-client``
|
||||||
|
|
||||||
3. Follow the `generic build instructions`_.
|
3. Follow the :ref:`generic-build-instructions`.
|
||||||
|
|
||||||
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
|
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ The tested and preferred way to develop in this environment is through the use
|
|||||||
of HomeBrew_. The ownCloud team has its own repository containing non-standard
|
of HomeBrew_. The ownCloud team has its own repository containing non-standard
|
||||||
recipes.
|
recipes.
|
||||||
|
|
||||||
To set up your build enviroment for development using HomeBrew_:
|
To set up your build environment for development using HomeBrew_:
|
||||||
|
|
||||||
1. Add the ownCloud repository using the following command::
|
1. Add the ownCloud repository using the following command::
|
||||||
|
|
||||||
@@ -60,7 +61,7 @@ To set up your build enviroment for development using HomeBrew_:
|
|||||||
Where ``x.z`` is the current version of Qt 5 that brew has installed
|
Where ``x.z`` is the current version of Qt 5 that brew has installed
|
||||||
on your machine.
|
on your machine.
|
||||||
|
|
||||||
5. For compilation of the client, follow the `generic build instructions`_.
|
5. For compilation of the client, follow the :ref:`generic-build-instructions`.
|
||||||
|
|
||||||
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||||
<install_dir>``. If you have a developer signing certificate, you can specify
|
<install_dir>``. If you have a developer signing certificate, you can specify
|
||||||
@@ -118,14 +119,14 @@ follow `Windows Installer Build (Cross-Compile)`_ instead.
|
|||||||
cmake -G "MinGW Makefiles" ../client
|
cmake -G "MinGW Makefiles" ../client
|
||||||
mingw32-make
|
mingw32-make
|
||||||
|
|
||||||
.. note:: You can try using ninja to build parallelly using
|
.. note:: You can try using ninja to build in parallel using
|
||||||
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
||||||
.. note:: Refer to the `generic build instructions`_ section for additional options.
|
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
|
||||||
|
|
||||||
The owncloud binary will appear in the ``bin`` directory.
|
The ownCloud binary will appear in the ``bin`` directory.
|
||||||
|
|
||||||
Windows Installer Build (Cross-Compile)
|
Windows Installer Build (Cross-Compile)
|
||||||
-----------------------
|
---------------------------------------
|
||||||
|
|
||||||
Due to the large number of dependencies, building the client installer for Windows
|
Due to the large number of dependencies, building the client installer for Windows
|
||||||
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
|
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
|
||||||
@@ -149,7 +150,7 @@ To cross-compile:
|
|||||||
|
|
||||||
zypper install mingw32-cross-nsis mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
|
zypper install mingw32-cross-nsis mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
|
||||||
|
|
||||||
4. Follow the `generic build instructions`_
|
4. Follow the :ref:`generic-build-instructions`
|
||||||
|
|
||||||
.. note:: When building for Windows platforms, you must specify a special
|
.. note:: When building for Windows platforms, you must specify a special
|
||||||
toolchain file that enables cmake to locate the platform-specific tools. To add
|
toolchain file that enables cmake to locate the platform-specific tools. To add
|
||||||
@@ -179,7 +180,8 @@ To cross-compile:
|
|||||||
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
|
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
|
||||||
|
|
||||||
|
|
||||||
.. _`generic build instructions`:
|
.. _generic-build-instructions:
|
||||||
|
|
||||||
Generic Build Instructions
|
Generic Build Instructions
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ It is possible that another program is changing the modification date of the fil
|
|||||||
|
|
||||||
If the file is uses the ``.eml`` extension, Windows automatically and
|
If the file is uses the ``.eml`` extension, Windows automatically and
|
||||||
continually changes all files, unless you remove
|
continually changes all files, unless you remove
|
||||||
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers`
|
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers``
|
||||||
from the windows registry.
|
from the windows registry.
|
||||||
|
|
||||||
See http://petersteier.wordpress.com/2011/10/22/windows-indexer-changes-modification-dates-of-eml-files/ for more information.
|
See http://petersteier.wordpress.com/2011/10/22/windows-indexer-changes-modification-dates-of-eml-files/ for more information.
|
||||||
|
|||||||
BIN
doc/images/client-1.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
doc/images/client-2.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
doc/images/client-3.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
doc/images/client-4.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
doc/images/client-7.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 41 KiB |
BIN
doc/images/client6.png
Executable file → Normal file
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 42 KiB |
@@ -16,5 +16,4 @@ ownCloud Desktop Client Manual
|
|||||||
architecture
|
architecture
|
||||||
troubleshooting
|
troubleshooting
|
||||||
faq
|
faq
|
||||||
glossary
|
glossary
|
||||||
|
|
||||||
@@ -16,92 +16,42 @@ Linux users must follow the instructions on the download page to add the
|
|||||||
appropriate repository for their Linux distribution, install the signing key,
|
appropriate repository for their Linux distribution, install the signing key,
|
||||||
and then use their package managers to install the desktop sync client. Linux
|
and then use their package managers to install the desktop sync client. Linux
|
||||||
users will also update their sync clients via package manager, and the client
|
users will also update their sync clients via package manager, and the client
|
||||||
will display a notification when an update is available.
|
will display a notification when an update is available.
|
||||||
|
|
||||||
Linux users must also have a password manager enabled, such as GNOME Keyring or
|
Linux users must also have a password manager enabled, such as GNOME Keyring or
|
||||||
KWallet, so that the sync client can login automatically.
|
KWallet, so that the sync client can login automatically.
|
||||||
|
|
||||||
Improvements and New Features
|
Installation Wizard
|
||||||
-----------------------------
|
-------------------
|
||||||
|
|
||||||
The 1.8 client has a number of enhancements and performance improvements,
|
|
||||||
including:
|
|
||||||
|
|
||||||
* Graphical selective sync file and folder selector. Select which files and
|
|
||||||
folders to sync with just a few clicks.
|
|
||||||
* Selective sync on account setup. Set up which files and folders you want to
|
|
||||||
sync when you create a new ownCloud account.
|
|
||||||
* File manager integration: share files from Windows Explorer, Mac OS X Finder,
|
|
||||||
and Nautilus on Linux.
|
|
||||||
* Faster uploads and downloads.
|
|
||||||
|
|
||||||
.. note:: When you upgrade from 1.7, restart Windows to ensure that all new
|
|
||||||
features are visible.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
The installation wizard takes you step-by-step through configuration options and
|
The installation wizard takes you step-by-step through configuration options and
|
||||||
account setup. These examples are on Windows 7; note the new "Integration for
|
account setup. First you need to enter the URL of your ownCloud server.
|
||||||
Windows Explorer Option". This allows Windows users to share files directly
|
|
||||||
from their local ownCloud folder in Windows Explorer, rather than having to
|
|
||||||
open a Web browser and share from the ownCloud Web interface. Mac users get the
|
|
||||||
same option for Finder, and Linux users for Nautilus.
|
|
||||||
|
|
||||||
.. image:: images/client1.png
|
.. image:: images/client-1.png
|
||||||
|
:alt: form for entering ownCloud server URL
|
||||||
|
|
||||||
|
Enter your ownCloud login on the next screen.
|
||||||
|
|
||||||
The next screen selects the installation folder for the client. The default is
|
.. image:: images/client-2.png
|
||||||
fine; don't change this without a good reason.
|
:alt: form for entering your ownCloud login
|
||||||
|
|
||||||
.. image:: images/client2.png
|
On the Local Folder Option screen you may sync
|
||||||
|
all of your files on the ownCloud server, or select individual folders. The
|
||||||
|
default local sync folder is ``ownCloud``, in your home directory. You may
|
||||||
|
change this as well.
|
||||||
|
|
||||||
In the next screen, enter your ownCloud server URL.
|
.. image:: images/client-3.png
|
||||||
|
:alt: Select which remote folders to sync, and which local folder to store
|
||||||
|
them in.
|
||||||
|
|
||||||
|
When you have completed selecting your sync folders, click the Connect button
|
||||||
|
at the bottom right. The client will attempt to connect to your ownCloud
|
||||||
|
server, and when it is successful you'll see two buttons: one to connect to
|
||||||
|
your ownCloud Web GUI, and one to open your local folder. It will also start
|
||||||
|
synchronizing your files.
|
||||||
|
|
||||||
.. image:: images/client3.png
|
.. image:: images/client-4.png
|
||||||
|
:alt: A successful server connection, showing a button to connect to your
|
||||||
|
Web GUI, and one to open your local ownCloud folder
|
||||||
|
|
||||||
If your ownCloud server has a self-signed SSL certificate, you will see a scary
|
Click the Finish button, and you're all done.
|
||||||
warning. Check "Trust this certificate" and keep going.
|
|
||||||
|
|
||||||
.. image:: images/client4.png
|
|
||||||
|
|
||||||
On the next screen enter your ownCloud login and password.
|
|
||||||
|
|
||||||
.. image:: images/client5.png
|
|
||||||
|
|
||||||
Now you can select which folders and files to sync, and the location of your
|
|
||||||
local ownCloud folder.
|
|
||||||
|
|
||||||
.. image:: images/client6.png
|
|
||||||
|
|
||||||
When you check "Choose what to sync" it opens a file picker. Note the warning
|
|
||||||
at the top that unchecked folders will be removed from your local filesystem.
|
|
||||||
On a new installation, when you have not yet synced with your ownCloud server,
|
|
||||||
no files will be deleted.
|
|
||||||
|
|
||||||
.. image:: images/client7.png
|
|
||||||
|
|
||||||
In the next screen you may click to open ownCloud in a Web browser, or open
|
|
||||||
your local ownCloud folder. Open your local ownCloud folder so you can see how
|
|
||||||
file manager integration works.
|
|
||||||
|
|
||||||
.. image:: images/client8.png
|
|
||||||
|
|
||||||
When you are in your local ownCloud folder you can right-click any file or
|
|
||||||
folder, and then left-click "Share with ownCloud" to create a share link. Note that Windows
|
|
||||||
may also have a Share With option. This is not the ownCloud Share option. The
|
|
||||||
ownCloud share dialog looks like the following example:
|
|
||||||
|
|
||||||
.. image:: images/client9.png
|
|
||||||
|
|
||||||
You have the same options for creating a link share as you do when you're
|
|
||||||
logged into the ownCloud Web GUI: you may optionally set a password and
|
|
||||||
expiration date.
|
|
||||||
|
|
||||||
.. image:: images/client10.png
|
|
||||||
|
|
||||||
You may change your sync options at any time by opening your ownCloud client
|
|
||||||
and clicking the "Choose what to sync" button. This opens the same file picker
|
|
||||||
you saw in the installation wizard. If you un-check any folders or files that
|
|
||||||
you have already synchronized they will be deleted.
|
|
||||||
|
|
||||||
.. image:: images/client11.png
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
============
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
@@ -14,3 +15,40 @@ and local PC.
|
|||||||
.. note:: Because of various technical issues, desktop sync clients older than
|
.. note:: Because of various technical issues, desktop sync clients older than
|
||||||
1.7 will not allowed to connect and sync with the ownCloud 8.1 server. It is
|
1.7 will not allowed to connect and sync with the ownCloud 8.1 server. It is
|
||||||
highly recommended to keep your client updated.
|
highly recommended to keep your client updated.
|
||||||
|
|
||||||
|
Improvements and New Features
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
The 2.0 release of the ownCloud desktop sync client has many new features and
|
||||||
|
improvements.
|
||||||
|
|
||||||
|
* Multi-account support
|
||||||
|
* Many UI improvements
|
||||||
|
* Accessibility improvements (high contrast schemes)
|
||||||
|
* Automatic bandwidth throttling
|
||||||
|
* No redundant directory entries in activity log
|
||||||
|
* Remove deleted accounts properly from toolbar
|
||||||
|
* File manager integration: show hidden files as ignored
|
||||||
|
* Do not sync new big folders from server without user's consent
|
||||||
|
* Integrate selective sync into the default UI
|
||||||
|
* More reliable reconnect after timeout
|
||||||
|
* Improve progress reporting during sync
|
||||||
|
* Sharing: Do not allow sharing the root folder
|
||||||
|
* Sharing: Show thumbnail
|
||||||
|
* Client Updater: Check for updates periodically, not only once per run
|
||||||
|
* Quota: Only refresh from server when UI is shown
|
||||||
|
* SSL Button: Show more information
|
||||||
|
* System proxy: Ask user for credentials if needed
|
||||||
|
* Several fixes and performance improvements in the sync engine
|
||||||
|
* OS X: Show file name in UI if file has invalid UTF-8 in file name
|
||||||
|
* OS X: Support native finder integration for 10.10 Yosemite
|
||||||
|
* Network: Try to use SSL session tickets/identifiers
|
||||||
|
* Windows: Support paths >255 characters
|
||||||
|
* Windows, OS X: Allow to not sync hidden files
|
||||||
|
* Windows: Remove misleading option to remove sync data
|
||||||
|
* Windows: Do not provoke Active Directory account locking if password changes
|
||||||
|
* Windows: Fix installer when installing unprivileged
|
||||||
|
|
||||||
|
.. note:: When you upgrade from 1.8, restart Windows to ensure that all new
|
||||||
|
features are visible.
|
||||||
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
================================
|
||||||
Using the Synchronization Client
|
Using the Synchronization Client
|
||||||
================================
|
================================
|
||||||
|
|
||||||
@@ -8,273 +9,146 @@ in the system tray (Windows, KDE), status bar (Mac OS X), or notification area
|
|||||||
(Linux).
|
(Linux).
|
||||||
|
|
||||||
.. image:: images/icon.png
|
.. image:: images/icon.png
|
||||||
|
:alt: Status icon, little cloud with green circle and white checkmark
|
||||||
|
|
||||||
The status indicator uses overlay icons to indicate the current status of your
|
The status indicator uses overlay icons to indicate the current status of your
|
||||||
synchronization. The green circle with the white checkmark tells you that your
|
synchronization. The green circle with the white checkmark tells you that your
|
||||||
synchronization is current and you are connected to your ownCloud server.
|
synchronization is current and you are connected to your ownCloud server.
|
||||||
|
|
||||||
.. image:: images/icon-syncing.png
|
.. image:: images/icon-syncing.png
|
||||||
|
:alt: Status icon, little cloud with blue circle and white semi-circles
|
||||||
|
|
||||||
The blue icon with the white semi-circles means synchronization is in progress.
|
The blue icon with the white semi-circles means synchronization is in progress.
|
||||||
|
|
||||||
.. image:: images/icon-paused.png
|
.. image:: images/icon-paused.png
|
||||||
|
:alt: Status icon, little cloud with yellow circle and vertical parallel
|
||||||
|
lines
|
||||||
|
|
||||||
The yellow overlay icon with the parallel lines tells you your synchronization
|
The yellow overlay icon with the parallel lines tells you your synchronization
|
||||||
has been paused. (Most likely by you, by opening the client and clicking
|
has been paused. (Most likely by you.)
|
||||||
Account > Pause.)
|
|
||||||
|
|
||||||
.. image:: images/icon-offline.png
|
.. image:: images/icon-offline.png
|
||||||
|
:alt: Status icon, little gray cloud with gray circle and three horizontal
|
||||||
|
white dots
|
||||||
|
|
||||||
The gray icon with three white dots means your sync client has lost its
|
The gray icon with three white dots means your sync client has lost its
|
||||||
connection with your ownCloud server.
|
connection with your ownCloud server.
|
||||||
|
|
||||||
.. image:: images/icon-information.png
|
.. image:: images/icon-information.png
|
||||||
|
:alt: Status icon, little cloud with letter "i" in white circle
|
||||||
|
|
||||||
When you see a white circle with the letter "i" that is the informational icon,
|
When you see a white circle with the letter "i" that is the informational icon,
|
||||||
so you should click it to see what it has to tell you.
|
so you should click it to see what it has to tell you.
|
||||||
|
|
||||||
.. image:: images/icon-error.png
|
.. image:: images/icon-error.png
|
||||||
|
:alt: Status icon, little cloud with red circle and white x
|
||||||
|
|
||||||
The red circle with the white "x" indicates a configuration error, such as an
|
The red circle with the white "x" indicates a configuration error, such as an
|
||||||
incorrect login or server URL.
|
incorrect login or server URL.
|
||||||
|
|
||||||
Using the Desktop Client Menu
|
Using the Right-Click Menu
|
||||||
-----------------------------
|
--------------------------
|
||||||
|
|
||||||
A right-click on the icon opens the following menu:
|
A right-click on the icon opens a menu for quick access to multiple operations.
|
||||||
|
|
||||||
.. image:: images/menu.png
|
.. image:: images/menu.png
|
||||||
|
:alt: the right-click sync client menu
|
||||||
**ownCloud Desktop Client menu**
|
|
||||||
|
|
||||||
The Desktop Client menu provides the following options:
|
The Desktop Client menu provides the following options:
|
||||||
|
|
||||||
* ``Open ownCloud in browser``: Launches the ownCloud Web interface.
|
* Open ownCloud in browser
|
||||||
* ``Open folder 'ownCloud'``: Opens your local ownCloud folder. If you have
|
* Open folder [your local sync folder]
|
||||||
defined multiple synchronization targets, the window displays each local
|
* Up to date
|
||||||
folder.
|
* Recent changes
|
||||||
* **Disk space indicator**: Indicates the amount of space currently used on the
|
* Settings
|
||||||
server.
|
* Help
|
||||||
* **Operation indicator**: Displays the status of the current synchronization
|
* Log out
|
||||||
process or indicates ``Up to date`` if the server and client are in sync.
|
* Quit ownCloud
|
||||||
* **Recent Changes**: Displays the last six files modified, and shows the
|
|
||||||
current synchronization status listing all changes since the last restart of the
|
|
||||||
ownCloud client.
|
|
||||||
* ``Settings...``: The settings menu.
|
|
||||||
* ``Help``: Opens a browser to display ownCloud Desktop Client Guide.
|
|
||||||
* ``Sign out``: Stops synchronization.
|
|
||||||
* ``Quit ownCloud``: Quits the ownCloud Client, ending any currently running
|
|
||||||
synchronizations.
|
|
||||||
|
|
||||||
Using the Account Settings Window
|
Using the Account Settings Window
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
.. index:: account settings, user, password, Server URL
|
.. index:: account settings, user, password, Server URL
|
||||||
|
|
||||||
The ``Account`` window provides a summary of your ownCloud account settings.
|
Click **Settings** in the right-click menu to see a summary of your ownCloud
|
||||||
You can manage which folders and files you want to synchronize, change your
|
account settings, or left-click your systray icon. This shows which ownCloud
|
||||||
account settings, and pause and resume synchronization.
|
account you are connected to (or accounts, if you have more than one) your
|
||||||
|
quota status, and a window for managing your synchronization settings.
|
||||||
|
|
||||||
To access and modify the account settings:
|
.. image:: images/client6.png
|
||||||
|
:alt: Account settings window
|
||||||
|
|
||||||
.. image:: images/settings_account.png
|
At the top of the window are tabs for each configured sync account, and three
|
||||||
:scale: 50 %
|
others for Activity, General and Network settings. On your account tabs you
|
||||||
|
have the following features:
|
||||||
|
|
||||||
The fields and options in this window include:
|
* Connection status, showing which ownCloud server you are connected to, and
|
||||||
|
your ownCloud username.
|
||||||
|
* A **Remove Account** button, which deletes your account but does not delete
|
||||||
|
your data files.
|
||||||
|
* Used and available space on the server.
|
||||||
|
* Current synchronization status.
|
||||||
|
* **Add Folder Sync Connection** button, which is active only when you have
|
||||||
|
removed synchronization on an account (see **Remove Sync** below).
|
||||||
|
|
||||||
* ``Connected to <ownCloud instance> as <user>`` field: Your user account on an ownCloud
|
The little button with three dots that sits to the right of the sync status bar
|
||||||
server.
|
offers three additional options:
|
||||||
|
|
||||||
* ``Add Folder...`` button: Add another folder to the
|
* Open Folder
|
||||||
synchronization process (see ``Adding a Folder``).
|
* Pause Sync
|
||||||
|
* Remove Sync
|
||||||
|
|
||||||
* ``Pause/Resume`` button: Pauses the current sync (or prevents the client from
|
**Pause Sync** pauses sync operations without making any changes to your account.
|
||||||
starting a new sync), or resumes the sync process.
|
|
||||||
|
|
||||||
* ``Remove`` button: Removes the selected folder from the sync process. This
|
**Remove Sync** suspends synchronization without removing the account, and it
|
||||||
button is used when you want to synchronize only a few folders and not the
|
removes your folder sync selection. When you're ready to resume synchronization
|
||||||
root folder.
|
click the **Add Folder Sync Connection** button, and re-select the folders you
|
||||||
|
want to sync.
|
||||||
|
|
||||||
* ``Storage Usage`` field: Displays how much space your files are using on the
|
.. image:: images/client-7.png
|
||||||
ownCloud server.
|
:alt: Extra options for sync operations
|
||||||
|
|
||||||
* ``Edit Ignored Files`` button: Launches the Ignored Files Editor.
|
The Activity window contains the log of your recent activities, including files
|
||||||
|
downloaded and deleted, and which local folders your files went into.
|
||||||
|
|
||||||
* ``Modify Account`` button: Use this to change your ownCloud server settings
|
The General window has configuration options such as **Launch on System
|
||||||
by launching the account setup wizard (see :doc:`accountsetup`).
|
Startup**, **Use Monochrome Icons**, and **Show Desktop Notifications**. This
|
||||||
|
is where you will find the **Edit Ignored Files** button, to launch the ignored
|
||||||
|
files editor, and two new features: **Ask confirmation before downloading
|
||||||
|
folders larger than [folder size]**, and **Add an Account**.
|
||||||
|
|
||||||
Adding a Folder
|
Multi-Account Support
|
||||||
^^^^^^^^^^^^^^^
|
---------------------
|
||||||
|
|
||||||
The ``Add Folder ...`` button enables you to add a new local folder to the
|
You may now configure multiple ownCloud accounts in your desktop sync client.
|
||||||
synchronization process.
|
Simply click the **Add an Account** button on the General tab, and follow the
|
||||||
|
account creation wizard. The new account will appear as a new tab in the settings dialog, where you can adjust its settings at any time.
|
||||||
To add a new folder:
|
|
||||||
|
|
||||||
1. Click the ``Add Folder ...`` button in the Account window.
|
|
||||||
|
|
||||||
The ``Add Folder...`` window opens
|
|
||||||
|
|
||||||
.. image:: images/folderwizard_local.png
|
|
||||||
|
|
||||||
2. Type a *unique* path and alias name to the folder, or use the ``Choose...``
|
|
||||||
button to open a graphical file picker.
|
|
||||||
|
|
||||||
.. note:: Nested synchronizations are not supported. You
|
|
||||||
cannot add a folder that is already contained within another synchronized
|
|
||||||
folder. In addition, you cannot add a higher level (parent) folder that
|
|
||||||
contains a folder to which you are already synchronizing. By default, the
|
|
||||||
ownCloud Set Up Wizard synchronizes your entire ownCloud account to the root
|
|
||||||
folder of the ownCloud server. If you wish to sync certain specific folders and not
|
|
||||||
the entire root, you must first remove the root folder.
|
|
||||||
|
|
||||||
3. Click 'Next' to continue.
|
|
||||||
|
|
||||||
A window opens prompting you to select a remote destination folder on the
|
|
||||||
ownCloud server to synchronize.
|
|
||||||
|
|
||||||
.. image:: images/folderwizard_remote.png
|
|
||||||
|
|
||||||
4. Select a folder on the ownCloud server to which you want to synchronize your
|
|
||||||
newly added local folder.
|
|
||||||
|
|
||||||
.. note:: A server folder can only be synchronized with a particular client
|
|
||||||
once. If you attempt to sync the root directory, you cannot sync with
|
|
||||||
other folders on the server. Similarly, if you sync with folder ``/a``, you
|
|
||||||
cannot create another sync with ``/a/b``, since ``b`` is already being
|
|
||||||
synched.
|
|
||||||
|
|
||||||
Editing Ignored Files
|
Editing Ignored Files
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
---------------------
|
||||||
|
|
||||||
The :guilabel:`Ignored Files Editor` provides a list of files that are ignored
|
The Ignored Files Editor can be opened by clicking on the button in the General tab of the settings dialog. The settings apply to all configured accounts. The :guilabel:`Ignored Files Editor` provides a list of files that are ignored
|
||||||
(that is, not synchronized) by the client and server during synchronizations.
|
(that is, not synchronized) by the client and server during synchronizations.
|
||||||
You may add additional files or directories that you want to exclude from the
|
You may add additional files or directories that you want to exclude from the
|
||||||
synchronization process. In addition to using standard characters, the Ignored
|
synchronization process. In addition to using standard characters, the Ignored
|
||||||
Files Editor enables you to use wild cards (for example, using an asterisk ‘*’
|
Files Editor enables you to use wild cards (for example, using an asterisk ‘*’
|
||||||
to indicate multiple characters or a question mark ‘?’ to indicate a single
|
to indicate multiple characters or a question mark ‘?’ to indicate a single
|
||||||
character).
|
character).
|
||||||
|
|
||||||
For additional information see `Using the Ignored Files
|
For additional information see `Using the Ignored Files
|
||||||
Editor`_
|
Editor`_
|
||||||
|
|
||||||
Using the Activity Settings Window
|
Using the Network Window
|
||||||
----------------------------------
|
------------------------
|
||||||
|
|
||||||
.. index:: activity, recent changes, sync activity
|
|
||||||
|
|
||||||
The Activity window provides an in-depth account of recent synchronization activity. It
|
|
||||||
shows files that have not been synchronized because they are on the ignored files list,
|
|
||||||
or
|
|
||||||
because they cannot be synced due to containing special characters that cannot be stored
|
|
||||||
on certain file systems.
|
|
||||||
|
|
||||||
.. image:: images/settings_activity.png
|
|
||||||
|
|
||||||
You can open the Activity window in one of the following ways:
|
|
||||||
|
|
||||||
- Click 'Activity' in the left frame of the ownCloud Settings window.
|
|
||||||
|
|
||||||
- Invoke the window from the ownCloud Desktop Client menu by selecting ``Recent
|
|
||||||
Changes`` > ``Details...``. (See Using the Desktop Client Menu.)
|
|
||||||
|
|
||||||
Using the General Settings Window
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
.. index:: general settings, auto start, startup, desktop notifications
|
|
||||||
|
|
||||||
The General settings window has options for launching the client at system
|
|
||||||
startup, notifications, and using monochrome icons.
|
|
||||||
|
|
||||||
.. image:: images/settings_general.png
|
|
||||||
|
|
||||||
* ``Launch on System Startup`` checkbox: Provides the option to check (enable)
|
|
||||||
or uncheck (disable) whether the ownCloud Desktop Client launches at system
|
|
||||||
startup. By default, this option is enabled (checked) after you have configured
|
|
||||||
your account.
|
|
||||||
|
|
||||||
* ``Show Desktop Notifications`` checkbox: Provides the option to check (enable)
|
|
||||||
or uncheck (disable) notifications about sync activity.
|
|
||||||
|
|
||||||
* ``Use Monochrome Icons`` checkbox: Provides the option to check (enable) or
|
|
||||||
uncheck (disable) the use of monochrome (visually less obtrusive) icons.
|
|
||||||
|
|
||||||
.. note:: This option can be useful on Mac OS X platforms.
|
|
||||||
|
|
||||||
* ``About`` field: Provides information about the software authors along with
|
|
||||||
pertinent build conditions.
|
|
||||||
|
|
||||||
.. note:: Information in this field can be valuable when submitting a support
|
|
||||||
request.
|
|
||||||
|
|
||||||
* ``Updates`` field: Notifies you of any available updates for the ownCloud Desktop
|
|
||||||
Client.
|
|
||||||
|
|
||||||
Using the Network Settings Window
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
.. index:: proxy settings, SOCKS, bandwith, throttling, limiting
|
.. index:: proxy settings, SOCKS, bandwith, throttling, limiting
|
||||||
|
|
||||||
The Network settings window enables you to define network proxy settings, and also to
|
The Network settings window enables you to define network proxy settings, and
|
||||||
limit download and upload bandwidth.
|
also to limit download and upload bandwidth. New to version 2.0 is the option
|
||||||
|
for automatic bandwidth limits.
|
||||||
|
|
||||||
.. image:: images/settings_network.png
|
.. image:: images/settings_network.png
|
||||||
|
|
||||||
Specifying Proxy Settings
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
* ``No Proxy`` option: Do not use a proxy.
|
|
||||||
|
|
||||||
* ``Use system proxy`` option: Default setting. Follows the systems proxy
|
|
||||||
settings.
|
|
||||||
|
|
||||||
* ``Specify proxy manually as`` option: Enables you to specify
|
|
||||||
the following custom proxy settings:
|
|
||||||
|
|
||||||
- ``HTTP(S)``: Used when you are required to use an HTTP(S) proxy server (for
|
|
||||||
example, Squid or Microsoft Forefront TMG).
|
|
||||||
|
|
||||||
- ``SOCKSv5``: Typically used in special company LAN setups, or in
|
|
||||||
combination with the OpenSSH dynamic application level forwarding feature
|
|
||||||
(see ``ssh -D``).
|
|
||||||
|
|
||||||
- ``Host``: Host name or IP address of the proxy server along with the port
|
|
||||||
number. HTTP proxies typically listen over Ports 8080 (default) or 3128.
|
|
||||||
SOCKS servers typically listen over port 1080.
|
|
||||||
|
|
||||||
* ``Proxy Server requires authentication`` checkbox: Provides the option to
|
|
||||||
check (enable/require) or uncheck (disable/not require) proxy server
|
|
||||||
authentication. When not checked, the proxy server must be configured to
|
|
||||||
allow anonymous usage. When checked, a proxy server username and password is
|
|
||||||
required.
|
|
||||||
|
|
||||||
Bandwidth Limiting
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Synchronization of files between a client and server can use a lot of
|
|
||||||
bandwidth, so you can limit how much your ownCloud sync client uses.
|
|
||||||
|
|
||||||
- ``No limit`` option: The default setting for the client; specifies that there
|
|
||||||
are no limit settings on the bandwidth used by data downloaded from the server.
|
|
||||||
|
|
||||||
- ``Limit to <value> KBytes/s`` option: Limits (throttles) the bandwidth to
|
|
||||||
a customized value (in KBytes/second).
|
|
||||||
|
|
||||||
The Upload Bandwidth field (for data flowing from the ownCloud client to the
|
|
||||||
server) provides the following options:
|
|
||||||
|
|
||||||
- ``No limit`` option: The default setting for the client; specifies that there
|
|
||||||
are no limit settings on the bandwidth used by data uploaded to the server.
|
|
||||||
|
|
||||||
- ``Limit automatically``: When enabled, the ownCloud client surrenders
|
|
||||||
available bandwidth to other applications. Use this option if there are
|
|
||||||
issues with real time communication (for example, the use of IP phone or live
|
|
||||||
streaming) in conjunction with the ownCloud Client.
|
|
||||||
|
|
||||||
- ``Limit to <value> KBytes/s`` option: Limits (throttles) the bandwidth to a
|
|
||||||
customized value (in KBytes/second).
|
|
||||||
|
|
||||||
|
|
||||||
.. _ignoredFilesEditor-label:
|
.. _ignoredFilesEditor-label:
|
||||||
|
|
||||||
Using the Ignored Files Editor
|
Using the Ignored Files Editor
|
||||||
@@ -288,13 +162,13 @@ can use the *Ignored Files Editor*.
|
|||||||
|
|
||||||
.. image:: images/ignored_files_editor.png
|
.. image:: images/ignored_files_editor.png
|
||||||
|
|
||||||
For your convenience, the editor is
|
For your convenience, the editor is pre-populated with a default list of typical
|
||||||
pre-populated with a default list of typical ignore patterns. These patterns
|
ignore patterns. These patterns are contained in a system file (typically
|
||||||
are contained in a system file (typically ``sync-exclude.lst``) located in the
|
``sync-exclude.lst``) located in the ownCloud Client application directory. You
|
||||||
ownCloud Client application directory. You cannot modify these pre-populated
|
cannot modify these pre-populated patterns directly from the editor. However, if
|
||||||
patterns directly from the editor. However, if necessary, you can hover over
|
necessary, you can hover over any pattern in the list to show the path and
|
||||||
any pattern in the list to show the path and filename associated with that
|
filename associated with that pattern, locate the file, and edit the
|
||||||
pattern, locate the file, and edit the ``sync-exclude.lst`` file.
|
``sync-exclude.lst`` file.
|
||||||
|
|
||||||
.. note:: Modifying the global exclude definition file might render the client
|
.. note:: Modifying the global exclude definition file might render the client
|
||||||
unusable or result in undesired behavior.
|
unusable or result in undesired behavior.
|
||||||
|
|||||||
@@ -45,9 +45,9 @@ Other command line switches supported by ``owncloudcmd`` include the following:
|
|||||||
Credential Handling
|
Credential Handling
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
By default, ``owncloudcmd`` reads the client configuration and uses the
|
``owncloudcmd`` uses the credentials of the GUI synchronization client.
|
||||||
credentials of the GUI synchronization client. If no client is configured, or if
|
If no client is configured, or if you choose to use a different user to synchronize,
|
||||||
you choose to use a different user to synchronize, you can specify the user
|
you can specify the user
|
||||||
password setting with the usual URL pattern. For example::
|
password setting with the usual URL pattern. For example::
|
||||||
|
|
||||||
$ owncloudcmd / https://carla:secret@server/owncloud/remote.php/webdav/
|
$ owncloudcmd / https://carla:secret@server/owncloud/remote.php/webdav/
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ provides the following menu:
|
|||||||
since the last restart of ownCloud Client.
|
since the last restart of ownCloud Client.
|
||||||
* ``Settings...``: provides access to the settings menu.
|
* ``Settings...``: provides access to the settings menu.
|
||||||
* ``Help``: Opens a browser to display this help.
|
* ``Help``: Opens a browser to display this help.
|
||||||
* ``Sign out``: Signs the client of of the server.
|
* ``Log out``: Logs the client out of the server.
|
||||||
* ``Quit ownCloud``: Quits ownCloud Client, ending a currently running
|
* ``Quit ownCloud``: Quits ownCloud Client, ending a currently running
|
||||||
sync run.
|
sync run.
|
||||||
|
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ Comment=@APPLICATION_NAME@ desktop synchronization client
|
|||||||
GenericName=Folder Sync
|
GenericName=Folder Sync
|
||||||
Icon=@APPLICATION_EXECUTABLE@
|
Icon=@APPLICATION_EXECUTABLE@
|
||||||
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
|
||||||
|
X-GNOME-Autostart-Delay=3
|
||||||
|
|||||||
@@ -179,8 +179,8 @@ static OwnCloudFinderContentManager* sharedInstance = nil;
|
|||||||
{
|
{
|
||||||
//NSLog(@"%@", NSStringFromSelector(_cmd));
|
//NSLog(@"%@", NSStringFromSelector(_cmd));
|
||||||
|
|
||||||
// We won't request the new state if if finds the path in _fileNamesCache
|
// We won't request the new state if it finds the path in _fileNamesCache
|
||||||
// Move all entries to _oldFileNamesCache so that the get re-requested, but
|
// Move all entries to _oldFileNamesCache so that they get re-requested, but
|
||||||
// still available while we refill the cache
|
// still available while we refill the cache
|
||||||
[_oldFileNamesCache addEntriesFromDictionary:_fileNamesCache];
|
[_oldFileNamesCache addEntriesFromDictionary:_fileNamesCache];
|
||||||
[_fileNamesCache removeAllObjects];
|
[_fileNamesCache removeAllObjects];
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
692C18A516660C4700BF6A53 /* ContextMenuHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A416660C4600BF6A53 /* ContextMenuHandlers.m */; };
|
692C18A516660C4700BF6A53 /* ContextMenuHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A416660C4600BF6A53 /* ContextMenuHandlers.m */; };
|
||||||
692C18A9166617F500BF6A53 /* IconOverlayHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A8166617F500BF6A53 /* IconOverlayHandlers.m */; };
|
692C18A9166617F500BF6A53 /* IconOverlayHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A8166617F500BF6A53 /* IconOverlayHandlers.m */; };
|
||||||
692C18AC1666392700BF6A53 /* MenuManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18AB1666392700BF6A53 /* MenuManager.m */; };
|
692C18AC1666392700BF6A53 /* MenuManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18AB1666392700BF6A53 /* MenuManager.m */; };
|
||||||
6993878616494C000044E4DF /* RequestManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6993878516494C000044E4DF /* RequestManager.m */; };
|
6993878616494C000044E4DF /* RequestManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6993878516494C000044E4DF /* RequestManager.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
|
||||||
69948B361636D50E0093B6CE /* ContentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 69948B351636D50E0093B6CE /* ContentManager.m */; };
|
69948B361636D50E0093B6CE /* ContentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 69948B351636D50E0093B6CE /* ContentManager.m */; };
|
||||||
8C37DD9F161593BD00016A95 /* FinderHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C37DD9A161593BD00016A95 /* FinderHook.m */; };
|
8C37DD9F161593BD00016A95 /* FinderHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C37DD9A161593BD00016A95 /* FinderHook.m */; };
|
||||||
8C37DDB2161593FF00016A95 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C37DDB1161593FF00016A95 /* Cocoa.framework */; };
|
8C37DDB2161593FF00016A95 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C37DDB1161593FF00016A95 /* Cocoa.framework */; };
|
||||||
|
|||||||
@@ -49,11 +49,7 @@ static OwnCloudFinderRequestManager* sharedInstance = nil;
|
|||||||
|
|
||||||
- (void)dealloc
|
- (void)dealloc
|
||||||
{
|
{
|
||||||
[_syncClientProxy release];
|
|
||||||
|
|
||||||
sharedInstance = nil;
|
sharedInstance = nil;
|
||||||
|
|
||||||
[super dealloc];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (OwnCloudFinderRequestManager*)sharedInstance
|
+ (OwnCloudFinderRequestManager*)sharedInstance
|
||||||
@@ -136,12 +132,11 @@ static OwnCloudFinderRequestManager* sharedInstance = nil;
|
|||||||
{
|
{
|
||||||
// NSLog(@"Socket DISconnected! %@", [err localizedDescription]);
|
// NSLog(@"Socket DISconnected! %@", [err localizedDescription]);
|
||||||
|
|
||||||
// clear the registered pathes.
|
// clear the registered paths.
|
||||||
[_registeredPathes release];
|
|
||||||
_registeredPathes = [[NSMutableDictionary alloc] init];
|
_registeredPathes = [[NSMutableDictionary alloc] init];
|
||||||
[_requestedPaths removeAllObjects];
|
[_requestedPaths removeAllObjects];
|
||||||
|
|
||||||
// clear the caches in conent manager
|
// clear the caches in content manager
|
||||||
OwnCloudFinderContentManager *contentman = [OwnCloudFinderContentManager sharedInstance];
|
OwnCloudFinderContentManager *contentman = [OwnCloudFinderContentManager sharedInstance];
|
||||||
[contentman clearFileNameCache];
|
[contentman clearFileNameCache];
|
||||||
[contentman repaintAllWindows];
|
[contentman repaintAllWindows];
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
EXPORT OSErr HandleLoadEvent(const AppleEvent* ev, AppleEvent* reply, long refcon);
|
EXPORT OSErr HandleLoadEvent(const AppleEvent* ev, AppleEvent* reply, long refcon);
|
||||||
|
|
||||||
static NSString* globalLock = @"I'm the global lock to prevent concruent handler executions";
|
static NSString* globalLock = @"I'm the global lock to prevent concurrent handler executions";
|
||||||
|
|
||||||
// SIMBL-compatible interface
|
// SIMBL-compatible interface
|
||||||
@interface OwnCloudShell : NSObject { }
|
@interface OwnCloudShell : NSObject { }
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
_remoteEnd = (NSDistantObject <ChannelProtocol> *)tx;
|
_remoteEnd = (NSDistantObject <ChannelProtocol> *)tx;
|
||||||
[_remoteEnd setProtocolForProxy:@protocol(ChannelProtocol)];
|
[_remoteEnd setProtocolForProxy:@protocol(ChannelProtocol)];
|
||||||
|
|
||||||
// Everything is set up, start querrying
|
// Everything is set up, start querying
|
||||||
[self askOnSocket:@"" query:@"SHARE_MENU_TITLE"];
|
[self askOnSocket:@"" query:@"SHARE_MENU_TITLE"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
- The patch 0001-KOverlayIconPlugin.patch should be applied to kde-baseapps git repository
|
- The patch 0001-KOverlayIconPlugin.patch should be applied to kde-baseapps git repository
|
||||||
(It should applies to both KDE/4.14 or Applications/14.12 branches)
|
(It should apply to both KDE/4.14 or Applications/14.12 branches)
|
||||||
|
|
||||||
- Recompile and install dolphin
|
- Recompile and install dolphin
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
- After installing, run
|
- After installing, run
|
||||||
kdeinit4 --noincremental
|
kdeinit4 --noincremental
|
||||||
|
|
||||||
- To test taht the plugin is well installed
|
- To test that the plugin is well installed
|
||||||
ktraderclient --servicetype KOverlayIconPlugin
|
ktraderclient --servicetype KOverlayIconPlugin
|
||||||
It should show the Owncloud plugin
|
It should show the Owncloud plugin
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
- The patch 0001-KOverlayIconPlugin.patch should be applied to kde-baseapps git repository
|
- The patch 0001-KOverlayIconPlugin.patch should be applied to kde-baseapps git repository
|
||||||
(It should applies to frameworks branch)
|
(It should apply to frameworks branch)
|
||||||
|
|
||||||
- Recompile and install dolphin (frameworks branch)
|
- Recompile and install dolphin (frameworks branch)
|
||||||
|
|
||||||
|
|||||||
@@ -157,13 +157,18 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||||||
# internal or external file?!
|
# internal or external file?!
|
||||||
syncedFile = False
|
syncedFile = False
|
||||||
for reg_path in socketConnect.registered_paths:
|
for reg_path in socketConnect.registered_paths:
|
||||||
|
topLevelFolder=False
|
||||||
filename = get_local_path(file.get_uri())
|
filename = get_local_path(file.get_uri())
|
||||||
#check if its a folder (ends with an /), if yes add a "/" otherwise it will not find the entry in the table
|
#check if its a folder (ends with an /), if yes add a "/" otherwise it will not find the entry in the table
|
||||||
if os.path.isdir(filename+"/"):
|
if os.path.isdir(filename+"/"):
|
||||||
filename=filename+"/"
|
filename=filename+"/"
|
||||||
|
#check if toplevel folder, we need to ignore those as they cannot be shared
|
||||||
|
if filename.count("/") < (reg_path.count("/")+2):
|
||||||
|
topLevelFolder=True
|
||||||
# only show the menu extension if the file is synced and the sync
|
# only show the menu extension if the file is synced and the sync
|
||||||
# status is ok. Not for ignored files etc.
|
# status is ok. Not for ignored files etc.
|
||||||
if filename.startswith(reg_path) and socketConnect.nautilusVFSFile_table[filename]['state'] == 'OK':
|
# ignore top level folders
|
||||||
|
if filename.startswith(reg_path) and topLevelFolder == False and socketConnect.nautilusVFSFile_table[filename]['state'] == 'OK':
|
||||||
syncedFile = True
|
syncedFile = True
|
||||||
|
|
||||||
# if it is neither in a synced folder or is a directory
|
# if it is neither in a synced folder or is a directory
|
||||||
@@ -220,7 +225,7 @@ class SyncStateExtension(GObject.GObject, Nautilus.ColumnProvider, Nautilus.Info
|
|||||||
for item in update_items:
|
for item in update_items:
|
||||||
item.invalidate_extension_info()
|
item.invalidate_extension_info()
|
||||||
|
|
||||||
# Handles a single line of server respoonse and sets the emblem
|
# Handles a single line of server response and sets the emblem
|
||||||
def handle_commands(self, action, args):
|
def handle_commands(self, action, args):
|
||||||
Emblems = { 'OK' : appname +'_ok',
|
Emblems = { 'OK' : appname +'_ok',
|
||||||
'SYNC' : appname +'_sync',
|
'SYNC' : appname +'_sync',
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#define OVERLAY_GENERIC_NAME L"OC Overlay Handler"
|
#define OVERLAY_GENERIC_NAME L"OC Overlay Handler"
|
||||||
|
|
||||||
// two spaces to put us a head of the competition :/
|
// two spaces to put us ahead of the competition :/
|
||||||
#define OVERLAY_NAME_ERROR L" OCError"
|
#define OVERLAY_NAME_ERROR L" OCError"
|
||||||
#define OVERLAY_NAME_ERROR_SHARED L" OCErrorShared"
|
#define OVERLAY_NAME_ERROR_SHARED L" OCErrorShared"
|
||||||
#define OVERLAY_NAME_OK L" OCOK"
|
#define OVERLAY_NAME_OK L" OCOK"
|
||||||
|
|||||||
2
src/3rdparty/qtmacgoodies
vendored
@@ -45,7 +45,7 @@ endif()
|
|||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
|
if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
|
||||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||||
install(CODE "
|
install(CODE "
|
||||||
message(STATUS \"Deploying (Qt) dependencies and fixing library pathes...\")
|
message(STATUS \"Deploying (Qt) dependencies and fixing library paths...\")
|
||||||
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
||||||
" COMPONENT RUNTIME)
|
" COMPONENT RUNTIME)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ void help()
|
|||||||
std::cout << " Proxy is http://server:port" << std::endl;
|
std::cout << " Proxy is http://server:port" << std::endl;
|
||||||
std::cout << " --trust Trust the SSL certification." << std::endl;
|
std::cout << " --trust Trust the SSL certification." << std::endl;
|
||||||
std::cout << " --exclude [file] Exclude list file" << std::endl;
|
std::cout << " --exclude [file] Exclude list file" << std::endl;
|
||||||
std::cout << " --unsyncedfolders [file] File containing the list of unsynced folder (selective sync)" << std::endl;
|
std::cout << " --unsyncedfolders [file] File containing the list of unsynced folders (selective sync)" << std::endl;
|
||||||
std::cout << " --user, -u [name] Use [name] as the login name" << std::endl;
|
std::cout << " --user, -u [name] Use [name] as the login name" << std::endl;
|
||||||
std::cout << " --password, -p [pass] Use [pass] as password" << std::endl;
|
std::cout << " --password, -p [pass] Use [pass] as password" << std::endl;
|
||||||
std::cout << " -n Use netrc (5) for login" << std::endl;
|
std::cout << " -n Use netrc (5) for login" << std::endl;
|
||||||
@@ -185,15 +185,7 @@ void parseOptions( const QStringList& app_args, CmdOptions *options )
|
|||||||
}
|
}
|
||||||
|
|
||||||
options->target_url = args.takeLast();
|
options->target_url = args.takeLast();
|
||||||
// check if the remote.php/webdav tail was added and append if not.
|
|
||||||
if(!options->target_url.endsWith("/")) {
|
|
||||||
options->target_url.append("/");
|
|
||||||
}
|
|
||||||
if( !options->target_url.contains("remote.php/webdav/")) {
|
|
||||||
options->target_url.append("remote.php/webdav/");
|
|
||||||
}
|
|
||||||
if (options->target_url.startsWith("http"))
|
|
||||||
options->target_url.replace(0, 4, "owncloud");
|
|
||||||
options->source_dir = args.takeLast();
|
options->source_dir = args.takeLast();
|
||||||
if (!options->source_dir.endsWith('/')) {
|
if (!options->source_dir.endsWith('/')) {
|
||||||
options->source_dir.append('/');
|
options->source_dir.append('/');
|
||||||
@@ -280,6 +272,21 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
parseOptions( app.arguments(), &options );
|
parseOptions( app.arguments(), &options );
|
||||||
|
|
||||||
|
AccountPtr account = Account::create();
|
||||||
|
|
||||||
|
if( !account ) {
|
||||||
|
qFatal("Could not initialize account!");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
// check if the webDAV path was added to the url and append if not.
|
||||||
|
if(!options.target_url.endsWith("/")) {
|
||||||
|
options.target_url.append("/");
|
||||||
|
}
|
||||||
|
if( !options.target_url.contains( account->davPath() )) {
|
||||||
|
options.target_url.append(account->davPath());
|
||||||
|
}
|
||||||
|
if (options.target_url.startsWith("http"))
|
||||||
|
options.target_url.replace(0, 4, "owncloud");
|
||||||
QUrl url = QUrl::fromUserInput(options.target_url);
|
QUrl url = QUrl::fromUserInput(options.target_url);
|
||||||
|
|
||||||
// Order of retrieval attempt (later attempts override earlier ones):
|
// Order of retrieval attempt (later attempts override earlier ones):
|
||||||
@@ -331,8 +338,6 @@ int main(int argc, char **argv) {
|
|||||||
// take the unmodified url to pass to csync_create()
|
// take the unmodified url to pass to csync_create()
|
||||||
QByteArray remUrl = options.target_url.toUtf8();
|
QByteArray remUrl = options.target_url.toUtf8();
|
||||||
|
|
||||||
AccountPtr account = Account::create();
|
|
||||||
|
|
||||||
// Find the folder and the original owncloud url
|
// Find the folder and the original owncloud url
|
||||||
QStringList splitted = url.path().split(account->davPath());
|
QStringList splitted = url.path().split(account->davPath());
|
||||||
url.setPath(splitted.value(0));
|
url.setPath(splitted.value(0));
|
||||||
@@ -443,7 +448,7 @@ restart_sync:
|
|||||||
|
|
||||||
|
|
||||||
if (loadedSystemExcludeList != 0 && loadedUserExcludeList != 0) {
|
if (loadedSystemExcludeList != 0 && loadedUserExcludeList != 0) {
|
||||||
// Always make sure at least one list had been loaded
|
// Always make sure at least one list has been loaded
|
||||||
qFatal("Cannot load system exclude list or list supplied via --exclude");
|
qFatal("Cannot load system exclude list or list supplied via --exclude");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ if(NOT BUILD_LIBRARIES_ONLY)
|
|||||||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||||
install(CODE "
|
install(CODE "
|
||||||
message(STATUS \"Deploying (Qt) dependencies and fixing library pathes...\")
|
message(STATUS \"Deploying (Qt) dependencies and fixing library paths...\")
|
||||||
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/admin/osx/macdeployqt.py\" ${CMAKE_INSTALL_PREFIX}/${OWNCLOUD_OSX_BUNDLE} ${QT_QMAKE_EXECUTABLE})
|
||||||
" COMPONENT RUNTIME)
|
" COMPONENT RUNTIME)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ set(client_SRCS
|
|||||||
sslerrordialog.cpp
|
sslerrordialog.cpp
|
||||||
syncrunfilelog.cpp
|
syncrunfilelog.cpp
|
||||||
systray.cpp
|
systray.cpp
|
||||||
accountmigrator.cpp
|
|
||||||
quotainfo.cpp
|
quotainfo.cpp
|
||||||
accountstate.cpp
|
accountstate.cpp
|
||||||
addcertificatedialog.cpp
|
addcertificatedialog.cpp
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ static const char userC[] = "user";
|
|||||||
static const char httpUserC[] = "http_user";
|
static const char httpUserC[] = "http_user";
|
||||||
static const char caCertsKeyC[] = "CaCertificates";
|
static const char caCertsKeyC[] = "CaCertificates";
|
||||||
static const char accountsC[] = "Accounts";
|
static const char accountsC[] = "Accounts";
|
||||||
|
static const char versionC[] = "version";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -45,7 +46,8 @@ bool AccountManager::restore()
|
|||||||
auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
|
auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
|
||||||
|
|
||||||
// If there are no accounts, check the old format.
|
// If there are no accounts, check the old format.
|
||||||
if (settings->childGroups().isEmpty()) {
|
if (settings->childGroups().isEmpty()
|
||||||
|
&& !settings->contains(QLatin1String(versionC))) {
|
||||||
return restoreFromLegacySettings();
|
return restoreFromLegacySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,11 +124,15 @@ bool AccountManager::restoreFromLegacySettings()
|
|||||||
void AccountManager::save(bool saveCredentials)
|
void AccountManager::save(bool saveCredentials)
|
||||||
{
|
{
|
||||||
auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
|
auto settings = Account::settingsWithGroup(QLatin1String(accountsC));
|
||||||
|
settings->setValue(QLatin1String(versionC), 2);
|
||||||
foreach (const auto &acc, _accounts) {
|
foreach (const auto &acc, _accounts) {
|
||||||
settings->beginGroup(acc->account()->id());
|
settings->beginGroup(acc->account()->id());
|
||||||
save(acc->account(), *settings, saveCredentials);
|
save(acc->account(), *settings, saveCredentials);
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
settings->sync();
|
||||||
|
qDebug() << "Saved all account settings, status:" << settings->status();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::wantsAccountSavedSlot(AccountPtr a)
|
void AccountManager::wantsAccountSavedSlot(AccountPtr a)
|
||||||
@@ -136,6 +142,9 @@ void AccountManager::wantsAccountSavedSlot(AccountPtr a)
|
|||||||
settings->beginGroup(a->id());
|
settings->beginGroup(a->id());
|
||||||
save(a, *settings, false); // don't save credentials they might not have been loaded yet
|
save(a, *settings, false); // don't save credentials they might not have been loaded yet
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
|
|
||||||
|
settings->sync();
|
||||||
|
qDebug() << "Saved account settings, status:" << settings->status();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveCredentials)
|
void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveCredentials)
|
||||||
@@ -158,7 +167,6 @@ void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveC
|
|||||||
if (acc->_settingsMap.contains(httpUserC))
|
if (acc->_settingsMap.contains(httpUserC))
|
||||||
settings.setValue(userC, acc->_settingsMap.value(httpUserC));
|
settings.setValue(userC, acc->_settingsMap.value(httpUserC));
|
||||||
}
|
}
|
||||||
settings.sync();
|
|
||||||
|
|
||||||
// Save accepted certificates.
|
// Save accepted certificates.
|
||||||
settings.beginGroup(QLatin1String("General"));
|
settings.beginGroup(QLatin1String("General"));
|
||||||
|
|||||||
@@ -1,89 +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; 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 "accountmigrator.h"
|
|
||||||
#include "configfile.h"
|
|
||||||
#include "folderman.h"
|
|
||||||
#include "theme.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include <QSettings>
|
|
||||||
#include <QStringList>
|
|
||||||
#include <QDir>
|
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
namespace OCC {
|
|
||||||
|
|
||||||
// The purpose of this class is to migrate an existing account that
|
|
||||||
// was set up with an unbranded client to an branded one.
|
|
||||||
// The usecase is: Usually people try first with the community client,
|
|
||||||
// later they maybe switch to a branded client. When they install the
|
|
||||||
// branded client first, it should automatically pick the information
|
|
||||||
// from the already configured account.
|
|
||||||
|
|
||||||
AccountMigrator::AccountMigrator()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// the list of folder definitions which are files in the directory "folders"
|
|
||||||
// underneath the ownCloud configPath (with ownCloud as a last segment)
|
|
||||||
// need to be copied to the themed path and adjusted.
|
|
||||||
|
|
||||||
QStringList AccountMigrator::migrateFolderDefinitons()
|
|
||||||
{
|
|
||||||
ConfigFile cfg;
|
|
||||||
QStringList re;
|
|
||||||
|
|
||||||
QString themePath = cfg.configPath();
|
|
||||||
// create the original ownCloud config path out of the theme path
|
|
||||||
// by removing the theme folder and append ownCloud.
|
|
||||||
QString oCPath = themePath;
|
|
||||||
if( oCPath.endsWith(QLatin1Char('/')) ) {
|
|
||||||
oCPath.truncate( oCPath.length()-1 );
|
|
||||||
}
|
|
||||||
oCPath = oCPath.left( oCPath.lastIndexOf('/'));
|
|
||||||
|
|
||||||
themePath += QLatin1String( "folders");
|
|
||||||
oCPath += QLatin1String( "/ownCloud/folders" );
|
|
||||||
|
|
||||||
qDebug() << "Migrator: theme-path: " << themePath;
|
|
||||||
qDebug() << "Migrator: ownCloud path: " << oCPath;
|
|
||||||
|
|
||||||
// get a dir listing of the ownCloud folder definitions and copy
|
|
||||||
// them over to the theme dir
|
|
||||||
QDir oCDir(oCPath);
|
|
||||||
oCDir.setFilter( QDir::Files );
|
|
||||||
QStringList files = oCDir.entryList();
|
|
||||||
|
|
||||||
foreach( const QString& file, files ) {
|
|
||||||
QString escapedAlias = FolderMan::instance()->escapeAlias(file);
|
|
||||||
QString themeFile = themePath + QDir::separator() + file;
|
|
||||||
QString oCFile = oCPath+QDir::separator()+file;
|
|
||||||
if( QFile::copy( oCFile, themeFile ) ) {
|
|
||||||
re.append(file);
|
|
||||||
qDebug() << "Migrator: Folder definition migrated: " << file;
|
|
||||||
|
|
||||||
// fix the connection entry of the folder definition
|
|
||||||
QSettings settings(themeFile, QSettings::IniFormat);
|
|
||||||
settings.beginGroup( escapedAlias );
|
|
||||||
settings.setValue(QLatin1String("connection"), Theme::instance()->appName());
|
|
||||||
settings.sync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return re;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,39 +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; 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 ACCOUNTMIGRATOR_H
|
|
||||||
#define ACCOUNTMIGRATOR_H
|
|
||||||
|
|
||||||
#include <QStringList>
|
|
||||||
|
|
||||||
namespace OCC {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The AccountSettings class
|
|
||||||
* @ingroup gui
|
|
||||||
*/
|
|
||||||
class AccountMigrator {
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AccountMigrator();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief migrateFolderDefinitons - migrate the folder definition files
|
|
||||||
* @return the list of migrated folder definitions
|
|
||||||
*/
|
|
||||||
QStringList migrateFolderDefinitons();
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // ACCOUNTMIGRATOR_H
|
|
||||||
@@ -112,19 +112,6 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) :
|
|||||||
QColor color = palette().highlight().color();
|
QColor color = palette().highlight().color();
|
||||||
ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));
|
ui->quotaProgressBar->setStyleSheet(QString::fromLatin1(progressBarStyleC).arg(color.name()));
|
||||||
|
|
||||||
QFont smallFont = ui->quotaInfoLabel->font();
|
|
||||||
smallFont.setPointSize(smallFont.pointSize() * 0.8);
|
|
||||||
ui->quotaInfoLabel->setFont(smallFont);
|
|
||||||
|
|
||||||
_quotaLabel = new QLabel(ui->quotaProgressBar);
|
|
||||||
QVBoxLayout *quotaProgressLayout = new QVBoxLayout(ui->quotaProgressBar);
|
|
||||||
quotaProgressLayout->setContentsMargins(-1,0,-1,0);
|
|
||||||
quotaProgressLayout->setSpacing(0);
|
|
||||||
quotaProgressLayout->addWidget(_quotaLabel);
|
|
||||||
|
|
||||||
// This ensures the progress bar is big enough for the label.
|
|
||||||
ui->quotaProgressBar->setMinimumHeight(_quotaLabel->height());
|
|
||||||
|
|
||||||
ui->connectLabel->setText(tr("No account configured."));
|
ui->connectLabel->setText(tr("No account configured."));
|
||||||
|
|
||||||
connect(_accountState, SIGNAL(stateChanged(int)), SLOT(slotAccountStateChanged(int)));
|
connect(_accountState, SIGNAL(stateChanged(int)), SLOT(slotAccountStateChanged(int)));
|
||||||
@@ -135,6 +122,24 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) :
|
|||||||
|
|
||||||
connect(ui->deleteButton, SIGNAL(clicked()) , this, SLOT(slotDeleteAccount()));
|
connect(ui->deleteButton, SIGNAL(clicked()) , this, SLOT(slotDeleteAccount()));
|
||||||
|
|
||||||
|
// Expand already on single click
|
||||||
|
ui->_folderList->setExpandsOnDoubleClick(false);
|
||||||
|
QObject::connect(ui->_folderList, SIGNAL(clicked(const QModelIndex &)),
|
||||||
|
this, SLOT(slotFolderListClicked(const QModelIndex&)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AccountSettings::doExpand()
|
||||||
|
{
|
||||||
|
ui->_folderList->expandToDepth(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AccountSettings::slotFolderListClicked( const QModelIndex& indx )
|
||||||
|
{
|
||||||
|
if( _model->classify(indx) == FolderStatusModel::RootFolder &&
|
||||||
|
_accountState && _accountState->state() == AccountState::Connected ) {
|
||||||
|
bool expanded = ! (ui->_folderList->isExpanded(indx));
|
||||||
|
ui->_folderList->setExpanded(indx, expanded);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
|
void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
|
||||||
@@ -152,15 +157,24 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
|
|||||||
|
|
||||||
tv->setCurrentIndex(index);
|
tv->setCurrentIndex(index);
|
||||||
bool folderPaused = _model->data( index, FolderStatusDelegate::FolderSyncPaused).toBool();
|
bool folderPaused = _model->data( index, FolderStatusDelegate::FolderSyncPaused).toBool();
|
||||||
|
bool folderConnected = _model->data( index, FolderStatusDelegate::FolderAccountConnected ).toBool();
|
||||||
|
|
||||||
QMenu *menu = new QMenu(tv);
|
QMenu *menu = new QMenu(tv);
|
||||||
menu->setAttribute(Qt::WA_DeleteOnClose);
|
menu->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
connect(menu->addAction(tr("Open folder")), SIGNAL(triggered(bool)),
|
|
||||||
this, SLOT(slotOpenCurrentFolder()));
|
QAction *ac = menu->addAction(tr("Open folder"));
|
||||||
connect(menu->addAction(folderPaused ? tr("Resume sync") : tr("Pause sync")), SIGNAL(triggered(bool)),
|
connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotOpenCurrentFolder()));
|
||||||
this, SLOT(slotEnableCurrentFolder()));
|
|
||||||
connect(menu->addAction(tr("Remove folder")), SIGNAL(triggered(bool)),
|
ac = menu->addAction(tr("Choose What to Sync"));
|
||||||
this, SLOT(slotRemoveCurrentFolder()));
|
ac->setEnabled(folderConnected);
|
||||||
|
connect(ac, SIGNAL(triggered(bool)), this, SLOT(doExpand()));
|
||||||
|
|
||||||
|
ac = menu->addAction(folderPaused ? tr("Resume sync") : tr("Pause sync"));
|
||||||
|
ac->setEnabled(folderConnected);
|
||||||
|
connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotEnableCurrentFolder()));
|
||||||
|
|
||||||
|
ac = menu->addAction(tr("Remove sync"));
|
||||||
|
connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotRemoveCurrentFolder()));
|
||||||
menu->exec(tv->mapToGlobal(pos));
|
menu->exec(tv->mapToGlobal(pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,7 +217,8 @@ void AccountSettings::slotFolderWizardAccepted()
|
|||||||
|
|
||||||
FolderDefinition definition;
|
FolderDefinition definition;
|
||||||
definition.alias = folderWizard->field(QLatin1String("alias")).toString();
|
definition.alias = folderWizard->field(QLatin1String("alias")).toString();
|
||||||
definition.localPath = folderWizard->field(QLatin1String("sourceFolder")).toString();
|
definition.localPath = FolderDefinition::prepareLocalPath(
|
||||||
|
folderWizard->field(QLatin1String("sourceFolder")).toString());
|
||||||
definition.targetPath = folderWizard->property("targetPath").toString();
|
definition.targetPath = folderWizard->property("targetPath").toString();
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -258,14 +273,18 @@ void AccountSettings::slotRemoveCurrentFolder()
|
|||||||
QString alias = _model->data( selected, FolderStatusDelegate::FolderAliasRole ).toString();
|
QString alias = _model->data( selected, FolderStatusDelegate::FolderAliasRole ).toString();
|
||||||
qDebug() << "Remove Folder alias " << alias;
|
qDebug() << "Remove Folder alias " << alias;
|
||||||
if( !alias.isEmpty() ) {
|
if( !alias.isEmpty() ) {
|
||||||
// remove from file system through folder man
|
QMessageBox messageBox(QMessageBox::Question,
|
||||||
// _model->removeRow( selected.row() );
|
tr("Confirm Sync Removal"),
|
||||||
int ret = QMessageBox::question( this, tr("Confirm Folder Remove"),
|
tr("<p>Do you really want to stop syncing the folder <i>%1</i>?</p>"
|
||||||
tr("<p>Do you really want to stop syncing the folder <i>%1</i>?</p>"
|
"<p><b>Note:</b> This will <b>not</b> delete any files.</p>").arg(alias),
|
||||||
"<p><b>Note:</b> This will <b>not</b> delete any files.</p>").arg(alias),
|
QMessageBox::NoButton,
|
||||||
QMessageBox::Yes|QMessageBox::No );
|
this);
|
||||||
|
QPushButton* yesButton =
|
||||||
|
messageBox.addButton(tr("Stop syncing"), QMessageBox::YesRole);
|
||||||
|
messageBox.addButton(tr("Cancel"), QMessageBox::NoRole);
|
||||||
|
|
||||||
if( ret == QMessageBox::No ) {
|
messageBox.exec();
|
||||||
|
if (messageBox.clickedButton() != yesButton) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,9 +315,10 @@ void AccountSettings::slotResetCurrentFolder()
|
|||||||
QMessageBox::Yes|QMessageBox::No );
|
QMessageBox::Yes|QMessageBox::No );
|
||||||
if( ret == QMessageBox::Yes ) {
|
if( ret == QMessageBox::Yes ) {
|
||||||
FolderMan *folderMan = FolderMan::instance();
|
FolderMan *folderMan = FolderMan::instance();
|
||||||
Folder *f = folderMan->folder(alias);
|
if(Folder *f = folderMan->folder(alias)) {
|
||||||
f->slotTerminateSync();
|
f->slotTerminateSync();
|
||||||
f->wipe();
|
f->wipe();
|
||||||
|
}
|
||||||
folderMan->slotScheduleAllFolders();
|
folderMan->slotScheduleAllFolders();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,25 +435,22 @@ void AccountSettings::slotOpenOC()
|
|||||||
void AccountSettings::slotUpdateQuota(qint64 total, qint64 used)
|
void AccountSettings::slotUpdateQuota(qint64 total, qint64 used)
|
||||||
{
|
{
|
||||||
if( total > 0 ) {
|
if( total > 0 ) {
|
||||||
ui->storageGroupBox->setVisible(true);
|
|
||||||
ui->quotaProgressBar->setVisible(true);
|
ui->quotaProgressBar->setVisible(true);
|
||||||
ui->quotaInfoLabel->setVisible(true);
|
|
||||||
ui->quotaProgressBar->setEnabled(true);
|
ui->quotaProgressBar->setEnabled(true);
|
||||||
// workaround the label only accepting ints (which may be only 32 bit wide)
|
// workaround the label only accepting ints (which may be only 32 bit wide)
|
||||||
ui->quotaProgressBar->setMaximum(100);
|
const double percent = used/(double)total*100;
|
||||||
int qVal = qRound(used/(double)total * 100);
|
const int percentInt = qMin(qRound(percent), 100);
|
||||||
if( qVal > 100 ) qVal = 100;
|
ui->quotaProgressBar->setValue(percentInt);
|
||||||
ui->quotaProgressBar->setValue(qVal);
|
|
||||||
QString usedStr = Utility::octetsToString(used);
|
QString usedStr = Utility::octetsToString(used);
|
||||||
QString totalStr = Utility::octetsToString(total);
|
QString totalStr = Utility::octetsToString(total);
|
||||||
double percent = used/(double)total*100;
|
|
||||||
QString percentStr = Utility::compactFormatDouble(percent, 1);
|
QString percentStr = Utility::compactFormatDouble(percent, 1);
|
||||||
_quotaLabel->setText(tr("%1 (%3%) of %2 server space in use.").arg(usedStr, totalStr, percentStr));
|
QString toolTip = tr("%1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits.").arg(usedStr, totalStr, percentStr);
|
||||||
|
ui->quotaInfoLabel->setText(tr("%1 of %2 in use").arg(usedStr, totalStr));
|
||||||
|
ui->quotaInfoLabel->setToolTip(toolTip);
|
||||||
|
ui->quotaProgressBar->setToolTip(toolTip);
|
||||||
} else {
|
} else {
|
||||||
ui->storageGroupBox->setVisible(false);
|
ui->quotaProgressBar->setVisible(false);
|
||||||
ui->quotaInfoLabel->setVisible(false);
|
ui->quotaInfoLabel->setText(tr("Currently there is no storage usage information available."));
|
||||||
ui->quotaProgressBar->setMaximum(0);
|
|
||||||
_quotaLabel->setText(tr("Currently there is no storage usage information available."));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,6 +487,18 @@ void AccountSettings::slotAccountStateChanged(int state)
|
|||||||
// ownCloud is not yet configured.
|
// ownCloud is not yet configured.
|
||||||
showConnectionLabel( tr("No %1 connection configured.").arg(Theme::instance()->appNameGUI()) );
|
showConnectionLabel( tr("No %1 connection configured.").arg(Theme::instance()->appNameGUI()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Allow to expand the item if the account is connected. */
|
||||||
|
ui->_folderList->setItemsExpandable( state == AccountState::Connected );
|
||||||
|
|
||||||
|
/* check if there are expanded root items, if so, close them, if the state is different from being Connected. */
|
||||||
|
if( state != AccountState::Connected ) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < _model->rowCount(); ++i) {
|
||||||
|
if (ui->_folderList->isExpanded(_model->index(i)))
|
||||||
|
ui->_folderList->setExpanded(_model->index(i), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AccountSettings::~AccountSettings()
|
AccountSettings::~AccountSettings()
|
||||||
@@ -487,15 +516,21 @@ void AccountSettings::refreshSelectiveSyncStatus()
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach (Folder *folder, FolderMan::instance()->map().values()) {
|
foreach (Folder *folder, FolderMan::instance()->map().values()) {
|
||||||
if (folder->accountState() != _accountState) { continue; }
|
if (folder->accountState() != _accountState) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto undecidedList = folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList);
|
auto undecidedList = folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList);
|
||||||
foreach(const auto &it, undecidedList) {
|
foreach(const auto &it, undecidedList) {
|
||||||
undecidedFolder += ( folder->alias() + QLatin1String("/") + it);
|
undecidedFolder.append(it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (undecidedFolder.isEmpty()) {
|
if (undecidedFolder.isEmpty()) {
|
||||||
|
ui->selectiveSyncNotification->setVisible(false);
|
||||||
ui->selectiveSyncNotification->setText(QString());
|
ui->selectiveSyncNotification->setText(QString());
|
||||||
} else {
|
} else {
|
||||||
|
ui->selectiveSyncNotification->setVisible(true);
|
||||||
ui->selectiveSyncNotification->setText(
|
ui->selectiveSyncNotification->setText(
|
||||||
tr("There are new folders that were not synchronized because they are too big: %1")
|
tr("There are new folders that were not synchronized because they are too big: %1")
|
||||||
.arg(undecidedFolder.join(tr(", "))));
|
.arg(undecidedFolder.join(tr(", "))));
|
||||||
@@ -503,7 +538,6 @@ void AccountSettings::refreshSelectiveSyncStatus()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ui->selectiveSyncApply->setEnabled(_model->isDirty() || !undecidedFolder.isEmpty());
|
ui->selectiveSyncApply->setEnabled(_model->isDirty() || !undecidedFolder.isEmpty());
|
||||||
ui->selectiveSyncCancel->setEnabled(_model->isDirty());
|
|
||||||
bool wasVisible = !ui->selectiveSyncStatus->isHidden();
|
bool wasVisible = !ui->selectiveSyncStatus->isHidden();
|
||||||
if (wasVisible != shouldBeVisible) {
|
if (wasVisible != shouldBeVisible) {
|
||||||
QSize hint = ui->selectiveSyncStatus->sizeHint();
|
QSize hint = ui->selectiveSyncStatus->sizeHint();
|
||||||
@@ -522,14 +556,24 @@ void AccountSettings::refreshSelectiveSyncStatus()
|
|||||||
|
|
||||||
void AccountSettings::slotDeleteAccount()
|
void AccountSettings::slotDeleteAccount()
|
||||||
{
|
{
|
||||||
int ret = QMessageBox::question( this, tr("Confirm Account Delete"),
|
// Deleting the account potentially deletes 'this', so
|
||||||
tr("<p>Do you really want to remove the connection to the account <i>%1</i>?</p>"
|
// the QMessageBox should be destroyed before that happens.
|
||||||
"<p><b>Note:</b> This will <b>not</b> delete any files.</p>")
|
{
|
||||||
.arg(_accountState->account()->displayName()),
|
QMessageBox messageBox(QMessageBox::Question,
|
||||||
QMessageBox::Yes|QMessageBox::No );
|
tr("Confirm Account Removal"),
|
||||||
|
tr("<p>Do you really want to remove the connection to the account <i>%1</i>?</p>"
|
||||||
|
"<p><b>Note:</b> This will <b>not</b> delete any files.</p>")
|
||||||
|
.arg(_accountState->account()->displayName()),
|
||||||
|
QMessageBox::NoButton,
|
||||||
|
this);
|
||||||
|
QPushButton* yesButton =
|
||||||
|
messageBox.addButton(tr("Remove connection"), QMessageBox::YesRole);
|
||||||
|
messageBox.addButton(tr("Cancel"), QMessageBox::NoRole);
|
||||||
|
|
||||||
if( ret == QMessageBox::No ) {
|
messageBox.exec();
|
||||||
return;
|
if (messageBox.clickedButton() != yesButton) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto manager = AccountManager::instance();
|
auto manager = AccountManager::instance();
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ protected slots:
|
|||||||
void slotDeleteAccount();
|
void slotDeleteAccount();
|
||||||
void refreshSelectiveSyncStatus();
|
void refreshSelectiveSyncStatus();
|
||||||
void slotCustomContextMenuRequested(const QPoint&);
|
void slotCustomContextMenuRequested(const QPoint&);
|
||||||
|
void slotFolderListClicked( const QModelIndex& indx );
|
||||||
|
void doExpand();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void showConnectionLabel(const QString& message,
|
void showConnectionLabel(const QString& message,
|
||||||
@@ -92,7 +94,6 @@ private:
|
|||||||
QUrl _OCUrl;
|
QUrl _OCUrl;
|
||||||
bool _wasDisabledBefore;
|
bool _wasDisabledBefore;
|
||||||
AccountState *_accountState;
|
AccountState *_accountState;
|
||||||
QLabel *_quotaLabel;
|
|
||||||
QuotaInfo _quotaInfo;
|
QuotaInfo _quotaInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||