Comparar commits
213 Commits
v2.1.0-rc1
..
v2.1.1
| Autor | SHA1 | Data | |
|---|---|---|---|
| eeec892b0a | |||
| c98bf174ed | |||
| ae3b9f112c | |||
| 7fd9e751e0 | |||
| 95a58e74ca | |||
| b70a95ba30 | |||
| 72e14643f7 | |||
| f140d3447c | |||
| 6b643c7501 | |||
| 24920a4ad1 | |||
| 65655584e9 | |||
| e397056d2e | |||
| 54a278edb9 | |||
| b0acc475b0 | |||
| 834a971e2a | |||
| 6701927840 | |||
| e4ae279f7b | |||
| 25e0d1eac3 | |||
| d42faa80a6 | |||
| a92c756fa9 | |||
| 4cf94ed62a | |||
| 57c7727479 | |||
| 8480fc7ae5 | |||
| 5ae81aa96c | |||
| 28907ec0c3 | |||
| 7ddfa79950 | |||
| ba87178dee | |||
| 8de21cc37f | |||
| 063444801a | |||
| 46e384a2f2 | |||
| 5092243080 | |||
| 110f3710be | |||
| 6096a836a4 | |||
| c3724068e5 | |||
| 7eba784b0c | |||
| 8486a2fd2b | |||
| f15f4aa886 | |||
| c23ae5aa14 | |||
| 93986e0234 | |||
| 47710d167a | |||
| 1534dad5b2 | |||
| 4d52838e2b | |||
| 7f44e83cc7 | |||
| 2c6546f46f | |||
| 76bf93e3de | |||
| 7a676a748a | |||
| 17895f3a30 | |||
| 21e3df4f34 | |||
| f03f845d04 | |||
| a87727844c | |||
| e88410d07b | |||
| 3f704a7a0e | |||
| 81204ee0db | |||
| d12c0939b9 | |||
| a41fbc0454 | |||
| 9d6d14d623 | |||
| 439eddb523 | |||
| 7beb6f2234 | |||
| 19a3a10524 | |||
| 2e5f28d7c1 | |||
| bbedeed1c5 | |||
| a18b13d56e | |||
| 31da3e98c9 | |||
| 272755e1ec | |||
| 580b6e2349 | |||
| 9800101748 | |||
| 1ed02f6494 | |||
| bb5c370575 | |||
| 74b0d2d9f1 | |||
| 8c531873a8 | |||
| 9c9b9f3931 | |||
| 95615eaca7 | |||
| 54c2c9ac4e | |||
| ea03f9da13 | |||
| 536fd105ae | |||
| d89edc35d2 | |||
| 4d8f81d802 | |||
| ed6f76ca28 | |||
| 63bc383dfa | |||
| 0f658e5ca9 | |||
| 49824b930d | |||
| abf5a5ad1e | |||
| d4b6b5cb1d | |||
| ce6f90397a | |||
| bb6a50be02 | |||
| e7e918dafe | |||
| 81b7798ac2 | |||
| 868d4c781a | |||
| 71ad94ddb2 | |||
| 06ffc44073 | |||
| e9ba7c612e | |||
| fd7afa87b7 | |||
| 51a70cee3d | |||
| aafab73a82 | |||
| e3c1d96519 | |||
| 9c7066ac47 | |||
| cede7ec971 | |||
| 2f355c473a | |||
| a63ebe0904 | |||
| ef9483c82d | |||
| 10f1ed771a | |||
| 93e8bbab10 | |||
| 62df938465 | |||
| 634dad033f | |||
| 6e3809528e | |||
| 60a6b2b0c3 | |||
| 2662203fb7 | |||
| d4edab02b0 | |||
| 5cc4c03b6a | |||
| 5382901859 | |||
| 2e7a3f9e37 | |||
| c8b3df6668 | |||
| 69d9840b89 | |||
| 970cdcfdbb | |||
| 0ef9bd9e23 | |||
| 16030a61eb | |||
| 5487fc1f9c | |||
| 92677da3e4 | |||
| 6d38d4e085 | |||
| a16361e823 | |||
| 03415b286c | |||
| 72a503e93f | |||
| 6a6bce4bef | |||
| e64833a217 | |||
| a759ba1d9e | |||
| 7ed243d3cd | |||
| afa8d671be | |||
| c607707580 | |||
| a0b913f65d | |||
| 271b2f8c5b | |||
| cf5b1e401c | |||
| 11174ddf4c | |||
| 48a0ffdc9e | |||
| 3664be1480 | |||
| c5cd584b63 | |||
| ca1c8a0121 | |||
| 3649c90605 | |||
| 89cb27f224 | |||
| 0d808114b6 | |||
| 0555c88425 | |||
| e2d1a5a41d | |||
| df1b309b36 | |||
| e3b53b7e74 | |||
| d8d9fcf2f4 | |||
| 8b5474ff67 | |||
| f65a29df5d | |||
| fd18c565b0 | |||
| fbb85fab81 | |||
| db0674dc76 | |||
| 3572e7ffa4 | |||
| fe75c6ad28 | |||
| 3de8f27a02 | |||
| 4dfce57a58 | |||
| 179b25d289 | |||
| 230b6bc547 | |||
| a2eee7e349 | |||
| cec4b803cf | |||
| 1a519ac1fb | |||
| d92c8bec86 | |||
| eb28d171f3 | |||
| fdeb7ccda6 | |||
| 73acad2c92 | |||
| 7eca3c9d3b | |||
| 64ca94d960 | |||
| c01220fd95 | |||
| 4d175ae77b | |||
| 78df3a35b4 | |||
| 68057c1c5a | |||
| 480861efb6 | |||
| 9a252995c2 | |||
| 9a9446d13d | |||
| 3d71d6c96f | |||
| 41c3c107d4 | |||
| 24cad42a86 | |||
| 1a564b1672 | |||
| c4006795cc | |||
| cf06083d1b | |||
| 89004437c5 | |||
| f0e3eca8a1 | |||
| d15cf0c2ff | |||
| 770ad54229 | |||
| a75209d104 | |||
| ab5e543099 | |||
| 451ebd447b | |||
| 1f8af40361 | |||
| 685f2a259f | |||
| 4a2b5f7cc8 | |||
| 52dc55d044 | |||
| e6ab047751 | |||
| 4f5cf01cbc | |||
| 442cc63d22 | |||
| c24a8ba208 | |||
| db7d70a929 | |||
| d2f1c141d8 | |||
| 01faf102ba | |||
| 76d1296053 | |||
| 559bf75189 | |||
| 339caf9dc8 | |||
| b26c36b4bf | |||
| c79879aa07 | |||
| e85475780f | |||
| b033a8e731 | |||
| 0b5b4a5eea | |||
| af0d0bd2ac | |||
| 48097467f9 | |||
| 499400916d | |||
| 3f0d575df7 | |||
| 4cb9d6763b | |||
| d62c51890e | |||
| 10707c8288 | |||
| b896d8aa15 | |||
| fcdab1e804 | |||
| 9f15ba3972 |
@@ -7,7 +7,6 @@ CMakeLists.txt.user*
|
||||
doc/_build/*
|
||||
*.kate-swp
|
||||
*.kdev4
|
||||
win/
|
||||
admin/win/nsi/l10n/pofiles/*.po
|
||||
*.swp
|
||||
*~$
|
||||
|
||||
@@ -10,3 +10,6 @@
|
||||
[submodule "src/3rdparty/libcrashreporter-qt"]
|
||||
path = src/3rdparty/libcrashreporter-qt
|
||||
url = git://github.com/dschmidt/libcrashreporter-qt.git
|
||||
[submodule "src/3rdparty/qtkeychain"]
|
||||
path = src/3rdparty/qtkeychain
|
||||
url = https://github.com/frankosterfeld/qtkeychain.git
|
||||
|
||||
@@ -1,54 +1,75 @@
|
||||
ChangeLog
|
||||
=========
|
||||
version 2.1 (release 2015-12-01)
|
||||
version 2.1.1 (release 2016-02-10)
|
||||
* UI improvements for HiDPI screens, error messages, RTL languages
|
||||
* Fix occurences of "Connection Closed" when a new unauthenticated TCP socket is used
|
||||
* Fix undeliberate WiFi scanning done by Qt Network classes
|
||||
* Several fixes/improvements to the sharing dialog
|
||||
* Several fixes/improvements to the server activity tab
|
||||
* Create the directory when using --confdir and it does not exist
|
||||
* Windows Overlay icons: Fix DLL and icon oddities
|
||||
* Mac Overlay icons: Don't install legacy Finder plugin on >= 10.10
|
||||
* Linux Overlay icons: Nemo plugin
|
||||
* Overlay icons: Fix several wrong icon state computations
|
||||
* Allow changeable upload chunk size in owncloud.cfg
|
||||
* Crash fixes on account deletion
|
||||
* Forget password on explicit sign-out
|
||||
* OS X: Fix the file system watcher ignoring unicode paths (#4424)
|
||||
* Windows Installer: Update to NSIS 2.50, fixes possible DLL injection
|
||||
* Sync Engine: .lnk files
|
||||
* Sync Engine: symlinked syn directories
|
||||
* Sync Engine: Windows: Fix deleting and replacing of read-only files (#4308, #4277)
|
||||
* Sync Engine: Fixes for files becoming directories and vice versa (#4302)
|
||||
* Misc other fixes/improvements
|
||||
|
||||
version 2.1 (release 2015-12-03)
|
||||
* GUI: Added a display of server activities
|
||||
* GUI: Added a separate view for not synced items, ignores, errors.
|
||||
* GUI: Improve upload/download progress UI (#3403, #3569)
|
||||
* Allow sharing with ownCloud internal users and groups from Desktop
|
||||
* Consider .* files hidden on all platforms (#4023)
|
||||
* GUI: Added a separate view for not synced items, ignores, errors
|
||||
* GUI: Improved upload/download progress UI (#3403, #3569)
|
||||
* Allowed sharing with ownCloud internal users and groups from Desktop
|
||||
* Changed files starting in .* to be considered hidden on all platforms (#4023)
|
||||
* Reflect read-only permissions in filesystem (#3244)
|
||||
* Blacklist: Clear on successful chunk upload (#3934)
|
||||
* Improve reconnecting after network change/disconnect (#4167 #3969 ...)
|
||||
* Performance improvements in Windows file system discovery
|
||||
* libneon-based propagator removed.
|
||||
It was already disabled on OS X and Windows and only used on
|
||||
Linux when building with Qt < 5.4 and having bandwidth limiting enabled.
|
||||
So now you need Qt 5.4 on Linux if you want bandwidth limiting.
|
||||
* performance improvements in the logging functions
|
||||
* Handle local disk space problems gracefully (#2939)
|
||||
* Improved reconnecting after network change/disconnect (#4167 #3969 ...)
|
||||
* Improved performance in Windows file system discovery
|
||||
* Removed libneon-based propagator. As a consequence, The client can no
|
||||
longer provide bandwith limiting on Linux-distributions where it is
|
||||
using Qt < 5.4
|
||||
* Performance improvements in the logging functions
|
||||
* Ensured that local disk space problems are handled gracefully (#2939)
|
||||
* Improved handling of checksums: transport validation, db (#3735)
|
||||
* For *eml-files don't reupload if size and checksum are unchanged (#3235)
|
||||
* Handle 403 reply code properly (File Firewall) (#3490)
|
||||
* Reduce number of PROPFIND requests to server(#3964)
|
||||
* Ensured 403 reply code is handled properly (File Firewall) (#3490)
|
||||
* Reduced number of PROPFIND requests to server(#3964)
|
||||
* GUI: Added Account toolbox widget to keep account actions (#4139)
|
||||
* Tray Menu: Recent Activity fixes (#4093, #3969)
|
||||
* FolderMan: Fix infinite wait on pause (#4093)
|
||||
* Rename env variables to include unit (#2939)
|
||||
* FolderStatusModel: attempt to detect removed undecided files (#3612)
|
||||
* Tray Menu: Added fixes for Recent Activity menu (#4093, #3969)
|
||||
* FolderMan: Fixed infinite wait on pause (#4093)
|
||||
* Renamed env variables to include unit (#2939)
|
||||
* FolderStatusModel: Attempt to detect removed undecided files (#3612)
|
||||
* SyncEngine: Don't whipe the white list if the sync was aborted (#4018)
|
||||
* Quota: handle special negative value for the quota (#3940)
|
||||
* Quota: Handle special negative value for the quota (#3940)
|
||||
* State app name in update notification (#4020)
|
||||
* PropagateUpload: Fix double-emission of finished (#3844)
|
||||
* GUI: Allow to click on folder names which are excluded from sync.
|
||||
* Shell Integration: Dolphin integration prepared, works if upstream released
|
||||
* FolderStatusModel: reset also if a folder was renamed (#4011)
|
||||
* GUI: No padding for toolbar extension (#3795)
|
||||
* Use the term folder sync connection in more places (#3757)
|
||||
* AccountSettings: don't disable pause when offline (#4010)
|
||||
* Fix handling of hidden files (#3980)
|
||||
* PropagateUpload: Fixed double-emission of finished (#3844)
|
||||
* GUI: Ensured folder names which are excluded from sync can be clicked
|
||||
* Shell Integration: Dolphin support, requires KF 5.16 and KDE Application 15.12
|
||||
* FolderStatusModel: Ensured reset also if a folder was renamed (#4011)
|
||||
* GUI: Fixed accessiblity of remaing items in full settings toolbar (#3795)
|
||||
* Introduced the term "folder sync connection" in more places (#3757)
|
||||
* AccountSettings: Don't disable pause when offline (#4010)
|
||||
* Fixed handling of hidden files (#3980)
|
||||
* Handle download errors while resuming as soft errors (#4000)
|
||||
* SocketAPI: don't trim the command (#3297)
|
||||
* SocketAPI: Ensured that the command isn't trimmed (#3297)
|
||||
* Shutdown socket API before removing the db (#3824)
|
||||
* GUI: Make "Keep" default in the delete-all dialog (#3824)
|
||||
* owncloudcmd: Return code 0 for --version and --help
|
||||
* owncloudcmd: add --max-sync-retries (#4037)
|
||||
* GUI: Made "Keep" default in the delete-all dialog (#3824)
|
||||
* owncloudcmd: Introduced return code 0 for --version and --help
|
||||
* owncloudcmd: Added --max-sync-retries (#4037)
|
||||
* owncloudcmd: Don't do a check that file are older than 2s (#4160)
|
||||
* Fix getting size for selective sync (#3986)
|
||||
* Fixed getting size for selective sync (#3986)
|
||||
* Re-added close button in the settings window (#3713)
|
||||
* Abililty to handle storage limitations gracefully (#3736)
|
||||
* Added abililty to handle storage limitations gracefully (#3736)
|
||||
* Updated 3rdparty dependencies: sqlite version 3.9.1
|
||||
* Organize needed vendor Qt patches better.
|
||||
* plus a lot of unmentioned improvements and fixes.
|
||||
* Organized patches to our base Qt version into admin/qt/patches
|
||||
* Plus: A lot of unmentioned improvements and fixes
|
||||
|
||||
version 2.0.2 (release 2015-10-21)
|
||||
* csync_file_stat_s: Save a bit of memory
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
set( MIRALL_VERSION_MAJOR 2 )
|
||||
set( MIRALL_VERSION_MINOR 1 )
|
||||
set( MIRALL_VERSION_PATCH 0 )
|
||||
set( MIRALL_VERSION_PATCH 1 )
|
||||
set( MIRALL_SOVERSION 0 )
|
||||
|
||||
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||
set( MIRALL_VERSION_SUFFIX "rc1") #e.g. beta1, beta2, rc1
|
||||
set( MIRALL_VERSION_SUFFIX "") #e.g. beta1, beta2, rc1
|
||||
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
|
||||
|
||||
if( NOT DEFINED MIRALL_VERSION_BUILD )
|
||||
|
||||
@@ -25,6 +25,8 @@ def extractDeps(macho):
|
||||
deps = [macho]
|
||||
otool = subprocess.Popen(['otool', '-L', macho], stdout=subprocess.PIPE)
|
||||
for l in otool.communicate()[0].splitlines():
|
||||
if 'is not an object file' in l:
|
||||
return []
|
||||
m = re.search(r'@[^\s]+', l)
|
||||
if m:
|
||||
path = resolvePath(m.group(0))
|
||||
|
||||
@@ -38,8 +38,6 @@ QT_PLUGINS = [
|
||||
'imageformats/libqgif.dylib',
|
||||
'imageformats/libqico.dylib',
|
||||
'imageformats/libqjpeg.dylib',
|
||||
'bearer/libqcorewlanbearer.dylib',
|
||||
'bearer/libqgenericbearer.dylib',
|
||||
'imageformats/libqsvg.dylib',
|
||||
'imageformats/libqmng.dylib',
|
||||
]
|
||||
@@ -251,35 +249,38 @@ def CopyPlugin(path, subdir):
|
||||
commands.append(args)
|
||||
return new_path
|
||||
|
||||
def CopyFramework(path):
|
||||
parts = path.split(os.sep)
|
||||
print "CopyFramework:", path
|
||||
def CopyFramework(source_dylib):
|
||||
parts = source_dylib.split(os.sep)
|
||||
print "CopyFramework:", source_dylib
|
||||
for i, part in enumerate(parts):
|
||||
matchObj = re.match(r'(\w+\.framework)', part)
|
||||
if matchObj:
|
||||
full_path = os.path.join(frameworks_dir, *parts[i:-1])
|
||||
framework = matchObj.group(1)
|
||||
dylib_name = parts[-1]
|
||||
source_path = os.path.join('/', *parts[:i+1])
|
||||
dest_path = os.path.join(frameworks_dir, framework)
|
||||
dest_dylib_path = os.path.join(frameworks_dir, *parts[i:-1])
|
||||
break
|
||||
args = ['mkdir', '-p', full_path]
|
||||
commands.append(args)
|
||||
args = ['ditto', '--arch=x86_64', path, full_path]
|
||||
commands.append(args)
|
||||
args = ['chmod', 'u+w', os.path.join(full_path, parts[-1])]
|
||||
commands.append(args)
|
||||
resources_dir = os.path.join(frameworks_dir, framework, "Resources")
|
||||
if os.path.exists(dest_path):
|
||||
print dest_path, "already exists, skipping copy..."
|
||||
return os.path.join(dest_dylib_path, dylib_name)
|
||||
|
||||
args = ['mkdir', resources_dir]
|
||||
args = ['mkdir', '-p', dest_dylib_path]
|
||||
commands.append(args)
|
||||
args = ['chmod', 'u+w', resources_dir]
|
||||
args = ['ditto', '--arch=x86_64', source_dylib, dest_dylib_path]
|
||||
commands.append(args)
|
||||
args = ['chmod', 'u+w', os.path.join(dest_dylib_path, parts[-1])]
|
||||
commands.append(args)
|
||||
args = ['ln', '-s', '5', os.path.join(dest_path, 'Versions', 'Current')]
|
||||
commands.append(args)
|
||||
args = ['ln', '-s', os.path.join('Versions', 'Current', dylib_name), os.path.join(dest_path, dylib_name)]
|
||||
commands.append(args)
|
||||
args = ['ln', '-s', os.path.join('Versions', 'Current', 'Resources'), os.path.join(dest_path, 'Resources')]
|
||||
commands.append(args)
|
||||
args = ['cp', '-r', os.path.join(source_path, 'Versions', '5', 'Resources'), os.path.join(dest_path, 'Versions', '5')]
|
||||
commands.append(args)
|
||||
|
||||
info_plist = os.path.join(os.path.split(path)[0], '..', '..', 'Contents', 'Info.plist')
|
||||
if not os.path.exists(info_plist):
|
||||
info_plist = os.path.join(os.path.split(path)[0], 'Resources', 'Info.plist')
|
||||
if os.path.exists(info_plist):
|
||||
args = ['cp', '-r', info_plist, resources_dir]
|
||||
commands.append(args)
|
||||
return os.path.join(full_path, parts[-1])
|
||||
return os.path.join(dest_dylib_path, dylib_name)
|
||||
|
||||
def FixId(path, library_name):
|
||||
id = '@executable_path/../Frameworks/%s' % library_name
|
||||
|
||||
@@ -1115,6 +1115,28 @@
|
||||
</dict>
|
||||
<key>PACKAGE_UUID</key>
|
||||
<string>39F61FCD-6EAA-4F3A-81C6-25E3F667DFB5</string>
|
||||
<key>REQUIREMENTS</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>BEHAVIOR</key>
|
||||
<integer>1</integer>
|
||||
<key>DICTIONARY</key>
|
||||
<dict>
|
||||
<key>IC_REQUIREMENT_JAVASCRIPT_FUNCTION</key>
|
||||
<string>olderOsx</string>
|
||||
<key>IC_REQUIREMENT_JAVASCRIPT_PARAMETERS</key>
|
||||
<array/>
|
||||
</dict>
|
||||
<key>IDENTIFIER</key>
|
||||
<string>fr.whitebox.Packages.requirement.javascript</string>
|
||||
<key>MESSAGE</key>
|
||||
<array/>
|
||||
<key>NAME</key>
|
||||
<string>JavaScript</string>
|
||||
<key>STATE</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>TITLE</key>
|
||||
<array/>
|
||||
<key>TOOLTIP</key>
|
||||
@@ -1428,6 +1450,18 @@
|
||||
<string>@CMAKE_INSTALL_DIR@</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SHARED_GLOBAL_DATA</key>
|
||||
<dict>
|
||||
<key>IC_REQUIREMENT_JAVASCRIPT_SHARED_SOURCE_CODE</key>
|
||||
<string>
|
||||
function olderOsx() {
|
||||
if(system.compareVersions(system.version.ProductVersion, '10.10') == -1) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
</string>
|
||||
</dict>
|
||||
<key>TYPE</key>
|
||||
<integer>0</integer>
|
||||
<key>VERSION</key>
|
||||
|
||||
@@ -9,8 +9,9 @@ team_identifier="$3"
|
||||
codesign -s "$identity" --force --preserve-metadata=entitlements --verbose=4 --deep "$src_app"
|
||||
|
||||
# Verify the signature
|
||||
spctl -a -t exec -vv $src_app
|
||||
codesign -dv $src_app
|
||||
codesign --verify -v $src_app
|
||||
spctl -a -t exec -vv $src_app
|
||||
|
||||
# Validate that the key used for signing the binary matches the expected TeamIdentifier
|
||||
# needed to pass the SocketApi through the sandbox
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From cf6881c03d9f08c6ace83defe461423bb87f30d8 Mon Sep 17 00:00:00 2001
|
||||
From: =?utf8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@theqtcompany.com>
|
||||
Date: Fri, 15 Jan 2016 14:15:51 +0100
|
||||
Subject: [PATCH] OS X: Ensure system tray icon is prepared even when menu bar
|
||||
is hidden
|
||||
|
||||
On OS X 10.11 (El Capitan) the system menu bar can be automatically
|
||||
hidden, in which case the menu bar height is reported to be 0 when
|
||||
using the menuBarHeight API.
|
||||
|
||||
This resulted in failing to prepare an image for the system tray
|
||||
icon item, making the tray item "invisible".
|
||||
|
||||
Instead we now use the [[NSStatusBar systemStatusBar] thickness]
|
||||
API, which returns the correct height regardless of the menu bar
|
||||
being hidden or not.
|
||||
|
||||
Task-number: QTBUG-48960
|
||||
Change-Id: I208fb8df13754964a6f254cadfbff06dd56c6bab
|
||||
---
|
||||
src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
index a3ffb5b..8152c57 100644
|
||||
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
@@ -198,7 +198,7 @@ void QCocoaSystemTrayIcon::updateIcon(const QIcon &icon)
|
||||
// current OS X versions is 22 points. Provide some future-proofing
|
||||
// by deriving the icon height from the menu height.
|
||||
const int padding = 4;
|
||||
- const int menuHeight = [[[NSApplication sharedApplication] mainMenu] menuBarHeight];
|
||||
+ const int menuHeight = [[NSStatusBar systemStatusBar] thickness];
|
||||
const int maxImageHeight = menuHeight - padding;
|
||||
|
||||
// Select pixmap based on the device pixel height. Ideally we would use
|
||||
--
|
||||
2.6.2.2.g1b5ffa3
|
||||
|
||||
@@ -37,6 +37,7 @@ purpose is outlined in each patches' front matter.
|
||||
* 0013-Make-UnknownAccessibility-not-block-requests.patch
|
||||
* 0015-Remove-legacy-platform-code-in-QSslSocket-for-OS-X-1.patch
|
||||
* 0016-Fix-possible-crash-when-passing-an-invalid-PAC-URL.patch
|
||||
* 0019-Ensure-system-tray-icon-is-prepared-even-when-menu-bar.patch
|
||||
|
||||
### Not submitted to be part of any release:
|
||||
* 0006-Fix-force-debug-info-with-macx-clang_NOUPSTREAM.patch
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# This script creates a new windows toolchain repository in OBS.
|
||||
# It only works for versions that do not yet exist.
|
||||
#
|
||||
# Make sure to adopt the variable stableversion.
|
||||
|
||||
# Set the new stable version accordingly:
|
||||
stableversion=2.1
|
||||
targetproject="isv:ownCloud:toolchains:mingw:win32:${stableversion}"
|
||||
|
||||
# Create the new repo
|
||||
|
||||
# get the xml build description of the stable repo
|
||||
xml=`osc meta prj isv:ownCloud:toolchains:mingw:win32:stable`
|
||||
stable_xml="${xml/stable/$stableversion}"
|
||||
|
||||
echo $stable_xml
|
||||
|
||||
echo $stable_xml | osc meta prj -F - ${targetproject}
|
||||
|
||||
|
||||
# now copy all packages
|
||||
packs=`osc ls isv:ownCloud:toolchains:mingw:win32:stable`
|
||||
|
||||
for pack in $packs
|
||||
do
|
||||
osc copypac isv:ownCloud:toolchains:mingw:win32:stable $pack $targetproject
|
||||
done
|
||||
@@ -0,0 +1,37 @@
|
||||
FROM opensuse:42.1
|
||||
|
||||
MAINTAINER Daniel Molkentin <danimo@owncloud.com>
|
||||
|
||||
ENV TERM ansi
|
||||
ENV HOME /root
|
||||
|
||||
ENV REFRESHED_AT 20160202
|
||||
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys refresh
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/windows:/mingw/openSUSE_42.1/windows:mingw.repo
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys ar http://download.opensuse.org/repositories/isv:ownCloud:toolchains:mingw:win32:2.1/openSUSE_Leap_42.1/isv:ownCloud:toolchains:mingw:win32:2.1.repo
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||
mingw32-headers mingw32-runtime site-config mingw32-libwebp \
|
||||
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5* \
|
||||
mingw32-qt5keychain* mingw32-angleproject* \
|
||||
mingw32-cross-nsis mingw32-libopenssl* \
|
||||
mingw32-sqlite* kdewin-png2ico \
|
||||
osslsigncode wget
|
||||
|
||||
# RPM depends on curl for installs from HTTP
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install curl
|
||||
|
||||
# sudo needed for building as user
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install sudo
|
||||
|
||||
# Use packaged UAC dependencies
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
|
||||
|
||||
# Required for checksumming
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install mingw32-zlib-devel
|
||||
|
||||
# Required for windres not to crash
|
||||
RUN zypper --non-interactive --gpg-auto-import-keys install glibc-locale
|
||||
|
||||
CMD /bin/bash
|
||||
@@ -7,13 +7,13 @@ fi
|
||||
|
||||
useradd user -u ${2:-1000}
|
||||
su - user << EOF
|
||||
cd /home/user/$1
|
||||
rm -rf build-win32
|
||||
mkdir build-win32
|
||||
cd build-win32
|
||||
../admin/win/download_runtimes.sh
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../admin/win/Toolchain-mingw32-openSUSE.cmake -DWITH_CRASHREPORTER=ON
|
||||
make -j4
|
||||
make package
|
||||
ctest .
|
||||
cd /home/user/$1
|
||||
rm -rf build-win32
|
||||
mkdir build-win32
|
||||
cd build-win32
|
||||
../admin/win/download_runtimes.sh
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../admin/win/Toolchain-mingw32-openSUSE.cmake -DWITH_CRASHREPORTER=ON
|
||||
make -j4
|
||||
make package
|
||||
ctest .
|
||||
EOF
|
||||
|
||||
@@ -29,7 +29,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "${APPLICATION_NAME}erako Abiarazle
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Desinstalatzailea idazten"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Instalatzaileko Erregistroko Giltzak idazten"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Bukatuta"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Ez dirudi ${APPLICATION_NAME} '$INSTDIR'.$ direktorioan instalatuta dagoenik.\n$\nJarraitu hala ere (ez da aholkatzen)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Ez dirudi ${APPLICATION_NAME} '$INSTDIR'.$ direktorioan instalatuta dagoenik.$\n$\nJarraitu hala ere (ez da aholkatzen)?"
|
||||
StrCpy $UNINSTALL_ABORT "Desinstalazioak erabiltzaileak bertan behera utzi du"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Abiarazle Bizkorreko Lasterbidea (E/E)"
|
||||
StrCpy $INIT_NO_DESKTOP "Mahaigaineko Lasterbidea (dagoena berridazten du)"
|
||||
|
||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "میانبر اجرای سریع ب
|
||||
StrCpy $UNINSTALLER_FILE_Detail "نوشتن حذف کننده"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "در حال نوشتن کلید های رجیستری نصاب"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "اتمام"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "به نظر نمی رسد نرم افزار ${APPLICATION_NAME} در '$INSTDIR'.$\n$\nنصب شده باشد.\nآیا می خواهید ادامه دهید ( توصیه نشده است ) ؟"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "به نظر نمی رسد نرم افزار ${APPLICATION_NAME} در '$INSTDIR'.$\n$\nنصب شده باشد.$\nآیا می خواهید ادامه دهید ( توصیه نشده است ) ؟"
|
||||
StrCpy $UNINSTALL_ABORT "عمل حذف توسط کاربر متوقف شد"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "میانبر بازکردن سریع ( N/A )"
|
||||
StrCpy $INIT_NO_DESKTOP "میانبر دسکتاپ (رونویسی وجود دارد)"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Näytä julkaisutiedot"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Havaittiin sovelluksen ${APPLICATION_EXECUTABLE} prosessi (tai prosesseja) jotka pitäisi pysäyttää.\nHaluatko että asennusohjelma pysäyttää nämä puolestasi?"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Havaittiin sovelluksen ${APPLICATION_EXECUTABLE} prosessi (tai prosesseja) jotka pitäisi pysäyttää.$\nHaluatko että asennusohjelma pysäyttää nämä puolestasi?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Pysäytetään sovelluksen ${APPLICATION_EXECUTABLE} prosessit."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Tapettavaa prosessia ei löytynyt!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Vanhempi versio sovelluksesta ${APPLICATION_NAME} on jo asennettu. On suositeltavaa että poistat vanhan asennuksen ensin. Valitse mikä toiminto suoritetaan ja napsauta Seuraava jatkaaksesi."
|
||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Pikak
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Kirjoitetaan poisto-ohjelmaa"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Kirjoitetaan asennusohjelman rekisteriavaimia"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Valmis"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Vaikuttaa siltä että sovellus ${APPLICATION_NAME} on asennettu kansioon '$INSTDIR'.\n\nHaluatko jatkaa tästä huolimatta (ei suositeltavaa)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Vaikuttaa siltä että sovellus ${APPLICATION_NAME} on asennettu kansioon '$INSTDIR'.$\n$\nHaluatko jatkaa tästä huolimatta (ei suositeltavaa)?"
|
||||
StrCpy $UNINSTALL_ABORT "Poistaminen keskeytettiin käyttäjän toimesta"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Pikakäynnistyksen pikakuvake (-)"
|
||||
StrCpy $INIT_NO_DESKTOP "Työpöydän pikakuvake (korvaa nykyinen)"
|
||||
|
||||
@@ -9,6 +9,7 @@ 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"
|
||||
@@ -39,5 +40,4 @@ 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!"
|
||||
|
||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Scorciatoia per ${APPLICATION_NAME}
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Creazione del programma di disinstallazione"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Scrittura delle chiavi di registro del programma di installazione"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Completato"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Non sembra che ${APPLICATION_NAME} sia installato nella cartella '$INSTDIR'.$\nVuoi continuare comunque (non consigliato)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Non sembra che ${APPLICATION_NAME} sia installato nella cartella '$INSTDIR'.$$\nVuoi continuare comunque (non consigliato)?"
|
||||
StrCpy $UNINSTALL_ABORT "Disinstallazione interrotta dall'utente"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Scorciatoia dell'avvio veloce (N/D)"
|
||||
StrCpy $INIT_NO_DESKTOP "Scorciatoia del desktop (sovrascrivi se esistente)"
|
||||
|
||||
@@ -3,12 +3,12 @@ StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "${APPLICATION_EXECUTABLE} のプロセスを終了する必要があります。$\nインストーラーがそのプロセスを停止してもよろしいですか?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "${APPLICATION_EXECUTABLE} プロセスを停止しています。"
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "終了するプロセスがありません"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "システムに ${APPLICATION_NAME} の旧バージョンがインストールされています。\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "システムに ${APPLICATION_NAME} の旧バージョンがインストールされています。$\n旧バージョンをアンインストールし、最新バージョンをインストールするのをお勧めします。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_NEW_Field_2 "インストール前にアンインストールする"
|
||||
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_OLD_Field_1 "${APPLICATION_NAME} の最新バージョンがすでにインストールされています。$\n旧バージョンのインストールはお勧めしません。旧バージョンのインストールが本当に必要な場合は、まず最新バージョンをアンインストールしてから、旧バージョンをインストールしてください。$\nオペレーションを選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_SAME_Field_1 "${APPLICATION_NAME} は、${VERSION} が既にインストールされています。$\n$\n実行したい操作を選択し、次へをクリックする。"
|
||||
StrCpy $PageReinstall_SAME_Field_2 "追加/再インストールコンポーネント"
|
||||
StrCpy $PageReinstall_SAME_Field_3 "${APPLICATION_NAME} をアンインストール"
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de lançamento"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Processos(s) ${APPLICATION_EXECUTABLE} em execução. Estes processos precisam de ser interrompidos.$\\nDeseja que o instalador os termine automaticamente?"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Processos(s) ${APPLICATION_EXECUTABLE} em execução. Estes processos precisam de ser interrompidos.$\nDeseja que o instalador os termine automaticamente?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "A terminar os processos ${APPLICATION_EXECUTABLE}."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Não foi encontrado o processo a terminar!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que você desinstale a versão atual antes de instalar. Selecione a operação que deseja executar e clique em $\"Avançar$\" para continuar."
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Uma versão antiga de ${APPLICATION_NAME} está instalada no sistema. É recomendado que você desinstale a versão atual antes de instalar a mais recente. Selecione a operação que deseja executar e clique em $\"Avançar$\" para continuar."
|
||||
StrCpy $PageReinstall_NEW_Field_2 "Desinstalar antes de instalar"
|
||||
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á instalada.\nSelecione a operação que deseja realizar e clique em '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}"
|
||||
|
||||
@@ -30,7 +30,7 @@ StrCpy $OPTION_SECTION_SC_QUICK_LAUNCH_Desc "Ярлык в меню быстро
|
||||
StrCpy $UNINSTALLER_FILE_Detail "Сохранение деинсталлятора"
|
||||
StrCpy $UNINSTALLER_REGISTRY_Detail "Запись ключей реестра установщика"
|
||||
StrCpy $UNINSTALLER_FINISHED_Detail "Завершено"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Похоже, что приложение ${APPLICATION_NAME} не установлено в каталог '$INSTDIR'.\nВсе равно продолжить (не рекомендуется)?"
|
||||
StrCpy $UNINSTALL_MESSAGEBOX "Похоже, что приложение ${APPLICATION_NAME} не установлено в каталог '$INSTDIR'.$\nВсе равно продолжить (не рекомендуется)?"
|
||||
StrCpy $UNINSTALL_ABORT "Удаление отменено пользователем"
|
||||
StrCpy $INIT_NO_QUICK_LAUNCH "Ярлык быстрого запуска (не доступен)"
|
||||
StrCpy $INIT_NO_DESKTOP "Ярлык на рабочем столе (перезапись существующего)"
|
||||
|
||||
@@ -9,6 +9,7 @@ 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.$\n$\nIzberite opravilo, ki ga želite izvesti in kliknite 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}"
|
||||
@@ -37,7 +38,6 @@ StrCpy $UAC_ERROR_ELEVATE "Ni mogo
|
||||
StrCpy $UAC_INSTALLER_REQUIRE_ADMIN "Namestilnik zahteva skrbniška dovoljenja."
|
||||
StrCpy $INIT_INSTALLER_RUNNING "Namestilnik je že zagnan."
|
||||
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Program za odstranjevanje namestitve zahteva skrbniška dovoljenja."
|
||||
StrCpy $UAC_ERROR_LOGON_SERVICE "Storitev za prijavo ni zagnana. Opravilo je ustavljeno!"
|
||||
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!"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "Mostrar notas de la versión"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\\n$\"¿Quiere que el instalador lo haga por usted?"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "Se encontrarion ${APPLICATION_EXECUTABLE} proceso(s) que debe/n ser detenidos.$\"$\n$\"¿Quiere que el instalador lo haga por usted?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "Parando el proceso ${APPLICATION_EXECUTABLE}."
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "Proceso a detener no encontrado!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "Una versión anterior de ${APPLICATION_NAME} esta instalada en el sistema. Es recomendado que quite esta versión antes de instalar. Elija la operación a realizar y seleccione Siguiente para continuar."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Auto-generated - do not modify
|
||||
StrCpy $MUI_FINISHPAGE_SHOWREADME_TEXT_STRING "แสดงบันทึกประจำรุ่น"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "พบว่ากระบวนการ ${APPLICATION_EXECUTABLE} จะต้องหยุดทำงาน\nคุณต้องการติดตั้งเพื่อหยุดการทำงานเหล่านี้ของคุณ?"
|
||||
StrCpy $ConfirmEndProcess_MESSAGEBOX_TEXT "พบว่ากระบวนการ ${APPLICATION_EXECUTABLE} จะต้องหยุดทำงาน$\nคุณต้องการติดตั้งเพื่อหยุดการทำงานเหล่านี้ของคุณ?"
|
||||
StrCpy $ConfirmEndProcess_KILLING_PROCESSES_TEXT "ฆ่ากระบวนการทำงาน ${APPLICATION_EXECUTABLE}"
|
||||
StrCpy $ConfirmEndProcess_KILL_NOT_FOUND_TEXT "ไม่พบการฆ่ากระบวนการ!"
|
||||
StrCpy $PageReinstall_NEW_Field_1 "รุ่นเก่าของ ${APPLICATION_NAME} มีการติดตั้งในระบบของคุณ ขอแนะนำให้คุณถอนการติดตั้งรุ่นปัจจุบันออกก่อน เลือกการดำเนินการที่คุณต้องการที่จะดำเนินการและคลิกถัดไปเพื่อดำเนินการต่อ"
|
||||
|
||||
@@ -104,10 +104,13 @@ localeToName = {
|
||||
def escapeNSIS(st):
|
||||
return st.replace('\\', r'$\\')\
|
||||
.replace('\t', r'$\t')\
|
||||
.replace('\r', r'\r')\
|
||||
.replace('\n', r'\n')\
|
||||
.replace('\r', r'$\r')\
|
||||
.replace('\n', r'$\n')\
|
||||
.replace('\"', r'$\"')\
|
||||
.replace('$$\\', '$\\')
|
||||
.replace('$$\\', '$\\')\
|
||||
.replace('$\\n', r'$\n')\
|
||||
.replace('$\\\\n', r'$\n')
|
||||
|
||||
|
||||
translationCache = {}
|
||||
|
||||
|
||||
@@ -41,10 +41,6 @@ if (UNIX)
|
||||
"${LIB_INSTALL_DIR}"
|
||||
CACHE PATH "The subdirectory relative to the install prefix where private libs are installed"
|
||||
)
|
||||
SET(PLUGIN_INSTALL_DIR
|
||||
"${LIB_INSTALL_DIR}"
|
||||
CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is prefix/lib/${APPLICATION_SHORTNAME})"
|
||||
)
|
||||
SET(INCLUDE_INSTALL_DIR
|
||||
"${CMAKE_INSTALL_PREFIX}/include"
|
||||
CACHE PATH "The subdirectory to the header prefix (default prefix/include)"
|
||||
@@ -106,7 +102,6 @@ if (WIN32)
|
||||
set(SBIN_INSTALL_DIR "." CACHE PATH "-")
|
||||
set(LIB_INSTALL_DIR "lib" CACHE PATH "-")
|
||||
set(INCLUDE_INSTALL_DIR "include" CACHE PATH "-")
|
||||
set(PLUGIN_INSTALL_DIR "plugins" CACHE PATH "-")
|
||||
set(HTML_INSTALL_DIR "doc/HTML" CACHE PATH "-")
|
||||
set(ICON_INSTALL_DIR "." CACHE PATH "-")
|
||||
set(SOUND_INSTALL_DIR "." CACHE PATH "-")
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
!define QT_DLL_PATH "${MING_BIN}"
|
||||
!define ACCESSIBLE_DLL_PATH "${MING_LIB}/qt5/plugins/accessible"
|
||||
!define SQLITE_DLL_PATH "${MING_LIB}/qt5/plugins/sqldrivers"
|
||||
!define BEARER_DLL_PATH "${MING_LIB}/qt5/plugins/bearer"
|
||||
!define IMAGEFORMATS_DLL_PATH "${MING_LIB}/qt5/plugins/imageformats"
|
||||
!define PLATFORMS_DLL_PATH "${MING_LIB}/qt5/plugins/platforms"
|
||||
|
||||
@@ -407,10 +406,6 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
SetOutPath "$INSTDIR\sqldrivers"
|
||||
File "${SQLITE_DLL_PATH}\qsqlite.dll"
|
||||
|
||||
SetOutPath "$INSTDIR\bearer"
|
||||
File "${BEARER_DLL_PATH}\qgenericbearer.dll"
|
||||
File "${BEARER_DLL_PATH}\qnativewifibearer.dll"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
;License & release notes.
|
||||
File "@CPACK_RESOURCE_FILE_LICENSE@"
|
||||
|
||||
@@ -9,7 +9,6 @@ set(PACKAGE ${APPLICATION_NAME})
|
||||
set(VERSION ${APPLICATION_VERSION})
|
||||
set(DATADIR ${DATA_INSTALL_DIR})
|
||||
set(LIBDIR ${LIB_INSTALL_DIR})
|
||||
set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}")
|
||||
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})
|
||||
|
||||
set(BINARYDIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#cmakedefine VERSION "${APPLICATION_VERSION}"
|
||||
#cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}"
|
||||
#cmakedefine LIBDIR "${LIBDIR}"
|
||||
#cmakedefine PLUGINDIR "${PLUGINDIR}"
|
||||
#cmakedefine SYSCONFDIR "${SYSCONFDIR}"
|
||||
#cmakedefine BINARYDIR "${BINARYDIR}"
|
||||
#cmakedefine SOURCEDIR "${SOURCEDIR}"
|
||||
|
||||
@@ -134,7 +134,10 @@ enum csync_instructions_e {
|
||||
CSYNC_INSTRUCTION_IGNORE = 0x00000020, /* The file is ignored (UPDATE|RECONCILE) */
|
||||
CSYNC_INSTRUCTION_SYNC = 0x00000040, /* The file need to be pushed to the other remote (RECONCILE) */
|
||||
CSYNC_INSTRUCTION_STAT_ERROR = 0x00000080,
|
||||
CSYNC_INSTRUCTION_ERROR = 0x00000100
|
||||
CSYNC_INSTRUCTION_ERROR = 0x00000100,
|
||||
CSYNC_INSTRUCTION_TYPE_CHANGE = 0x0000200, /* Like NEW, but deletes the old entity first (RECONCILE)
|
||||
Used when the type of something changes from directory to file
|
||||
or back. */
|
||||
};
|
||||
|
||||
enum csync_ftw_type_e {
|
||||
|
||||
@@ -192,7 +192,7 @@ struct csync_file_stat_s {
|
||||
|
||||
char *destpath; /* for renames */
|
||||
const char *etag;
|
||||
char file_id[FILE_ID_BUF_SIZE+1]; /* the ownCloud file id is fixed width of 21 byte. */
|
||||
char file_id[FILE_ID_BUF_SIZE+1]; /* the ownCloud file id is fixed width in ownCloud. */
|
||||
char *directDownloadUrl;
|
||||
char *directDownloadCookies;
|
||||
char remotePerm[REMOTE_PERM_BUF_SIZE+1];
|
||||
|
||||
@@ -283,7 +283,13 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) {
|
||||
break;
|
||||
/* file on the other replica has not been modified */
|
||||
case CSYNC_INSTRUCTION_NONE:
|
||||
cur->instruction = CSYNC_INSTRUCTION_SYNC;
|
||||
if (cur->type != other->type) {
|
||||
// If the type of the entity changed, it's like NEW, but
|
||||
// needs to delete the other entity first.
|
||||
cur->instruction = CSYNC_INSTRUCTION_TYPE_CHANGE;
|
||||
} else {
|
||||
cur->instruction = CSYNC_INSTRUCTION_SYNC;
|
||||
}
|
||||
break;
|
||||
case CSYNC_INSTRUCTION_IGNORE:
|
||||
cur->instruction = CSYNC_INSTRUCTION_IGNORE;
|
||||
|
||||
@@ -106,6 +106,42 @@ static bool _last_db_return_error(CSYNC* ctx) {
|
||||
return ctx->statedb.lastReturnValue != SQLITE_OK && ctx->statedb.lastReturnValue != SQLITE_DONE && ctx->statedb.lastReturnValue != SQLITE_ROW;
|
||||
}
|
||||
|
||||
/*
|
||||
* This static method is needed because the type members of the two structs use
|
||||
* different enum values. A direct comparion is not neccessarily correct.
|
||||
*
|
||||
* tmp is csync_file_stat_t
|
||||
* fs is csync_vio_file_stat_t with this vio type:
|
||||
* enum csync_vio_file_type_e {
|
||||
* CSYNC_VIO_FILE_TYPE_UNKNOWN,
|
||||
* CSYNC_VIO_FILE_TYPE_REGULAR,
|
||||
* CSYNC_VIO_FILE_TYPE_DIRECTORY,
|
||||
* CSYNC_VIO_FILE_TYPE_FIFO,
|
||||
* CSYNC_VIO_FILE_TYPE_SOCKET,
|
||||
* CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE,
|
||||
* CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE,
|
||||
* CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK
|
||||
* };
|
||||
*
|
||||
* csync_file_stat_t can be:
|
||||
* CSYNC_FTW_TYPE_SKIP, CSYNC_FTW_TYPE_FILE
|
||||
* CSYNC_FTW_TYPE_DIR, CSYNC_FTW_TYPE_SLINK
|
||||
*/
|
||||
static bool _csync_filetype_different( const csync_file_stat_t *tmp, const csync_vio_file_stat_t *fs)
|
||||
{
|
||||
if( !(tmp && fs)) return false;
|
||||
|
||||
if( tmp->type == CSYNC_FTW_TYPE_SKIP ) return true;
|
||||
|
||||
if( tmp->type == CSYNC_FTW_TYPE_DIR && fs->type != CSYNC_VIO_FILE_TYPE_DIRECTORY )
|
||||
return true;
|
||||
if( tmp->type == CSYNC_FTW_TYPE_FILE && fs->type != CSYNC_VIO_FILE_TYPE_REGULAR )
|
||||
return true;
|
||||
if( tmp->type == CSYNC_FTW_TYPE_SLINK && fs->type != CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK )
|
||||
return true;
|
||||
|
||||
return false; // both are NOT different.
|
||||
}
|
||||
|
||||
/* Return true if two mtime are considered equal
|
||||
* We consider mtime that are one hour difference to be equal if they are one hour appart
|
||||
@@ -272,6 +308,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
(uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm, tmp->has_ignored_files );
|
||||
if (ctx->current == REMOTE_REPLICA && !c_streq(fs->etag, tmp->etag)) {
|
||||
st->instruction = CSYNC_INSTRUCTION_EVAL;
|
||||
|
||||
// Preserve the EVAL flag later on if the type has changed.
|
||||
if (_csync_filetype_different(tmp, fs)) {
|
||||
st->child_modified = 1;
|
||||
}
|
||||
|
||||
goto out;
|
||||
}
|
||||
if (ctx->current == LOCAL_REPLICA &&
|
||||
@@ -296,6 +338,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
// Preserve the EVAL flag later on if the type has changed.
|
||||
if (_csync_filetype_different(tmp, fs)) {
|
||||
st->child_modified = 1;
|
||||
}
|
||||
|
||||
st->instruction = CSYNC_INSTRUCTION_EVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -343,10 +391,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
}
|
||||
|
||||
/* translate the file type between the two stat types csync has. */
|
||||
if( tmp && tmp->type == 0 ) {
|
||||
if( tmp && tmp->type == CSYNC_FTW_TYPE_FILE ) {
|
||||
tmp_vio_type = CSYNC_VIO_FILE_TYPE_REGULAR;
|
||||
} else if( tmp && tmp->type == 2 ) {
|
||||
} else if( tmp && tmp->type == CSYNC_FTW_TYPE_DIR) {
|
||||
tmp_vio_type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
|
||||
} else if( tmp && tmp->type == CSYNC_FTW_TYPE_SLINK ) {
|
||||
tmp_vio_type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
|
||||
} else {
|
||||
tmp_vio_type = CSYNC_VIO_FILE_TYPE_UNKNOWN;
|
||||
}
|
||||
@@ -379,8 +429,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file,
|
||||
return -1;
|
||||
}
|
||||
if(tmp ) { /* tmp existing at all */
|
||||
if ((tmp->type == CSYNC_FTW_TYPE_DIR && fs->type != CSYNC_VIO_FILE_TYPE_DIRECTORY) ||
|
||||
(tmp->type == CSYNC_FTW_TYPE_FILE && fs->type != CSYNC_VIO_FILE_TYPE_REGULAR)) {
|
||||
if ( _csync_filetype_different(tmp, fs)) {
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "WARN: file types different is not!");
|
||||
st->instruction = CSYNC_INSTRUCTION_NEW;
|
||||
goto out;
|
||||
@@ -771,7 +820,9 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn,
|
||||
* local stat function.
|
||||
*/
|
||||
if( d_name[0] == '.' ) {
|
||||
dirent->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
||||
if (strcmp(".sys.admin#recall#", d_name) != 0) { /* recall file shall not be ignored (#4420) */
|
||||
dirent->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN;
|
||||
}
|
||||
}
|
||||
|
||||
if( res == 0) {
|
||||
|
||||
@@ -55,6 +55,7 @@ static const _instr_code_struct _instr[] =
|
||||
{ "INSTRUCTION_SYNC", CSYNC_INSTRUCTION_SYNC },
|
||||
{ "INSTRUCTION_STAT_ERR", CSYNC_INSTRUCTION_STAT_ERROR },
|
||||
{ "INSTRUCTION_ERROR", CSYNC_INSTRUCTION_ERROR },
|
||||
{ "INSTRUCTION_TYPE_CHANGE", CSYNC_INSTRUCTION_TYPE_CHANGE },
|
||||
{ NULL, CSYNC_INSTRUCTION_ERROR }
|
||||
};
|
||||
|
||||
|
||||
@@ -250,6 +250,17 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) {
|
||||
/* printf("Index: %I64i\n", FileIndex.QuadPart); */
|
||||
buf->inode = FileIndex.QuadPart;
|
||||
|
||||
if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE)) {
|
||||
buf->size = (fileInfo.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + fileInfo.nFileSizeLow;
|
||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
|
||||
}
|
||||
if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_MTIME)) {
|
||||
DWORD rem;
|
||||
buf->mtime = FileTimeToUnixTime(&fileInfo.ftLastWriteTime, &rem);
|
||||
/* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */
|
||||
buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
|
||||
}
|
||||
|
||||
c_free_locale_string(wuri);
|
||||
CloseHandle(h);
|
||||
return 0;
|
||||
|
||||
@@ -53,6 +53,12 @@ static void setup_init(void **state) {
|
||||
assert_int_equal(rc, 0);
|
||||
rc = _csync_exclude_add(&(csync->excludes), "пятницы.*");
|
||||
assert_int_equal(rc, 0);
|
||||
rc = _csync_exclude_add(&(csync->excludes), "*/*.out");
|
||||
assert_int_equal(rc, 0);
|
||||
rc = _csync_exclude_add(&(csync->excludes), "latex*/*.run.xml");
|
||||
assert_int_equal(rc, 0);
|
||||
rc = _csync_exclude_add(&(csync->excludes), "latex/*/*.tex.tmp");
|
||||
assert_int_equal(rc, 0);
|
||||
|
||||
*state = csync;
|
||||
}
|
||||
@@ -160,7 +166,21 @@ static void check_csync_excluded(void **state)
|
||||
rc = csync_excluded(csync, "unicode/中文.💩", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||
|
||||
/* path wildcards */
|
||||
rc = csync_excluded(csync, "foobar/my_manuscript.out", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||
|
||||
rc = csync_excluded(csync, "latex_tmp/my_manuscript.run.xml", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||
|
||||
rc = csync_excluded(csync, "word_tmp/my_manuscript.run.xml", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||
|
||||
rc = csync_excluded(csync, "latex/my_manuscript.tex.tmp", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_NOT_EXCLUDED);
|
||||
|
||||
rc = csync_excluded(csync, "latex/songbook/my_manuscript.tex.tmp", CSYNC_FTW_TYPE_FILE);
|
||||
assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST);
|
||||
}
|
||||
|
||||
static void check_csync_excluded_traversal(void **state)
|
||||
|
||||
@@ -9,12 +9,12 @@ Options
|
||||
.. index:: command line switches, command line, options, parameters
|
||||
.. include:: options.rst
|
||||
|
||||
Config File
|
||||
-----------
|
||||
Configuration File
|
||||
------------------
|
||||
.. index:: config file
|
||||
.. include:: conffile.rst
|
||||
|
||||
ownCloud Commandline Client
|
||||
---------------------------
|
||||
ownCloud Command Line Client
|
||||
----------------------------
|
||||
.. index:: owncloudcmd
|
||||
.. include:: owncloudcmd.rst
|
||||
|
||||
@@ -31,9 +31,6 @@ If an update is available, and has been successfully downloaded, the ownCloud
|
||||
client starts a silent update prior to its next launch and then restarts
|
||||
itself. Should the silent update fail, the client offers a manual download.
|
||||
|
||||
When you upgrade from 1.7 you should restart Windows to ensure that all the new
|
||||
features in 1.8 are enabled.
|
||||
|
||||
.. note:: Administrative privileges are required to perform the update.
|
||||
|
||||
Mac OS X
|
||||
@@ -65,9 +62,15 @@ auto-update mechanism for different operating systems.
|
||||
Preventing Automatic Updates in Windows Environments
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can prevent automatic updates from occuring in Windows environments using
|
||||
one of two methods. The first method allows users to override the automatic
|
||||
update check mechanism whereas the second method prevents any manual overrides.
|
||||
Users may disable automatic updates by adding this line to the [General]
|
||||
section of their ``owncloud.cfg`` files::
|
||||
|
||||
skipUpdateCheck=true
|
||||
|
||||
Windows administrators have more options for preventing automatic updates in
|
||||
Windows environments by using one of two methods. The first method allows users
|
||||
to override the automatic update check mechanism, whereas the second method
|
||||
prevents any manual overrides.
|
||||
|
||||
To prevent automatic updates, but allow manual overrides:
|
||||
|
||||
@@ -125,8 +128,7 @@ Preventing Automatic Updates in Linux Environments
|
||||
|
||||
Because the Linux client does not provide automatic updating functionality, there is no
|
||||
need to remove the automatic-update check. However, if you want to disable it edit your desktop
|
||||
client configuration file, ``$HOME/.local/share/data/ownCloud/owncloud.cfg``. Add these lines:
|
||||
client configuration file, ``$HOME/.local/share/data/ownCloud/owncloud.cfg``.
|
||||
Add this line to the [General] section::
|
||||
|
||||
[General]
|
||||
skipUpdateCheck=true
|
||||
|
||||
|
||||
@@ -28,9 +28,6 @@ Linux
|
||||
|
||||
4. (Optional) Call ``make install`` to install the client to the ``/usr/local/bin`` directory.
|
||||
|
||||
.. note:: This step requires the ``mingw32-cross-nsis`` packages be installed on
|
||||
Windows.
|
||||
|
||||
Mac OS X
|
||||
--------
|
||||
|
||||
@@ -63,15 +60,17 @@ To set up your build environment for development using HomeBrew_:
|
||||
|
||||
5. For compilation of the client, follow the :ref:`generic-build-instructions`.
|
||||
|
||||
6. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||
6. Install the Packages_ package creation tool.
|
||||
|
||||
7. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||
<install_dir>``. If you have a developer signing certificate, you can specify
|
||||
its Common Name as a third parameter (use quotes) to have the package
|
||||
signed automatically.
|
||||
|
||||
.. note:: Contrary to earlier versions, ownCloud 1.7 and later are packaged
|
||||
as a ``pkg`` installer. Do not call "make package" at any time when
|
||||
compiling for OS X, as this will build a disk image, and will not
|
||||
work correctly.
|
||||
.. note:: Contrary to earlier versions, ownCloud 1.7 and later are packaged
|
||||
as a ``pkg`` installer. Do not call "make package" at any time when
|
||||
compiling for OS X, as this will build a disk image, and will not
|
||||
work correctly.
|
||||
|
||||
Windows Development Build
|
||||
-----------------------
|
||||
@@ -111,64 +110,62 @@ follow `Windows Installer Build (Cross-Compile)`_ instead.
|
||||
|
||||
6. Create the build directory::
|
||||
|
||||
mkdir client-build
|
||||
cd client-build
|
||||
mkdir client-build
|
||||
cd client-build
|
||||
|
||||
7. Build the client::
|
||||
|
||||
cmake -G "MinGW Makefiles" ../client
|
||||
mingw32-make
|
||||
cmake -G "MinGW Makefiles" ../client
|
||||
mingw32-make
|
||||
|
||||
.. note:: You can try using ninja to build in parallel using
|
||||
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
||||
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
|
||||
.. note:: You can try using ninja to build in parallel using
|
||||
``cmake -G Ninja ../client`` and ``ninja`` instead.
|
||||
.. note:: Refer to the :ref:`generic-build-instructions` section for additional options.
|
||||
|
||||
The ownCloud binary will appear in the ``bin`` directory.
|
||||
The ownCloud binary will appear in the ``bin`` directory.
|
||||
|
||||
Windows Installer Build (Cross-Compile)
|
||||
---------------------------------------
|
||||
|
||||
Due to the large number of dependencies, building the client installer for Windows
|
||||
is **currently only officially supported on openSUSE**, by using the MinGW cross compiler.
|
||||
You can set up openSUSE 13.1, 13.2 or openSUSE Factory in a virtual machine if you do not
|
||||
You can set up any currently supported version of openSUSE in a virtual machine if you do not
|
||||
have it installed already.
|
||||
|
||||
To cross-compile:
|
||||
In order to make setup simple, you can use the provided Dockerfile to build your own image.
|
||||
|
||||
1. Add the following repository using YaST or ``zypper ar`` (adjust when using another openSUSE version)::
|
||||
1. Assuming you are in the root of the ownCloud Client's source tree, you can
|
||||
build an image from this Dockerfile like this::
|
||||
|
||||
zypper ar https://build.opensuse.org/project/show/isv:ownCloud:toolchains:mingw:win32:stable
|
||||
cd admin/win32/docker
|
||||
docker build . -t ownCloud-client-win32:<version>
|
||||
|
||||
2. Install the cross-compiler packages and the cross-compiled dependencies::
|
||||
Replace ``<version>`` by the version of the client you are building, e.g.
|
||||
|version| for the release of the client that this document describes.
|
||||
If you do not wish to use docker, you can run the commands in ``RUN`` manually
|
||||
in a shell, e.g. to create your own build environment in a virtual machine.
|
||||
|
||||
zypper install cmake make mingw32-cross-binutils mingw32-cross-cpp mingw32-cross-gcc \
|
||||
mingw32-cross-gcc-c++ mingw32-cross-pkg-config mingw32-filesystem \
|
||||
mingw32-headers mingw32-runtime site-config mingw32-libwebp \
|
||||
mingw32-cross-libqt5-qmake mingw32-cross-libqt5-qttools mingw32-libqt5*
|
||||
.. note:: Docker images are specific to releases. This one refers to |version|.
|
||||
Newer releases may have different dependencies, and thus require a later
|
||||
version of the docker image! Always pick the docker image fitting your release
|
||||
of ownCloud client!
|
||||
|
||||
3. For the installer, install the NSIS installer package::
|
||||
2. From within the source tree Run the docker instance::
|
||||
|
||||
zypper install mingw32-cross-nsis mingw32-cross-nsis-plugin-uac mingw32-cross-nsis-plugin-nsprocess
|
||||
docker run ownCloud-client-win32:<version> -v "$PWD:/home/jenkins/client" \
|
||||
admin/win32/docker/build.sh $(id -u)
|
||||
|
||||
4. Follow the :ref:`generic-build-instructions`
|
||||
It will run the build, create an NSIS based installer, as well as run tests.
|
||||
You will find the resulting binary in an newly created ``build-win32`` subfolder.
|
||||
|
||||
.. note:: When building for Windows platforms, you must specify a special
|
||||
toolchain file that enables cmake to locate the platform-specific tools. To add
|
||||
this parameter to the call to cmake, enter
|
||||
``-DCMAKE_TOOLCHAIN_FILE=../client/admin/win/Toolchain-mingw32-openSUSE.cmake``.
|
||||
If you do not wish to use docker, and ran the ``RUN`` commands above in a virtual machine,
|
||||
you can run the indented commands in the lower section of ``build.sh`` manually in your
|
||||
source tree.
|
||||
|
||||
5. Build by running ``make``.
|
||||
4. Finally, you should sign the installer to avoid warnings upon installation.
|
||||
This requires a `Microsoft Authenticode`_ Certificate ``osslsigncode`` to sign the installer::
|
||||
|
||||
.. note:: Using ``make package`` produces an NSIS-based installer, provided
|
||||
the NSIS mingw32 packages are installed.
|
||||
|
||||
6. If you want to sign the installer, acquire a `Microsoft Authenticode`_ Certificate and install ``osslsigncode`` to sign the installer::
|
||||
|
||||
zypper install osslsigncode
|
||||
|
||||
7. Sign the package::
|
||||
|
||||
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha1 \
|
||||
osslsigncode -pkcs12 $HOME/.codesign/packages.pfx -h sha256 \
|
||||
-pass yourpass \
|
||||
-n "ACME Client" \
|
||||
-i "http://acme.com" \
|
||||
@@ -179,6 +176,7 @@ To cross-compile:
|
||||
for ``-in``, use the URL to the time stamping server provided by your CA along with the Authenticode certificate. Alternatively,
|
||||
you may use the official Microsoft ``signtool`` utility on Microsoft Windows.
|
||||
|
||||
If you're familiar with docker, you can use the version of ``osslsigncode`` that is part of the docker image.
|
||||
|
||||
.. _generic-build-instructions:
|
||||
|
||||
@@ -193,31 +191,31 @@ You can download the desktop sync client from the ownCloud `Client Download Page
|
||||
|
||||
To build the most up to date version of the client:
|
||||
|
||||
1. Clone the latest versions of the client from Git_ as follows:
|
||||
1. Clone the latest versions of the client from Git_ as follows::
|
||||
|
||||
``git clone git://github.com/owncloud/client.git``
|
||||
``git submodule init``
|
||||
``git submodule update``
|
||||
git clone git://github.com/owncloud/client.git
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
2. Create the build directory:
|
||||
2. Create the build directory::
|
||||
|
||||
``mkdir client-build``
|
||||
``cd client-build``
|
||||
mkdir client-build
|
||||
cd client-build
|
||||
|
||||
3. Configure the client build:
|
||||
3. Configure the client build::
|
||||
|
||||
``cmake -DCMAKE_BUILD_TYPE="Debug" ../client``
|
||||
cmake -DCMAKE_BUILD_TYPE="Debug" ../client
|
||||
|
||||
..note:: You must use absolute paths for the ``include`` and ``library``
|
||||
directories.
|
||||
.. note:: You must use absolute paths for the ``include`` and ``library``
|
||||
directories.
|
||||
|
||||
..note:: On Mac OS X, you need to specify ``-DCMAKE_INSTALL_PREFIX=target``,
|
||||
where ``target`` is a private location, i.e. in parallel to your build
|
||||
dir by specifying ``../install``.
|
||||
.. note:: On Mac OS X, you need to specify ``-DCMAKE_INSTALL_PREFIX=target``,
|
||||
where ``target`` is a private location, i.e. in parallel to your build
|
||||
dir by specifying ``../install``.
|
||||
|
||||
4. Call ``make``.
|
||||
|
||||
The owncloud binary will appear in the ``bin`` directory.
|
||||
The owncloud binary will appear in the ``bin`` directory.
|
||||
|
||||
The following are known cmake parameters:
|
||||
|
||||
@@ -241,3 +239,4 @@ The following are known cmake parameters:
|
||||
.. _Qt: http://www.qt.io/download
|
||||
.. _`Microsoft Authenticode`: https://msdn.microsoft.com/en-us/library/ie/ms537361%28v=vs.85%29.aspx
|
||||
.. _QtKeychain: https://github.com/frankosterfeld/qtkeychain
|
||||
.. _Packages: http://s.sudre.free.fr/Software/Packages/about.html
|
||||
|
||||
@@ -288,3 +288,5 @@ epub_copyright = u'2013, The ownCloud developers'
|
||||
|
||||
# Include todos?
|
||||
todo_include_todos = True
|
||||
|
||||
rst_epilog = '.. |version| replace:: %s' % version
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 5.5 KiB Depois Largura: | Altura: | Tamanho: 4.3 KiB |
|
Depois Largura: | Altura: | Tamanho: 82 KiB |
|
Depois Largura: | Altura: | Tamanho: 52 KiB |
|
Antes Largura: | Altura: | Tamanho: 52 KiB Depois Largura: | Altura: | Tamanho: 49 KiB |
|
Depois Largura: | Altura: | Tamanho: 58 KiB |
|
Antes Largura: | Altura: | Tamanho: 4.9 KiB Depois Largura: | Altura: | Tamanho: 99 KiB |
|
Depois Largura: | Altura: | Tamanho: 18 KiB |
|
Depois Largura: | Altura: | Tamanho: 24 KiB |
@@ -19,37 +19,11 @@ and local PC.
|
||||
Improvements and New Features
|
||||
-----------------------------
|
||||
|
||||
The 2.0 release of the ownCloud desktop sync client has many new features and
|
||||
The 2.1 release of the ownCloud desktop sync client has many new features and
|
||||
improvements. (See the `complete changelog
|
||||
<https://owncloud.org/changelog/desktop/>`_.)
|
||||
|
||||
* 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.
|
||||
|
||||
* Share with internal ownCloud users from your desktop
|
||||
* Separate views for server activity, sync activity, and errors
|
||||
* Don't re-upload *eml-files if size and checksum are unchanged
|
||||
* Improved upload/download progress indicator
|
||||
|
||||
@@ -8,147 +8,180 @@ The ownCloud Desktop Client remains in the background and is visible as an icon
|
||||
in the system tray (Windows, KDE), status bar (Mac OS X), or notification area
|
||||
(Linux).
|
||||
|
||||
.. image:: images/icon.png
|
||||
.. figure:: 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
|
||||
.. figure:: 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
|
||||
.. figure:: 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.)
|
||||
|
||||
.. image:: images/icon-offline.png
|
||||
.. figure:: 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
|
||||
.. figure:: 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
|
||||
.. figure:: 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.
|
||||
|
||||
Using the Right-Click Menu
|
||||
--------------------------
|
||||
Systray Icon
|
||||
------------
|
||||
|
||||
A right-click on the icon opens a menu for quick access to multiple operations.
|
||||
A right-click on the systray icon opens a menu for quick access to multiple
|
||||
operations.
|
||||
|
||||
.. image:: images/menu.png
|
||||
.. figure:: images/menu.png
|
||||
:alt: the right-click sync client menu
|
||||
|
||||
The Desktop Client menu provides the following options:
|
||||
This menu provides the following options:
|
||||
|
||||
* Open ownCloud in browser
|
||||
* Open folder [your local sync folder]
|
||||
* Up to date
|
||||
* Recent changes
|
||||
* Settings
|
||||
* Help
|
||||
* Log out
|
||||
* Quick access to your accounts
|
||||
* Recent Changes, showing latest activities
|
||||
* Status of your client version (whether it is up to date)
|
||||
* Help menu
|
||||
* An option to log in or log out of all of your accounts at once
|
||||
* Quit ownCloud
|
||||
|
||||
Using the Account Settings Window
|
||||
---------------------------------
|
||||
A left-click on your systray icon opens the desktop client to the account
|
||||
settings window.
|
||||
|
||||
.. figure:: images/client6.png
|
||||
:alt: Account settings window
|
||||
|
||||
Configuring ownCloud Account Settings
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. index:: account settings, user, password, Server URL
|
||||
|
||||
Click **Settings** in the right-click menu to see a summary of your ownCloud
|
||||
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. 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.
|
||||
* An **Account** button, which contains a dropdown menu with **Add New**,
|
||||
**Sign In/Sign Out**, and **Remove**.
|
||||
* 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 four additional options:
|
||||
The little button with three dots (the overflow menu) that sits to the right of
|
||||
the sync status bar offers four additional options:
|
||||
|
||||
* Open Folder
|
||||
* Choose What to Sync
|
||||
* Pause Sync / Resume Sync
|
||||
* Remove Sync
|
||||
* Remove folder sync connection
|
||||
|
||||
**Open Folder** opens a file explorer window displaying the client-side folder
|
||||
that is being synced.
|
||||
|
||||
**Choose What to Sync** opens the folder sync tree view. From there you can
|
||||
choose to sync all or only some of the folders in the folder tree.
|
||||
**Choose What to Sync** opens the folder sync tree view. Use this to sync all
|
||||
or only some of the folders in the folder tree.
|
||||
|
||||
**Pause Sync** pauses sync operations for just this folder sync connection
|
||||
without making any changes to your account.
|
||||
**Resume Sync** resumes sync operations for this folder sync connection.
|
||||
**Pause Sync** pauses sync operations without making any changes to your
|
||||
account. It will continue to update file and folder lists, without
|
||||
downloading or updating files. To stop all sync activity use **Remove Sync**.
|
||||
|
||||
**Remove Sync** removes this folder sync connection without removing the
|
||||
account. If you want to synchronize the folder tree again then click the
|
||||
**Add Folder Sync Connection** button, and re-select the folder tree that
|
||||
you want to sync.
|
||||
**Resume Sync** resumes sync operations.
|
||||
|
||||
.. image:: images/client-7.png
|
||||
**Remove Sync** removes the sync connection without removing the account. This
|
||||
stops all sync activity, including file and folder list updates. If you want to
|
||||
synchronize the folder tree again then click the **Add Folder Sync Connection**
|
||||
button, and re-select the folder tree that you want to sync.
|
||||
|
||||
.. figure:: images/client-7.png
|
||||
:alt: Extra options for sync operations
|
||||
|
||||
.. note:: ownCloud does not preserve the mtime (modification time) of
|
||||
directories, though it does update the mtimes on files. See
|
||||
`Wrong folder date when syncing
|
||||
<https://github.com/owncloud/core/issues/7009>`_ for discussion of this.
|
||||
|
||||
Adding New Accounts
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The Activity window contains the log of your recent activities, including files
|
||||
downloaded and deleted, and which local folders your files went into.
|
||||
You may configure multiple ownCloud accounts in your desktop sync client. Simply
|
||||
click the **Account** > **Add New** button on any account tab to add a new
|
||||
account, and then follow the account creation wizard. The new account will
|
||||
appear as a new tab in the settings dialog, where you can adjust its settings at
|
||||
any time. Use **Account** > **Remove** to delete accounts.
|
||||
|
||||
Sharing From Your Desktop
|
||||
-------------------------
|
||||
|
||||
The ownCloud desktop sync client integrates with your file manager: Finder on
|
||||
Mac OS X, Explorer on Windows, and Nautilus on Linux. (Linux users must install
|
||||
the ``owncloud-client-nautilus`` plugin.) You can create share links, and share
|
||||
with internal ownCloud users the same way as in your ownCloud Web interface.
|
||||
|
||||
.. figure:: images/mac-share.png
|
||||
:alt: Sync client integration in Finder on Mac OS X.
|
||||
|
||||
*Shared ownCloud files in Finder on Mac OS X*
|
||||
|
||||
Right-click your systray icon, hover over the account you want to use, and
|
||||
left-click "Open folder [folder name] to quickly enter your local ownCloud
|
||||
folder. Right-click the file or folder you want to share to expose the share
|
||||
dialog, and click **Share with ownCloud**.
|
||||
|
||||
.. figure:: images/share-1.png
|
||||
:alt: Sharing from Windows Explorer.
|
||||
|
||||
The share dialog has all the same options as your ownCloud Web interface.
|
||||
|
||||
.. figure:: images/share-2.png
|
||||
:alt: Share dialog in Windows Explorer.
|
||||
|
||||
Use **Share with ownCloud** to see who you have shared with, and to modify
|
||||
their permissions, or to delete the share.
|
||||
|
||||
Activity Window
|
||||
---------------
|
||||
|
||||
The Activity window contains the log of your recent activities, organized over
|
||||
three tabs: **Server Activities**, which includes new shares and files
|
||||
downloaded and deleted, **Sync Protocol**, which displays local activities such
|
||||
as which local folders your files went into, and **Not Synced** shows errors
|
||||
such as files not synced.
|
||||
|
||||
.. figure:: images/client-8.png
|
||||
:alt: Activity windows logs all server and client activities.
|
||||
|
||||
General Window
|
||||
--------------
|
||||
|
||||
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
|
||||
folders larger than [folder size]**, and **Add an Account**.
|
||||
files editor, and **Ask confirmation before downloading
|
||||
folders larger than [folder size]**.
|
||||
|
||||
Multi-Account Support
|
||||
---------------------
|
||||
|
||||
You may now configure multiple ownCloud accounts in your desktop sync client.
|
||||
Simply click the **Add an Account** button on the General tab, and follow the
|
||||
account creation wizard. The new account will appear as a new tab in the
|
||||
settings dialog, where you can adjust its settings at any time.
|
||||
|
||||
Editing Ignored Files
|
||||
---------------------
|
||||
|
||||
The Ignored Files Editor can be opened by clicking on the button in the General
|
||||
tab of the settings dialog. The settings apply to all configured accounts. The
|
||||
:guilabel:`Ignored Files Editor` provides a list of files that are ignored
|
||||
(that is, not synchronized) by the client and server during synchronizations.
|
||||
You may add additional files or directories that you want to exclude from the
|
||||
synchronization process. In addition to using standard characters, the Ignored
|
||||
Files Editor enables you to use wild cards (for example, using an asterisk ‘*’
|
||||
to indicate multiple characters or a question mark ‘?’ to indicate a single
|
||||
character).
|
||||
|
||||
For additional information see `Using the Ignored Files
|
||||
Editor`_
|
||||
.. figure:: images/client-9.png
|
||||
:alt: General window contains configuration options.
|
||||
|
||||
Using the Network Window
|
||||
------------------------
|
||||
@@ -156,10 +189,9 @@ Using the Network Window
|
||||
.. index:: proxy settings, SOCKS, bandwith, throttling, limiting
|
||||
|
||||
The Network settings window enables you to define network proxy settings, and
|
||||
also to limit download and upload bandwidth. New to version 2.0 is the option
|
||||
for automatic bandwidth limits.
|
||||
also to limit download and upload bandwidth.
|
||||
|
||||
.. image:: images/settings_network.png
|
||||
.. figure:: images/settings_network.png
|
||||
|
||||
.. _ignoredFilesEditor-label:
|
||||
|
||||
@@ -170,9 +202,9 @@ Using the Ignored Files Editor
|
||||
|
||||
You might have some local files or directories that you do not want to backup
|
||||
and store on the server. To identify and exclude these files or directories, you
|
||||
can use the *Ignored Files Editor*.
|
||||
can use the *Ignored Files Editor* (General tab.)
|
||||
|
||||
.. image:: images/ignored_files_editor.png
|
||||
.. figure:: images/ignored_files_editor.png
|
||||
|
||||
For your convenience, the editor is pre-populated with a default list of typical
|
||||
ignore patterns. These patterns are contained in a system file (typically
|
||||
|
||||
@@ -56,6 +56,18 @@ OPTIONS
|
||||
``--davpath [path]``
|
||||
Overrides the WebDAV Path with ``path``
|
||||
|
||||
``--exclude [file]``
|
||||
Exclude list file
|
||||
|
||||
``--unsyncedfolders [file]``
|
||||
File containing the list of unsynced folders (selective sync)
|
||||
|
||||
``--max-sync-retries [n]``
|
||||
Retries maximum n times (defaults to 3)
|
||||
|
||||
``-h``
|
||||
Sync hidden files,do not ignore them
|
||||
|
||||
Example
|
||||
=======
|
||||
To synchronize the ownCloud directory ``Music`` to the local directory ``media/music``
|
||||
|
||||
@@ -19,28 +19,25 @@ the server URL.
|
||||
Other command line switches supported by ``owncloudcmd`` include the following:
|
||||
|
||||
``--user``, ``-u`` ``[user]``
|
||||
Specify the user's login name.
|
||||
Use ``user`` as the login name.
|
||||
|
||||
``--password``, ``-p`` ``[password]``
|
||||
Specify the user's password.
|
||||
Use ``password`` as the password.
|
||||
|
||||
``-n``
|
||||
Use ``netrc (5)`` for login.
|
||||
Use ``netrc (5)`` for login.
|
||||
|
||||
``--non-interactive``
|
||||
Do not prompt for questions.
|
||||
Do not prompt for questions.
|
||||
|
||||
``--silent``, ``-s``
|
||||
Inhibits verbose log output.
|
||||
``--silent``, ``--s``
|
||||
Inhibits verbose log output.
|
||||
|
||||
``--trust``
|
||||
Trust any SSL certificate, including invalid ones.
|
||||
Trust any SSL certificate, including invalid ones.
|
||||
|
||||
``--httpproxy http://[user@pass:]<server>:<port>``
|
||||
Uses the specified ``server`` as the HTTP proxy.
|
||||
|
||||
``--unsyncedfolders [file]``
|
||||
File containing list of folders to not sync
|
||||
Uses ``server`` as HTTP proxy.
|
||||
|
||||
``--nonshib``
|
||||
Uses Non Shibboleth WebDAV Authentication
|
||||
@@ -48,6 +45,18 @@ Other command line switches supported by ``owncloudcmd`` include the following:
|
||||
``--davpath [path]``
|
||||
Overrides the WebDAV Path with ``path``
|
||||
|
||||
``--exclude [file]``
|
||||
Exclude list file
|
||||
|
||||
``--unsyncedfolders [file]``
|
||||
File containing the list of unsynced folders (selective sync)
|
||||
|
||||
``--max-sync-retries [n]``
|
||||
Retries maximum n times (defaults to 3)
|
||||
|
||||
``-h``
|
||||
Sync hidden files,do not ignore them
|
||||
|
||||
Credential Handling
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -6,12 +6,12 @@ add_subdirectory(icons)
|
||||
if( UNIX AND NOT APPLE )
|
||||
add_subdirectory(nautilus)
|
||||
|
||||
find_package(ECM 1.2.0 CONFIG QUIET)
|
||||
find_package(ECM 1.2.0 NO_MODULE QUIET)
|
||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
find_package(KF5 "5.16" COMPONENTS KIO)
|
||||
if(KF5_FOUND)
|
||||
add_subdirectory(dolphin)
|
||||
else()
|
||||
message("Dolhin plugin disabled: KDE Frameworks 5.16 not found")
|
||||
message("Dolphin plugin disabled: KDE Frameworks 5.16 not found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
{
|
||||
SyncClientProxy *_syncClientProxy;
|
||||
NSMutableSet *_registeredDirectories;
|
||||
NSMutableSet *_requestedUrls;
|
||||
NSString *_shareMenuTitle;
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,25 @@
|
||||
|
||||
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
|
||||
{
|
||||
if (_shareMenuTitle) {
|
||||
FIFinderSyncController *syncController = [FIFinderSyncController defaultController];
|
||||
NSMutableSet *rootPaths = [[NSMutableSet alloc] init];
|
||||
[syncController.directoryURLs enumerateObjectsUsingBlock: ^(id obj, BOOL *stop) {
|
||||
[rootPaths addObject:[obj path]];
|
||||
}];
|
||||
|
||||
// The server doesn't support sharing a root directory so do not show the option in this case.
|
||||
// It is still possible to get a problematic sharing by selecting both the root and a child,
|
||||
// but this is so complicated to do and meaningless that it's not worth putting this check
|
||||
// also in shareMenuAction.
|
||||
__block BOOL onlyRootsSelected = YES;
|
||||
[syncController.selectedItemURLs enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
|
||||
if (![rootPaths member:[obj path]]) {
|
||||
onlyRootsSelected = NO;
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
|
||||
if (_shareMenuTitle && !onlyRootsSelected) {
|
||||
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
|
||||
[menu addItemWithTitle:_shareMenuTitle action:@selector(shareMenuAction:) keyEquivalent:@"title"];
|
||||
|
||||
|
||||
@@ -62,6 +62,5 @@ public:
|
||||
};
|
||||
|
||||
K_PLUGIN_FACTORY(OwncloudDolphinPluginActionFactory, registerPlugin<OwncloudDolphinPluginAction>();)
|
||||
K_EXPORT_PLUGIN(OwncloudDolphinPluginActionFactory("ownclouddolhpinpluginaction"))
|
||||
|
||||
#include "ownclouddolphinactionplugin.moc"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
class OwncloudDolphinPlugin : public KOverlayIconPlugin
|
||||
{
|
||||
Q_PLUGIN_METADATA(IID "com.owncloud.ovarlayiconplugin" FILE "ownclouddolphinoverlayplugin.json");
|
||||
Q_PLUGIN_METADATA(IID "com.owncloud.ovarlayiconplugin" FILE "ownclouddolphinoverlayplugin.json")
|
||||
Q_OBJECT
|
||||
|
||||
typedef QHash<QByteArray, QByteArray> StatusMap;
|
||||
@@ -64,13 +64,13 @@ private:
|
||||
return r;
|
||||
|
||||
if (status.startsWith("OK"))
|
||||
r << "ownCloud_ok";
|
||||
r << "vcs-normal";
|
||||
if (status.startsWith("SYNC") || status.startsWith("NEW"))
|
||||
r << "ownCloud_sync";
|
||||
r << "vcs-update-required";
|
||||
if (status.startsWith("IGNORE") || status.startsWith("WARN"))
|
||||
r << "ownCloud_warn";
|
||||
r << "vcs-locally-modified-unstaged";
|
||||
if (status.startsWith("ERROR"))
|
||||
r << "ownCloud_error";
|
||||
r << "vcs-conflicting";
|
||||
|
||||
if (status.contains("+SWM"))
|
||||
r << "document-share";
|
||||
|
||||
@@ -1,32 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sync" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<circle fill="#E0D92D" cx="64" cy="64" r="61.9"/>
|
||||
<path fill="#8E7409" d="M64,128C28.7,128,0,99.3,0,64S28.7,0,64,0s64,28.7,64,64S99.3,128,64,128z M64,4.1C31,4.1,4.1,31,4.1,64
|
||||
c0,33,26.9,59.9,59.9,59.9c33,0,59.9-26.9,59.9-59.9C123.9,31,97,4.1,64,4.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M64,107.4c-5.6,0-10.2-4.6-10.2-10.2C53.8,91.6,58.4,87,64,87c5.6,0,10.2,4.6,10.2,10.2
|
||||
C74.2,102.8,69.6,107.4,64,107.4z M64,81.3c-8.3,0-8.3-7.3-8.3-10.2L52,30.9v-0.1c0-5.6,5.4-10.2,12-10.2c6.6,0,12,4.6,12,10.2
|
||||
v0.1l-3.7,40.3C72.3,74,72.3,81.3,64,81.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#8E7409" d="M64,21.9c5.9,0,10.7,4,10.7,8.8l-3.7,40.3c0,4.9-1.1,8.8-7,8.8c-5.9,0-6.9-4-6.9-8.8l-3.7-40.3
|
||||
C53.3,25.9,58.1,21.9,64,21.9 M64,88.3c4.9,0,8.9,4,8.9,8.8c0,4.9-4,8.9-8.9,8.9c-4.9,0-8.9-4-8.9-8.9
|
||||
C55.1,92.3,59.1,88.3,64,88.3 M64,19.2c-3.5,0-6.8,1.1-9.3,3.2c-2.7,2.2-4.1,5.2-4.1,8.4v0.1l0,0.1l3.7,40.1
|
||||
c0,2.3,0.2,5.2,1.7,7.6c1.6,2.6,4.3,3.9,8,3.9c3.7,0,6.4-1.3,8-3.9c1.5-2.3,1.7-5.3,1.7-7.6L77.4,31l0-0.1v-0.1
|
||||
c0-3.2-1.5-6.2-4.1-8.4C70.8,20.3,67.5,19.2,64,19.2L64,19.2z M64,85.6c-6.4,0-11.6,5.2-11.6,11.6c0,6.4,5.2,11.6,11.6,11.6
|
||||
c6.4,0,11.6-5.2,11.6-11.6C75.6,90.8,70.4,85.6,64,85.6L64,85.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 128 128"
|
||||
viewBox="0 0 128 128"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Sync"
|
||||
version="1.1"><metadata
|
||||
id="metadata29"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs27" /><g
|
||||
transform="matrix(0.96875,0,0,0.96875,2,2)"
|
||||
id="g3"><g
|
||||
id="g5"><g
|
||||
id="g7"><circle
|
||||
style="fill:#e0d92d"
|
||||
id="circle9"
|
||||
r="61.900002"
|
||||
cy="64"
|
||||
cx="64" /><path
|
||||
style="fill:#8e7409"
|
||||
id="path11"
|
||||
d="M 64,128 C 28.7,128 0,99.3 0,64 0,28.7 28.7,0 64,0 c 35.3,0 64,28.7 64,64 0,35.3 -28.7,64 -64,64 z M 64,4.1 C 31,4.1 4.1,31 4.1,64 4.1,97 31,123.9 64,123.9 97,123.9 123.9,97 123.9,64 123.9,31 97,4.1 64,4.1 Z" /></g></g><g
|
||||
id="g13"><g
|
||||
id="g15"><g
|
||||
id="g17"><path
|
||||
style="fill:#ffffff"
|
||||
id="path19"
|
||||
d="m 64,107.4 c -5.6,0 -10.2,-4.6 -10.2,-10.2 0,-5.6 4.6,-10.2 10.2,-10.2 5.6,0 10.2,4.6 10.2,10.2 0,5.6 -4.6,10.2 -10.2,10.2 z M 64,81.3 C 55.7,81.3 55.7,74 55.7,71.1 L 52,30.9 52,30.8 c 0,-5.6 5.4,-10.2 12,-10.2 6.6,0 12,4.6 12,10.2 l 0,0.1 -3.7,40.3 c 0,2.8 0,10.1 -8.3,10.1 z" /></g><g
|
||||
id="g21"><path
|
||||
style="fill:#8e7409"
|
||||
id="path23"
|
||||
d="m 64,21.9 c 5.9,0 10.7,4 10.7,8.8 L 71,71 c 0,4.9 -1.1,8.8 -7,8.8 -5.9,0 -6.9,-4 -6.9,-8.8 L 53.4,30.7 C 53.3,25.9 58.1,21.9 64,21.9 m 0,66.4 c 4.9,0 8.9,4 8.9,8.8 0,4.9 -4,8.9 -8.9,8.9 -4.9,0 -8.9,-4 -8.9,-8.9 0,-4.8 4,-8.8 8.9,-8.8 m 0,-69.1 c -3.5,0 -6.8,1.1 -9.3,3.2 -2.7,2.2 -4.1,5.2 -4.1,8.4 l 0,0.1 0,0.1 3.7,40.1 c 0,2.3 0.2,5.2 1.7,7.6 1.6,2.6 4.3,3.9 8,3.9 3.7,0 6.4,-1.3 8,-3.9 1.5,-2.3 1.7,-5.3 1.7,-7.6 l 3.7,-40.1 0,-0.1 0,-0.1 c 0,-3.2 -1.5,-6.2 -4.1,-8.4 -2.5,-2.1 -5.8,-3.2 -9.3,-3.2 l 0,0 z m 0,66.4 c -6.4,0 -11.6,5.2 -11.6,11.6 0,6.4 5.2,11.6 11.6,11.6 6.4,0 11.6,-5.2 11.6,-11.6 0,-6.4 -5.2,-11.6 -11.6,-11.6 l 0,0 z" /></g></g></g></g></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 1.7 KiB Depois Largura: | Altura: | Tamanho: 2.4 KiB |
@@ -1,36 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sync" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<circle fill="#B23015" cx="64" cy="64" r="61.9"/>
|
||||
<path fill="#981D05" d="M64,128C28.7,128,0,99.3,0,64S28.7,0,64,0s64,28.7,64,64S99.3,128,64,128z M64,4.1C31,4.1,4.1,31,4.1,64
|
||||
S31,123.9,64,123.9c33,0,59.9-26.9,59.9-59.9S97,4.1,64,4.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M41.8,95.2c-2.4,0-4.4-0.9-6.2-2.6c-1.7-1.7-2.7-3.9-2.8-6.4c-0.1-2.6,0.7-4.8,2.5-6.8L50.8,64L35.4,48.6
|
||||
c-1.9-1.9-2.7-4-2.5-6.5c0.2-2.3,1.1-4.5,2.7-6.3l0,0l0,0c1.9-1.9,4-2.9,6.3-2.9c0.2,0,0.4,0,0.6,0c2.4,0.2,4.5,1.1,6.4,2.8l0,0
|
||||
L64,50.7l15.4-15.2c1.8-1.8,3.9-2.7,6.3-2.7c0.1,0,0.1,0,0.2,0c2.4,0.1,4.6,1,6.5,2.8l0,0c1.7,1.7,2.6,3.9,2.6,6.5
|
||||
c0,2.6-0.9,4.8-2.6,6.6L77.4,64l15.1,15.2c1.7,1.7,2.6,3.9,2.7,6.5c0.1,2.6-0.8,5-2.7,6.9c-1.7,1.7-4,2.6-6.6,2.6
|
||||
c-2.6,0-4.9-1-6.8-3L64,77.4L48.9,92.6l0,0c-1.7,1.5-3.8,2.4-6.4,2.6C42.3,95.2,42,95.2,41.8,95.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#981D05" d="M41.9,34.1c0.2,0,0.3,0,0.5,0c2,0.2,3.9,1,5.5,2.5l16,16l16.4-16.2c1.5-1.5,3.3-2.3,5.3-2.3
|
||||
c0.1,0,0.1,0,0.2,0c2.1,0,4,0.8,5.6,2.4c1.5,1.5,2.2,3.3,2.2,5.6c0,2.2-0.7,4.1-2.2,5.7L75.4,64l16,16.2c1.5,1.5,2.3,3.3,2.3,5.6
|
||||
c0.1,2.3-0.7,4.2-2.3,5.9c-1.5,1.5-3.3,2.2-5.6,2.2c-2.3,0-4.2-0.9-5.9-2.6L64,75.5l-16,16.2c-1.5,1.3-3.3,2.1-5.5,2.2
|
||||
c-0.2,0-0.4,0-0.6,0c-2,0-3.7-0.7-5.2-2.2c-1.5-1.5-2.3-3.3-2.4-5.5c-0.1-2.2,0.6-4.1,2.2-5.7L52.7,64L36.3,47.6
|
||||
c-1.6-1.6-2.3-3.4-2.1-5.4c0.2-2.1,0.9-3.9,2.3-5.6C38.3,35,40,34.1,41.9,34.1 M41.9,31.4c-2.6,0-5,1.1-7.2,3.3l-0.1,0.1
|
||||
l-0.1,0.1c-1.8,2.1-2.8,4.5-3,7.1c-0.2,2.9,0.8,5.5,2.9,7.6L48.9,64L34.4,78.5l0,0l0,0c-2.1,2.2-3.1,4.8-2.9,7.8
|
||||
c0.2,2.9,1.2,5.3,3.2,7.3c2,2,4.4,3,7.2,3c0.3,0,0.5,0,0.8,0c2.8-0.2,5.2-1.2,7.2-2.9l0.1-0.1l0.1-0.1L64,79.4L78,93.2
|
||||
c2.2,2.3,4.8,3.4,7.8,3.4c3,0,5.6-1,7.6-3c2.2-2.2,3.3-4.9,3.1-7.9c-0.1-3-1.2-5.5-3.1-7.5L79.3,64l14.1-14.2l0,0l0,0
|
||||
c2-2.1,3-4.6,3-7.6c0-3-1-5.5-3-7.5l0,0l0,0c-2.2-2-4.7-3.1-7.4-3.2c-0.1,0-0.1,0-0.2,0c-2.8,0-5.2,1-7.3,3.1L64,48.8L49.9,34.7
|
||||
l0-0.1l-0.1-0.1c-2.1-1.9-4.5-2.9-7.2-3.2C42.4,31.4,42.1,31.4,41.9,31.4L41.9,31.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 128 128"
|
||||
viewBox="0 0 128 128"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Sync"
|
||||
version="1.1"><metadata
|
||||
id="metadata27"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs25" /><g
|
||||
transform="matrix(0.96875,0,0,0.96875,2,2)"
|
||||
id="g3"><g
|
||||
id="g5"><g
|
||||
id="g7"><circle
|
||||
style="fill:#b23015"
|
||||
id="circle9"
|
||||
r="61.900002"
|
||||
cy="64"
|
||||
cx="64" /><path
|
||||
style="fill:#981d05"
|
||||
id="path11"
|
||||
d="M 64,128 C 28.7,128 0,99.3 0,64 0,28.7 28.7,0 64,0 c 35.3,0 64,28.7 64,64 0,35.3 -28.7,64 -64,64 z M 64,4.1 C 31,4.1 4.1,31 4.1,64 4.1,97 31,123.9 64,123.9 97,123.9 123.9,97 123.9,64 123.9,31 97,4.1 64,4.1 Z" /></g></g><g
|
||||
id="g13"><g
|
||||
id="g15"><path
|
||||
style="fill:#ffffff"
|
||||
id="path17"
|
||||
d="m 41.8,95.2 c -2.4,0 -4.4,-0.9 -6.2,-2.6 -1.7,-1.7 -2.7,-3.9 -2.8,-6.4 -0.1,-2.6 0.7,-4.8 2.5,-6.8 L 50.8,64 35.4,48.6 c -1.9,-1.9 -2.7,-4 -2.5,-6.5 0.2,-2.3 1.1,-4.5 2.7,-6.3 l 0,0 0,0 c 1.9,-1.9 4,-2.9 6.3,-2.9 0.2,0 0.4,0 0.6,0 2.4,0.2 4.5,1.1 6.4,2.8 l 0,0 15.1,15 15.4,-15.2 c 1.8,-1.8 3.9,-2.7 6.3,-2.7 0.1,0 0.1,0 0.2,0 2.4,0.1 4.6,1 6.5,2.8 l 0,0 c 1.7,1.7 2.6,3.9 2.6,6.5 0,2.6 -0.9,4.8 -2.6,6.6 L 77.4,64 92.5,79.2 c 1.7,1.7 2.6,3.9 2.7,6.5 0.1,2.6 -0.8,5 -2.7,6.9 -1.7,1.7 -4,2.6 -6.6,2.6 -2.6,0 -4.9,-1 -6.8,-3 L 64,77.4 48.9,92.6 l 0,0 c -1.7,1.5 -3.8,2.4 -6.4,2.6 -0.2,0 -0.5,0 -0.7,0 z" /></g><g
|
||||
id="g19"><path
|
||||
style="fill:#981d05"
|
||||
id="path21"
|
||||
d="m 41.9,34.1 c 0.2,0 0.3,0 0.5,0 2,0.2 3.9,1 5.5,2.5 l 16,16 16.4,-16.2 c 1.5,-1.5 3.3,-2.3 5.3,-2.3 0.1,0 0.1,0 0.2,0 2.1,0 4,0.8 5.6,2.4 1.5,1.5 2.2,3.3 2.2,5.6 0,2.2 -0.7,4.1 -2.2,5.7 l -16,16.2 16,16.2 c 1.5,1.5 2.3,3.3 2.3,5.6 0.1,2.3 -0.7,4.2 -2.3,5.9 -1.5,1.5 -3.3,2.2 -5.6,2.2 -2.3,0 -4.2,-0.9 -5.9,-2.6 L 64,75.5 48,91.7 c -1.5,1.3 -3.3,2.1 -5.5,2.2 -0.2,0 -0.4,0 -0.6,0 -2,0 -3.7,-0.7 -5.2,-2.2 -1.5,-1.5 -2.3,-3.3 -2.4,-5.5 -0.1,-2.2 0.6,-4.1 2.2,-5.7 L 52.7,64 36.3,47.6 C 34.7,46 34,44.2 34.2,42.2 c 0.2,-2.1 0.9,-3.9 2.3,-5.6 1.8,-1.6 3.5,-2.5 5.4,-2.5 m 0,-2.7 c -2.6,0 -5,1.1 -7.2,3.3 l -0.1,0.1 -0.1,0.1 c -1.8,2.1 -2.8,4.5 -3,7.1 -0.2,2.9 0.8,5.5 2.9,7.6 L 48.9,64 34.4,78.5 l 0,0 0,0 c -2.1,2.2 -3.1,4.8 -2.9,7.8 0.2,2.9 1.2,5.3 3.2,7.3 2,2 4.4,3 7.2,3 0.3,0 0.5,0 0.8,0 2.8,-0.2 5.2,-1.2 7.2,-2.9 L 50,93.6 50.1,93.5 64,79.4 78,93.2 c 2.2,2.3 4.8,3.4 7.8,3.4 3,0 5.6,-1 7.6,-3 2.2,-2.2 3.3,-4.9 3.1,-7.9 -0.1,-3 -1.2,-5.5 -3.1,-7.5 L 79.3,64 93.4,49.8 l 0,0 0,0 c 2,-2.1 3,-4.6 3,-7.6 0,-3 -1,-5.5 -3,-7.5 l 0,0 0,0 c -2.2,-2 -4.7,-3.1 -7.4,-3.2 -0.1,0 -0.1,0 -0.2,0 -2.8,0 -5.2,1 -7.3,3.1 L 64,48.8 49.9,34.7 l 0,-0.1 -0.1,-0.1 c -2.1,-1.9 -4.5,-2.9 -7.2,-3.2 -0.2,0.1 -0.5,0.1 -0.7,0.1 l 0,0 z" /></g></g></g></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 2.5 KiB Depois Largura: | Altura: | Tamanho: 3.2 KiB |
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Dimensions taken from https://www.apriorit.com/dev-blog/357-shell-extentions-basics-samples-common-problems#_Toc408244375
|
||||
convert -background transparent attention.svg -gravity SouthWest \( -clone 0 -resize 10x10 -extent 16x16 \) \( -clone 0 -resize 16x16 -extent 32x32 \) \( -clone 0 -resize 24x24 -extent 48x48 \) \( -clone 0 -resize 128x128 -extent 256x256 \) -delete 0 ../../../windows/OCOverlays/ico/Warning.ico
|
||||
convert -background transparent error.svg -gravity SouthWest \( -clone 0 -resize 10x10 -extent 16x16 \) \( -clone 0 -resize 16x16 -extent 32x32 \) \( -clone 0 -resize 24x24 -extent 48x48 \) \( -clone 0 -resize 128x128 -extent 256x256 \) -delete 0 ../../../windows/OCOverlays/ico/Error.ico
|
||||
convert -background transparent ok.svg -gravity SouthWest \( -clone 0 -resize 10x10 -extent 16x16 \) \( -clone 0 -resize 16x16 -extent 32x32 \) \( -clone 0 -resize 24x24 -extent 48x48 \) \( -clone 0 -resize 128x128 -extent 256x256 \) -delete 0 ../../../windows/OCOverlays/ico/OK.ico
|
||||
convert -background transparent shared.svg -gravity SouthWest \( -clone 0 -resize 10x10 -extent 16x16 \) \( -clone 0 -resize 16x16 -extent 32x32 \) \( -clone 0 -resize 24x24 -extent 48x48 \) \( -clone 0 -resize 128x128 -extent 256x256 \) -delete 0 ../../../windows/OCOverlays/ico/OK_Shared.ico
|
||||
convert -background transparent sync.svg -gravity SouthWest \( -clone 0 -resize 10x10 -extent 16x16 \) \( -clone 0 -resize 16x16 -extent 32x32 \) \( -clone 0 -resize 24x24 -extent 48x48 \) \( -clone 0 -resize 128x128 -extent 256x256 \) -delete 0 ../../../windows/OCOverlays/ico/Sync.ico
|
||||
@@ -1,23 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sync" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#5EB220" d="M64,2.1c34.2,0,61.9,27.7,61.9,61.9S98.2,125.9,64,125.9C29.8,125.9,2.1,98.2,2.1,64S29.8,2.1,64,2.1z"/>
|
||||
<path fill="#3A9804" d="M64,128C28.7,128,0,99.3,0,64S28.7,0,64,0s64,28.7,64,64S99.3,128,64,128z M64,4.1C31,4.1,4.1,31,4.1,64
|
||||
S31,123.9,64,123.9c33,0,59.9-26.9,59.9-59.9S97,4.1,64,4.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" points="25.7,76.8 35.9,63.8 53,77.3 87.1,31 100.3,40.7 61.3,93.9 56.2,100.7 "/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#3A9804" d="M87.3,32.4L98.9,41l-4.3,5.8L60.4,93.2l-4.4,6l-5.8-4.6L32.8,81.1l-5.7-4.4L36,65.3l5.7,4.4l11.5,9
|
||||
L83,38.2L87.3,32.4 M86.8,29.5l-1.2,1.7L81.3,37L52.8,75.8L43,68.1l-5.7-4.4l-1.6-1.3L34.4,64l-8.9,11.4L24.3,77l1.6,1.3l5.7,4.4
|
||||
l17.4,13.6l5.8,4.6l1.7,1.3l1.3-1.7l4.4-6L96.3,48l4.3-5.8l1.2-1.7l-1.7-1.2l-11.6-8.5L86.8,29.5L86.8,29.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 128 128"
|
||||
viewBox="0 0 128 128"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Sync"
|
||||
version="1.1"><metadata
|
||||
id="metadata25"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs23" /><g
|
||||
transform="matrix(0.96875,0,0,0.96875,2,2)"
|
||||
id="g3"><g
|
||||
id="g5"><path
|
||||
style="fill:#5eb220"
|
||||
id="path7"
|
||||
d="m 64,2.1 c 34.2,0 61.9,27.7 61.9,61.9 0,34.2 -27.7,61.9 -61.9,61.9 C 29.8,125.9 2.1,98.2 2.1,64 2.1,29.8 29.8,2.1 64,2.1 Z" /><path
|
||||
style="fill:#3a9804"
|
||||
id="path9"
|
||||
d="M 64,128 C 28.7,128 0,99.3 0,64 0,28.7 28.7,0 64,0 c 35.3,0 64,28.7 64,64 0,35.3 -28.7,64 -64,64 z M 64,4.1 C 31,4.1 4.1,31 4.1,64 4.1,97 31,123.9 64,123.9 97,123.9 123.9,97 123.9,64 123.9,31 97,4.1 64,4.1 Z" /></g><g
|
||||
id="g11"><g
|
||||
id="g13"><polygon
|
||||
style="fill:#ffffff"
|
||||
id="polygon15"
|
||||
points="35.9,63.8 53,77.3 87.1,31 100.3,40.7 61.3,93.9 56.2,100.7 25.7,76.8 " /></g><g
|
||||
id="g17"><path
|
||||
style="fill:#3a9804"
|
||||
id="path19"
|
||||
d="M 87.3,32.4 98.9,41 94.6,46.8 60.4,93.2 56,99.2 50.2,94.6 32.8,81.1 27.1,76.7 36,65.3 l 5.7,4.4 11.5,9 L 83,38.2 87.3,32.4 M 86.8,29.5 85.6,31.2 81.3,37 52.8,75.8 43,68.1 37.3,63.7 35.7,62.4 34.4,64 25.5,75.4 24.3,77 l 1.6,1.3 5.7,4.4 17.4,13.6 5.8,4.6 1.7,1.3 1.3,-1.7 4.4,-6 34.1,-46.5 4.3,-5.8 1.2,-1.7 -1.7,-1.2 -11.6,-8.5 -1.7,-1.3 0,0 z" /></g></g></g></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 1.3 KiB Depois Largura: | Altura: | Tamanho: 1.9 KiB |
@@ -1,62 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sync" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#5EB220" d="M64,2.1c34.2,0,61.9,27.7,61.9,61.9S98.2,125.9,64,125.9C29.8,125.9,2.1,98.2,2.1,64S29.8,2.1,64,2.1z"
|
||||
/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#3A9804" d="M64,128C28.7,128,0,99.3,0,64S28.7,0,64,0s64,28.7,64,64S99.3,128,64,128z M64,4.1C31,4.1,4.1,31,4.1,64
|
||||
S31,123.9,64,123.9c33,0,59.9-26.9,59.9-59.9S97,4.1,64,4.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="translate(0 -1036.4)">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M83.9,1059.9c-7.9,0-14.2,6.4-14.2,14.2c0,0.4,0,0.9,0.1,1.3l-27.4,14c-2.5-2.1-5.7-3.4-9.2-3.4
|
||||
c-7.9,0-14.2,6.4-14.2,14.2c0,7.9,6.4,14.2,14.2,14.2c3.2,0,6.1-1,8.5-2.8l28.2,14.3c0,0.2-0.1,0.5-0.1,0.8
|
||||
c0,7.9,6.4,14.2,14.2,14.2c7.8,0,14.2-6.4,14.2-14.2c0-7.9-6.4-14.2-14.2-14.2c-3.7,0-7.1,1.4-9.6,3.7l-27.2-13.9
|
||||
c0.1-0.7,0.2-1.4,0.2-2.2c0-0.4-0.1-0.8-0.1-1.2l27.5-14c2.5,2.1,5.7,3.4,9.2,3.4c7.9,0,14.2-6.4,14.2-14.2
|
||||
C98.1,1066.2,91.7,1059.8,83.9,1059.9L83.9,1059.9z"/>
|
||||
<path fill="#3A9804" d="M83.9,1141.9c-8.4,0-15.2-6.8-15.2-15.1c0-0.1,0-0.2,0-0.2l-27.1-13.8c-2.5,1.7-5.4,2.6-8.5,2.6
|
||||
c-8.3,0-15.1-6.8-15.1-15.1c0-8.3,6.8-15.1,15.1-15.1c3.4,0,6.7,1.1,9.4,3.2l26.3-13.4c0-0.3,0-0.5,0-0.8
|
||||
c0-8,6.2-14.6,14.1-15.1l0,0l1-0.1c8.3,0,15.1,6.8,15.1,15.1c0,8.4-6.8,15.2-15.1,15.2c-3.4,0-6.7-1.1-9.3-3.2l-26.4,13.4
|
||||
c0,0.2,0,0.5,0,0.7c0,0.6-0.1,1.1-0.1,1.7l26.1,13.3c2.7-2.3,6.2-3.5,9.7-3.5c8.3,0,15.1,6.8,15.1,15.2
|
||||
C99,1135.1,92.2,1141.9,83.9,1141.9z M41.4,1110.6l29.2,14.9l-0.1,0.9c0,0.1,0,0.3,0,0.4c0,7.3,6,13.3,13.3,13.3
|
||||
c7.3,0,13.3-6,13.3-13.3c0-7.3-6-13.3-13.3-13.3c-3.3,0-6.5,1.2-9,3.5l-0.5,0.4l-28.3-14.5l0.1-0.6c0.1-0.7,0.2-1.4,0.2-2.1
|
||||
c0-0.3,0-0.5,0-0.8l-0.1-1l28.5-14.5l0.5,0.4c2.4,2,5.5,3.2,8.6,3.2c7.3,0,13.3-6,13.3-13.3c0-7.1-5.6-12.9-12.6-13.3l-0.7,0
|
||||
c-7.3,0-13.3,6-13.3,13.3c0,0.4,0,0.7,0.1,1.1l0.1,0.6l-0.5,0.4l-28,14.3l-0.5-0.4c-2.4-2-5.5-3.2-8.6-3.2
|
||||
c-7.3,0-13.3,6-13.3,13.3c0,7.3,6,13.3,13.3,13.3c2.9,0,5.6-0.9,7.9-2.6L41.4,1110.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M83.9,1141.2c-8,0-14.4-6.5-14.4-14.4c0-0.2,0-0.3,0-0.5c0-0.1,0-0.1,0-0.2l-28-14.2
|
||||
c-2.4,1.8-5.4,2.7-8.5,2.7c-7.9,0-14.4-6.5-14.4-14.4c0-7.9,6.5-14.4,14.4-14.4c3.4,0,6.7,1.2,9.3,3.4l27.2-13.9l0-0.1
|
||||
c0-0.4-0.1-0.7-0.1-1.1c0-7.9,6.4-14.3,14.2-14.4l0-0.1h0.2c7.9,0,14.4,6.5,14.4,14.4c0,8-6.5,14.4-14.4,14.4
|
||||
c-3.4,0-6.6-1.2-9.2-3.3L47.4,1099l0,0.2c0,0.3,0.1,0.6,0.1,0.9c0,0.7-0.1,1.4-0.2,2.1l27,13.8c2.6-2.4,6.1-3.7,9.6-3.7
|
||||
c7.9,0,14.4,6.5,14.4,14.4C98.3,1134.7,91.8,1141.2,83.9,1141.2z M41.5,1111.4L41.5,1111.4l28.4,14.4l0,0.1c0,0.1,0,0.2,0,0.3
|
||||
c0,0.2,0,0.3,0,0.5c0,7.7,6.3,14,14.1,14c7.7,0,14-6.3,14-14c0-7.8-6.3-14.1-14-14.1c-3.5,0-6.9,1.3-9.5,3.7l-0.1,0.1l-0.1-0.1
|
||||
l-27.3-14l0-0.1c0.1-0.7,0.2-1.4,0.2-2.2c0-0.3,0-0.6-0.1-0.9c0-0.1,0-0.2,0-0.3l0-0.1l0.1-0.1l27.6-14l0.1,0.1
|
||||
c2.5,2.1,5.8,3.3,9.1,3.3c7.7,0,14-6.3,14-14.1c0-7.7-6.2-13.9-13.8-14l0,0.1h-0.2c-7.8,0-14.1,6.3-14.1,14c0,0.4,0,0.7,0.1,1
|
||||
l0,0.3l-0.1,0.1l-27.5,14l-0.1-0.1c-2.5-2.2-5.8-3.3-9.1-3.3c-7.7,0-14,6.3-14,14c0,7.7,6.3,14,14,14
|
||||
C36.1,1114.2,39,1113.3,41.5,1111.4L41.5,1111.4z"/>
|
||||
<path fill="#3A9804" d="M83.9,1142.1c-8.5,0-15.3-6.9-15.3-15.3c0,0,0-0.1,0-0.1l-26.9-13.7c-2.5,1.7-5.5,2.6-8.6,2.6
|
||||
c-8.4,0-15.3-6.9-15.3-15.3c0-8.4,6.9-15.3,15.3-15.3c3.4,0,6.7,1.1,9.4,3.2l26.1-13.3c0-0.2,0-0.4,0-0.7
|
||||
c0-8,6.2-14.6,14.1-15.3l0,0l1-0.1c8.6,0,15.5,6.9,15.5,15.3c0,8.5-6.9,15.3-15.3,15.3c-3.4,0-6.7-1.1-9.3-3.2l-26.2,13.3
|
||||
c0,0.2,0,0.4,0,0.6c0,0.5,0,1-0.1,1.6l25.8,13.2c2.7-2.3,6.2-3.5,9.7-3.5c8.4,0,15.3,6.9,15.3,15.3
|
||||
C99.2,1135.2,92.3,1142.1,83.9,1142.1z M41.3,1110.4l0.7,0.3l28.8,14.7l-0.1,1.1c0,0.1,0,0.2,0,0.4c0,7.2,5.9,13.1,13.1,13.1
|
||||
c7.2,0,13.1-5.9,13.1-13.1c0-7.2-5.9-13.1-13.1-13.1c-3.3,0-6.4,1.2-8.8,3.4l-0.5,0.4l-0.6-0.2l-28-14.3l0.1-0.6
|
||||
c0.1-0.8,0.2-1.5,0.2-2.2c0-0.3,0-0.5,0-0.8l-0.1-1l0.5-0.4l28.2-14.4l0.5,0.4c2.5,2.1,5.5,3.2,8.6,3.2
|
||||
c7.2,0,13.1-5.9,13.1-13.1c0-6.9-5.5-12.7-12.3-13.1l-0.6,0c-7.5,0-13.4,5.9-13.4,13.1c0,0.3,0,0.7,0.1,1l0.1,1l-0.5,0.3
|
||||
l-28.2,14.4l-0.5-0.4c-2.4-2.1-5.5-3.2-8.6-3.2c-7.2,0-13.1,5.9-13.1,13.1c0,7.2,5.9,13.1,13.1,13.1c2.9,0,5.6-0.9,7.8-2.5
|
||||
L41.3,1110.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
id="Sync"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 128 128"
|
||||
enable-background="new 0 0 128 128"
|
||||
xml:space="preserve"><metadata
|
||||
id="metadata37"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><g
|
||||
id="g3362"><g
|
||||
id="g5"
|
||||
transform="matrix(0.96875,0,0,0.96875,2,2)"><g
|
||||
id="g7"><g
|
||||
id="g9"><path
|
||||
d="m 64,2.1 c 34.2,0 61.9,27.7 61.9,61.9 0,34.2 -27.7,61.9 -61.9,61.9 C 29.8,125.9 2.1,98.2 2.1,64 2.1,29.8 29.8,2.1 64,2.1 Z"
|
||||
id="path11"
|
||||
style="fill:#5eb220" /></g><g
|
||||
id="g13"><path
|
||||
d="M 64,128 C 28.7,128 0,99.3 0,64 0,28.7 28.7,0 64,0 c 35.3,0 64,28.7 64,64 0,35.3 -28.7,64 -64,64 z M 64,4.1 C 31,4.1 4.1,31 4.1,64 4.1,97 31,123.9 64,123.9 97,123.9 123.9,97 123.9,64 123.9,31 97,4.1 64,4.1 Z"
|
||||
id="path15"
|
||||
style="fill:#3a9804" /></g></g></g><g
|
||||
transform="matrix(0.96875,0,0,0.96875,0.50025,-1002.0125)"
|
||||
id="g17"><g
|
||||
id="g19"><g
|
||||
id="g21"><path
|
||||
d="m 83.9,1059.9 c -7.9,0 -14.2,6.4 -14.2,14.2 0,0.4 0,0.9 0.1,1.3 l -27.4,14 c -2.5,-2.1 -5.7,-3.4 -9.2,-3.4 -7.9,0 -14.2,6.4 -14.2,14.2 0,7.9 6.4,14.2 14.2,14.2 3.2,0 6.1,-1 8.5,-2.8 l 28.2,14.3 c 0,0.2 -0.1,0.5 -0.1,0.8 0,7.9 6.4,14.2 14.2,14.2 7.8,0 14.2,-6.4 14.2,-14.2 0,-7.9 -6.4,-14.2 -14.2,-14.2 -3.7,0 -7.1,1.4 -9.6,3.7 l -27.2,-13.9 c 0.1,-0.7 0.2,-1.4 0.2,-2.2 0,-0.4 -0.1,-0.8 -0.1,-1.2 l 27.5,-14 c 2.5,2.1 5.7,3.4 9.2,3.4 7.9,0 14.2,-6.4 14.2,-14.2 -0.1,-7.9 -6.5,-14.3 -14.3,-14.2 l 0,0 z"
|
||||
id="path23"
|
||||
style="fill:#ffffff" /><path
|
||||
d="m 83.9,1141.9 c -8.4,0 -15.2,-6.8 -15.2,-15.1 0,-0.1 0,-0.2 0,-0.2 l -27.1,-13.8 c -2.5,1.7 -5.4,2.6 -8.5,2.6 -8.3,0 -15.1,-6.8 -15.1,-15.1 0,-8.3 6.8,-15.1 15.1,-15.1 3.4,0 6.7,1.1 9.4,3.2 L 68.8,1075 c 0,-0.3 0,-0.5 0,-0.8 0,-8 6.2,-14.6 14.1,-15.1 l 0,0 1,-0.1 c 8.3,0 15.1,6.8 15.1,15.1 0,8.4 -6.8,15.2 -15.1,15.2 -3.4,0 -6.7,-1.1 -9.3,-3.2 l -26.4,13.4 c 0,0.2 0,0.5 0,0.7 0,0.6 -0.1,1.1 -0.1,1.7 l 26.1,13.3 c 2.7,-2.3 6.2,-3.5 9.7,-3.5 8.3,0 15.1,6.8 15.1,15.2 0,8.2 -6.8,15 -15.1,15 z m -42.5,-31.3 29.2,14.9 -0.1,0.9 c 0,0.1 0,0.3 0,0.4 0,7.3 6,13.3 13.3,13.3 7.3,0 13.3,-6 13.3,-13.3 0,-7.3 -6,-13.3 -13.3,-13.3 -3.3,0 -6.5,1.2 -9,3.5 l -0.5,0.4 -28.3,-14.5 0.1,-0.6 c 0.1,-0.7 0.2,-1.4 0.2,-2.1 0,-0.3 0,-0.5 0,-0.8 l -0.1,-1 28.5,-14.5 0.5,0.4 c 2.4,2 5.5,3.2 8.6,3.2 7.3,0 13.3,-6 13.3,-13.3 0,-7.1 -5.6,-12.9 -12.6,-13.3 l -0.7,0 c -7.3,0 -13.3,6 -13.3,13.3 0,0.4 0,0.7 0.1,1.1 l 0.1,0.6 -0.5,0.4 -28,14.3 -0.5,-0.4 c -2.4,-2 -5.5,-3.2 -8.6,-3.2 -7.3,0 -13.3,6 -13.3,13.3 0,7.3 6,13.3 13.3,13.3 2.9,0 5.6,-0.9 7.9,-2.6 l 0.4,-0.4 z"
|
||||
id="path25"
|
||||
style="fill:#3a9804" /></g><g
|
||||
id="g27"><path
|
||||
d="m 83.9,1141.2 c -8,0 -14.4,-6.5 -14.4,-14.4 0,-0.2 0,-0.3 0,-0.5 0,-0.1 0,-0.1 0,-0.2 l -28,-14.2 c -2.4,1.8 -5.4,2.7 -8.5,2.7 -7.9,0 -14.4,-6.5 -14.4,-14.4 0,-7.9 6.5,-14.4 14.4,-14.4 3.4,0 6.7,1.2 9.3,3.4 l 27.2,-13.9 0,-0.1 c 0,-0.4 -0.1,-0.7 -0.1,-1.1 0,-7.9 6.4,-14.3 14.2,-14.4 l 0,-0.1 0.2,0 c 7.9,0 14.4,6.5 14.4,14.4 0,8 -6.5,14.4 -14.4,14.4 -3.4,0 -6.6,-1.2 -9.2,-3.3 l -27.2,13.9 0,0.2 c 0,0.3 0.1,0.6 0.1,0.9 0,0.7 -0.1,1.4 -0.2,2.1 l 27,13.8 c 2.6,-2.4 6.1,-3.7 9.6,-3.7 7.9,0 14.4,6.5 14.4,14.4 0,8 -6.5,14.5 -14.4,14.5 z m -42.4,-29.8 0,0 28.4,14.4 0,0.1 c 0,0.1 0,0.2 0,0.3 0,0.2 0,0.3 0,0.5 0,7.7 6.3,14 14.1,14 7.7,0 14,-6.3 14,-14 0,-7.8 -6.3,-14.1 -14,-14.1 -3.5,0 -6.9,1.3 -9.5,3.7 l -0.1,0.1 -0.1,-0.1 -27.3,-14 0,-0.1 c 0.1,-0.7 0.2,-1.4 0.2,-2.2 0,-0.3 0,-0.6 -0.1,-0.9 0,-0.1 0,-0.2 0,-0.3 l 0,-0.1 0.1,-0.1 27.6,-14 0.1,0.1 c 2.5,2.1 5.8,3.3 9.1,3.3 7.7,0 14,-6.3 14,-14.1 0,-7.7 -6.2,-13.9 -13.8,-14 l 0,0.1 -0.2,0 c -7.8,0 -14.1,6.3 -14.1,14 0,0.4 0,0.7 0.1,1 l 0,0.3 -0.1,0.1 -27.5,14 -0.1,-0.1 c -2.5,-2.2 -5.8,-3.3 -9.1,-3.3 -7.7,0 -14,6.3 -14,14 0,7.7 6.3,14 14,14 2.9,0.2 5.8,-0.7 8.3,-2.6 l 0,0 z"
|
||||
id="path29"
|
||||
style="fill:#ffffff" /><path
|
||||
d="m 83.9,1142.1 c -8.5,0 -15.3,-6.9 -15.3,-15.3 0,0 0,-0.1 0,-0.1 L 41.7,1113 c -2.5,1.7 -5.5,2.6 -8.6,2.6 -8.4,0 -15.3,-6.9 -15.3,-15.3 0,-8.4 6.9,-15.3 15.3,-15.3 3.4,0 6.7,1.1 9.4,3.2 l 26.1,-13.3 c 0,-0.2 0,-0.4 0,-0.7 0,-8 6.2,-14.6 14.1,-15.3 l 0,0 1,-0.1 c 8.6,0 15.5,6.9 15.5,15.3 0,8.5 -6.9,15.3 -15.3,15.3 -3.4,0 -6.7,-1.1 -9.3,-3.2 l -26.2,13.3 c 0,0.2 0,0.4 0,0.6 0,0.5 0,1 -0.1,1.6 l 25.8,13.2 c 2.7,-2.3 6.2,-3.5 9.7,-3.5 8.4,0 15.3,6.9 15.3,15.3 0.1,8.5 -6.8,15.4 -15.2,15.4 z m -42.6,-31.7 0.7,0.3 28.8,14.7 -0.1,1.1 c 0,0.1 0,0.2 0,0.4 0,7.2 5.9,13.1 13.1,13.1 7.2,0 13.1,-5.9 13.1,-13.1 0,-7.2 -5.9,-13.1 -13.1,-13.1 -3.3,0 -6.4,1.2 -8.8,3.4 l -0.5,0.4 -0.6,-0.2 -28,-14.3 0.1,-0.6 c 0.1,-0.8 0.2,-1.5 0.2,-2.2 0,-0.3 0,-0.5 0,-0.8 l -0.1,-1 0.5,-0.4 28.2,-14.4 0.5,0.4 c 2.5,2.1 5.5,3.2 8.6,3.2 7.2,0 13.1,-5.9 13.1,-13.1 0,-6.9 -5.5,-12.7 -12.3,-13.1 l -0.6,0 c -7.5,0 -13.4,5.9 -13.4,13.1 0,0.3 0,0.7 0.1,1 l 0.1,1 -0.5,0.3 -28.2,14.4 -0.5,-0.4 c -2.4,-2.1 -5.5,-3.2 -8.6,-3.2 -7.2,0 -13.1,5.9 -13.1,13.1 0,7.2 5.9,13.1 13.1,13.1 2.9,0 5.6,-0.9 7.8,-2.5 l 0.4,-0.6 z"
|
||||
id="path31"
|
||||
style="fill:#3a9804" /></g></g></g></g></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 4.6 KiB Depois Largura: | Altura: | Tamanho: 5.5 KiB |
@@ -1,55 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Sync" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<circle fill="#2268AB" cx="64" cy="64" r="61.934"/>
|
||||
<path fill="#114999" d="M64,128C28.711,128,0,99.289,0,64S28.711,0,64,0s64,28.711,64,64S99.289,128,64,128z M64,4.132
|
||||
C30.989,4.132,4.132,30.987,4.132,64S30.989,123.868,64,123.868S123.868,97.013,123.868,64S97.011,4.132,64,4.132z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M85.311,53.564c-3.957-8.111-12.221-13.307-21.264-13.307c-1.375,0-2.764,0.121-4.125,0.364
|
||||
c-8.236,1.448-15.172,7.237-18.111,15.105l-0.264,0.705l-14.818,2.616l0.346-1.871c2.836-15.363,15.068-27.507,30.436-30.216
|
||||
c2.164-0.38,4.361-0.575,6.543-0.575c12.025,0,23.222,5.73,30.3,15.411l4.771-6.193l1.889,21.721l0.325,1.479l-0.046,0.004
|
||||
v0.007l-23.129,4.048L85.311,53.564z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#114999" d="M64.053,27.711c12.314,0,23.643,6.318,30.25,16.325l3.8-4.938l1.6,18.411
|
||||
c0.007,0.048,0.025,0.111,0.036,0.159l-0.025,0.003l0.014,0.074l-18.446,3.232l5.568-7.243
|
||||
c-3.996-8.916-12.936-14.798-22.803-14.798c-1.436,0-2.889,0.125-4.353,0.38c-9.054,1.595-16.114,7.893-19.121,15.948
|
||||
l-12.197,2.152c2.672-14.457,14.061-26.452,29.368-29.152C59.861,27.891,61.971,27.711,64.053,27.711 M64.053,25.064
|
||||
c-2.257,0-4.536,0.2-6.768,0.595c-7.957,1.405-15.164,5.177-20.846,10.911c-5.55,5.605-9.239,12.65-10.664,20.368l-0.693,3.745
|
||||
l3.754-0.661l12.196-2.152l1.49-0.264l0.528-1.415c1.343-3.602,3.6-6.819,6.525-9.307c3.014-2.557,6.668-4.273,10.575-4.962
|
||||
c1.289-0.225,2.596-0.343,3.896-0.343c8.264,0,15.839,4.602,19.704,11.845l-4.564,5.941l-4.143,5.386l6.697-1.168l18.443-3.232
|
||||
l1.371-0.24l1.393-0.173l-0.625-2.82l-1.582-18.248l-0.593-6.761l-4.143,5.377l-1.65,2.145
|
||||
c-3.222-3.998-7.236-7.363-11.775-9.832C76.9,26.702,70.489,25.064,64.053,25.064L64.053,25.064z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M64.032,101.541c-11.982,0-23.157-5.701-30.254-15.341l-4.825,6.289l-1.918-21.98
|
||||
c-0.007-0.032-0.011-0.063-0.014-0.087l-0.147-1.245l13.597-2.398l0.018,0.096l9.422-1.653l-7.093,9.234
|
||||
c3.979,8.048,12.221,13.207,21.211,13.207c1.368,0,2.761-0.12,4.125-0.362c8.154-1.439,15.068-7.148,18.036-14.902l0.268-0.704
|
||||
l14.857-2.62l-0.361,1.884C99.543,78.37,95.968,85.127,90.618,90.5c-5.475,5.498-12.411,9.121-20.057,10.466
|
||||
C68.404,101.348,66.207,101.541,64.032,101.541z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#114999" d="M46.793,67.111l-5.518,7.182c4.021,8.855,12.918,14.691,22.754,14.691c1.432,0,2.89-0.123,4.353-0.384
|
||||
c8.975-1.581,15.997-7.784,19.043-15.732l12.232-2.159c-2.743,14.366-14.086,26.268-29.325,28.957
|
||||
c-2.118,0.37-4.221,0.554-6.3,0.554c-12.278,0-23.582-6.291-30.204-16.255l-3.85,5.019l-1.632-18.652
|
||||
c-0.007-0.025-0.007-0.052-0.011-0.073l11.054-1.948c0.004,0.029,0.018,0.059,0.025,0.095L46.793,67.111 M53.032,63.332
|
||||
l-6.697,1.173l-4.764,0.834l-0.014-0.093l-2.629,0.463l-11.05,1.948l-2.471,0.432l0.304,2.487
|
||||
c0.004,0.029,0.007,0.059,0.011,0.095l1.622,18.545l0.589,6.779l4.143-5.398l1.711-2.23c3.225,3.986,7.239,7.329,11.761,9.784
|
||||
c5.675,3.084,12.068,4.713,18.486,4.713c2.25,0,4.525-0.2,6.761-0.591c7.914-1.398,15.097-5.145,20.765-10.841
|
||||
c5.535-5.559,9.232-12.555,10.696-20.223l0.718-3.768l-3.775,0.668l-12.232,2.156l-1.475,0.259l-0.536,1.402
|
||||
c-1.361,3.55-3.618,6.723-6.529,9.173c-2.996,2.522-6.629,4.218-10.503,4.902c-1.29,0.225-2.6,0.343-3.893,0.343
|
||||
c-8.214,0-15.764-4.564-19.65-11.746l4.511-5.872L53.032,63.332L53.032,63.332z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 128 128"
|
||||
viewBox="0 0 128 128"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Sync"
|
||||
version="1.1"><metadata
|
||||
id="metadata37"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><g
|
||||
transform="matrix(0.96875,0,0,0.96875,2,2)"
|
||||
id="g3"><g
|
||||
id="g5"><circle
|
||||
style="fill:#2268ab"
|
||||
id="circle7"
|
||||
r="61.933998"
|
||||
cy="64"
|
||||
cx="64" /><path
|
||||
style="fill:#114999"
|
||||
id="path9"
|
||||
d="M 64,128 C 28.711,128 0,99.289 0,64 0,28.711 28.711,0 64,0 c 35.289,0 64,28.711 64,64 0,35.289 -28.711,64 -64,64 z M 64,4.132 C 30.989,4.132 4.132,30.987 4.132,64 4.132,97.013 30.989,123.868 64,123.868 97.011,123.868 123.868,97.013 123.868,64 123.868,30.987 97.011,4.132 64,4.132 Z" /></g><g
|
||||
id="g11"><g
|
||||
id="g13"><g
|
||||
id="g15"><path
|
||||
style="fill:#ffffff"
|
||||
id="path17"
|
||||
d="M 85.311,53.564 C 81.354,45.453 73.09,40.257 64.047,40.257 c -1.375,0 -2.764,0.121 -4.125,0.364 -8.236,1.448 -15.172,7.237 -18.111,15.105 l -0.264,0.705 -14.818,2.616 0.346,-1.871 C 29.911,41.813 42.143,29.669 57.511,26.96 c 2.164,-0.38 4.361,-0.575 6.543,-0.575 12.025,0 23.222,5.73 30.3,15.411 l 4.771,-6.193 1.889,21.721 0.325,1.479 -0.046,0.004 0,0.007 -23.129,4.048 7.147,-9.298 z" /></g><g
|
||||
id="g19"><path
|
||||
style="fill:#114999"
|
||||
id="path21"
|
||||
d="m 64.053,27.711 c 12.314,0 23.643,6.318 30.25,16.325 l 3.8,-4.938 1.6,18.411 c 0.007,0.048 0.025,0.111 0.036,0.159 l -0.025,0.003 0.014,0.074 -18.446,3.232 5.568,-7.243 C 82.854,44.818 73.914,38.936 64.047,38.936 c -1.436,0 -2.889,0.125 -4.353,0.38 -9.054,1.595 -16.114,7.893 -19.121,15.948 l -12.197,2.152 c 2.672,-14.457 14.061,-26.452 29.368,-29.152 2.117,-0.373 4.227,-0.553 6.309,-0.553 m 0,-2.647 c -2.257,0 -4.536,0.2 -6.768,0.595 -7.957,1.405 -15.164,5.177 -20.846,10.911 -5.55,5.605 -9.239,12.65 -10.664,20.368 l -0.693,3.745 3.754,-0.661 12.196,-2.152 1.49,-0.264 0.528,-1.415 c 1.343,-3.602 3.6,-6.819 6.525,-9.307 3.014,-2.557 6.668,-4.273 10.575,-4.962 1.289,-0.225 2.596,-0.343 3.896,-0.343 8.264,0 15.839,4.602 19.704,11.845 l -4.564,5.941 -4.143,5.386 6.697,-1.168 18.443,-3.232 1.371,-0.24 1.393,-0.173 -0.625,-2.82 -1.582,-18.248 -0.593,-6.761 -4.143,5.377 -1.65,2.145 C 91.132,35.633 87.118,32.268 82.579,29.799 76.9,26.702 70.489,25.064 64.053,25.064 l 0,0 z" /></g></g><g
|
||||
id="g23"><g
|
||||
id="g25"><path
|
||||
style="fill:#ffffff"
|
||||
id="path27"
|
||||
d="M 64.032,101.541 C 52.05,101.541 40.875,95.84 33.778,86.2 l -4.825,6.289 -1.918,-21.98 c -0.007,-0.032 -0.011,-0.063 -0.014,-0.087 l -0.147,-1.245 13.597,-2.398 0.018,0.096 9.422,-1.653 -7.093,9.234 c 3.979,8.048 12.221,13.207 21.211,13.207 1.368,0 2.761,-0.12 4.125,-0.362 8.154,-1.439 15.068,-7.148 18.036,-14.902 l 0.268,-0.704 14.857,-2.62 -0.361,1.884 C 99.543,78.37 95.968,85.127 90.618,90.5 c -5.475,5.498 -12.411,9.121 -20.057,10.466 -2.157,0.382 -4.354,0.575 -6.529,0.575 z" /></g><g
|
||||
id="g29"><path
|
||||
style="fill:#114999"
|
||||
id="path31"
|
||||
d="m 46.793,67.111 -5.518,7.182 c 4.021,8.855 12.918,14.691 22.754,14.691 1.432,0 2.89,-0.123 4.353,-0.384 8.975,-1.581 15.997,-7.784 19.043,-15.732 l 12.232,-2.159 c -2.743,14.366 -14.086,26.268 -29.325,28.957 -2.118,0.37 -4.221,0.554 -6.3,0.554 -12.278,0 -23.582,-6.291 -30.204,-16.255 l -3.85,5.019 -1.632,-18.652 C 28.339,70.307 28.339,70.28 28.335,70.259 l 11.054,-1.948 c 0.004,0.029 0.018,0.059 0.025,0.095 l 7.379,-1.295 m 6.239,-3.779 -6.697,1.173 -4.764,0.834 -0.014,-0.093 -2.629,0.463 -11.05,1.948 -2.471,0.432 0.304,2.487 c 0.004,0.029 0.007,0.059 0.011,0.095 l 1.622,18.545 0.589,6.779 4.143,-5.398 1.711,-2.23 c 3.225,3.986 7.239,7.329 11.761,9.784 5.675,3.084 12.068,4.713 18.486,4.713 2.25,0 4.525,-0.2 6.761,-0.591 7.914,-1.398 15.097,-5.145 20.765,-10.841 5.535,-5.559 9.232,-12.555 10.696,-20.223 l 0.718,-3.768 -3.775,0.668 -12.232,2.156 -1.475,0.259 -0.536,1.402 c -1.361,3.55 -3.618,6.723 -6.529,9.173 -2.996,2.522 -6.629,4.218 -10.503,4.902 -1.29,0.225 -2.6,0.343 -3.893,0.343 -8.214,0 -15.764,-4.564 -19.65,-11.746 l 4.511,-5.872 4.14,-5.394 0,0 z" /></g></g></g></g></svg>
|
||||
|
Antes Largura: | Altura: | Tamanho: 3.8 KiB Depois Largura: | Altura: | Tamanho: 4.6 KiB |
@@ -3,6 +3,7 @@
|
||||
if( UNIX AND NOT APPLE )
|
||||
|
||||
configure_file(syncstate.py syncstate.py COPYONLY)
|
||||
configure_file(syncstate.py syncstate_nemo.py COPYONLY)
|
||||
|
||||
# Call the setupappname.sh script to set the custom app name.
|
||||
set (cmd "${CMAKE_CURRENT_SOURCE_DIR}/setappname.sh")
|
||||
@@ -10,7 +11,18 @@ if( UNIX AND NOT APPLE )
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ERROR_VARIABLE errors OUTPUT_VARIABLE out)
|
||||
|
||||
install(FILES syncstate.py DESTINATION ${DATADIR}/nautilus-python/extensions)
|
||||
# Create a nemo plugin script from the nautilus one.
|
||||
# nemocmd copies the syncstate.py and performs string replacement.
|
||||
set (nemocmd "${CMAKE_CURRENT_SOURCE_DIR}/createnemoplugin.sh")
|
||||
execute_process(COMMAND ${nemocmd}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
ERROR_VARIABLE errors OUTPUT_VARIABLE out)
|
||||
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate.py DESTINATION ${DATADIR}/nautilus-python/extensions)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/syncstate_nemo.py DESTINATION ${DATADIR}/nemo-python/extensions RENAME syncstate.py)
|
||||
|
||||
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# this script creates a plugin for nemo, just be replacing
|
||||
# all occurences of Nautilus with Nemo.
|
||||
|
||||
sed -i.org -e 's/autilus/emo/g' syncstate_nemo.py
|
||||
@@ -3,4 +3,4 @@
|
||||
# this script replaces the line
|
||||
# appname = 'ownCloud'
|
||||
# with the correct branding name in the syncstate.py script
|
||||
/usr/bin/sed -i.org -e 's/appname\s*=\s*'"'"'ownCloud'"'/appname = '$1'/" syncstate.py
|
||||
sed -i.org -e 's/appname\s*=\s*'"'"'ownCloud'"'/appname = '$1'/" syncstate.py
|
||||
|
||||
@@ -60,10 +60,6 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Error); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_ERROR_SHARED, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_ErrorShared); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_OK, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_OK); }
|
||||
@@ -76,18 +72,10 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Sync); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_SYNC_SHARED, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_SyncShared); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_WARNING, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Warning); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_WARNING_SHARED, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_WarningShared); }
|
||||
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
}
|
||||
|
||||
@@ -133,19 +121,13 @@ HRESULT _stdcall DllRegisterServer(void)
|
||||
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_ERROR_SHARED, OVERLAY_NAME_ERROR_SHARED, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_SYNC_SHARED, OVERLAY_NAME_SYNC_SHARED,szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_WARNING_SHARED, OVERLAY_NAME_WARNING_SHARED, szModule);
|
||||
|
||||
return hResult;
|
||||
}
|
||||
@@ -187,19 +169,13 @@ STDAPI DllUnregisterServer(void)
|
||||
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_ERROR_SHARED, OVERLAY_NAME_ERROR_SHARED);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_SYNC_SHARED, OVERLAY_NAME_SYNC_SHARED);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_WARNING_SHARED, OVERLAY_NAME_WARNING_SHARED);
|
||||
|
||||
return hResult;
|
||||
}
|
||||
|
||||
@@ -115,18 +115,12 @@ IFACEMETHODIMP OCOverlay::GetPriority(int *pPriority)
|
||||
*pPriority = 1;
|
||||
case State_Warning:
|
||||
*pPriority = 2;
|
||||
case State_WarningShared:
|
||||
*pPriority = 3;
|
||||
case State_Sync:
|
||||
*pPriority = 4;
|
||||
case State_SyncShared:
|
||||
*pPriority = 5;
|
||||
*pPriority = 3;
|
||||
case State_Error:
|
||||
*pPriority = 6;
|
||||
case State_ErrorShared:
|
||||
*pPriority = 7;
|
||||
*pPriority = 4;
|
||||
default:
|
||||
*pPriority = 8;
|
||||
*pPriority = 5;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
#pragma once
|
||||
|
||||
enum State {
|
||||
State_Error = 0, State_ErrorShared,
|
||||
State_Error = 0,
|
||||
State_OK, State_OKShared,
|
||||
State_Sync, State_SyncShared,
|
||||
State_Warning, State_WarningShared
|
||||
State_Sync,
|
||||
State_Warning
|
||||
};
|
||||
|
||||
class OCOverlayFactory : public IClassFactory
|
||||
|
||||
@@ -184,22 +184,11 @@
|
||||
<ResourceCompile Include="OCOverlay.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="Error.ico" />
|
||||
<Image Include="Error_Shared.ico" />
|
||||
<Image Include="ico\Error.ico" />
|
||||
<Image Include="ico\Error_Shared.ico" />
|
||||
<Image Include="ico\OK.ico" />
|
||||
<Image Include="ico\OK_Shared.ico" />
|
||||
<Image Include="ico\Sync.ico" />
|
||||
<Image Include="ico\Sync_Shared.ico" />
|
||||
<Image Include="ico\Warning.ico" />
|
||||
<Image Include="ico\Warning_Shared.ico" />
|
||||
<Image Include="OK.ico" />
|
||||
<Image Include="OK_Shared.ico" />
|
||||
<Image Include="Sync.ico" />
|
||||
<Image Include="Sync_Shared.ico" />
|
||||
<Image Include="Warning.ico" />
|
||||
<Image Include="Warning_Shared.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -14,25 +14,19 @@
|
||||
|
||||
|
||||
#define OVERLAY_GUID_ERROR L"{0960F090-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_ERROR_SHARED L"{0960F091-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK L"{0960F092-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK_SHARED L"{0960F093-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC L"{0960F094-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC_SHARED L"{0960F095-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_WARNING L"{0960F096-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_WARNING_SHARED L"{0960F097-F328-48A3-B746-276B1E3C3722}"
|
||||
|
||||
#define OVERLAY_GENERIC_NAME L"OC Overlay Handler"
|
||||
|
||||
// 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"
|
||||
#define OVERLAY_NAME_OK_SHARED L" OCOKShared"
|
||||
#define OVERLAY_NAME_SYNC L" OCSync"
|
||||
#define OVERLAY_NAME_SYNC_SHARED L" OCSyncShared"
|
||||
#define OVERLAY_NAME_WARNING L" OCWarning"
|
||||
#define OVERLAY_NAME_WARNING_SHARED L" OCWarningShared"
|
||||
|
||||
#define REGISTRY_OVERLAY_KEY L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers"
|
||||
#define REGISTRY_CLSID L"CLSID"
|
||||
|
||||
|
Antes Largura: | Altura: | Tamanho: 30 KiB Depois Largura: | Altura: | Tamanho: 27 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB Depois Largura: | Altura: | Tamanho: 26 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB Depois Largura: | Altura: | Tamanho: 29 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB Depois Largura: | Altura: | Tamanho: 31 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB Depois Largura: | Altura: | Tamanho: 25 KiB |
|
Antes Largura: | Altura: | Tamanho: 30 KiB |
@@ -18,9 +18,6 @@
|
||||
#include "UtilConstants.h"
|
||||
#include "StringUtil.h"
|
||||
|
||||
#include <WinSock2.h>
|
||||
#include <Ws2def.h>
|
||||
#include <windows.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
@@ -45,7 +42,6 @@ CommunicationSocket::~CommunicationSocket()
|
||||
|
||||
bool CommunicationSocket::Close()
|
||||
{
|
||||
WSACleanup();
|
||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>ws2_32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
|
||||
@@ -225,7 +225,7 @@ RemotePathChecker::FileState RemotePathChecker::_StrToFileState(const std::wstri
|
||||
} else if (str == L"SYNC" || str == L"NEW") {
|
||||
return StateSync;
|
||||
} else if (str == L"SYNC+SWM" || str == L"NEW+SWM") {
|
||||
return StateSyncSWM;
|
||||
return StateSync;
|
||||
} else if (str == L"OK") {
|
||||
return StateOk;
|
||||
} else if (str == L"OK+SWM") {
|
||||
@@ -233,11 +233,11 @@ RemotePathChecker::FileState RemotePathChecker::_StrToFileState(const std::wstri
|
||||
} else if (str == L"IGNORE") {
|
||||
return StateWarning;
|
||||
} else if (str == L"IGNORE+SWM") {
|
||||
return StateWarningSWM;
|
||||
return StateWarning;
|
||||
} else if (str == L"ERROR") {
|
||||
return StateError;
|
||||
} else if (str == L"ERROR+SWM") {
|
||||
return StateErrorSWM;
|
||||
return StateError;
|
||||
}
|
||||
|
||||
return StateNone;
|
||||
|
||||
@@ -29,10 +29,10 @@ class __declspec(dllexport) RemotePathChecker {
|
||||
public:
|
||||
enum FileState {
|
||||
// Order synced with OCOverlay
|
||||
StateError = 0, StateErrorSWM,
|
||||
StateError = 0,
|
||||
StateOk, StateOkSWM,
|
||||
StateSync, StateSyncSWM,
|
||||
StateWarning, StateWarningSWM,
|
||||
StateSync,
|
||||
StateWarning,
|
||||
StateNone
|
||||
};
|
||||
RemotePathChecker();
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
|
||||
#include "account.h"
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
#include "settingsdialogmac.h"
|
||||
#endif
|
||||
|
||||
namespace OCC {
|
||||
|
||||
static const char progressBarStyleC[] =
|
||||
@@ -114,7 +118,7 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) :
|
||||
|
||||
connect(ui->selectiveSyncApply, SIGNAL(clicked()), _model, SLOT(slotApplySelectiveSync()));
|
||||
connect(ui->selectiveSyncCancel, SIGNAL(clicked()), _model, SLOT(resetFolders()));
|
||||
connect(FolderMan::instance(), SIGNAL(folderListLoaded(Folder::Map)), _model, SLOT(resetFolders()));
|
||||
connect(FolderMan::instance(), SIGNAL(folderListChanged(Folder::Map)), _model, SLOT(resetFolders()));
|
||||
connect(this, SIGNAL(folderChanged()), _model, SLOT(resetFolders()));
|
||||
|
||||
|
||||
@@ -139,7 +143,7 @@ void AccountSettings::createAccountToolbox()
|
||||
menu->addAction(_addAccountAction);
|
||||
connect(_addAccountAction, SIGNAL(triggered(bool)), SLOT(slotOpenAccountWizard()));
|
||||
|
||||
_toggleSignInOutAction = new QAction(tr("Sign out"), this);
|
||||
_toggleSignInOutAction = new QAction(tr("Log out"), this);
|
||||
connect(_toggleSignInOutAction, SIGNAL(triggered(bool)), SLOT(slotToggleSignInState()));
|
||||
menu->addAction(_toggleSignInOutAction);
|
||||
|
||||
@@ -150,6 +154,8 @@ void AccountSettings::createAccountToolbox()
|
||||
ui->_accountToolbox->setText(tr("Account") + QLatin1Char(' '));
|
||||
ui->_accountToolbox->setMenu(menu);
|
||||
ui->_accountToolbox->setPopupMode(QToolButton::InstantPopup);
|
||||
|
||||
slotAccountAdded(_accountState);
|
||||
}
|
||||
|
||||
void AccountSettings::slotOpenAccountWizard()
|
||||
@@ -157,13 +163,26 @@ void AccountSettings::slotOpenAccountWizard()
|
||||
if (QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||
topLevelWidget()->close();
|
||||
}
|
||||
#ifdef Q_OS_MAC
|
||||
qDebug() << parent() << topLevelWidget();
|
||||
SettingsDialogMac *sd = qobject_cast<SettingsDialogMac*>(topLevelWidget());
|
||||
|
||||
if (sd) {
|
||||
sd->showActivityPage();
|
||||
} else {
|
||||
qFatal("nope");
|
||||
}
|
||||
#endif
|
||||
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)), 0);
|
||||
}
|
||||
|
||||
void AccountSettings::slotToggleSignInState()
|
||||
{
|
||||
bool signedInState = _accountState->isSignedOut();
|
||||
_accountState->setSignedOut( !signedInState );
|
||||
if (_accountState->isSignedOut()) {
|
||||
_accountState->signIn();
|
||||
} else {
|
||||
_accountState->signOutByUi();
|
||||
}
|
||||
}
|
||||
|
||||
void AccountSettings::doExpand()
|
||||
@@ -223,7 +242,7 @@ void AccountSettings::slotFolderListClicked(const QModelIndex& indx)
|
||||
// tries to find if we clicked on the '...' button.
|
||||
QTreeView *tv = ui->_folderList;
|
||||
auto pos = tv->mapFromGlobal(QCursor::pos());
|
||||
if (FolderStatusDelegate::optionsButtonRect(tv->visualRect(indx)).contains(pos)) {
|
||||
if (FolderStatusDelegate::optionsButtonRect(tv->visualRect(indx), layoutDirection()).contains(pos)) {
|
||||
slotCustomContextMenuRequested(pos);
|
||||
return;
|
||||
}
|
||||
@@ -552,9 +571,9 @@ void AccountSettings::slotAccountStateChanged(int state)
|
||||
if( _accountState ) {
|
||||
bool isConnected = _accountState->isConnected();
|
||||
if( isConnected ) {
|
||||
_toggleSignInOutAction->setText(tr("Sign out"));
|
||||
_toggleSignInOutAction->setText(tr("Log out"));
|
||||
} else {
|
||||
_toggleSignInOutAction->setText(tr("Sign in"));
|
||||
_toggleSignInOutAction->setText(tr("Log in"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -661,9 +680,11 @@ void AccountSettings::slotAccountAdded(AccountState*)
|
||||
{
|
||||
// if the theme is limited to single account, the button must hide if
|
||||
// there is already one account.
|
||||
if( AccountManager::instance()->accounts().size() > 1 &&
|
||||
!Theme::instance()->multiAccount() ) {
|
||||
int s = AccountManager::instance()->accounts().size();
|
||||
if( s > 0 && !Theme::instance()->multiAccount() ) {
|
||||
_addAccountAction->setVisible(false);
|
||||
} else {
|
||||
_addAccountAction->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -689,18 +710,13 @@ void AccountSettings::slotDeleteAccount()
|
||||
}
|
||||
}
|
||||
|
||||
_model->setAccountState(0); // Else it might access during destruction. This should be better handled by it having a QSharedPointer
|
||||
auto manager = AccountManager::instance();
|
||||
manager->deleteAccount(_accountState);
|
||||
manager->save();
|
||||
|
||||
// if there is no more account, show the wizard.
|
||||
if( manager->accounts().isEmpty() ) {
|
||||
// allow to add a new account if there is non any more. Always think
|
||||
// about single account theming!
|
||||
_addAccountAction->setVisible(true);
|
||||
OwncloudSetupWizard::runWizard(qApp, SLOT(slotownCloudWizardDone(int)));
|
||||
}
|
||||
|
||||
// IMPORTANT: "this" is deleted from this point on. We should probably remove this synchronous
|
||||
// .exec() QMessageBox magic above as it recurses into the event loop.
|
||||
}
|
||||
|
||||
bool AccountSettings::event(QEvent* e)
|
||||
|
||||
@@ -30,7 +30,6 @@ AccountState::AccountState(AccountPtr account)
|
||||
, _state(AccountState::Disconnected)
|
||||
, _connectionStatus(ConnectionValidator::Undefined)
|
||||
, _waitingForNewCredentials(false)
|
||||
, _credentialsFetchMode(Interactive)
|
||||
{
|
||||
qRegisterMetaType<AccountState*>("AccountState*");
|
||||
|
||||
@@ -45,7 +44,6 @@ AccountState::AccountState(AccountPtr account)
|
||||
|
||||
AccountState::~AccountState()
|
||||
{
|
||||
qDebug() << "Account state for account" << account()->displayName() << "deleted";
|
||||
}
|
||||
|
||||
AccountPtr AccountState::account() const
|
||||
@@ -85,7 +83,7 @@ void AccountState::setState(State state)
|
||||
_connectionStatus = ConnectionValidator::Undefined;
|
||||
_connectionErrors.clear();
|
||||
} else if (oldState == SignedOut && _state == Disconnected) {
|
||||
checkConnectivity(Interactive);
|
||||
checkConnectivity();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,11 +116,15 @@ bool AccountState::isSignedOut() const
|
||||
return _state == SignedOut;
|
||||
}
|
||||
|
||||
void AccountState::setSignedOut(bool signedOut)
|
||||
void AccountState::signOutByUi()
|
||||
{
|
||||
if (signedOut) {
|
||||
setState(SignedOut);
|
||||
} else if (_state == SignedOut) {
|
||||
account()->credentials()->forgetSensitiveData();
|
||||
setState(SignedOut);
|
||||
}
|
||||
|
||||
void AccountState::signIn()
|
||||
{
|
||||
if (_state == SignedOut) {
|
||||
setState(Disconnected);
|
||||
}
|
||||
}
|
||||
@@ -142,7 +144,7 @@ void AccountState::tagLastSuccessfullETagRequest()
|
||||
_timeSinceLastETagCheck.restart();
|
||||
}
|
||||
|
||||
void AccountState::checkConnectivity(CredentialFetchMode credentialsFetchMode)
|
||||
void AccountState::checkConnectivity()
|
||||
{
|
||||
if (isSignedOut() || _waitingForNewCredentials) {
|
||||
return;
|
||||
@@ -164,7 +166,6 @@ void AccountState::checkConnectivity(CredentialFetchMode credentialsFetchMode)
|
||||
return;
|
||||
}
|
||||
|
||||
_credentialsFetchMode = credentialsFetchMode;
|
||||
ConnectionValidator * conValidator = new ConnectionValidator(account());
|
||||
_connectionValidator = conValidator;
|
||||
connect(conValidator, SIGNAL(connectionResult(ConnectionValidator::Status,QStringList)),
|
||||
@@ -258,13 +259,7 @@ void AccountState::slotCredentialsFetched(AbstractCredentials* credentials)
|
||||
{
|
||||
if (!credentials->ready()) {
|
||||
// No exiting credentials found in the keychain
|
||||
if (_credentialsFetchMode == Interactive)
|
||||
credentials->askFromUser();
|
||||
else {
|
||||
Logger::instance()->postOptionalGuiLog(tr("Reauthentication required"), tr("You need to re-login to continue using the account %1.").arg(_account->displayName()));
|
||||
setState(SignedOut);
|
||||
_waitingForNewCredentials = false;
|
||||
}
|
||||
credentials->askFromUser();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -274,7 +269,7 @@ void AccountState::slotCredentialsFetched(AbstractCredentials* credentials)
|
||||
// connection validation, even if it's currently running.
|
||||
delete _connectionValidator;
|
||||
|
||||
checkConnectivity(_credentialsFetchMode);
|
||||
checkConnectivity();
|
||||
}
|
||||
|
||||
void AccountState::slotCredentialsAsked(AbstractCredentials* credentials)
|
||||
@@ -291,7 +286,7 @@ void AccountState::slotCredentialsAsked(AbstractCredentials* credentials)
|
||||
// connection validation, even if it's currently running.
|
||||
delete _connectionValidator;
|
||||
|
||||
checkConnectivity(_credentialsFetchMode);
|
||||
checkConnectivity();
|
||||
}
|
||||
|
||||
std::unique_ptr<QSettings> AccountState::settings()
|
||||
|
||||
@@ -59,7 +59,6 @@ public:
|
||||
/// An error like invalid credentials where retrying won't help.
|
||||
ConfigurationError
|
||||
};
|
||||
enum CredentialFetchMode { Interactive, NonInteractive };
|
||||
|
||||
/// The actual current connectivity status.
|
||||
typedef ConnectionValidator::Status ConnectionStatus;
|
||||
@@ -78,14 +77,20 @@ public:
|
||||
static QString stateString(State state);
|
||||
|
||||
bool isSignedOut() const;
|
||||
void setSignedOut(bool signedOut);
|
||||
|
||||
/** A user-triggered sign out which disconnects, stops syncs
|
||||
* for the account and forgets the password. */
|
||||
void signOutByUi();
|
||||
|
||||
/// Move from SignedOut state to Disconnected (attempting to connect)
|
||||
void signIn();
|
||||
|
||||
bool isConnected() const;
|
||||
bool isConnectedOrTemporarilyUnavailable() const;
|
||||
|
||||
/// Triggers a ping to the server to update state and
|
||||
/// connection status and errors.
|
||||
void checkConnectivity(CredentialFetchMode credentialsFetchMode);
|
||||
void checkConnectivity();
|
||||
|
||||
/** Returns a new settings object for this account, already in the right groups. */
|
||||
std::unique_ptr<QSettings> settings();
|
||||
@@ -121,7 +126,6 @@ private:
|
||||
ConnectionStatus _connectionStatus;
|
||||
QStringList _connectionErrors;
|
||||
bool _waitingForNewCredentials;
|
||||
CredentialFetchMode _credentialsFetchMode;
|
||||
QElapsedTimer _timeSinceLastETagCheck;
|
||||
QPointer<ConnectionValidator> _connectionValidator;
|
||||
};
|
||||
|
||||
@@ -122,6 +122,16 @@ void ActivityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
||||
pm = userIcon.pixmap(iconWidth, iconHeight, QIcon::Normal);
|
||||
painter->drawPixmap(QPoint(userIconRect.left(), userIconRect.top()), pm);
|
||||
|
||||
QPalette::ColorGroup cg = option.state & QStyle::State_Enabled
|
||||
? QPalette::Normal : QPalette::Disabled;
|
||||
if (cg == QPalette::Normal && !(option.state & QStyle::State_Active))
|
||||
cg = QPalette::Inactive;
|
||||
if (option.state & QStyle::State_Selected) {
|
||||
painter->setPen(option.palette.color(cg, QPalette::HighlightedText));
|
||||
} else {
|
||||
painter->setPen(option.palette.color(cg, QPalette::Text));
|
||||
}
|
||||
|
||||
const QString elidedAction = fm.elidedText(actionText, Qt::ElideRight, actionTextBox.width());
|
||||
painter->drawText(actionTextBox, elidedAction);
|
||||
|
||||
@@ -130,12 +140,13 @@ void ActivityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
||||
accountRole.remove(0, atPos+1);
|
||||
}
|
||||
|
||||
QString timeStr = tr("%1 on %2").arg(timeText).arg(accountRole);
|
||||
if( !accountOnline ) {
|
||||
QString timeStr;
|
||||
if ( accountOnline ) {
|
||||
timeStr = tr("%1 on %2").arg(timeText).arg(accountRole);
|
||||
} else {
|
||||
timeStr = tr("%1 on %2 (disconnected)").arg(timeText).arg(accountRole);
|
||||
QPalette p = option.palette;
|
||||
painter->setPen(p.color(QPalette::Disabled, QPalette::Text));
|
||||
timeStr.append(" ");
|
||||
timeStr.append(tr("(disconnected)"));
|
||||
}
|
||||
const QString elidedTime = fm.elidedText(timeStr, Qt::ElideRight, timeBox.width());
|
||||
|
||||
|
||||
@@ -347,19 +347,31 @@ void ActivityWidget::storeActivityList( QTextStream& ts )
|
||||
ActivityList activities = _model->activityList();
|
||||
|
||||
foreach( Activity activity, activities ) {
|
||||
ts << left
|
||||
ts << right
|
||||
// account name
|
||||
<< qSetFieldWidth(30)
|
||||
<< activity._accName
|
||||
// separator
|
||||
<< qSetFieldWidth(0) << ","
|
||||
|
||||
// date and time
|
||||
<< qSetFieldWidth(34)
|
||||
<< activity._dateTime.toString()
|
||||
// subject
|
||||
<< qSetFieldWidth(10)
|
||||
<< activity._subject
|
||||
// separator
|
||||
<< qSetFieldWidth(0) << ","
|
||||
|
||||
// file
|
||||
<< qSetFieldWidth(30)
|
||||
<< activity._file
|
||||
// separator
|
||||
<< qSetFieldWidth(0) << ","
|
||||
|
||||
// subject
|
||||
<< qSetFieldWidth(100)
|
||||
<< activity._subject
|
||||
// separator
|
||||
<< qSetFieldWidth(0) << ","
|
||||
|
||||
// message (mostly empty)
|
||||
<< qSetFieldWidth(55)
|
||||
<< activity._message
|
||||
@@ -404,7 +416,7 @@ ActivitySettings::ActivitySettings(QWidget *parent)
|
||||
// Add the not-synced list into the tab
|
||||
QWidget *w = new QWidget;
|
||||
QVBoxLayout *vbox2 = new QVBoxLayout(w);
|
||||
vbox2->addWidget(new QLabel(tr("List of ignored or errornous files"), this));
|
||||
vbox2->addWidget(new QLabel(tr("List of ignored or erroneous files"), this));
|
||||
vbox2->addWidget(_protocolWidget->issueWidget());
|
||||
QDialogButtonBox *dlgButtonBox = new QDialogButtonBox(this);
|
||||
vbox2->addWidget(dlgButtonBox);
|
||||
@@ -430,24 +442,24 @@ void ActivitySettings::slotCopyToClipboard()
|
||||
QTextStream ts(&text);
|
||||
|
||||
int idx = _tab->currentIndex();
|
||||
QString theSubject;
|
||||
QString message;
|
||||
|
||||
if( idx == 0 ) {
|
||||
// the activity widget
|
||||
_activityWidget->storeActivityList(ts);
|
||||
theSubject = tr("server activity list");
|
||||
message = tr("The server activity list has been copied to the clipboard.");
|
||||
} else if(idx == 1 ) {
|
||||
// the protocol widget
|
||||
_protocolWidget->storeSyncActivity(ts);
|
||||
theSubject = tr("sync activity list");
|
||||
message = tr("The sync activity list has been copied to the clipboard.");
|
||||
} else if(idx == 2 ) {
|
||||
// issues Widget
|
||||
theSubject = tr("not syned items list");
|
||||
message = tr("The list of unsynched items has been copied to the clipboard.");
|
||||
_protocolWidget->storeSyncIssues(ts);
|
||||
}
|
||||
|
||||
QApplication::clipboard()->setText(text);
|
||||
emit guiLog(tr("Copied to clipboard"), tr("The %1 has been copied to the clipboard.").arg(theSubject));
|
||||
emit guiLog(tr("Copied to clipboard"), message);
|
||||
}
|
||||
|
||||
void ActivitySettings::slotRemoveAccount( AccountState *ptr )
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "creds/abstractcredentials.h"
|
||||
#include "updater/ocupdater.h"
|
||||
#include "excludedfiles.h"
|
||||
#include "owncloudsetupwizard.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@@ -112,6 +113,7 @@ Application::Application(int &argc, char **argv) :
|
||||
#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
|
||||
setAttribute(Qt::AA_UseHighDpiPixmaps, true);
|
||||
#endif
|
||||
|
||||
parseOptions(arguments());
|
||||
//no need to waste time;
|
||||
if ( _helpOnly || _versionOnly ) return;
|
||||
@@ -164,6 +166,9 @@ Application::Application(int &argc, char **argv) :
|
||||
_gui->slotToggleLogBrowser(); // _showLogWindow is set in parseOptions.
|
||||
}
|
||||
|
||||
// Enable word wrapping of QInputDialog (#4197)
|
||||
setStyleSheet("QInputDialog QLabel { qproperty-wordWrap:1; }");
|
||||
|
||||
connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState*)),
|
||||
SLOT(slotAccountStateAdded(AccountState*)));
|
||||
connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState*)),
|
||||
@@ -219,6 +224,13 @@ void Application::slotAccountStateRemoved(AccountState *accountState)
|
||||
disconnect(accountState, SIGNAL(stateChanged(int)),
|
||||
_folderManager.data(), SLOT(slotAccountStateChanged()));
|
||||
}
|
||||
|
||||
// if there is no more account, show the wizard.
|
||||
if( AccountManager::instance()->accounts().isEmpty() ) {
|
||||
// allow to add a new account if there is non any more. Always think
|
||||
// about single account theming!
|
||||
OwncloudSetupWizard::runWizard(this, SLOT(slotownCloudWizardDone(int)));
|
||||
}
|
||||
}
|
||||
|
||||
void Application::slotAccountStateAdded(AccountState *accountState)
|
||||
@@ -259,7 +271,7 @@ void Application::slotCheckConnection()
|
||||
// when the error is permanent.
|
||||
if (state != AccountState::SignedOut
|
||||
&& state != AccountState::ConfigurationError) {
|
||||
accountState->checkConnectivity(AccountState::NonInteractive);
|
||||
accountState->checkConnectivity();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,23 +290,39 @@ void Application::slotCrash()
|
||||
|
||||
void Application::slotownCloudWizardDone( int res )
|
||||
{
|
||||
AccountManager *accountMan = AccountManager::instance();
|
||||
FolderMan *folderMan = FolderMan::instance();
|
||||
|
||||
// During the wizard, scheduling of new syncs is disabled
|
||||
folderMan->setSyncEnabled(true);
|
||||
|
||||
if( res == QDialog::Accepted ) {
|
||||
int cnt = folderMan->setupFolders();
|
||||
qDebug() << "Set up " << cnt << " folders.";
|
||||
// We have some sort of configuration. Enable autostart
|
||||
Utility::setLaunchOnStartup(_theme->appName(), _theme->appNameGUI(), true);
|
||||
if (cnt == 0) {
|
||||
// The folder configuration was skipped
|
||||
_gui->slotShowSettings();
|
||||
// Open the settings page for the new account if no folders
|
||||
// were configured. Using the last account for this check is
|
||||
// not exactly correct, but good enough.
|
||||
if (!accountMan->accounts().isEmpty()) {
|
||||
AccountStatePtr newAccount = accountMan->accounts().last();
|
||||
bool hasFolder = false;
|
||||
foreach (Folder* folder, folderMan->map()) {
|
||||
if (folder->accountState() == newAccount.data()) {
|
||||
hasFolder = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasFolder) {
|
||||
_gui->slotShowSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
folderMan->setSyncEnabled( true );
|
||||
if( res == QDialog::Accepted ) {
|
||||
|
||||
// Check connectivity of the newly created account
|
||||
_checkConnectionTimer.start();
|
||||
slotCheckConnection();
|
||||
}
|
||||
|
||||
// The very first time an account is configured: enabled autostart
|
||||
// TODO: Doing this every time the account wizard finishes will annoy users.
|
||||
Utility::setLaunchOnStartup(_theme->appName(), _theme->appNameGUI(), true);
|
||||
}
|
||||
}
|
||||
|
||||
void Application::setupLogging()
|
||||
@@ -518,7 +546,9 @@ void Application::setupTranslations()
|
||||
const QString qtBaseTrFile = QLatin1String("qtbase_") + lang;
|
||||
if (!qtTranslator->load(qtTrFile, qtTrPath)) {
|
||||
if (!qtTranslator->load(qtTrFile, trPath)) {
|
||||
qtTranslator->load(qtBaseTrFile, trPath);
|
||||
if (!qtTranslator->load(qtBaseTrFile, qtTrPath)) {
|
||||
qtTranslator->load(qtBaseTrFile, trPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
const QString qtkeychainTrFile = QLatin1String("qtkeychain_") + lang;
|
||||
@@ -536,6 +566,10 @@ void Application::setupTranslations()
|
||||
if (property("ui_lang").isNull())
|
||||
setProperty("ui_lang", "C");
|
||||
}
|
||||
// Work around Qt 5 < 5.5.0 regression, see https://bugreports.qt.io/browse/QTBUG-43447
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||
setLayoutDirection(QApplication::tr("QT_LAYOUT_DIRECTION") == QLatin1String("RTL") ? Qt::RightToLeft : Qt::LeftToRight);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Application::giveHelp()
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "account.h"
|
||||
#include "theme.h"
|
||||
#include "cookiejar.h"
|
||||
#include "owncloudgui.h"
|
||||
#include "syncengine.h"
|
||||
|
||||
#include <keychain.h>
|
||||
@@ -186,6 +187,11 @@ void ShibbolethCredentials::invalidateToken()
|
||||
_shibCookie = QNetworkCookie();
|
||||
}
|
||||
|
||||
void ShibbolethCredentials::forgetSensitiveData()
|
||||
{
|
||||
invalidateToken();
|
||||
}
|
||||
|
||||
void ShibbolethCredentials::onShibbolethCookieReceived(const QNetworkCookie& shibCookie)
|
||||
{
|
||||
storeShibCookie(shibCookie);
|
||||
@@ -264,9 +270,7 @@ void ShibbolethCredentials::slotReadJobDone(QKeychain::Job *job)
|
||||
void ShibbolethCredentials::showLoginWindow()
|
||||
{
|
||||
if (!_browser.isNull()) {
|
||||
_browser->activateWindow();
|
||||
_browser->raise();
|
||||
// FIXME On OS X this does not raise properly
|
||||
ownCloudGui::raiseDialog(_browser);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -281,7 +285,7 @@ void ShibbolethCredentials::showLoginWindow()
|
||||
this, SLOT(onShibbolethCookieReceived(QNetworkCookie)), Qt::QueuedConnection);
|
||||
connect(_browser, SIGNAL(rejected()), this, SLOT(slotBrowserRejected()));
|
||||
|
||||
_browser->show();
|
||||
ownCloudGui::raiseDialog(_browser);
|
||||
}
|
||||
|
||||
QList<QNetworkCookie> ShibbolethCredentials::accountCookies(Account* account)
|
||||
|
||||
@@ -58,6 +58,7 @@ public:
|
||||
bool stillValid(QNetworkReply *reply) Q_DECL_OVERRIDE;
|
||||
void persist() Q_DECL_OVERRIDE;
|
||||
void invalidateToken() Q_DECL_OVERRIDE;
|
||||
void forgetSensitiveData() Q_DECL_OVERRIDE;
|
||||
|
||||
void showLoginWindow();
|
||||
|
||||
|
||||
@@ -247,7 +247,9 @@ QString Folder::remotePath() const
|
||||
|
||||
QUrl Folder::remoteUrl() const
|
||||
{
|
||||
Q_ASSERT(_accountState);
|
||||
if (!_accountState) {
|
||||
return QUrl("http://deleted-account");
|
||||
}
|
||||
return Account::concatUrlPath(_accountState->account()->davUrl(), remotePath());
|
||||
}
|
||||
|
||||
@@ -296,19 +298,22 @@ void Folder::prepareToSync()
|
||||
|
||||
void Folder::slotRunEtagJob()
|
||||
{
|
||||
qDebug() << "* Trying to check" << alias() << "for changes via ETag check. (time since last sync:" << (_timeSinceLastSyncDone.elapsed() / 1000) << "s)";
|
||||
qDebug() << "* Trying to check" << remoteUrl().toString() << "for changes via ETag check. (time since last sync:" << (_timeSinceLastSyncDone.elapsed() / 1000) << "s)";
|
||||
|
||||
Q_ASSERT(_accountState );
|
||||
if (!_accountState) {
|
||||
qDebug() << "Can't run EtagJob, account is deleted";
|
||||
return;
|
||||
}
|
||||
|
||||
AccountPtr account = _accountState->account();
|
||||
|
||||
if (!_requestEtagJob.isNull()) {
|
||||
qDebug() << Q_FUNC_INFO << alias() << "has ETag job queued, not trying to sync";
|
||||
qDebug() << Q_FUNC_INFO << remoteUrl().toString() << "has ETag job queued, not trying to sync";
|
||||
return;
|
||||
}
|
||||
|
||||
if (_definition.paused || !_accountState->isConnected()) {
|
||||
qDebug() << "Not syncing. :" << alias() << _definition.paused << AccountState::stateString(_accountState->state());
|
||||
qDebug() << "Not syncing. :" << remoteUrl().toString() << _definition.paused << AccountState::stateString(_accountState->state());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -356,12 +361,13 @@ void Folder::slotRunEtagJob()
|
||||
|
||||
void Folder::etagRetreived(const QString& etag)
|
||||
{
|
||||
qDebug() << "* Compare etag with previous etag: last:" << _lastEtag << ", received:" << etag;
|
||||
//qDebug() << "* Compare etag with previous etag: last:" << _lastEtag << ", received:" << etag;
|
||||
|
||||
// re-enable sync if it was disabled because network was down
|
||||
FolderMan::instance()->setSyncEnabled(true);
|
||||
|
||||
if (_lastEtag != etag) {
|
||||
qDebug() << "* Compare etag with previous etag: last:" << _lastEtag << ", received:" << etag << "-> CHANGED";
|
||||
_lastEtag = etag;
|
||||
emit scheduleToSync(this);
|
||||
}
|
||||
@@ -428,6 +434,7 @@ void Folder::bubbleUpSyncResult()
|
||||
if (!item->hasErrorStatus() && item->_direction == SyncFileItem::Down) {
|
||||
switch (item->_instruction) {
|
||||
case CSYNC_INSTRUCTION_NEW:
|
||||
case CSYNC_INSTRUCTION_TYPE_CHANGE:
|
||||
newItems++;
|
||||
if (!firstItemNew)
|
||||
firstItemNew = item;
|
||||
@@ -488,7 +495,7 @@ void Folder::bubbleUpSyncResult()
|
||||
if(renTarget != renSource) {
|
||||
status.set(SyncFileStatus::STATUS_MOVE);
|
||||
}
|
||||
createGuiLog( firstItemRenamed->_file, status, renamedItems, firstItemRenamed->_renameTarget );
|
||||
createGuiLog( firstItemRenamed->_originalFile, status, renamedItems, firstItemRenamed->_renameTarget );
|
||||
}
|
||||
|
||||
createGuiLog( firstItemError->_file, SyncFileStatus::STATUS_ERROR, errorItems );
|
||||
@@ -570,7 +577,7 @@ int Folder::slotDiscardDownloadProgress()
|
||||
foreach (const SyncJournalDb::DownloadInfo & deleted_info, deleted_infos) {
|
||||
const QString tmppath = folderpath.filePath(deleted_info._tmpfile);
|
||||
qDebug() << "Deleting temporary file: " << tmppath;
|
||||
QFile::remove(tmppath);
|
||||
FileSystem::remove(tmppath);
|
||||
}
|
||||
return deleted_infos.size();
|
||||
}
|
||||
@@ -622,9 +629,24 @@ void Folder::slotWatchedPathChanged(const QString& path)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether this item should get an ERROR icon through the Socket API.
|
||||
*
|
||||
* The Socket API should only present serious, permanent errors to the user.
|
||||
* In particular SoftErrors should just retain their 'needs to be synced'
|
||||
* icon as the problem is most likely going to resolve itself quickly and
|
||||
* automatically.
|
||||
*/
|
||||
static bool showErrorInSocketApi(const SyncFileItem& item)
|
||||
{
|
||||
const auto status = item._status;
|
||||
return status == SyncFileItem::NormalError
|
||||
|| status == SyncFileItem::FatalError;
|
||||
}
|
||||
|
||||
static void addErroredSyncItemPathsToList(const SyncFileItemVector& items, QSet<QString>* set) {
|
||||
Q_FOREACH(const SyncFileItemPtr &item, items) {
|
||||
if (item->hasErrorStatus()) {
|
||||
foreach (const SyncFileItemPtr &item, items) {
|
||||
if (showErrorInSocketApi(*item)) {
|
||||
set->insert(item->_file);
|
||||
}
|
||||
}
|
||||
@@ -632,7 +654,7 @@ static void addErroredSyncItemPathsToList(const SyncFileItemVector& items, QSet<
|
||||
|
||||
void Folder::slotThreadTreeWalkResult(const SyncFileItemVector& items)
|
||||
{
|
||||
addErroredSyncItemPathsToList(items, &this->_stateLastSyncItemsWithError);
|
||||
addErroredSyncItemPathsToList(items, &this->_stateLastSyncItemsWithErrorNew);
|
||||
_syncResult.setSyncFileItemVector(items);
|
||||
}
|
||||
|
||||
@@ -642,7 +664,7 @@ void Folder::slotAboutToPropagate(SyncFileItemVector& items)
|
||||
// (which imply the folder) to generate the syncing state icon now.
|
||||
_stateTaintedFolders.clear();
|
||||
|
||||
addErroredSyncItemPathsToList(items, &this->_stateLastSyncItemsWithError);
|
||||
addErroredSyncItemPathsToList(items, &this->_stateLastSyncItemsWithErrorNew);
|
||||
}
|
||||
|
||||
|
||||
@@ -687,7 +709,11 @@ bool Folder::estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s)
|
||||
|
||||
void Folder::saveToSettings() const
|
||||
{
|
||||
Q_ASSERT(_accountState);
|
||||
if (!_accountState) {
|
||||
qDebug() << "Can't save folder to settings, account is deleted";
|
||||
return;
|
||||
}
|
||||
|
||||
auto settings = _accountState->settings();
|
||||
settings->beginGroup(QLatin1String("Folders"));
|
||||
FolderDefinition::save(*settings, _definition);
|
||||
@@ -698,7 +724,10 @@ void Folder::saveToSettings() const
|
||||
|
||||
void Folder::removeFromSettings() const
|
||||
{
|
||||
Q_ASSERT(_accountState);
|
||||
if (!_accountState) {
|
||||
qDebug() << "Can't remove folder from settings, account is deleted";
|
||||
return;
|
||||
}
|
||||
|
||||
auto settings = _accountState->settings();
|
||||
settings->beginGroup(QLatin1String("Folders"));
|
||||
@@ -835,7 +864,10 @@ bool Folder::proxyDirty()
|
||||
|
||||
void Folder::startSync(const QStringList &pathList)
|
||||
{
|
||||
Q_ASSERT(_accountState);
|
||||
if (!_accountState) {
|
||||
qDebug() << "Can't startSync, account is deleted";
|
||||
return;
|
||||
}
|
||||
|
||||
Q_UNUSED(pathList)
|
||||
if (!_csync_ctx) {
|
||||
@@ -845,7 +877,7 @@ void Folder::startSync(const QStringList &pathList)
|
||||
if (!_csync_ctx) {
|
||||
qDebug() << Q_FUNC_INFO << "init failed.";
|
||||
// the error should already be set
|
||||
QMetaObject::invokeMethod(this, "slotSyncFinished", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(this, "slotSyncFinished", Qt::QueuedConnection, Q_ARG(bool, false));
|
||||
return;
|
||||
}
|
||||
} else if (proxyDirty()) {
|
||||
@@ -867,13 +899,13 @@ void Folder::startSync(const QStringList &pathList)
|
||||
_syncResult.setSyncFileItemVector(SyncFileItemVector());
|
||||
emit syncStateChange();
|
||||
|
||||
qDebug() << "*** Start syncing " << alias() << " - client version"
|
||||
qDebug() << "*** Start syncing " << remoteUrl().toString() << " - client version"
|
||||
<< qPrintable(Theme::instance()->version());
|
||||
|
||||
if (! setIgnoredFiles())
|
||||
{
|
||||
slotSyncError(tr("Could not read system exclude file"));
|
||||
QMetaObject::invokeMethod(this, "slotSyncFinished", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(this, "slotSyncFinished", Qt::QueuedConnection, Q_ARG(bool, false));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1090,8 +1122,8 @@ void Folder::slotTransmissionProgress(const ProgressInfo &pi)
|
||||
// a item is completed: count the errors and forward to the ProgressDispatcher
|
||||
void Folder::slotItemCompleted(const SyncFileItem &item, const PropagatorJob& job)
|
||||
{
|
||||
if (item.hasErrorStatus()) {
|
||||
_stateLastSyncItemsWithError.insert(item._file);
|
||||
if (showErrorInSocketApi(item)) {
|
||||
_stateLastSyncItemsWithErrorNew.insert(item._file);
|
||||
}
|
||||
|
||||
if (Progress::isWarningKind(item._status)) {
|
||||
|
||||
@@ -282,7 +282,7 @@ private:
|
||||
void createGuiLog(const QString& filename, SyncFileStatus status, int count,
|
||||
const QString& renameTarget = QString::null );
|
||||
|
||||
AccountState* _accountState;
|
||||
QPointer<AccountState> _accountState;
|
||||
FolderDefinition _definition;
|
||||
|
||||
SyncResult _syncResult;
|
||||
@@ -307,9 +307,13 @@ private:
|
||||
/// Reset when no follow-up is requested.
|
||||
int _consecutiveFollowUpSyncs;
|
||||
|
||||
// For the SocketAPI folder states
|
||||
// SocketAPI: Cache files and folders that had errors so that they can
|
||||
// get a red ERROR icon.
|
||||
QSet<QString> _stateLastSyncItemsWithErrorNew; // gets moved to _stateLastSyncItemsWithError at end of sync
|
||||
QSet<QString> _stateLastSyncItemsWithError;
|
||||
|
||||
// SocketAPI: A folder is tained if we got a file watcher notification
|
||||
// for it. It's displayed as EVAL.
|
||||
QSet<QString> _stateTaintedFolders;
|
||||
|
||||
SyncJournalDb _journal;
|
||||
|
||||
@@ -216,7 +216,7 @@ int FolderMan::setupFolders()
|
||||
settings->endGroup(); // <account>
|
||||
}
|
||||
|
||||
emit folderListLoaded(_folderMap);
|
||||
emit folderListChanged(_folderMap);
|
||||
|
||||
return _folderMap.size();
|
||||
}
|
||||
@@ -245,7 +245,7 @@ int FolderMan::setupFoldersMigration()
|
||||
}
|
||||
}
|
||||
|
||||
emit folderListLoaded(_folderMap);
|
||||
emit folderListChanged(_folderMap);
|
||||
|
||||
// return the number of valid folders.
|
||||
return _folderMap.size();
|
||||
@@ -523,12 +523,12 @@ void FolderMan::slotEtagJobDestroyed(QObject* /*o*/)
|
||||
void FolderMan::slotRunOneEtagJob()
|
||||
{
|
||||
if (_currentEtagJob.isNull()) {
|
||||
QString alias;
|
||||
Folder *folder;
|
||||
foreach(Folder *f, _folderMap) {
|
||||
if (f->etagJob()) {
|
||||
// Caveat: always grabs the first folder with a job, but we think this is Ok for now and avoids us having a seperate queue.
|
||||
_currentEtagJob = f->etagJob();
|
||||
alias = f->alias();
|
||||
folder = f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -540,7 +540,7 @@ void FolderMan::slotRunOneEtagJob()
|
||||
restartApplication();
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Scheduling" << alias << "to check remote ETag";
|
||||
qDebug() << "Scheduling" << folder->remoteUrl().toString() << "to check remote ETag";
|
||||
_currentEtagJob->start(); // on destroy/end it will continue the queue via slotEtagJobDestroyed
|
||||
}
|
||||
}
|
||||
@@ -657,7 +657,7 @@ void FolderMan::startScheduledSyncSoon(qint64 msMinimumDelay)
|
||||
void FolderMan::slotStartScheduledFolderSync()
|
||||
{
|
||||
if( _currentSyncFolder ) {
|
||||
qDebug() << "Currently folder " << _currentSyncFolder->alias() << " is running, wait for finish!";
|
||||
qDebug() << "Currently folder " << _currentSyncFolder->remoteUrl().toString() << " is running, wait for finish!";
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -672,7 +672,7 @@ void FolderMan::slotStartScheduledFolderSync()
|
||||
}
|
||||
|
||||
// Find the first folder in the queue that can be synced.
|
||||
Folder* f = nullptr;
|
||||
Folder* f = 0;
|
||||
while( !_scheduleQueue.isEmpty() ) {
|
||||
f = _scheduleQueue.dequeue();
|
||||
Q_ASSERT(f);
|
||||
@@ -746,7 +746,7 @@ void FolderMan::slotForwardFolderSyncStateChange()
|
||||
|
||||
void FolderMan::slotFolderSyncStarted( )
|
||||
{
|
||||
qDebug() << ">===================================== sync started for " << _currentSyncFolder->alias();
|
||||
qDebug() << ">===================================== sync started for " << _currentSyncFolder->remoteUrl().toString();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -757,7 +757,7 @@ void FolderMan::slotFolderSyncStarted( )
|
||||
*/
|
||||
void FolderMan::slotFolderSyncFinished( const SyncResult& )
|
||||
{
|
||||
qDebug() << "<===================================== sync finished for " << _currentSyncFolder->alias();
|
||||
qDebug() << "<===================================== sync finished for " << _currentSyncFolder->remoteUrl().toString();
|
||||
|
||||
_lastSyncFolder = _currentSyncFolder;
|
||||
_currentSyncFolder = 0;
|
||||
@@ -775,6 +775,8 @@ Folder* FolderMan::addFolder(AccountState* accountState, const FolderDefinition&
|
||||
if(folder && accountState) {
|
||||
folder->setAccountState(accountState);
|
||||
folder->saveToSettings();
|
||||
emit folderSyncStateChange(folder);
|
||||
emit folderListChanged(_folderMap);
|
||||
}
|
||||
return folder;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ signals:
|
||||
*/
|
||||
void scheduleQueueChanged();
|
||||
|
||||
void folderListLoaded(const Folder::Map &);
|
||||
void folderListChanged(const Folder::Map &);
|
||||
|
||||
public slots:
|
||||
void slotRemoveFolder( Folder* );
|
||||
|
||||