Merge branch '2.0'
Conflicts: doc/images/menu.png doc/images/settings_network.png
|
@ -32,7 +32,7 @@ include(Warnings)
|
|||
include(${CMAKE_SOURCE_DIR}/VERSION.cmake)
|
||||
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")
|
||||
set( WITH_CRASHREPORTER OFF )
|
||||
endif()
|
||||
|
@ -114,16 +114,16 @@ endif()
|
|||
# this option creates only libocsync and libowncloudsync
|
||||
option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF)
|
||||
|
||||
# When this option is enabled, 5xx errors are not added to the clacklist
|
||||
# Normaly 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.
|
||||
# When this option is enabled, 5xx errors are not added to the blacklist
|
||||
# Normally you don't want to enable this option because if a particular file
|
||||
# triggers a bug on the server, you want the file to be blacklisted.
|
||||
option(OWNCLOUD_5XX_NO_BLACKLIST "OWNCLOUD_5XX_NO_BLACKLIST" OFF)
|
||||
if(OWNCLOUD_5XX_NO_BLACKLIST)
|
||||
add_definitions(-DOWNCLOUD_5XX_NO_BLACKLIST=1)
|
||||
endif()
|
||||
|
||||
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()
|
||||
|
||||
#### find libs
|
||||
|
@ -138,7 +138,7 @@ if(HAVE_QT5)
|
|||
message(STATUS "Using Qt ${Qt5Core_VERSION_MAJOR}.${Qt5Core_VERSION_MINOR}.x")
|
||||
if (${Qt5Core_VERSION_MAJOR} EQUAL "5")
|
||||
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)
|
||||
else()
|
||||
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
|
||||
* __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
|
||||
* 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 apps](https://github.com/owncloud/apps/issues) (e.g. Calendar,
|
||||
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].
|
||||
|
||||
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.
|
||||
|
||||
[agreement]: http://owncloud.org/about/contributor-agreement/
|
||||
|
|
|
@ -14,5 +14,5 @@ set( MAC_INSTALLER_BACKGROUND_FILE "${CMAKE_SOURCE_DIR}/admin/osx/installer-back
|
|||
# set( APPLICATION_LICENSE "${OEM_THEME_DIR}/license.txt )
|
||||
|
||||
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" )
|
||||
|
|
|
@ -23,7 +23,7 @@ identity="$3"
|
|||
prjfile=$build_path/admin/osx/macosx.pkgproj
|
||||
|
||||
# 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_tar="$installer.pkg.tar"
|
||||
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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "Desinstalatzailea dagoeneko martxan da."
|
||||
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_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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
|
||||
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!"
|
||||
|
|
|
@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Neodinstalov
|
|||
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_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_2 "Pýidat źi znovu instalovat komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinstalovat ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinstalovat ${APPLICATION_NAME}"
|
||||
|
@ -30,7 +29,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Z
|
|||
StrCpy $UNINSTALLER_FILE_Detail "Zapisuji odinstal tor"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Zapisuji instal tor do registr…"
|
||||
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 $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ˇ)"
|
||||
|
@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Tento odinstal
|
|||
StrCpy $UAC_ERROR_LOGON_SERVICE "Slu§ba pýihl çenˇ nebاˇ, ukonźuji!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Odinstal tor je ji§ spuçtŘn."
|
||||
StrCpy $SectionGroup_Shortcuts "Z stupci"
|
||||
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,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_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_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_3 "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_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_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_3 "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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "See desinstallija on juba käimas."
|
||||
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."
|
||||
|
|
|
@ -32,7 +32,7 @@ StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Killing ${APPLICATION_EXECUTAB
|
|||
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_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."
|
||||
|
|
|
@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Asennettu jo"
|
||||
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_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_3 "Poista ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Poista ${APPLICATION_NAME}"
|
||||
|
|
|
@ -9,7 +9,6 @@ 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_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_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_2 "Ajouter/Réinstaller des composants"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Désinstaller ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Désinstaller ${APPLICATION_NAME}"
|
||||
|
@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Ce désinstallateur requiert les droits a
|
|||
StrCpy $UAC_ERROR_LOGON_SERVICE "Service de logon non lancé ! Abandon."
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Une désinstallation est déjà en cours."
|
||||
StrCpy $SectionGroup_Shortcuts "Raccourcis"
|
||||
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 "Non desinstalar"
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Xa instalado"
|
||||
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_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_3 "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 $INIT_UNINSTALLER_RUNNING "O desinstalador xa está en execución."
|
||||
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_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_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_3 "${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 $INIT_UNINSTALLER_RUNNING "Das Deinstallationsprogramm wird bereits ausgeführt."
|
||||
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!"
|
||||
|
|
|
@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Ήδη εγκατεστημένη"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Επιλέξτε πώς θέλετε να εγκαταστήσετε την ${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_3 "Απεγκατάσταση ${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_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_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_3 "${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_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_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_3 "Disinstalla ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Disinstalla ${APPLICATION_NAME}"
|
||||
|
|
|
@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "インストール済"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "${APPLICATION_NAME} のインストール方法を選択する"
|
||||
StrCpy $PageReinstall_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} はすでにインストールされています。\n実行するオペレーションを選択し、次へをクリックする"
|
||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} をアンインストール"
|
||||
|
@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "
|
|||
StrCpy $UAC_ERROR_LOGON_SERVICE "ログオンサービスが動いていません。中止します。"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "アンインストーラーは、すでに起動しています。"
|
||||
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."
|
||||
|
|
|
@ -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_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_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_3 "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 $INIT_INSTALLER_RUNNING "Installasjonsprogrammet kjører allerede."
|
||||
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 $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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "Dezinstalator już jest uruchomiony."
|
||||
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!"
|
||||
|
|
|
@ -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_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_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_3 "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_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_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_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||
|
|
|
@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Не устанавливать"
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Уже установлено"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Выберите, как вы хотите установить ${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_3 "Удалить ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Удалить ${APPLICATION_NAME}"
|
||||
|
@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Этому деинсталлятору
|
|||
StrCpy $UAC_ERROR_LOGON_SERVICE "Служба входа в систему не запущена, прерывание!"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Программа удаления уже выполняется."
|
||||
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."
|
||||
|
|
|
@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "不要卸载"
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "已经安装"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "选择如何安装${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_3 "卸载${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_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_SAME_Field_1 "${APPLICATION_NAME} ${VERSION} je už nainštalovaná.\nVyberte operáciu, ktorú chcete vykonať, a kliknite na tlačidlo Ďalej pre pokračovanie."
|
||||
StrCpy $PageReinstall_SAME_Field_2 "Prida<64>/Preinštalova<76> komponenty"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "Odinštalova<76> ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Odinštalova<76> ${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 $INIT_UNINSTALLER_RUNNING "Odinštalátor je už spustený."
|
||||
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!"
|
||||
|
|
|
@ -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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "Program za odstranjevanje namestitve je že zagnan."
|
||||
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!"
|
||||
|
|
|
@ -9,7 +9,7 @@ StrCpy $PageReinstall_NEW_Field_3 "No desinstalar"
|
|||
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_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_3 "Desinstalar ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstalar ${APPLICATION_NAME}"
|
||||
|
|
|
@ -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 $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 $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_DetailPrint "Installing Integration for Windows Explorer"
|
||||
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_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_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_3 "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 $INIT_UNINSTALLER_RUNNING "Avinstallationsprogrammet körs redan."
|
||||
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_DetailPrint "Installing Integration for Windows Explorer"
|
||||
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_SUBTITLE "เลือกวิธีที่คุณต้องการติดตั้ง ${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_3 "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "ถอนการติดตั้ง ${APPLICATION_NAME}"
|
||||
|
|
|
@ -9,7 +9,6 @@ StrCpy $PageReinstall_NEW_Field_3 "Kald
|
|||
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_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_2 "Bileşenleri ekle/yeniden yükle"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} uygulamasını kaldır"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "${APPLICATION_NAME} uygulamasını kaldır"
|
||||
|
@ -41,3 +40,4 @@ StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Bu kald
|
|||
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 $SectionGroup_Shortcuts "Kısayollar"
|
||||
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 "Не видаляти"
|
|||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_TITLE "Установлено"
|
||||
StrCpy $PageReinstall_NEW_MUI_HEADER_TEXT_SUBTITLE "Оберіть, як ви хочете установити ${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_3 "Видалити ${APPLICATION_NAME}"
|
||||
StrCpy $UNINSTALLER_APPDATA_TITLE "Видалити ${APPLICATION_NAME}"
|
||||
|
@ -40,4 +39,5 @@ StrCpy $INIT_INSTALLER_RUNNING "Установка вже запущена."
|
|||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Для видалення потрібні права адміністратора, спробуйте ще раз"
|
||||
StrCpy $INIT_UNINSTALLER_RUNNING "Програма видалення вже запущено."
|
||||
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!"
|
||||
|
|
|
@ -65,9 +65,9 @@ msgstr "A newer version of ${APPLICATION_NAME} is already installed! It is not r
|
|||
|
||||
#. PageReinstall_SAME_Field_1
|
||||
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."
|
||||
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
|
||||
msgid "Add/Reinstall components"
|
||||
|
|
|
@ -85,7 +85,7 @@ else(UNIX AND NOT WIN32)
|
|||
endif (UNIX AND NOT WIN32)
|
||||
|
||||
if (MSVC)
|
||||
# Use secure functions by defaualt and suppress warnings about
|
||||
# Use secure functions by default and suppress warnings about
|
||||
#"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_COUNT=1")
|
||||
|
|
|
@ -107,7 +107,7 @@ ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
|
|||
!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_ICON ${NSI_PATH}\installer.ico
|
||||
|
@ -556,7 +556,7 @@ Section -post
|
|||
DetailPrint $UNINSTALLER_REGISTRY_Detail
|
||||
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
|
||||
WriteRegDWORD HKLM "Software\${APPLICATION_VENDOR}\${APPLICATION_NAME}" "VersionMajor" "${VER_MAJOR}"
|
||||
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
|
||||
FIND_PACKAGE(LATEX)
|
||||
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)
|
||||
IF (NOT MAKEINDEX_COMPILER)
|
||||
MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.")
|
||||
|
|
|
@ -29,12 +29,12 @@ project=gets.chomp
|
|||
|
||||
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
|
||||
|
||||
printf("\n")
|
||||
|
||||
print("Defininitions (leave empty to skip): ")
|
||||
print("Definitions (leave empty to skip): ")
|
||||
definitions=gets.chomp
|
||||
|
||||
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)
|
||||
* have translatable error message for indiv. file errors.
|
||||
* 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.
|
||||
* Do not longer recurse into ignored directories in update
|
||||
* No longer recurse into ignored directories in update
|
||||
phase.
|
||||
* 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.
|
||||
* Fix: Do renames of files before any puts.
|
||||
* 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.
|
||||
* httpbf: configurable block size and threshold.
|
||||
* 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)
|
||||
* 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.
|
||||
* Moved journal database to sync directory.
|
||||
* 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 config parser (removed iniparser dependency).
|
||||
* 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 possiblity to push information to the modules.
|
||||
* 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
|
||||
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.
|
||||
|
||||
|
||||
|
@ -63,7 +63,7 @@ CMake options using `cmakesetup` (Windows) or `ccmake` (GNU/Linux and MacOS X).
|
|||
|
||||
## 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
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ CONTRIBUTIONS
|
|||
=============
|
||||
|
||||
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
|
||||
csync-devel@csync.org.
|
||||
More information on the various mailing lists can be found at
|
||||
|
|
|
@ -630,7 +630,15 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||
/* permission denied */
|
||||
ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR);
|
||||
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) {
|
||||
asp = asprintf( &ctx->error_string, "%s", uri);
|
||||
if (asp < 0) {
|
||||
|
@ -652,6 +660,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
|||
}
|
||||
goto done;
|
||||
}
|
||||
/* if current_fs is not defined here, better throw an error */
|
||||
} else {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno);
|
||||
}
|
||||
|
|
|
@ -74,6 +74,12 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) {
|
|||
}
|
||||
|
||||
if (!dirname || handle->hFind == INVALID_HANDLE_VALUE) {
|
||||
int retcode = GetLastError();
|
||||
if( retcode == ERROR_FILE_NOT_FOUND ) {
|
||||
errno = ENOENT;
|
||||
} else {
|
||||
errno = EACCES;
|
||||
}
|
||||
SAFE_FREE(handle);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -99,6 +105,9 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) {
|
|||
// FindClose returns non-zero on success
|
||||
if( FindClose(handle->hFind) != 0 ) {
|
||||
rc = 0;
|
||||
} else {
|
||||
// error case, set errno
|
||||
errno = EBADF;
|
||||
}
|
||||
|
||||
SAFE_FREE(handle->path);
|
||||
|
@ -117,7 +126,8 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) {
|
|||
errno = 0;
|
||||
file_stat = csync_vio_file_stat_new();
|
||||
if (file_stat == NULL) {
|
||||
goto err;
|
||||
errno = ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
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 );
|
||||
|
||||
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 ) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri );
|
||||
errno = GetLastError();
|
||||
|
|
После Ширина: | Высота: | Размер: 34 KiB |
После Ширина: | Высота: | Размер: 41 KiB |
После Ширина: | Высота: | Размер: 67 KiB |
После Ширина: | Высота: | Размер: 63 KiB |
После Ширина: | Высота: | Размер: 5.7 KiB |
Двоичные данные
doc/images/client1.png
До Ширина: | Высота: | Размер: 20 KiB |
Двоичные данные
doc/images/client2.png
До Ширина: | Высота: | Размер: 20 KiB |
Двоичные данные
doc/images/client3.png
До Ширина: | Высота: | Размер: 34 KiB |
Двоичные данные
doc/images/client4.png
До Ширина: | Высота: | Размер: 22 KiB |
Двоичные данные
doc/images/client5.png
До Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 53 KiB После Ширина: | Высота: | Размер: 52 KiB |
Двоичные данные
doc/images/ignored_files_editor.png
До Ширина: | Высота: | Размер: 34 KiB После Ширина: | Высота: | Размер: 30 KiB |
Двоичные данные
doc/images/menu.png
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 4.9 KiB |
Двоичные данные
doc/images/settings_network.png
До Ширина: | Высота: | Размер: 39 KiB После Ширина: | Высота: | Размер: 42 KiB |
|
@ -21,56 +21,18 @@ will display a notification when an update is available.
|
|||
Linux users must also have a password manager enabled, such as GNOME Keyring or
|
||||
KWallet, so that the sync client can login automatically.
|
||||
|
||||
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
|
||||
* Don't show redundant directory entries in activity log
|
||||
* Remove deleted accounts properly from toolbar
|
||||
* File manager integration: Show hidden files as ignored
|
||||
* Show wizard when last account was deleted
|
||||
* Do not sync down new big folders from server without user's consent
|
||||
* Integrate Selective Sync into the default UI
|
||||
* More reliable reconnect after timeout
|
||||
* Use SI units for the file sizes
|
||||
* 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.
|
||||
|
||||
Installation Wizard
|
||||
-------------------
|
||||
|
||||
The installation wizard takes you step-by-step through configuration options and
|
||||
account setup. First you need to enter the URL of your ownCloud server.
|
||||
|
||||
.. image:: images/client1.png
|
||||
.. image:: images/client-1.png
|
||||
:alt: form for entering ownCloud server URL
|
||||
|
||||
Enter your ownCloud login on the next screen.
|
||||
|
||||
.. image:: images/client2.png
|
||||
.. image:: images/client-2.png
|
||||
:alt: form for entering your ownCloud login
|
||||
|
||||
On the Local Folder Option screen you may sync
|
||||
|
@ -78,9 +40,9 @@ 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.
|
||||
|
||||
.. image:: images/client3.png
|
||||
.. image:: images/client-3.png
|
||||
:alt: Select which remote folders to sync, and which local folder to store
|
||||
them in.
|
||||
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
|
||||
|
@ -88,28 +50,8 @@ 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/client4.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
|
||||
Web GUI, and one to open your local ownCloud folder
|
||||
|
||||
Click the Finish button, and you're all done.
|
||||
|
||||
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. Linux users must install the ``owncloud-client-nautilus`` package to
|
||||
enable file sharing from the Nautilus file manager. The ownCloud share dialog
|
||||
looks like the following example on Ubuntu Linux:
|
||||
|
||||
.. image:: images/client5.png
|
||||
:alt: the ownCloud file share option is integrated into the normal
|
||||
right-click file menu in your file manager
|
||||
|
||||
You may change your sync options at any time by opening your ownCloud client
|
||||
and selecting which folders to sync, or to remove from synchronization.
|
||||
you saw in the installation wizard. **If you un-check any folders that
|
||||
you have already synchronized, they will be deleted from your local system.**
|
||||
|
||||
.. image:: images/client6.png
|
||||
:alt: Client dialogue to select different files to sync, or to remove from
|
||||
syncing
|
||||
Click the Finish button, and you're all done.
|
||||
|
|
|
@ -14,4 +14,41 @@ and local PC.
|
|||
|
||||
.. 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
|
||||
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.
|
||||
|
|
@ -9,32 +9,39 @@ in the system tray (Windows, KDE), status bar (Mac OS X), or notification area
|
|||
(Linux).
|
||||
|
||||
.. 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
|
||||
synchronization. The green circle with the white checkmark tells you that your
|
||||
synchronization is current and you are connected to your ownCloud server.
|
||||
|
||||
.. 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.
|
||||
|
||||
.. 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
|
||||
has been paused. (Most likely by you, by opening the client and clicking
|
||||
Account > Pause.)
|
||||
has been paused. (Most likely by you.)
|
||||
|
||||
.. 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
|
||||
connection with your ownCloud server.
|
||||
|
||||
.. 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,
|
||||
so you should click it to see what it has to tell you.
|
||||
|
||||
.. 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
|
||||
incorrect login or server URL.
|
||||
|
@ -50,13 +57,12 @@ A right-click on the icon opens a menu for quick access to multiple operations.
|
|||
The Desktop Client menu provides the following options:
|
||||
|
||||
* Open ownCloud in browser
|
||||
* Managed folder
|
||||
* Open folder [your local sync folder]
|
||||
* Up to date
|
||||
* Recent changes
|
||||
* Settings
|
||||
* Help
|
||||
* Sign out
|
||||
* Log out
|
||||
* Quit ownCloud
|
||||
|
||||
Using the Account Settings Window
|
||||
|
@ -65,18 +71,47 @@ Using the Account Settings Window
|
|||
.. index:: account settings, user, password, Server URL
|
||||
|
||||
Click **Settings** in the right-click menu to see a summary of your ownCloud
|
||||
account settings. This shows which ownCloud account you are connected to (or accounts, if you have more than one) your
|
||||
account settings, or left-click your systray icon. This shows which ownCloud
|
||||
account you are connected to (or accounts, if you have more than one) your
|
||||
quota status, and a window for managing your synchronization settings.
|
||||
|
||||
.. image:: images/client6.png
|
||||
:alt: Account settings window
|
||||
|
||||
At the top of the window are tabs for each configured sync account, and three others for Activity, General and Network settings.
|
||||
At the top of the window are tabs for each configured sync account, and three
|
||||
others for Activity, General and Network settings. On your account tabs you
|
||||
have the following features:
|
||||
|
||||
* 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).
|
||||
|
||||
The little button with three dots that sits to the right of the sync status bar
|
||||
offers three additional options:
|
||||
|
||||
* Open Folder
|
||||
* Pause Sync
|
||||
* Remove Sync
|
||||
|
||||
**Pause Sync** pauses sync operations without making any changes to your account.
|
||||
|
||||
**Remove Sync** suspends synchronization without removing the account, and it
|
||||
removes your folder sync selection. When you're ready to resume synchronization
|
||||
click the **Add Folder Sync Connection** button, and re-select the folders you
|
||||
want to sync.
|
||||
|
||||
.. image:: images/client-7.png
|
||||
:alt: Extra options for sync operations
|
||||
|
||||
The Activity window contains the log of your recent activities, including files
|
||||
downloaded and deleted.
|
||||
downloaded and deleted, and which local folders your files went into.
|
||||
|
||||
The General window has configuration options such as Launch on **System
|
||||
The General window has configuration options such as **Launch on System
|
||||
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
|
||||
|
|
|
@ -31,7 +31,7 @@ provides the following menu:
|
|||
since the last restart of ownCloud Client.
|
||||
* ``Settings...``: provides access to the settings menu.
|
||||
* ``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
|
||||
sync run.
|
||||
|
||||
|
|
|
@ -179,8 +179,8 @@ static OwnCloudFinderContentManager* sharedInstance = nil;
|
|||
{
|
||||
//NSLog(@"%@", NSStringFromSelector(_cmd));
|
||||
|
||||
// We won't request the new state if if finds the path in _fileNamesCache
|
||||
// Move all entries to _oldFileNamesCache so that the get re-requested, but
|
||||
// We won't request the new state if it finds the path in _fileNamesCache
|
||||
// Move all entries to _oldFileNamesCache so that they get re-requested, but
|
||||
// still available while we refill the cache
|
||||
[_oldFileNamesCache addEntriesFromDictionary:_fileNamesCache];
|
||||
[_fileNamesCache removeAllObjects];
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
692C18A516660C4700BF6A53 /* ContextMenuHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A416660C4600BF6A53 /* ContextMenuHandlers.m */; };
|
||||
692C18A9166617F500BF6A53 /* IconOverlayHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 692C18A8166617F500BF6A53 /* IconOverlayHandlers.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 */; };
|
||||
8C37DD9F161593BD00016A95 /* FinderHook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C37DD9A161593BD00016A95 /* FinderHook.m */; };
|
||||
8C37DDB2161593FF00016A95 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C37DDB1161593FF00016A95 /* Cocoa.framework */; };
|
||||
|
|
|
@ -49,11 +49,7 @@ static OwnCloudFinderRequestManager* sharedInstance = nil;
|
|||
|
||||
- (void)dealloc
|
||||
{
|
||||
[_syncClientProxy release];
|
||||
|
||||
sharedInstance = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
+ (OwnCloudFinderRequestManager*)sharedInstance
|
||||
|
@ -136,12 +132,11 @@ static OwnCloudFinderRequestManager* sharedInstance = nil;
|
|||
{
|
||||
// NSLog(@"Socket DISconnected! %@", [err localizedDescription]);
|
||||
|
||||
// clear the registered pathes.
|
||||
[_registeredPathes release];
|
||||
// clear the registered paths.
|
||||
_registeredPathes = [[NSMutableDictionary alloc] init];
|
||||
[_requestedPaths removeAllObjects];
|
||||
|
||||
// clear the caches in conent manager
|
||||
// clear the caches in content manager
|
||||
OwnCloudFinderContentManager *contentman = [OwnCloudFinderContentManager sharedInstance];
|
||||
[contentman clearFileNameCache];
|
||||
[contentman repaintAllWindows];
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
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
|
||||
@interface OwnCloudShell : NSObject { }
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
_remoteEnd = (NSDistantObject <ChannelProtocol> *)tx;
|
||||
[_remoteEnd setProtocolForProxy:@protocol(ChannelProtocol)];
|
||||
|
||||
// Everything is set up, start querrying
|
||||
// Everything is set up, start querying
|
||||
[self askOnSocket:@"" query:@"SHARE_MENU_TITLE"];
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
- 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
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
|||
- After installing, run
|
||||
kdeinit4 --noincremental
|
||||
|
||||
- To test taht the plugin is well installed
|
||||
- To test that the plugin is well installed
|
||||
ktraderclient --servicetype KOverlayIconPlugin
|
||||
It should show the Owncloud plugin
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
|
||||
- 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)
|
||||
|
||||
|
|
|
@ -157,13 +157,18 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
|
|||
# internal or external file?!
|
||||
syncedFile = False
|
||||
for reg_path in socketConnect.registered_paths:
|
||||
topLevelFolder=False
|
||||
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
|
||||
if os.path.isdir(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
|
||||
# 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
|
||||
|
||||
# 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:
|
||||
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):
|
||||
Emblems = { 'OK' : appname +'_ok',
|
||||
'SYNC' : appname +'_sync',
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#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_SHARED L" OCErrorShared"
|
||||
#define OVERLAY_NAME_OK L" OCOK"
|
||||
|
|
|
@ -45,7 +45,7 @@ endif()
|
|||
if(BUILD_OWNCLOUD_OSX_BUNDLE AND NOT BUILD_LIBRARIES_ONLY)
|
||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||
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})
|
||||
" COMPONENT RUNTIME)
|
||||
endif()
|
||||
|
|
|
@ -150,7 +150,7 @@ void help()
|
|||
std::cout << " Proxy is http://server:port" << std::endl;
|
||||
std::cout << " --trust Trust the SSL certification." << 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 << " --password, -p [pass] Use [pass] as password" << 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();
|
||||
// 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();
|
||||
if (!options->source_dir.endsWith('/')) {
|
||||
options->source_dir.append('/');
|
||||
|
@ -280,6 +272,21 @@ int main(int argc, char **argv) {
|
|||
|
||||
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);
|
||||
|
||||
// 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()
|
||||
QByteArray remUrl = options.target_url.toUtf8();
|
||||
|
||||
AccountPtr account = Account::create();
|
||||
|
||||
// Find the folder and the original owncloud url
|
||||
QStringList splitted = url.path().split(account->davPath());
|
||||
url.setPath(splitted.value(0));
|
||||
|
@ -443,7 +448,7 @@ restart_sync:
|
|||
|
||||
|
||||
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");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ if(NOT BUILD_LIBRARIES_ONLY)
|
|||
if(BUILD_OWNCLOUD_OSX_BUNDLE)
|
||||
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
|
||||
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})
|
||||
" COMPONENT RUNTIME)
|
||||
endif()
|
||||
|
|
|
@ -130,6 +130,9 @@ void AccountManager::save(bool saveCredentials)
|
|||
save(acc->account(), *settings, saveCredentials);
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
settings->sync();
|
||||
qDebug() << "Saved all account settings, status:" << settings->status();
|
||||
}
|
||||
|
||||
void AccountManager::wantsAccountSavedSlot(AccountPtr a)
|
||||
|
@ -139,6 +142,9 @@ void AccountManager::wantsAccountSavedSlot(AccountPtr a)
|
|||
settings->beginGroup(a->id());
|
||||
save(a, *settings, false); // don't save credentials they might not have been loaded yet
|
||||
settings->endGroup();
|
||||
|
||||
settings->sync();
|
||||
qDebug() << "Saved account settings, status:" << settings->status();
|
||||
}
|
||||
|
||||
void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveCredentials)
|
||||
|
@ -161,7 +167,6 @@ void AccountManager::save(const AccountPtr& acc, QSettings& settings, bool saveC
|
|||
if (acc->_settingsMap.contains(httpUserC))
|
||||
settings.setValue(userC, acc->_settingsMap.value(httpUserC));
|
||||
}
|
||||
settings.sync();
|
||||
|
||||
// Save accepted certificates.
|
||||
settings.beginGroup(QLatin1String("General"));
|
||||
|
|
|
@ -122,6 +122,25 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) :
|
|||
|
||||
connect(ui->signInButton, SIGNAL(clicked()) , this, SLOT(slotSignInAccount()));
|
||||
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)
|
||||
|
@ -139,15 +158,24 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
|
|||
|
||||
tv->setCurrentIndex(index);
|
||||
bool folderPaused = _model->data( index, FolderStatusDelegate::FolderSyncPaused).toBool();
|
||||
bool folderConnected = _model->data( index, FolderStatusDelegate::FolderAccountConnected ).toBool();
|
||||
|
||||
QMenu *menu = new QMenu(tv);
|
||||
menu->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(menu->addAction(tr("Open folder")), SIGNAL(triggered(bool)),
|
||||
this, SLOT(slotOpenCurrentFolder()));
|
||||
connect(menu->addAction(folderPaused ? tr("Resume sync") : tr("Pause sync")), SIGNAL(triggered(bool)),
|
||||
this, SLOT(slotEnableCurrentFolder()));
|
||||
connect(menu->addAction(tr("Remove folder")), SIGNAL(triggered(bool)),
|
||||
this, SLOT(slotRemoveCurrentFolder()));
|
||||
|
||||
QAction *ac = menu->addAction(tr("Open folder"));
|
||||
connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotOpenCurrentFolder()));
|
||||
|
||||
ac = menu->addAction(tr("Choose What to Sync"));
|
||||
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));
|
||||
}
|
||||
|
||||
|
@ -190,7 +218,8 @@ void AccountSettings::slotFolderWizardAccepted()
|
|||
|
||||
FolderDefinition definition;
|
||||
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();
|
||||
|
||||
{
|
||||
|
@ -246,7 +275,7 @@ void AccountSettings::slotRemoveCurrentFolder()
|
|||
qDebug() << "Remove Folder alias " << alias;
|
||||
if( !alias.isEmpty() ) {
|
||||
QMessageBox messageBox(QMessageBox::Question,
|
||||
tr("Confirm Folder Remove"),
|
||||
tr("Confirm Sync Removal"),
|
||||
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),
|
||||
QMessageBox::NoButton,
|
||||
|
@ -460,6 +489,18 @@ void AccountSettings::slotAccountStateChanged(int state)
|
|||
// ownCloud is not yet configured.
|
||||
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()
|
||||
|
@ -477,12 +518,16 @@ void AccountSettings::refreshSelectiveSyncStatus()
|
|||
}
|
||||
|
||||
foreach (Folder *folder, FolderMan::instance()->map().values()) {
|
||||
if (folder->accountState() != _accountState) { continue; }
|
||||
if (folder->accountState() != _accountState) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto undecidedList = folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncUndecidedList);
|
||||
foreach(const auto &it, undecidedList) {
|
||||
undecidedFolder += ( folder->alias() + QLatin1String("/") + it);
|
||||
undecidedFolder.append(it);
|
||||
}
|
||||
}
|
||||
|
||||
if (undecidedFolder.isEmpty()) {
|
||||
ui->selectiveSyncNotification->setVisible(false);
|
||||
ui->selectiveSyncNotification->setText(QString());
|
||||
|
@ -522,7 +567,7 @@ void AccountSettings::slotDeleteAccount()
|
|||
// the QMessageBox should be destroyed before that happens.
|
||||
{
|
||||
QMessageBox messageBox(QMessageBox::Question,
|
||||
tr("Confirm Account Delete"),
|
||||
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()),
|
||||
|
|
|
@ -81,6 +81,8 @@ protected slots:
|
|||
void slotDeleteAccount();
|
||||
void refreshSelectiveSyncStatus();
|
||||
void slotCustomContextMenuRequested(const QPoint&);
|
||||
void slotFolderListClicked( const QModelIndex& indx );
|
||||
void doExpand();
|
||||
|
||||
private:
|
||||
void showConnectionLabel(const QString& message,
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
<string>Remove the account configuration from the client</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete</string>
|
||||
<string>Remove Account</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
|
@ -286,10 +286,15 @@ QString AccountState::shortDisplayNameForSettings(int width) const
|
|||
{
|
||||
QString user = account()->credentials()->user();
|
||||
QString host = account()->url().host();
|
||||
int port = account()->url().port();
|
||||
if (port > 0 && port != 80 && port != 443) {
|
||||
host.append(QLatin1Char(':'));
|
||||
host.append(QString::number(port));
|
||||
}
|
||||
if (width > 0) {
|
||||
QFont f;
|
||||
QFontMetrics fm(f);
|
||||
host = fm.elidedText(host, Qt::ElideRight, width);
|
||||
host = fm.elidedText(host, Qt::ElideMiddle, width);
|
||||
user = fm.elidedText(user, Qt::ElideRight, width);
|
||||
}
|
||||
return user + QLatin1String("\n") + host;
|
||||
|
|
|
@ -71,6 +71,12 @@ static const char optionsC[] =
|
|||
|
||||
QString applicationTrPath()
|
||||
{
|
||||
QString devTrPath = qApp->applicationDirPath() + QString::fromLatin1("/../src/gui/");
|
||||
if (QDir(devTrPath).exists()) {
|
||||
// might miss Qt, QtKeyChain, etc.
|
||||
qDebug() << "Running from build location! Translations may be incomplete!";
|
||||
return devTrPath;
|
||||
}
|
||||
#if defined(Q_OS_WIN)
|
||||
return QApplication::applicationDirPath();
|
||||
#elif defined(Q_OS_MAC)
|
||||
|
@ -95,6 +101,8 @@ Application::Application(int &argc, char **argv) :
|
|||
_userTriggeredConnect(false),
|
||||
_debugMode(false)
|
||||
{
|
||||
_startedAt.start();
|
||||
|
||||
// TODO: Can't set this without breaking current config pathes
|
||||
// setOrganizationName(QLatin1String(APPLICATION_VENDOR));
|
||||
setOrganizationDomain(QLatin1String(APPLICATION_REV_DOMAIN));
|
||||
|
@ -180,6 +188,12 @@ Application::Application(int &argc, char **argv) :
|
|||
|
||||
Application::~Application()
|
||||
{
|
||||
// Make sure all folders are gone, otherwise removing the
|
||||
// accounts will remove the associated folders from the settings.
|
||||
if (_folderManager) {
|
||||
_folderManager->unloadAndDeleteAllFolders();
|
||||
}
|
||||
|
||||
// Remove the account from the account manager so it can be deleted.
|
||||
AccountManager::instance()->shutdown();
|
||||
}
|
||||
|
@ -291,6 +305,12 @@ void Application::slotParseMessage(const QString &msg, QObject*)
|
|||
parseOptions(options);
|
||||
setupLogging();
|
||||
} else if (msg.startsWith(QLatin1String("MSG_SHOWSETTINGS"))) {
|
||||
qDebug() << "Running for" << _startedAt.elapsed()/1000.0 << "sec";
|
||||
if (isSessionRestored() && _startedAt.elapsed() < 10*1000) {
|
||||
// This call is mirrored with the one in int main()
|
||||
qWarning() << "Ignoring MSG_SHOWSETTINGS, possibly double-invocation of client via session restore and auto start";
|
||||
return;
|
||||
}
|
||||
showSettingsDialog();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <QPointer>
|
||||
#include <QQueue>
|
||||
#include <QTimer>
|
||||
#include <QElapsedTimer>
|
||||
|
||||
#include "qtsingleapplication.h"
|
||||
|
||||
|
@ -97,6 +98,8 @@ private:
|
|||
bool _helpOnly;
|
||||
bool _versionOnly;
|
||||
|
||||
QElapsedTimer _startedAt;
|
||||
|
||||
// options from command line:
|
||||
bool _showLogWindow;
|
||||
QString _logFile;
|
||||
|
|
|
@ -693,6 +693,9 @@ void Folder::saveToSettings() const
|
|||
auto settings = _accountState->settings();
|
||||
settings->beginGroup(QLatin1String("Folders"));
|
||||
FolderDefinition::save(*settings, _definition);
|
||||
|
||||
settings->sync();
|
||||
qDebug() << "Saved folder" << _definition.alias << "to settings, status" << settings->status();
|
||||
}
|
||||
|
||||
void Folder::removeFromSettings() const
|
||||
|
@ -1118,7 +1121,7 @@ void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool *cancel)
|
|||
QString msg =
|
||||
tr("This sync would remove all the files in the sync folder '%1'.\n"
|
||||
"This might be because the folder was silently reconfigured, or that all "
|
||||
"the file were manually removed.\n"
|
||||
"the files were manually removed.\n"
|
||||
"Are you sure you want to perform this operation?");
|
||||
QMessageBox msgBox(QMessageBox::Warning, tr("Remove All Files?"),
|
||||
msg.arg(alias()));
|
||||
|
@ -1160,8 +1163,22 @@ bool FolderDefinition::load(QSettings& settings, const QString& alias,
|
|||
folder->paused = settings.value(QLatin1String("paused")).toBool();
|
||||
folder->ignoreHiddenFiles = settings.value(QLatin1String("ignoreHiddenFiles"), QVariant(true)).toBool();
|
||||
settings.endGroup();
|
||||
|
||||
// Old settings can contain paths with native separators. In the rest of the
|
||||
// code we assum /, so clean it up now.
|
||||
folder->localPath = prepareLocalPath(folder->localPath);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QString FolderDefinition::prepareLocalPath(const QString& path)
|
||||
{
|
||||
QString p = QDir::fromNativeSeparators(path);
|
||||
if (!p.endsWith(QLatin1Char('/'))) {
|
||||
p.append(QLatin1Char('/'));
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
} // namespace OCC
|
||||
|
||||
|
|
|
@ -73,6 +73,9 @@ public:
|
|||
/// Reads a folder definition from a settings group with the name 'alias'.
|
||||
static bool load(QSettings& settings, const QString& alias,
|
||||
FolderDefinition* folder);
|
||||
|
||||
/// Ensure / as separator and trailing /.
|
||||
static QString prepareLocalPath(const QString& path);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -841,9 +841,7 @@ void FolderMan::slotRemoveFolder( Folder *f )
|
|||
|
||||
const bool currentlyRunning = (_currentSyncFolder == f);
|
||||
if( currentlyRunning ) {
|
||||
// let the folder delete itself when done and
|
||||
// abort the sync now
|
||||
connect(f, SIGNAL(syncFinished(SyncResult)), f, SLOT(deleteLater()));
|
||||
terminateSyncProcess();
|
||||
}
|
||||
|
||||
|
@ -858,7 +856,13 @@ void FolderMan::slotRemoveFolder( Folder *f )
|
|||
f->removeFromSettings();
|
||||
|
||||
unloadFolder( f);
|
||||
if( !currentlyRunning ) {
|
||||
if( currentlyRunning ) {
|
||||
// We want to schedule the next folder once this is done
|
||||
connect(f, SIGNAL(syncFinished(SyncResult)),
|
||||
SLOT(slotFolderSyncFinished(SyncResult)));
|
||||
// Let the folder delete itself when done.
|
||||
connect(f, SIGNAL(syncFinished(SyncResult)), f, SLOT(deleteLater()));
|
||||
} else {
|
||||
delete f;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,6 +69,13 @@ GeneralSettings::GeneralSettings(QWidget *parent) :
|
|||
_ui->crashreporterCheckBox->setVisible(false);
|
||||
#endif
|
||||
|
||||
/* Set the left contents margin of the layout to zero to make the checkboxes
|
||||
* align properly vertically , fixes bug #3758
|
||||
*/
|
||||
int m0, m1, m2, m3;
|
||||
_ui->horizontalLayout_3->getContentsMargins( &m0, &m1, &m2, &m3 );
|
||||
_ui->horizontalLayout_3->setContentsMargins(0, m1, m2, m3 );
|
||||
|
||||
// OEM themes are not obliged to ship mono icons, so there
|
||||
// is no point in offering an option
|
||||
QString themeDir = QString::fromLatin1(":/client/theme/%1/")
|
||||
|
|
|
@ -105,25 +105,27 @@ void IgnoreListEditor::slotUpdateLocalIgnoreList()
|
|||
ignores.write(prepend+patternItem->text().toUtf8()+'\n');
|
||||
}
|
||||
}
|
||||
|
||||
// We need to force a remote discovery after a change of the ignore list.
|
||||
// Otherwise we would not download the files/directories that are no longer
|
||||
// ignored (because the remote etag did not change) (issue #3172)
|
||||
foreach (Folder* folder, FolderMan::instance()->map()) {
|
||||
folder->journalDb()->forceRemoteDiscoveryNextSync();
|
||||
}
|
||||
|
||||
} else {
|
||||
QMessageBox::warning(this, tr("Could not open file"),
|
||||
tr("Cannot write changes to '%1'.").arg(ignoreFile));
|
||||
}
|
||||
|
||||
FolderMan * folderMan = FolderMan::instance();
|
||||
|
||||
/* handle the hidden file checkbox */
|
||||
|
||||
/* the ignoreHiddenFiles flag is a folder specific setting, but for now, it is
|
||||
* handled globally. Save it to every folder that is defined.
|
||||
*/
|
||||
FolderMan::instance()->setIgnoreHiddenFiles(ignoreHiddenFiles());
|
||||
folderMan->setIgnoreHiddenFiles(ignoreHiddenFiles());
|
||||
|
||||
// We need to force a remote discovery after a change of the ignore list.
|
||||
// Otherwise we would not download the files/directories that are no longer
|
||||
// ignored (because the remote etag did not change) (issue #3172)
|
||||
foreach (Folder* folder, folderMan->map()) {
|
||||
folder->journalDb()->forceRemoteDiscoveryNextSync();
|
||||
folderMan->slotScheduleSync(folder);
|
||||
}
|
||||
}
|
||||
|
||||
void IgnoreListEditor::slotAddPattern()
|
||||
|
|
|
@ -89,6 +89,7 @@ int main(int argc, char **argv)
|
|||
if(app.isRunning()) {
|
||||
qDebug() << Q_FUNC_INFO << "Already running, exiting...";
|
||||
if (app.isSessionRestored()) {
|
||||
// This call is mirrored with the one in Application::slotParseMessage
|
||||
qDebug() << "Session was restored, don't notify app!";
|
||||
return -1;
|
||||
}
|
||||
|
@ -99,8 +100,9 @@ int main(int argc, char **argv)
|
|||
if(!app.sendMessage(QLatin1String("MSG_PARSEOPTIONS:") + msg))
|
||||
return -1;
|
||||
}
|
||||
if(!app.sendMessage(QLatin1String("MSG_SHOWSETTINGS")))
|
||||
if(!app.sendMessage(QLatin1String("MSG_SHOWSETTINGS"))) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
if (!QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
|
|
|
@ -317,18 +317,6 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men
|
|||
actionOpenoC->setProperty(propertyAccountC, QVariant::fromValue(accountState->account()));
|
||||
QObject::connect(actionOpenoC, SIGNAL(triggered(bool)), SLOT(slotOpenOwnCloud()));
|
||||
|
||||
if (separateMenu) {
|
||||
if (accountState->isSignedOut()) {
|
||||
QAction* signin = menu->addAction(tr("Sign in..."));
|
||||
signin->setProperty(propertyAccountC, QVariant::fromValue(accountState));
|
||||
connect(signin, SIGNAL(triggered()), this, SLOT(slotLogin()));
|
||||
} else {
|
||||
QAction* signout = menu->addAction(tr("Sign out"));
|
||||
signout->setProperty(propertyAccountC, QVariant::fromValue(accountState));
|
||||
connect(signout, SIGNAL(triggered()), this, SLOT(slotLogout()));
|
||||
}
|
||||
}
|
||||
|
||||
FolderMan *folderMan = FolderMan::instance();
|
||||
bool firstFolder = true;
|
||||
bool singleSyncFolder = folderMan->map().size() == 1 && Theme::instance()->singleSyncFolder();
|
||||
|
@ -355,6 +343,20 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men
|
|||
_folderOpenActionMapper->setMapping( action, folder->alias() );
|
||||
menu->addAction(action);
|
||||
}
|
||||
|
||||
menu->addSeparator();
|
||||
if (separateMenu) {
|
||||
if (accountState->isSignedOut()) {
|
||||
QAction* signin = menu->addAction(tr("Log in..."));
|
||||
signin->setProperty(propertyAccountC, QVariant::fromValue(accountState));
|
||||
connect(signin, SIGNAL(triggered()), this, SLOT(slotLogin()));
|
||||
} else {
|
||||
QAction* signout = menu->addAction(tr("Log out"));
|
||||
signout->setProperty(propertyAccountC, QVariant::fromValue(accountState));
|
||||
connect(signout, SIGNAL(triggered()), this, SLOT(slotLogout()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ownCloudGui::setupContextMenu()
|
||||
|
@ -444,17 +446,17 @@ void ownCloudGui::setupContextMenu()
|
|||
_contextMenu->addSeparator();
|
||||
if (atLeastOneSignedIn) {
|
||||
if (accountList.count() > 1) {
|
||||
_actionLogout->setText(tr("Sign out everywhere"));
|
||||
_actionLogout->setText(tr("Log out everywhere"));
|
||||
} else {
|
||||
_actionLogout->setText(tr("Sign out"));
|
||||
_actionLogout->setText(tr("Log out"));
|
||||
}
|
||||
_contextMenu->addAction(_actionLogout);
|
||||
}
|
||||
if (atLeastOneSignedOut) {
|
||||
if (accountList.count() > 1) {
|
||||
_actionLogin->setText(tr("Sign in everywhere..."));
|
||||
_actionLogin->setText(tr("Log in everywhere..."));
|
||||
} else {
|
||||
_actionLogin->setText(tr("Sign in..."));
|
||||
_actionLogin->setText(tr("Log in..."));
|
||||
}
|
||||
_contextMenu->addAction(_actionLogin);
|
||||
}
|
||||
|
@ -521,9 +523,9 @@ void ownCloudGui::setupActions()
|
|||
_actionQuit = new QAction(tr("Quit %1").arg(Theme::instance()->appNameGUI()), this);
|
||||
QObject::connect(_actionQuit, SIGNAL(triggered(bool)), _app, SLOT(quit()));
|
||||
|
||||
_actionLogin = new QAction(tr("Sign in..."), this);
|
||||
_actionLogin = new QAction(tr("Log in..."), this);
|
||||
connect(_actionLogin, SIGNAL(triggered()), this, SLOT(slotLogin()));
|
||||
_actionLogout = new QAction(tr("Sign out"), this);
|
||||
_actionLogout = new QAction(tr("Log out"), this);
|
||||
connect(_actionLogout, SIGNAL(triggered()), this, SLOT(slotLogout()));
|
||||
|
||||
if(_app->debugMode()) {
|
||||
|
@ -765,6 +767,10 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l
|
|||
qDebug() << "Could not open share dialog for" << localPath << "no responsible folder found";
|
||||
return;
|
||||
}
|
||||
|
||||
// For https://github.com/owncloud/client/issues/3783
|
||||
_settingsDialog->hide();
|
||||
|
||||
const auto accountState = folder->accountState();
|
||||
|
||||
qDebug() << Q_FUNC_INFO << "Opening share dialog" << sharePath << localPath;
|
||||
|
|
|
@ -453,10 +453,7 @@ void OwncloudSetupWizard::slotAssistantFinished( int result )
|
|||
// is changed.
|
||||
auto account = applyAccountChanges();
|
||||
|
||||
QString localFolder = QDir::fromNativeSeparators(_ocWizard->localFolder());
|
||||
if( !localFolder.endsWith(QLatin1Char('/'))) {
|
||||
localFolder.append(QLatin1Char('/'));
|
||||
}
|
||||
QString localFolder = FolderDefinition::prepareLocalPath(_ocWizard->localFolder());
|
||||
|
||||
bool startFromScratch = _ocWizard->field("OCSyncFromScratch").toBool();
|
||||
if (!startFromScratch || ensureStartFromScratch(localFolder)) {
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "syncfileitem.h"
|
||||
#include "filesystem.h"
|
||||
#include "version.h"
|
||||
#include "account.h"
|
||||
#include "accountstate.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
@ -655,7 +656,7 @@ SyncFileStatus SocketApi::fileStatus(Folder *folder, const QString& systemFileNa
|
|||
if (rec._remotePerm.isNull()) {
|
||||
// probably owncloud 6, that does not have permissions flag yet.
|
||||
QString url = folder->remoteUrl().toString() + fileName;
|
||||
if (url.contains(QLatin1String("/remote.php/webdav/Shared/"))) {
|
||||
if (url.contains( folder->accountState()->account()->davPath() + QLatin1String("Shared/") )) {
|
||||
status.setSharedWithMe(true);
|
||||
}
|
||||
} else if (rec._remotePerm.contains("S")) {
|
||||
|
|
|
@ -160,7 +160,7 @@ private:
|
|||
/**
|
||||
* @brief Updater that only implements notification for use in settings
|
||||
*
|
||||
* The implementation does how show popups
|
||||
* The implementation does not show popups
|
||||
*
|
||||
* @ingroup gui
|
||||
*/
|
||||
|
|
|
@ -37,6 +37,7 @@ public:
|
|||
explicit OwncloudConnectionMethodDialog(QWidget *parent = 0);
|
||||
~OwncloudConnectionMethodDialog();
|
||||
enum {
|
||||
Closed = 0,
|
||||
No_TLS,
|
||||
Client_Side_TLS,
|
||||
Back
|
||||
|
|
|
@ -45,6 +45,7 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent)
|
|||
_progressIndi(new QProgressIndicator (this))
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
|
||||
|
||||
Theme *theme = Theme::instance();
|
||||
setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(theme->appNameGUI())));
|
||||
|
@ -66,7 +67,6 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent)
|
|||
connect(_ui.leUrl, SIGNAL(editingFinished()), SLOT(slotUrlEditFinished()));
|
||||
|
||||
addCertDial = new AddCertificateDialog(this);
|
||||
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
|
||||
connect(_ocWizard,SIGNAL(needCertificate()),this,SLOT(slotAskSSLClientCertificate()));
|
||||
}
|
||||
|
||||
|
@ -106,11 +106,17 @@ void OwncloudSetupPage::slotUrlChanged(const QString& url)
|
|||
if (url.endsWith("index.php")) {
|
||||
newUrl.chop(9);
|
||||
}
|
||||
if (url.endsWith("remote.php/webdav")) {
|
||||
newUrl.chop(17);
|
||||
}
|
||||
if (url.endsWith("remote.php/webdav/")) {
|
||||
newUrl.chop(18);
|
||||
if( _ocWizard && _ocWizard->account() ) {
|
||||
QString webDavPath = _ocWizard->account()->davPath();
|
||||
if (url.endsWith(webDavPath)) {
|
||||
newUrl.chop( webDavPath.length() );
|
||||
}
|
||||
if( webDavPath.endsWith(QLatin1Char('/')) ) {
|
||||
webDavPath.chop(1); // cut off the slash
|
||||
if( url.endsWith(webDavPath)) {
|
||||
newUrl.chop(webDavPath.length());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (newUrl != url) {
|
||||
_ui.leUrl->setText(newUrl);
|
||||
|
@ -260,6 +266,7 @@ void OwncloudSetupPage::setErrorString( const QString& err, bool retryHTTPonly )
|
|||
case OwncloudConnectionMethodDialog::Client_Side_TLS:
|
||||
slotAskSSLClientCertificate();
|
||||
break;
|
||||
case OwncloudConnectionMethodDialog::Closed:
|
||||
case OwncloudConnectionMethodDialog::Back:
|
||||
default:
|
||||
// No-op.
|
||||
|
|
|
@ -43,8 +43,6 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
|||
_advancedSetupPage(new OwncloudAdvancedSetupPage),
|
||||
_resultPage(new OwncloudWizardResultPage),
|
||||
_credentialsPage(0),
|
||||
_configFile(),
|
||||
_oCUser(),
|
||||
_setupLog()
|
||||
{
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
|
|
|
@ -93,8 +93,6 @@ private:
|
|||
OwncloudWizardResultPage* _resultPage;
|
||||
AbstractCredentialsWizardPage* _credentialsPage;
|
||||
|
||||
QString _configFile;
|
||||
QString _oCUser;
|
||||
QStringList _setupLog;
|
||||
};
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "creds/abstractcredentials.h"
|
||||
#include "../3rdparty/certificates/p12topem.h"
|
||||
#include "capabilities.h"
|
||||
#include "theme.h"
|
||||
|
||||
#include <QSettings>
|
||||
#include <QMutex>
|
||||
|
@ -40,7 +41,7 @@ Account::Account(QObject *parent)
|
|||
, _am(0)
|
||||
, _credentials(0)
|
||||
, _treatSslErrorsAsFailure(false)
|
||||
, _davPath("remote.php/webdav/")
|
||||
, _davPath( Theme::instance()->webDavPath() )
|
||||
, _wasMigrated(false)
|
||||
{
|
||||
qRegisterMetaType<AccountPtr>("AccountPtr");
|
||||
|
@ -60,6 +61,17 @@ Account::~Account()
|
|||
delete _am;
|
||||
}
|
||||
|
||||
QString Account::davPath() const
|
||||
{
|
||||
// make sure to have a trailing slash
|
||||
if( !_davPath.endsWith('/') ) {
|
||||
QString dp(_davPath);
|
||||
dp.append('/');
|
||||
return dp;
|
||||
}
|
||||
return _davPath;
|
||||
}
|
||||
|
||||
void Account::setSharedThis(AccountPtr sharedThis)
|
||||
{
|
||||
_sharedThis = sharedThis.toWeakRef();
|
||||
|
@ -74,7 +86,13 @@ AccountPtr Account::sharedFromThis()
|
|||
QString Account::displayName() const
|
||||
{
|
||||
auto user = _credentials->user();
|
||||
return tr("%1@%2").arg(user, _url.host());
|
||||
QString dn = QString("%1@%2").arg(user, _url.host());
|
||||
int port = url().port();
|
||||
if (port > 0 && port != 80 && port != 443) {
|
||||
dn.append(QLatin1Char(':'));
|
||||
dn.append(QString::number(port));
|
||||
}
|
||||
return dn;
|
||||
}
|
||||
|
||||
QString Account::id() const
|
||||
|
|
|
@ -60,7 +60,12 @@ public:
|
|||
class OWNCLOUDSYNC_EXPORT Account : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QString davPath() const { return _davPath; }
|
||||
/**
|
||||
* @brief The possibly themed dav path for the account. It has
|
||||
* a trailing slash.
|
||||
* @returns the (themeable) dav path for the account.
|
||||
*/
|
||||
QString davPath() const;
|
||||
void setDavPath(const QString&s) { _davPath = s; }
|
||||
|
||||
static AccountPtr create();
|
||||
|
@ -195,7 +200,7 @@ private:
|
|||
static QString _configFileName;
|
||||
QByteArray _pemCertificate;
|
||||
QString _pemPrivateKey;
|
||||
QString _davPath; // default "remote.php/webdav/";
|
||||
QString _davPath; // defaults to value from theme, might be overwritten in brandings
|
||||
bool _wasMigrated;
|
||||
friend class AccountManager;
|
||||
};
|
||||
|
|
|
@ -134,7 +134,7 @@ void ConnectionValidator::slotNoStatusFound(QNetworkReply *reply)
|
|||
if( reply && ! _account->credentials()->stillValid(reply)) {
|
||||
_errors.append(tr("Authentication error: Either username or password are wrong."));
|
||||
} else {
|
||||
_errors.append(tr("Unable to connect to %1").arg(_account->url().toString()));
|
||||
//_errors.append(tr("Unable to connect to %1").arg(_account->url().toString()));
|
||||
_errors.append( reply->errorString() );
|
||||
}
|
||||
reportResult( StatusNotFound );
|
||||
|
@ -142,7 +142,8 @@ void ConnectionValidator::slotNoStatusFound(QNetworkReply *reply)
|
|||
|
||||
void ConnectionValidator::slotJobTimeout(const QUrl &url)
|
||||
{
|
||||
_errors.append(tr("Unable to connect to %1").arg(url.toString()));
|
||||
Q_UNUSED(url);
|
||||
//_errors.append(tr("Unable to connect to %1").arg(url.toString()));
|
||||
_errors.append(tr("timeout"));
|
||||
reportResult( Timeout );
|
||||
}
|
||||
|
|
|
@ -300,7 +300,7 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file,QMap
|
|||
}
|
||||
|
||||
} else {
|
||||
// Remove /remote.php/webdav/folder/ from /remote.php/webdav/folder/subfile.txt
|
||||
// Remove <webDAV-Url>/folder/ from <webDAV-Url>/folder/subfile.txt
|
||||
file.remove(0, _lsColJob->reply()->request().url().path().length());
|
||||
// remove trailing slash
|
||||
while (file.endsWith('/')) {
|
||||
|
|
|
@ -394,7 +394,7 @@ void OwncloudPropagator::start(const SyncFileItemVector& items)
|
|||
bool OwncloudPropagator::isInSharedDirectory(const QString& file)
|
||||
{
|
||||
bool re = false;
|
||||
if( _remoteDir.contains("remote.php/webdav/Shared") ) {
|
||||
if( _remoteDir.contains( _account->davPath() + QLatin1String("Shared") ) ) {
|
||||
// The Shared directory is synced as its own sync connection
|
||||
re = true;
|
||||
} else {
|
||||
|
@ -663,17 +663,16 @@ void PropagateDirectory::slotSubJobFinished(SyncFileItem::Status status)
|
|||
_hasError = status;
|
||||
}
|
||||
_runningNow--;
|
||||
_jobsFinished++;
|
||||
|
||||
int total = _subJobs.count();
|
||||
if (!_firstJob) {
|
||||
total--;
|
||||
int totalJobs = _subJobs.count();
|
||||
if (_firstJob) {
|
||||
totalJobs++;
|
||||
}
|
||||
|
||||
_current++;
|
||||
|
||||
// We finished to processing all the jobs
|
||||
// check if we finished
|
||||
if (_current >= total) {
|
||||
if (_jobsFinished >= totalJobs) {
|
||||
Q_ASSERT(!_runningNow); // how can we finished if there are still jobs running now
|
||||
finalize();
|
||||
} else {
|
||||
|
|
|
@ -189,13 +189,13 @@ public:
|
|||
|
||||
SyncFileItemPtr _item;
|
||||
|
||||
int _current; // index of the current running job
|
||||
int _runningNow; // number of subJob running now
|
||||
int _jobsFinished; // number of jobs that have completed
|
||||
int _runningNow; // number of subJobs running right now
|
||||
SyncFileItem::Status _hasError; // NoStatus, or NormalError / SoftError if there was an error
|
||||
|
||||
explicit PropagateDirectory(OwncloudPropagator *propagator, const SyncFileItemPtr &item = SyncFileItemPtr(new SyncFileItem))
|
||||
: PropagatorJob(propagator)
|
||||
, _firstJob(0), _item(item), _current(-1), _runningNow(0), _hasError(SyncFileItem::NoStatus)
|
||||
, _firstJob(0), _item(item), _jobsFinished(0), _runningNow(0), _hasError(SyncFileItem::NoStatus)
|
||||
{ }
|
||||
|
||||
virtual ~PropagateDirectory() {
|
||||
|
@ -269,8 +269,8 @@ public:
|
|||
ne_session_s * const _session;
|
||||
|
||||
const QString _localDir; // absolute path to the local directory. ends with '/'
|
||||
const QString _remoteDir; // path to the root of the remote. ends with '/' (include remote.php/webdav)
|
||||
const QString _remoteFolder; // folder. (same as remoteDir but without remote.php/webdav)
|
||||
const QString _remoteDir; // path to the root of the remote. ends with '/' (include WebDAV path)
|
||||
const QString _remoteFolder; // folder. (same as remoteDir but without the WebDAV path)
|
||||
|
||||
SyncJournalDb * const _journal;
|
||||
bool _finishedEmited; // used to ensure that finished is only emit once
|
||||
|
|