summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrej Shadura <andrewsh@debian.org>2018-08-14 11:00:30 +0200
committerAndrej Shadura <andrewsh@debian.org>2018-08-14 11:00:30 +0200
commit7b27eb3bc5a21a713cb73fe38479d3b170194dee (patch)
tree5e7a2258a82b8dd62cc14eb0bf5f7c6070739be4
parent63a9f1fd79b4e3c94926198e33b886718ca162b4 (diff)
New upstream version 3.28
-rwxr-xr-x.github/AUTHORS.md (renamed from legal/Authors.txt)0
-rw-r--r--.github/CODE_OF_CONDUCT.md (renamed from legal/CODE_OF_CONDUCT.md)0
-rw-r--r--.github/CONTRIBUTING.md14
-rw-r--r--.github/ISSUE_TEMPLATE.md20
-rw-r--r--.gitignore29
-rw-r--r--.travis.yml12
-rwxr-xr-xLICENSE.md (renamed from legal/License_for_SparkleShare.txt)0
-rw-r--r--LICENSE_Sparkles.md (renamed from legal/License_for_Sparkles.txt)0
-rwxr-xr-xMakefile.am25
-rw-r--r--README.md12
-rwxr-xr-xRELEASE_NOTES.txt (renamed from release-notes.txt)23
-rw-r--r--SparkleShare/Common/AboutController.cs5
-rw-r--r--SparkleShare/Common/Avatars.cs28
-rw-r--r--SparkleShare/Common/BaseController.cs271
-rw-r--r--SparkleShare/Common/EventLogController.cs46
-rwxr-xr-xSparkleShare/Common/HTML/Makefile.am10
-rw-r--r--SparkleShare/Common/HTML/meson.build10
-rw-r--r--SparkleShare/Common/Images/Makefile.am12
-rw-r--r--SparkleShare/Common/Images/Sources/app-icons.svg983
-rw-r--r--SparkleShare/Common/Images/Sources/status-icons.svg1702
-rw-r--r--SparkleShare/Common/Images/meson.build11
-rw-r--r--SparkleShare/Common/Makefile.am3
-rw-r--r--SparkleShare/Common/Presets/Makefile.am17
-rw-r--r--SparkleShare/Common/Presets/meson.build11
-rw-r--r--SparkleShare/Common/SetupController.cs7
-rw-r--r--SparkleShare/Common/SparkleShare.cs21
-rw-r--r--SparkleShare/Common/StatusIconController.cs2
-rw-r--r--SparkleShare/Common/Translations/Makefile.in.in222
-rwxr-xr-xSparkleShare/Linux/About.cs22
-rw-r--r--SparkleShare/Linux/Controller.cs25
-rwxr-xr-xSparkleShare/Linux/EventLog.cs40
-rwxr-xr-xSparkleShare/Linux/Images/Makefile.am10
-rw-r--r--SparkleShare/Linux/Images/gnome-software-screenshot-1.jpgbin0 -> 237442 bytes
-rw-r--r--SparkleShare/Linux/Images/gnome-software-screenshot-2.jpgbin0 -> 201598 bytes
-rw-r--r--SparkleShare/Linux/Images/gnome-software-screenshot-3.jpgbin0 -> 220350 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/Makefile.am4
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/12x12/status/document-added.png (renamed from SparkleShare/Linux/Images/icons/hicolor/document-added-12.png)bin193 -> 193 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/12x12/status/document-deleted.png (renamed from SparkleShare/Linux/Images/icons/hicolor/document-deleted-12.png)bin117 -> 117 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/12x12/status/document-edited.png (renamed from SparkleShare/Linux/Images/icons/hicolor/document-edited-12.png)bin428 -> 428 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/12x12/status/document-moved.png (renamed from SparkleShare/Linux/Images/icons/hicolor/document-moved-12.png)bin445 -> 445 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/16x16/apps/org.sparkleshare.SparkleShare.png (renamed from SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-16.png)bin879 -> 879 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/16x16/status/list-point.png (renamed from SparkleShare/Linux/Images/icons/hicolor/list-point-16.png)bin575 -> 575 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/22x22/status/process-working.png (renamed from SparkleShare/Linux/Images/icons/hicolor/process-working-22.png)bin4104 -> 4104 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.pngbin0 -> 1212 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-down.pngbin0 -> 1089 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-error.pngbin0 -> 1318 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-up.pngbin0 -> 1066 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing.pngbin0 -> 1068 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/256x256/apps/org.sparkleshare.SparkleShare.png (renamed from SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-256.png)bin17730 -> 17730 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/48x48/apps/org.sparkleshare.SparkleShare.png (renamed from SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-48.png)bin2083 -> 2083 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-down.png (renamed from SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-48.png)bin1620 -> 1620 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-error.png (renamed from SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-48.png)bin2699 -> 2699 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-up.png (renamed from SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-48.png)bin1588 -> 1588 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing.png (renamed from SparkleShare/Linux/Images/icons/hicolor/process-syncing-48.png)bin1679 -> 1679 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/512x512/apps/org.sparkleshare.SparkleShare.png (renamed from SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-512.png)bin44891 -> 44891 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/Makefile.am47
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-22.pngbin1154 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-24.pngbin1168 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-32.pngbin1168 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/process-syncing-24.pngbin831 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-24.pngbin768 -> 0 bytes
-rwxr-xr-xSparkleShare/Linux/Images/icons/hicolor/process-syncing-error-24.pngbin1333 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-24.pngbin768 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/symbolic/apps/org.sparkleshare.SparkleShare-symbolic.svg (renamed from SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-symbolic.svg)0
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-down-symbolic.svg70
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-error-symbolic.svg66
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-symbolic.svg71
-rw-r--r--SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-up-symbolic.svg70
-rw-r--r--SparkleShare/Linux/Images/icons/meson.build67
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/Makefile.am26
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-24.pngbin268 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-down-24.pngbin271 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-error-24.pngbin266 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-idle-24.pngbin361 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-up-24.pngbin271 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/Makefile.am25
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-24.pngbin252 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-down-24.pngbin258 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-error-24.pngbin250 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-idle-24.pngbin337 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-up-24.pngbin259 -> 0 bytes
-rw-r--r--SparkleShare/Linux/Images/meson.build6
-rw-r--r--SparkleShare/Linux/Makefile.am46
-rw-r--r--SparkleShare/Linux/Note.cs23
-rw-r--r--SparkleShare/Linux/README.md113
-rwxr-xr-xSparkleShare/Linux/Setup.cs10
-rw-r--r--SparkleShare/Linux/SetupWindow.cs17
-rw-r--r--SparkleShare/Linux/SparkleShare.Linux.csproj9
-rw-r--r--SparkleShare/Linux/StatusIcon.cs103
-rw-r--r--SparkleShare/Linux/UserInterface.cs106
-rwxr-xr-xSparkleShare/Linux/UserInterfaceHelpers.cs21
-rw-r--r--SparkleShare/Linux/meson.build63
-rw-r--r--SparkleShare/Linux/org.sparkleshare.SparkleShare.Invites.desktop1
-rw-r--r--SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml95
-rwxr-xr-xSparkleShare/Linux/sparkleshare.in18
-rw-r--r--SparkleShare/Mac/Assets.xcassets/Contents.json6
-rw-r--r--SparkleShare/Mac/Controller.cs24
-rwxr-xr-xSparkleShare/Mac/Info.plist4
-rw-r--r--SparkleShare/Mac/README.md4
-rw-r--r--SparkleShare/Mac/SparkleShare.Mac.csproj38
-rw-r--r--SparkleShare/Mac/UserInterface/About.cs2
-rw-r--r--SparkleShare/Mac/UserInterface/EventLog.cs242
-rw-r--r--SparkleShare/Mac/UserInterface/Note.cs2
-rw-r--r--SparkleShare/Mac/UserInterface/Setup.cs2
-rw-r--r--SparkleShare/Mac/UserInterface/SetupWindow.cs4
-rwxr-xr-xSparkleShare/Mac/UserInterface/UserInterface.cs6
-rwxr-xr-xSparkleShare/Mac/checkGit.sh16
-rw-r--r--SparkleShare/Mac/git.download2
-rwxr-xr-xSparkleShare/Makefile.am2
-rw-r--r--SparkleShare/Windows/SparkleShare.wxs2
-rw-r--r--SparkleShare/Windows/UserInterface/About.cs38
-rw-r--r--SparkleShare/meson.build5
-rw-r--r--Sparkles/AuthenticationInfo.cs4
-rw-r--r--Sparkles/BaseFetcher.cs2
-rw-r--r--Sparkles/BaseListener.cs6
-rw-r--r--Sparkles/BaseRepository.cs2
-rw-r--r--Sparkles/ChangeSet.cs4
-rw-r--r--Sparkles/Command.cs4
-rw-r--r--Sparkles/Configuration.cs33
-rw-r--r--Sparkles/Git/Git.Command.cs (renamed from Sparkles/Git/GitCommand.cs)10
-rw-r--r--Sparkles/Git/Git.Fetcher.cs (renamed from Sparkles/Git/GitFetcher.cs)16
-rw-r--r--Sparkles/Git/Git.Repository.cs (renamed from Sparkles/Git/GitRepository.cs)535
-rwxr-xr-xSparkles/Git/Makefile.am22
-rw-r--r--Sparkles/Git/Sparkles.Git.csproj8
-rw-r--r--Sparkles/Git/meson.build10
-rw-r--r--Sparkles/InstallationInfo.Directory.cs2
-rwxr-xr-xSparkles/InstallationInfo.Directory.cs.in2
-rw-r--r--Sparkles/InstallationInfo.cs63
-rw-r--r--Sparkles/Logger.cs21
-rwxr-xr-xSparkles/Makefile.am38
-rw-r--r--Sparkles/Preset.cs47
-rw-r--r--Sparkles/SSHAuthenticationInfo.cs3
-rw-r--r--Sparkles/SSHCommand.cs6
-rw-r--r--Sparkles/SSHFetcher.cs71
-rw-r--r--Sparkles/Sparkles.csproj4
-rw-r--r--Sparkles/meson.build33
-rwxr-xr-xautogen.sh85
-rwxr-xr-xbuild/Makefile.am7
-rwxr-xr-xbuild/build.environment.mk30
-rwxr-xr-xbuild/build.mk2
-rwxr-xr-xbuild/build.rules.mk77
-rwxr-xr-xbuild/bump-version.sh16
-rwxr-xr-xbuild/icon-theme-installer187
-rwxr-xr-xbuild/m4/Makefile.am7
-rwxr-xr-xbuild/m4/shamrock/expansions.m450
-rwxr-xr-xbuild/m4/shamrock/gnome-doc.m423
-rwxr-xr-xbuild/m4/shamrock/i18n.m410
-rwxr-xr-xbuild/m4/shamrock/mono.m472
-rwxr-xr-xbuild/m4/shamrock/monodoc.m425
-rwxr-xr-xbuild/m4/shamrock/nunit.m429
-rwxr-xr-xbuild/m4/shamrock/programs.m415
-rwxr-xr-xbuild/m4/shamrock/util.m411
-rwxr-xr-xbuild/m4/shave/shave-libtool.in109
-rwxr-xr-xbuild/m4/shave/shave.in109
-rwxr-xr-xbuild/m4/shave/shave.m4102
-rwxr-xr-xbuild/m4/sparkleshare/gtk-sharp.m413
-rwxr-xr-xconfigure.ac136
-rw-r--r--meson.build16
-rw-r--r--meson_options.txt2
-rwxr-xr-xscripts/bump-version.sh16
-rw-r--r--scripts/ci/Dockerfile (renamed from build/ci/Dockerfile)18
-rw-r--r--scripts/ci/flatpak/Dockerfile (renamed from build/ci/flatpak/Dockerfile)0
-rw-r--r--scripts/post-install.sh8
163 files changed, 3819 insertions, 3371 deletions
diff --git a/legal/Authors.txt b/.github/AUTHORS.md
index 186ac29..186ac29 100755
--- a/legal/Authors.txt
+++ b/.github/AUTHORS.md
diff --git a/legal/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index cecab9a..cecab9a 100644
--- a/legal/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..c6ef712
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,14 @@
+Hey there!
+
+I'm Hylke, the creator of this project. It's about time I wrote something up about how to contribute to SparkleShare, so here goes...
+
+Contributions to SparkleShare are always welcome! I'm not a great coder. I like to design icons and interfaces, so there are always bugs or things that can be done better. Take a look at the [list of open issues](https://github.com/hbons/SparkleShare/issues). Smaller issues or places where refactoring is needed are marked with `FIXME` or `TODO` in the source code. If you have a fix for SparkleShare, simply open a pull request against the master branch (keeping in mind the [[coding style]]) and if you think your change is significant enough to be copyrighted, feel free to add your name and email to the `AUTHORS` file. Releases are done at least once a month, so there won't be long waits for bug fixes.
+
+SparkleShare tries to keep things simple and to stay out of people's way. Features are only added if they are essential and helpful to a majority of users. If you have a feature that you'd like to be added, please open an issue first, so there can be a discussion whether the feature is actually needed (or it may be it can be done in some other way); do not waste work on a feature that isn't actually desired. By limiting the amount of features, we can spend more time on making the core features solid in order to help people get things done.
+
+Often requests come in to add preferences. I'm very pleased that we've been able to solve most problems reported and features requested without adding a "preference". Currently SparkleShare has only one preference: enabling/disabling notifications. Hopefully it will stay this way and we can withhold from adding a preference panel of some kind (but I can't rule it out). Figuring out how things can be done without burdening people with a preference is much more challenging and rewarding in my opinion. [Free Software UI](http://ometer.com/free-software-ui.html) is a great article about this topic and I recommend reading it.
+
+Looking forward to your contributions! :)
+
+Hylke
+
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..9eb76f4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,20 @@
+You can find session logs by date and version information in:
+~/.config/org.sparkleshare.SparkleShare/logs/ on Linux and macOS
+C:\Users\YOUR_USERNAME\AppData\Roaming\org.sparkleshare.SparkleShare\logs\ on Windows
+
+To help us help you, please include the logs from around the time the issue occurred, as well as the SparkleShare version and info about your OS (displayed at the top of the log files). Then, tell us roughly in these steps what went wrong:
+
+
+### What happened:
+…
+
+### What I expected to happen:
+…
+
+### This happens when:
+1. …
+2. …
+3. …
+
+
+Thanks for reporting your issue or feature request, it helps lots!
diff --git a/.gitignore b/.gitignore
index 7ab6699..b8baef2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,35 +12,14 @@
*.sln.cache
*.user
*.resources
-Makefile.in
-Makefile
-intltool-*
-compile
-configure
-config.guess
-config.h
-config.h.in
-config.log
-config.status
-config.sub
-aclocal.m4
-autom4te.cache/
bin/
+build/
obj/
git-*
-install-sh
-libtool
-ltmain.sh
-lt*.m4
-missing
-build/m4/shave/shave
-build/m4/*.m4
-build/m4/shave/shave-libtool
Sparkles/InstallationInfo.Directory.cs
SparkleShare/Linux/sparkleshare
SparkleShare/Mac/git/*
-SparkleShare/Mac/git*.gz
-gnome-doc-utils.make
+SparkleShare/Mac/git*
/sparkleshare-*
desktop.ini
_ReSharper.*
@@ -49,12 +28,12 @@ _ReSharper.*
*.wixpdb
*.wxs
*.dotCover
-
SparkleShare/Windows/build/
-
+
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
+
diff --git a/.travis.yml b/.travis.yml
index 4f2e59c..37f54fd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,12 +9,12 @@ matrix:
sudo: required
before_install:
- - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull ubuntu:xenial ; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull ubuntu:17.10 ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then wget https://dl.xamarin.com/XamarinforMac/Mac/xamarin.mac-3.0.0.393.pkg ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sudo installer -pkg xamarin.mac*.pkg -target / ; fi
script:
- - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build --file build/ci/Dockerfile --tag sparkleshare:nightly . ; fi
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build --file scripts/ci/Dockerfile --tag sparkleshare:nightly . ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then msbuild /p:Configuration=ReleaseMac SparkleShare.sln ; fi
before_deploy:
@@ -24,3 +24,11 @@ before_deploy:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then mv SparkleShare/Mac/bin/ReleaseMac/SparkleShare.app . ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then zip --recurse-paths sparkleshare-mac-nightly-${TRAVIS_COMMIT}.zip SparkleShare.app ; fi
+notifications:
+ webhooks:
+ urls:
+ - https://webhooks.gitter.im/e/f1a1178baa78d1162385
+ on_success: change
+ on_failure: always
+ on_start: never
+
diff --git a/legal/License_for_SparkleShare.txt b/LICENSE.md
index 94a0453..94a0453 100755
--- a/legal/License_for_SparkleShare.txt
+++ b/LICENSE.md
diff --git a/legal/License_for_Sparkles.txt b/LICENSE_Sparkles.md
index 341c30b..341c30b 100644
--- a/legal/License_for_Sparkles.txt
+++ b/LICENSE_Sparkles.md
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100755
index 34f6ed4..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-ACLOCAL_AMFLAGS = -I build/m4/sparkleshare -I build/m4/shamrock -I build/m4/shave
-
-basedirs = build Sparkles Sparkles/Git
-
-SUBDIRS = $(basedirs) $(GUISUBDIRS)
-DIST_SUBDIRS = $(basedirs) SparkleShare
-
-EXTRA_DIST = \
- News.txt \
- README.md \
- legal/License_for_SparkleShare.txt \
- legal/License_for_Sparkles.txt \
- legal/Authors.txt \
- SparkleShare/Linux/README.md \
- SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml
-
-DISTCLEANFILES = \
- intltool-extract \
- intltool-merge \
- intltool-update \
- gnome-doc-utils.make
-
-clean-local:
- rm -rf $(top_builddir)/bin
-
diff --git a/README.md b/README.md
index a07f66b..2bea0f9 100644
--- a/README.md
+++ b/README.md
@@ -14,16 +14,24 @@ SparkleShare creates a special folder on your computer. You can add remotely hos
Under the hood SparkleShare uses the version control system [Git](https://git-scm.com/) and the large files extension [Git LFS](https://git-lfs.github.com), so setting up a host yourself is relatively easy. Using your own host gives you more privacy and control, as well as lots of cheap storage space and higher transfer speeds. We've made a simple [script](https://github.com/hbons/Dazzle) that does the hard work for you. If you need to manage a lot of projects and/or users we recommend hosting a [GitLab Community Edition](https://about.gitlab.com/installation/) instance.
+
## Build from source
`SparkleShare` is Free and Open Source software and licensed under the [GNU GPLv3 or later](legal/License_for_SparkleShare.txt). You are welcome to change and redistribute it under certain conditions. Its library `Sparkles` is licensed under the [GNU LGPLv3 or later](legal/License_for_Sparkles.txt).
Here are instructions to build SparkleShare on [Linux distributions](SparkleShare/Linux/README.md), [macOS](SparkleShare/Mac/README.md), and [Windows](SparkleShare/Windows/README.md).
-[![Build Status](https://travis-ci.org/hbons/SparkleShare.svg?branch=master)](https://travis-ci.org/hbons/SparkleShare)
+**Note:** by default SparkleShare uses an AppIndicator status icon on Linux. If you use GNOME on a distribution other than Ubuntu, please install the [AppIndicator extension](https://extensions.gnome.org/extension/615/appindicator-support/). If you don't use GNOME, you can start SparkleShare with `--status-icon=gtk`.
+[![Build Status](https://travis-ci.org/hbons/SparkleShare.svg?branch=master)](https://travis-ci.org/hbons/SparkleShare)
+[![Join the chat at https://gitter.im/hbons/SparkleShare](https://badges.gitter.im/hbons/SparkleShare.svg)](https://gitter.im/hbons/SparkleShare?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
## Useful links
-[Official website](https://www.sparkleshare.org/), [Twitter](https://www.twitter.com/SparkleShare), [Wiki](https://www.github.com/hbons/SparkleShare/wiki), and [Source Code](https://www.github.com/hbons/SparkleShare).
+- [sparkleshare.org](https://www.sparkleshare.org/)
+- [@SparkleShare](https://www.twitter.com/SparkleShare), [@hbons](https://www.twitter.com/hbons)
+- Community chatroom on [Gitter](https://www.gitter.im/hbons/SparkleShare)
+- [Wiki](https://www.github.com/hbons/SparkleShare/wiki)
+
Have fun, make awesome. :)
diff --git a/release-notes.txt b/RELEASE_NOTES.txt
index 65592b4..74e7fcf 100755
--- a/release-notes.txt
+++ b/RELEASE_NOTES.txt
@@ -1,3 +1,26 @@
+3.28.0 (Sat 14 Jul, 2018):
+
+ Fixed a bunch of crashes and lots of under-the-hood improvements.
+ SparkleShare will now follow the GNOME release schedule and version
+ number scheme as much as possible.
+
+ Please make sure to install the AppIndicator Support GNOME Shell extension
+ (https://extensions.gnome.org/extension/615/appindicator-support/) to display
+ status icons in GNOME 3.26 or later. Or start with --status-icon=gtk.
+
+ Linux:
+ - Use the Meson build system
+ - Use appindicator as the default status icon
+ - Fix event log parsing for newer versions of Git
+ - Flatpak improvements
+
+ macOS:
+ - Fix the system font in eventlog and related crash
+ - Fix hang when quitting the app
+
+ Special thanks to Thiago Santos and Renpytom for supporting the project on Patreon.
+
+
2.0.1 (Tue 19 Dec, 2017):
- Fix files created by conflict resolution being moved to the root folder
diff --git a/SparkleShare/Common/AboutController.cs b/SparkleShare/Common/AboutController.cs
index 9f7436e..bdf8c65 100644
--- a/SparkleShare/Common/AboutController.cs
+++ b/SparkleShare/Common/AboutController.cs
@@ -62,7 +62,7 @@ namespace SparkleShare {
Thread.Sleep (500);
var web_client = new WebClient ();
- var uri = new Uri ("http://www.sparkleshare.org/version");
+ var uri = new Uri ("https://www.sparkleshare.org/version");
try {
string latest_version = web_client.DownloadString (uri);
@@ -73,7 +73,8 @@ namespace SparkleShare {
else
UpdateLabelEvent ("✓ You are running the latest version");
- } catch {
+ } catch (Exception e) {
+ Logger.LogInfo ("UI", "Failed to download " + uri , e);
UpdateLabelEvent ("Couldn’t check for updates\t");
}
}
diff --git a/SparkleShare/Common/Avatars.cs b/SparkleShare/Common/Avatars.cs
index 058dbc4..bf0738c 100644
--- a/SparkleShare/Common/Avatars.cs
+++ b/SparkleShare/Common/Avatars.cs
@@ -39,10 +39,10 @@ namespace SparkleShare
#endif
email = email.ToLower ();
-
+
if (skipped_avatars.Contains (email))
return null;
-
+
string avatars_path = Path.Combine (Path.GetDirectoryName (target_path), "avatars", size + "x" + size);
// Search avatars by file name, ignore extension
@@ -66,10 +66,10 @@ namespace SparkleShare
Logger.LogInfo ("Avatars", "Error fetching avatar for " + email, e);
return null;
}
-
+
var client = new WebClient ();
string url = "https://gravatar.com/avatar/" + email.MD5 () + ".png?s=" + size + "&d=404";
-
+
try {
byte [] buffer = client.DownloadData (url);
@@ -78,30 +78,30 @@ namespace SparkleShare
} else if (client.ResponseHeaders ["content-type"].Equals (MediaTypeNames.Image.Gif, StringComparison.InvariantCultureIgnoreCase)) {
avatar_file_path += ".gif";
-
+
} else {
avatar_file_path += ".png";
}
-
+
if (buffer.Length > 255) {
if (!Directory.Exists (avatars_path)) {
Directory.CreateDirectory (avatars_path);
Logger.LogInfo ("Avatars", "Created '" + avatars_path + "'");
}
-
+
File.WriteAllBytes (avatar_file_path, buffer);
Logger.LogInfo ("Avatars", "Fetched " + size + "x" + size + " avatar for " + email);
-
+
return avatar_file_path;
-
+
} else {
return null;
}
-
+
} catch (Exception e) {
Logger.LogInfo ("Avatars", "Error fetching avatar for " + email, e);
skipped_avatars.Add (email);
-
+
return null;
}
}
@@ -111,11 +111,11 @@ namespace SparkleShare
X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
X509Certificate2 certificate2 = new X509Certificate2 (certificate.GetRawCertData ());
-
+
// On some systems (mostly Linux) we can't assume the needed certificates are
// available, so we have to check the certificate's SHA-1 fingerprint manually.
//
- // SHA1 fingerprinter obtained from https://www.gravatar.com/ on Oct 16 2015
+ // SHA1 fingerprinter obtained from https://www.gravatar.com/ on Oct 16 2015
// Set to expire on Oct 14 2018
string gravatar_cert_fingerprint = "1264B3F00814C6077D3853238771EE67FB6321C9";
@@ -123,7 +123,7 @@ namespace SparkleShare
Logger.LogInfo ("Avatars", "Invalid certificate for https://www.gravatar.com/");
return false;
}
-
+
return true;
}
}
diff --git a/SparkleShare/Common/BaseController.cs b/SparkleShare/Common/BaseController.cs
index ddca2c2..3a405c1 100644
--- a/SparkleShare/Common/BaseController.cs
+++ b/SparkleShare/Common/BaseController.cs
@@ -24,17 +24,17 @@ using System.Threading;
using Sparkles;
namespace SparkleShare {
-
+
public abstract class BaseController {
-
+
public BaseRepository [] Repositories {
get {
lock (this.repo_lock)
return this.repositories.GetRange (0, this.repositories.Count).ToArray ();
}
}
-
-
+
+
void AddRepository (BaseRepository repo)
{
lock (this.repo_lock) {
@@ -42,15 +42,15 @@ namespace SparkleShare {
this.repositories.Sort ((x, y) => string.Compare (x.Name, y.Name));
}
}
-
-
+
+
void RemoveRepository (BaseRepository repo)
{
lock (this.repo_lock)
this.repositories.Remove (repo);
}
-
-
+
+
public BaseRepository GetRepoByName (string name)
{
lock (this.repo_lock) {
@@ -58,15 +58,15 @@ namespace SparkleShare {
if (repo.Name.Equals (name))
return repo;
}
-
+
return null;
}
-
-
+
+
public Configuration Config { get; private set; }
public bool RepositoriesLoaded { get; private set; }
public string FoldersPath { get; private set; }
-
+
public double ProgressPercentage = 0.0;
public double ProgressSpeedUp = 0.0;
public double ProgressSpeedDown = 0.0;
@@ -81,37 +81,37 @@ namespace SparkleShare {
public event Action ShowAboutWindowEvent = delegate { };
public event Action ShowEventLogWindowEvent = delegate { };
-
+
public event FolderFetchedEventHandler FolderFetched = delegate { };
public delegate void FolderFetchedEventHandler (string remote_url, string [] warnings);
-
+
public event FolderFetchErrorHandler FolderFetchError = delegate { };
public delegate void FolderFetchErrorHandler (string remote_url, string [] errors);
-
+
public event FolderFetchingHandler FolderFetching = delegate { };
public delegate void FolderFetchingHandler (double percentage, double speed, string information);
-
-
+
+
public event Action FolderListChanged = delegate { };
public event Action OnIdle = delegate { };
public event Action OnSyncing = delegate { };
public event Action OnError = delegate { };
-
-
+
+
public event InviteReceivedHandler InviteReceived = delegate { };
public delegate void InviteReceivedHandler (SparkleInvite invite);
-
+
public event NotificationRaisedEventHandler NotificationRaised = delegate { };
public delegate void NotificationRaisedEventHandler (ChangeSet change_set);
-
+
public event AlertNotificationRaisedEventHandler AlertNotificationRaised = delegate { };
public delegate void AlertNotificationRaisedEventHandler (string title, string message);
-
-
+
+
public bool FirstRun {
get { return Config.User.Email.Equals ("Unknown"); }
}
-
+
public List<string> Folders {
get {
List<string> folders = Config.Folders;
@@ -131,32 +131,32 @@ namespace SparkleShare {
public bool NotificationsEnabled {
get {
string notifications_enabled = Config.GetConfigOption ("notifications");
-
+
if (string.IsNullOrEmpty (notifications_enabled)) {
Config.SetConfigOption ("notifications", bool.TrueString);
return true;
-
+
} else {
return notifications_enabled.Equals (bool.TrueString);
}
}
}
-
+
public bool AvatarsEnabled {
get {
string fetch_avatars_option = Config.GetConfigOption ("fetch_avatars");
-
+
if (fetch_avatars_option == null || fetch_avatars_option.Equals (bool.FalseString))
return false;
-
+
return true;
}
}
-
-
+
+
// Path where the plugins are kept
public abstract string PresetsPath { get; }
-
+
// Enables SparkleShare to start automatically at login
public abstract void CreateStartupItem ();
@@ -168,62 +168,60 @@ namespace SparkleShare {
// Creates the SparkleShare folder in the user's home folder
public abstract void CreateSparkleShareFolder ();
-
+
// Opens the SparkleShare folder or an (optional) subfolder
public abstract void OpenFolder (string path);
-
+
// Opens a file with the appropriate application
public abstract void OpenFile (string path);
-
+
// Opens a file with the appropriate application
public virtual void OpenWebsite (string url) { }
-
+
// Copies text to the clipboard
public abstract void CopyToClipboard (string text);
-
+
+ // Allows for platform-specific quit and cleanup methods to be called on exit
+ public abstract void PlatformQuit ();
+
public abstract string EventLogHTML { get; }
public abstract string DayEntryHTML { get; }
public abstract string EventEntryHTML { get; }
-
-
+
+
BaseFetcher fetcher;
FileSystemWatcher watcher;
object repo_lock = new object ();
object check_repos_lock = new object ();
List<BaseRepository> repositories = new List<BaseRepository> ();
bool lost_folders_path = false;
-
-
+
+
public BaseController (Configuration config)
{
Config = config;
FoldersPath = Config.FoldersPath;
}
-
-
+
+
public virtual void Initialize ()
{
string version = InstallationInfo.Version;
- if (InstallationInfo.Directory.StartsWith ("/app", StringComparison.InvariantCulture))
+ if (InstallationInfo.IsFlatpak)
version += " (Flatpak)";
Logger.LogInfo ("Environment", "SparkleShare " + version);
Logger.LogInfo ("Environment", "Git LFS " + Sparkles.Git.GitCommand.GitLFSVersion);
Logger.LogInfo ("Environment", "Git " + Sparkles.Git.GitCommand.GitVersion);
-
- // TODO: Nice OS version names for Linux (Fedora 24, Ubuntu 16.04, etc.)
- if (InstallationInfo.OperatingSystem == OS.Mac)
- Logger.LogInfo ("Environment", InstallationInfo.MacOSVersion ());
- else
- Logger.LogInfo ("Environment", InstallationInfo.OperatingSystem + " (" + Environment.OSVersion + ")");
+ Logger.LogInfo ("Environment", InstallationInfo.OperatingSystem + " " + InstallationInfo.OperatingSystemVersion);
UserAuthenticationInfo = new SSHAuthenticationInfo ();
SSHAuthenticationInfo.DefaultAuthenticationInfo = UserAuthenticationInfo;
Preset.PresetsPath = PresetsPath;
InstallProtocolHandler ();
-
+
try {
CreateSparkleShareFolder ();
@@ -239,19 +237,19 @@ namespace SparkleShare {
IncludeSubdirectories = false,
Path = FoldersPath
};
-
+
watcher.Created += OnFolderActivity;
watcher.EnableRaisingEvents = true;
}
-
-
+
+
int reopen_attempt_counts = 0;
-
+
public void HandleReopen ()
{
if (Repositories.Length > 0) {
ShowEventLogWindow ();
-
+
} else if (reopen_attempt_counts > 1) {
AlertNotificationRaised ("Hello!", "SparkleShare sits right here, as a status icon.");
reopen_attempt_counts = 0;
@@ -267,31 +265,31 @@ namespace SparkleShare {
if (this.lost_folders_path) {
SparkleShare.UI.Bubbles.Controller.ShowBubble ("Where's your SparkleShare folder?",
"Did you put it on a detached drive?", null);
-
+
Environment.Exit (-1);
}
-
+
if (FirstRun) {
ShowSetupWindow (PageType.Setup);
-
+
} else {
new Thread (() => {
StartupInviteScan ();
CheckRepositories ();
RepositoriesLoaded = true;
UpdateState ();
-
+
}).Start ();
}
}
-
-
+
+
public void ShowSetupWindow (PageType page_type)
{
ShowSetupWindowEvent (page_type);
}
-
-
+
+
public void ShowAboutWindow ()
{
ShowAboutWindowEvent ();
@@ -302,33 +300,33 @@ namespace SparkleShare {
{
ShowNoteWindowEvent (project);
}
-
-
+
+
public void ShowEventLogWindow ()
{
ShowEventLogWindowEvent ();
}
-
-
+
+
public void OpenSparkleShareFolder ()
{
OpenFolder (Config.FoldersPath);
}
-
-
+
+
public void OpenSparkleShareFolder (string name)
{
OpenFolder (new SparkleFolder (name).FullPath);
}
-
-
+
+
public void ToggleNotifications ()
{
bool notifications_enabled = Config.GetConfigOption ("notifications").Equals (bool.TrueString);
Config.SetConfigOption ("notifications", (!notifications_enabled).ToString ());
}
-
-
+
+
void CheckRepositories ()
{
lock (this.check_repos_lock) {
@@ -395,21 +393,21 @@ namespace SparkleShare {
BaseRepository repo = null;
string folder_name = Path.GetFileName (folder_path);
string backend = Config.BackendByName (folder_name);
-
+
try {
repo = (BaseRepository) Activator.CreateInstance (
Type.GetType ("Sparkles." + backend + "." + backend + "Repository, Sparkles." + backend),
new object [] { folder_path, Config, SSHAuthenticationInfo.DefaultAuthenticationInfo });
-
+
} catch (Exception e) {
Logger.LogInfo ("Controller", "Failed to load backend '" + backend + "' for '" + folder_name + "': ", e);
return;
}
-
+
repo.ChangesDetected += delegate {
UpdateState ();
};
-
+
repo.SyncStatusChanged += delegate (SyncStatus status) {
if (status == SyncStatus.Idle) {
ProgressPercentage = 0.0;
@@ -417,54 +415,54 @@ namespace SparkleShare {
ProgressSpeedDown = 0.0;
ProgressInformation = "";
}
-
+
UpdateState ();
};
-
+
repo.ProgressChanged += delegate {
ProgressPercentage = 0.0;
ProgressSpeedUp = 0.0;
ProgressSpeedDown = 0.0;
ProgressInformation = "";
-
+
double percentage = 0.0;
int repo_count = 0;
-
+
foreach (BaseRepository rep in Repositories) {
if (rep.ProgressPercentage > 0) {
percentage += rep.ProgressPercentage;
repo_count++;
}
-
+
if (rep.Status == SyncStatus.SyncUp)
ProgressSpeedUp += rep.ProgressSpeed;
-
+
if (rep.Status == SyncStatus.SyncDown)
ProgressSpeedDown += rep.ProgressSpeed;
}
if (repo_count == 1)
ProgressInformation = repo.ProgressInformation;
-
+
if (repo_count > 0)
ProgressPercentage = percentage / repo_count;
-
+
UpdateState ();
};
-
+
repo.NewChangeSet += delegate (ChangeSet change_set) {
if (AvatarsEnabled)
change_set.User.AvatarFilePath = Avatars.GetAvatar (change_set.User.Email, 48, Config.DirectoryPath);
-
+
NotificationRaised (change_set);
};
-
+
repo.ConflictResolved += delegate {
AlertNotificationRaised ("Resolved a file collision", "Local and server versions were kept.");
};
-
+
AddRepository (repo);
- repo.Initialize ();
+ repo.Initialize ();
}
@@ -477,31 +475,31 @@ namespace SparkleShare {
return;
}
}
-
-
+
+
void StartupInviteScan ()
{
foreach (string invite in Directory.GetFiles (FoldersPath, "*.xml"))
HandleInvite (invite);
}
-
-
+
+
void HandleInvite (FileSystemEventArgs args)
{
HandleInvite (args.FullPath);
}
-
-
+
+
void HandleInvite (string path)
{
if (this.fetcher != null &&
this.fetcher.IsActive) {
-
+
AlertNotificationRaised ("SparkleShare Setup seems busy", "Please wait for it to finish");
-
+
} else {
SparkleInvite invite = new SparkleInvite (path);
-
+
// It may be that the invite we received a path to isn't
// fully downloaded yet, so we try to read it several times
int tries = 0;
@@ -509,37 +507,37 @@ namespace SparkleShare {
Thread.Sleep (100);
invite = new SparkleInvite (path);
tries++;
-
+
if (tries > 10) {
AlertNotificationRaised ("Oh noes!", "This invite seems screwed up...");
break;
}
}
-
+
if (invite.IsValid)
InviteReceived (invite);
-
+
File.Delete (path);
}
}
-
-
+
+
// Fires events for the current syncing state
void UpdateState ()
{
bool has_unsynced_repos = false;
bool has_syncing_repos = false;
-
+
foreach (BaseRepository repo in Repositories) {
if (repo.Status == SyncStatus.SyncDown || repo.Status == SyncStatus.SyncUp || repo.IsBuffering) {
has_syncing_repos = true;
break;
-
+
} else if (repo.Status == SyncStatus.Idle && repo.HasUnsyncedChanges) {
has_unsynced_repos = true;
}
}
-
+
if (has_syncing_repos)
OnSyncing ();
else if (has_unsynced_repos)
@@ -547,7 +545,7 @@ namespace SparkleShare {
else
OnIdle ();
}
-
+
public List<StorageTypeInfo> FetcherAvailableStorageTypes {
get {
@@ -559,31 +557,31 @@ namespace SparkleShare {
public void StartFetcher (SparkleFetcherInfo info)
{
string canonical_name = Path.GetFileName (info.RemotePath);
- string backend = info.Backend;
-
+ string backend = info.Backend;
+
if (string.IsNullOrEmpty (backend))
backend = BaseFetcher.GetBackend (info.Address);
-
+
info.TargetDirectory = Path.Combine (Config.TmpPath, canonical_name);
if (Directory.Exists (info.TargetDirectory))
- Directory.Delete (info.TargetDirectory, true);
-
+ Directory.Delete (info.TargetDirectory, recursive: true);
+
try {
this.fetcher = (BaseFetcher) Activator.CreateInstance (
Type.GetType ("Sparkles." + backend + "." + backend + "Fetcher, Sparkles." + backend),
new object [] { info, UserAuthenticationInfo});
-
+
} catch (Exception e) {
Logger.LogInfo ("Controller",
"Failed to load '" + backend + "' backend for '" + canonical_name + "' " + e.Message);
-
+
FolderFetchError (Path.Combine (info.Address, info.RemotePath).Replace (@"\", "/"),
new string [] {"Failed to load \"" + backend + "\" backend for \"" + canonical_name + "\""});
-
+
return;
}
-
+
this.fetcher.Finished += FetcherFinishedDelegate;
this.fetcher.Failed += FetcherFailedDelegate;
this.fetcher.ProgressChanged += FetcherProgressChangedDelgate;
@@ -625,12 +623,12 @@ namespace SparkleShare {
{
this.fetcher.Stop ();
this.fetcher.Dispose ();
-
+
this.fetcher = null;
this.watcher.EnableRaisingEvents = true;
}
-
-
+
+
public bool CheckPassword (string password)
{
return this.fetcher.IsFetchedRepoPasswordCorrect (password);
@@ -641,10 +639,9 @@ namespace SparkleShare {
{
this.fetcher.EnableFetchedRepoCrypto (password);
FinishFetcher (StorageType.Encrypted);
- } // TODO: make this the main method. password optional. need to know storage type before Complete to allow crypto in lfs
- // Make sure IsCryptoPasswordCorrect works with SparkleShare.txt checkout and LFS
-
-
+ }
+
+
public void FinishFetcher (StorageType selected_storage_type)
{
this.watcher.EnableRaisingEvents = false;
@@ -655,17 +652,17 @@ namespace SparkleShare {
try {
Directory.Move (this.fetcher.TargetFolder, target_folder_path);
-
+
} catch (Exception e) {
Logger.LogInfo ("Controller", "Error moving directory, trying again...", e);
-
+
try {
ClearDirectoryAttributes (this.fetcher.TargetFolder);
Directory.Move (this.fetcher.TargetFolder, target_folder_path);
-
+
} catch (Exception x) {
Logger.LogInfo ("Controller", "Error moving directory", x);
-
+
this.fetcher.Dispose ();
this.fetcher = null;
this.watcher.EnableRaisingEvents = true;
@@ -674,7 +671,7 @@ namespace SparkleShare {
}
string backend = BaseFetcher.GetBackend (this.fetcher.RemoteUrl.ToString ());
-
+
Config.AddFolder (target_folder_name, identifier, this.fetcher.RemoteUrl.ToString (), backend);
if (this.fetcher.FetchedRepoStorageType != StorageType.Plain) {
@@ -692,10 +689,10 @@ namespace SparkleShare {
FolderListChanged ();
FolderFetched (this.fetcher.RemoteUrl.ToString (), this.fetcher.Warnings.ToArray ());
-
+
this.fetcher.Dispose ();
this.fetcher = null;
-
+
this.watcher.EnableRaisingEvents = true;
}
@@ -717,14 +714,14 @@ namespace SparkleShare {
int suffix = 2 + Directory.GetDirectories (folder_group_path, folder_name + " (*").Length;
return string.Format ("{0} ({1})", folder_path, suffix);
}
-
-
- public virtual void Quit ()
+
+
+ public void Quit ()
{
foreach (BaseRepository repo in Repositories)
repo.Dispose ();
-
- Environment.Exit (0);
+
+ PlatformQuit ();
}
diff --git a/SparkleShare/Common/EventLogController.cs b/SparkleShare/Common/EventLogController.cs
index 78831af..706997b 100644
--- a/SparkleShare/Common/EventLogController.cs
+++ b/SparkleShare/Common/EventLogController.cs
@@ -36,16 +36,16 @@ namespace SparkleShare {
public event UpdateContentEventEventHandler UpdateContentEvent = delegate { };
public delegate void UpdateContentEventEventHandler (string html);
-
+
public event UpdateChooserEventHandler UpdateChooserEvent = delegate { };
public delegate void UpdateChooserEventHandler (string [] folders);
-
+
public event UpdateChooserEnablementEventHandler UpdateChooserEnablementEvent = delegate { };
public delegate void UpdateChooserEnablementEventHandler (bool enabled);
-
+
public event UpdateSizeInfoEventHandler UpdateSizeInfoEvent = delegate { };
public delegate void UpdateSizeInfoEventHandler (string size, string history_size);
-
+
public event ShowSaveDialogEventHandler ShowSaveDialogEvent = delegate { };
public delegate void ShowSaveDialogEventHandler (string file_name, string target_folder_path);
@@ -162,7 +162,7 @@ namespace SparkleShare {
if (!string.IsNullOrEmpty (html))
UpdateContentEvent (html);
-
+
UpdateSizeInfoEvent (Size, HistorySize);
}).Start ();
@@ -172,7 +172,7 @@ namespace SparkleShare {
WindowIsOpen = true;
ShowWindowEvent ();
};
-
+
SparkleShare.Controller.OnIdle += delegate {
if (this.history_view_active)
return;
@@ -189,7 +189,7 @@ namespace SparkleShare {
UpdateSizeInfoEvent (Size, HistorySize);
};
-
+
SparkleShare.Controller.FolderListChanged += delegate {
if (this.selected_folder != null && !SparkleShare.Controller.Folders.Contains (this.selected_folder))
this.selected_folder = null;
@@ -212,16 +212,16 @@ namespace SparkleShare {
{
if (string.IsNullOrEmpty (href) || href.StartsWith ("about:"))
return;
-
+
href = href.Replace ("%20", " ");
-
+
if (href.StartsWith ("http")) {
SparkleShare.Controller.OpenWebsite (href);
-
+
} else if (href.StartsWith ("restore://") && this.restore_revision_info == null) {
Regex regex = new Regex ("restore://(.+)/([a-f0-9]+)/(.+)/(.{3} [0-9]+ [0-9]+h[0-9]+)/(.+)");
Match match = regex.Match (href);
-
+
if (match.Success) {
string author_name = match.Groups [3].Value;
string timestamp = match.Groups [4].Value;
@@ -240,7 +240,7 @@ namespace SparkleShare {
ShowSaveDialogEvent (file_name, target_folder_path);
}
-
+
} else if (href.StartsWith ("back://")) {
this.history_view_active = false;
SelectedFolder = this.selected_folder; // TODO: Return to the same position on the page
@@ -283,9 +283,9 @@ namespace SparkleShare {
} else {
if (href.StartsWith ("file:///"))
href = href.Substring (7);
-
+
SparkleShare.Controller.OpenFile (href);
- }
+ }
}
@@ -374,13 +374,13 @@ namespace SparkleShare {
html += "<tr>" +
"<td class='avatar'><img src='" + GetAvatarFilePath (change_set.User) + "'></td>" +
"<td class='name'>" + change_set.User.Name + "</td>" +
- "<td class='date'>" +
- change_set.Timestamp.ToString ("d MMM yyyy", CultureInfo.InvariantCulture) +
+ "<td class='date'>" +
+ change_set.Timestamp.ToString ("d MMM yyyy", CultureInfo.InvariantCulture) +
"</td>" +
"<td class='time'>" + change_set.Timestamp.ToString ("HH:mm") + "</td>" +
"<td class='restore'>" +
- "<a href='restore://" + change_set.Folder.Name + "/" +
- change_set.Revision + "/" + change_set.User.Name + "/" +
+ "<a href='restore://" + change_set.Folder.Name + "/" +
+ change_set.Revision + "/" + change_set.User.Name + "/" +
change_set.Timestamp.ToString ("MMM d H\\hmm", CultureInfo.InvariantCulture) + "/" +
file_path + "'>Restore&hellip;</a>" +
"</td>" +
@@ -407,7 +407,7 @@ namespace SparkleShare {
foreach (ChangeSet change_set in change_sets) {
bool change_set_inserted = false;
-
+
foreach (ActivityDay stored_activity_day in activity_days) {
if (stored_activity_day.Date.Year == change_set.Timestamp.Year &&
stored_activity_day.Date.Month == change_set.Timestamp.Month &&
@@ -443,7 +443,7 @@ namespace SparkleShare {
event_entry += "<dd class='" + change.Type.ToString ().ToLower () + "'>";
if (!change.IsFolder) {
- event_entry += "<small><a href=\"history://" + change_set.Folder.Name + "/" +
+ event_entry += "<small><a href=\"history://" + change_set.Folder.Name + "/" +
change.Path + "\" title=\"View revisions\">" + change.Timestamp.ToString ("HH:mm") +
" &#x25BE;</a></small> &nbsp;";
@@ -582,7 +582,7 @@ namespace SparkleShare {
private string SafeCombine (string path1, string path2)
{
string result = path1;
-
+
if (!result.EndsWith (Path.DirectorySeparatorChar.ToString ()))
result += Path.DirectorySeparatorChar;
@@ -597,9 +597,9 @@ namespace SparkleShare {
{
if (!SparkleShare.Controller.AvatarsEnabled)
return "<!-- $pixmaps-path -->/user-icon-default.png";
-
+
string fetched_avatar = Avatars.GetAvatar (user.Email, 48, SparkleShare.Controller.Config.DirectoryPath);
-
+
if (!string.IsNullOrEmpty (fetched_avatar))
return "file://" + fetched_avatar.Replace ("\\", "/");
else
diff --git a/SparkleShare/Common/HTML/Makefile.am b/SparkleShare/Common/HTML/Makefile.am
deleted file mode 100755
index dffbf0a..0000000
--- a/SparkleShare/Common/HTML/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-dist_html_DATA = \
- day-entry.html \
- event-entry.html \
- event-log.html \
- jquery.js
-
-htmldir = $(pkgdatadir)/html/
-
-MAINTAINERCLEANFILES = \
- Makefile.in
diff --git a/SparkleShare/Common/HTML/meson.build b/SparkleShare/Common/HTML/meson.build
new file mode 100644
index 0000000..a01198d
--- /dev/null
+++ b/SparkleShare/Common/HTML/meson.build
@@ -0,0 +1,10 @@
+html_files = ['event-log.html',
+ 'day-entry.html',
+ 'event-entry.html',
+ 'jquery.js'
+]
+
+install_data(
+ sources: html_files,
+ install_dir: join_paths(install_dir, 'html'))
+
diff --git a/SparkleShare/Common/Images/Makefile.am b/SparkleShare/Common/Images/Makefile.am
deleted file mode 100644
index 825b196..0000000
--- a/SparkleShare/Common/Images/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-dist_pixmaps_DATA = \
- side-splash.png \
- user-icon-default.png \
- text-balloon.png \
- tutorial-slide-1.png\
- tutorial-slide-2.png \
- about.png
-
-pixmapsdir = $(pkgdatadir)/pixmaps/
-
-MAINTAINERCLEANFILES = \
- Makefile.in
diff --git a/SparkleShare/Common/Images/Sources/app-icons.svg b/SparkleShare/Common/Images/Sources/app-icons.svg
index 2dcc19e..79f12a4 100644
--- a/SparkleShare/Common/Images/Sources/app-icons.svg
+++ b/SparkleShare/Common/Images/Sources/app-icons.svg
@@ -17,7 +17,7 @@
height="560"
id="svg11300"
sodipodi:version="0.32"
- inkscape:version="0.92pre2 r"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="app-icons.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0"
@@ -835,6 +835,792 @@
id="feGaussianBlur15760-4-2"
stdDeviation="4.6353635" />
</filter>
+ <radialGradient
+ id="radialGradient5077"
+ gradientUnits="userSpaceOnUse"
+ cy="505.22"
+ cx="626"
+ gradientTransform="matrix(1.4482,1.4653e-7,-2.6752e-7,2.6439,-280.57,-832.47)"
+ r="30.535999">
+ <stop
+ id="stop10050"
+ stop-color="#f4e3d7"
+ offset="0" />
+ <stop
+ id="stop10052"
+ stop-color="#f4e3d7"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ id="radialGradient5079"
+ gradientUnits="userSpaceOnUse"
+ cy="503.37"
+ cx="719.81"
+ gradientTransform="matrix(1.0724,0,0,0.32171472,-43.169999,-202.1855)"
+ r="4.6624999">
+ <stop
+ id="stop10118"
+ offset="0" />
+ <stop
+ id="stop10120"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ id="linearGradient5081"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(498.75,-237.75)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5083"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,801.62,-54.71)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient4989-3">
+ <stop
+ id="stop4991-49"
+ stop-color="#f57900"
+ offset="0" />
+ <stop
+ id="stop4993-02"
+ stop-color="#fcaf3e"
+ offset=".060437" />
+ <stop
+ id="stop4995-0"
+ stop-color="#fcaf3e"
+ offset=".17754" />
+ <stop
+ id="stop4997-196"
+ stop-color="#f57900"
+ offset=".89422" />
+ <stop
+ id="stop4999-2"
+ stop-color="#ce5c00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5085-3"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(498.75,-237.75)"
+ y1="195"
+ x1="306.25" />
+ <linearGradient
+ id="linearGradient11481-6">
+ <stop
+ id="stop11483-7"
+ stop-color="#a04600"
+ offset="0" />
+ <stop
+ id="stop11485-5"
+ stop-color="#ce5c00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5087"
+ y2="15.929"
+ xlink:href="#linearGradient4908-3"
+ gradientUnits="userSpaceOnUse"
+ x2="24.865999"
+ gradientTransform="matrix(0.3089,0,0,0.27375,302.94,177.48)"
+ y1="31.315001"
+ x1="24.865999" />
+ <linearGradient
+ id="linearGradient4908-3">
+ <stop
+ id="stop4910-5"
+ stop-color="#ce5c00"
+ offset="0" />
+ <stop
+ id="stop4912-6"
+ stop-color="#f57900"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5089"
+ y2="181.8"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="314.98999"
+ y1="193.61"
+ x1="311.82999" />
+ <radialGradient
+ id="radialGradient5091"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient5093"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <linearGradient
+ id="linearGradient4347-6">
+ <stop
+ id="stop4349-3"
+ stop-color="#fff"
+ offset="0" />
+ <stop
+ id="stop16444"
+ stop-color="#fff"
+ stop-opacity=".49804"
+ offset=".5" />
+ <stop
+ id="stop4351-6"
+ stop-color="#fff"
+ stop-opacity="0"
+ offset="1" />
+ </linearGradient>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4375-3"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4377-0"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4496"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4498"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4508"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4510"
+ stdDeviation="6.6678862" />
+ </filter>
+ <linearGradient
+ id="linearGradient5095"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(468.75,-237.75)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5097"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,771.62,-54.71)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5099"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(468.75,-237.75)"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient4256"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient4264"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4276"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4274"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4280"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4278"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4284"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4282"
+ stdDeviation="6.6678862" />
+ </filter>
+ <linearGradient
+ id="linearGradient5109"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(438.75,-237.75)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5111"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,741.62,-54.71)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5113"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(438.75,-237.75)"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient4329"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient4337"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4349"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4347"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4353"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4351"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4357"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4355"
+ stdDeviation="6.6678862" />
+ </filter>
+ <radialGradient
+ id="radialGradient4375"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <linearGradient
+ id="linearGradient5129"
+ y2="3.2953"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,302.87,183.04)"
+ y1="71.490997"
+ x1="25.054001">
+ <stop
+ id="stop4991-2"
+ stop-color="#f57900"
+ offset="0" />
+ <stop
+ id="stop4993-9"
+ stop-color="#fcaf3e"
+ offset=".060437" />
+ <stop
+ id="stop4995-1"
+ stop-color="#fcaf3e"
+ offset=".17754" />
+ <stop
+ id="stop4997-2"
+ stop-color="#f57900"
+ offset=".89422" />
+ <stop
+ id="stop4999"
+ stop-color="#ce5c00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5131"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient4396"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4408"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4406"
+ stdDeviation="1.0664062" />
+ </filter>
+ <linearGradient
+ id="linearGradient5135"
+ y2="202.06"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ y1="184.75999"
+ x1="311.82999">
+ <stop
+ id="stop4777"
+ stop-color="#fff"
+ offset="0" />
+ <stop
+ id="stop4779"
+ stop-color="#fff"
+ stop-opacity="0"
+ offset="1" />
+ </linearGradient>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4415"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4413"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4419"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4417"
+ stdDeviation="6.6678862" />
+ </filter>
+ <linearGradient
+ id="linearGradient5137"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(378.75,-237.75)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5139"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,681.617,-54.71)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5141"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(378.75,-237.75)"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient4464"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient4472"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4484"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4482"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4488"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4486"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4492"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4490"
+ stdDeviation="6.6678862" />
+ </filter>
+ <radialGradient
+ id="radialGradient5077-0"
+ gradientUnits="userSpaceOnUse"
+ cy="505.22"
+ cx="626"
+ gradientTransform="matrix(1.4482,1.4653e-7,-2.6752e-7,2.6439,-280.57,-832.47)"
+ r="30.535999">
+ <stop
+ id="stop10050-9"
+ stop-color="#f4e3d7"
+ offset="0" />
+ <stop
+ id="stop10052-3"
+ stop-color="#f4e3d7"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ id="radialGradient5079-6"
+ gradientUnits="userSpaceOnUse"
+ cy="503.37"
+ cx="719.81"
+ gradientTransform="matrix(1.0724,0,0,0.32171472,-29.413957,-242.42777)"
+ r="4.6624999">
+ <stop
+ id="stop10118-0"
+ offset="0" />
+ <stop
+ id="stop10120-6"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ id="linearGradient5081-9"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(512.50604,-277.99227)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5083-7"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,815.37604,-94.952272)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5085-31"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(512.50604,-277.99227)"
+ y1="195"
+ x1="306.25" />
+ <linearGradient
+ id="linearGradient5089-0"
+ y2="181.8"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="314.98999"
+ y1="193.61"
+ x1="311.82999" />
+ <radialGradient
+ id="radialGradient5091-3"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient5093-6"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4375-3-3"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4377-0-2"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4496-0"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4498-6"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4508-1"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4510-5"
+ stdDeviation="6.6678862" />
+ </filter>
+ <linearGradient
+ id="linearGradient5095-5"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(482.50604,-277.99227)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5097-4"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,785.37604,-94.952272)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5099-7"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(482.50604,-277.99227)"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient4944"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient4952"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4964"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur4962"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4968"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur4966"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter4972"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur4970"
+ stdDeviation="6.6678862" />
+ </filter>
+ <linearGradient
+ id="linearGradient5109-6"
+ y2="202.06"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ x2="315.70001"
+ gradientTransform="translate(452.50604,-277.99227)"
+ y1="184.75999"
+ x1="311.82999" />
+ <linearGradient
+ id="linearGradient5111-5"
+ y2="3.2953"
+ xlink:href="#linearGradient4989-3"
+ gradientUnits="userSpaceOnUse"
+ x2="25.054001"
+ gradientTransform="matrix(0.28968,0,0,0.1769,755.37604,-94.952272)"
+ y1="71.490997"
+ x1="25.054001" />
+ <linearGradient
+ id="linearGradient5113-6"
+ y2="185.05"
+ xlink:href="#linearGradient11481-6"
+ gradientUnits="userSpaceOnUse"
+ x2="306.41"
+ gradientTransform="translate(452.50604,-277.99227)"
+ y1="195"
+ x1="306.25" />
+ <radialGradient
+ id="radialGradient5017"
+ xlink:href="#linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ cy="179.00999"
+ cx="306.10001"
+ gradientTransform="matrix(2.5489,0,0,0.5173,-475.41,88.05)"
+ r="8.6093998" />
+ <radialGradient
+ id="radialGradient5025"
+ xlink:href="#linearGradient4347-6"
+ gradientUnits="userSpaceOnUse"
+ cy="525.85999"
+ cx="147.02"
+ gradientTransform="matrix(0.95029,0.0060304,-0.094604,0.2867,57.057,330.17)"
+ r="103.05" />
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter5037"
+ height="1.7122"
+ width="1.0247999"
+ y="-0.35609001"
+ x="-0.012418">
+ <feGaussianBlur
+ id="feGaussianBlur5035"
+ stdDeviation="1.0664062" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter5041"
+ width="1.0696"
+ y="-0.40007001"
+ x="-0.034789"
+ height="1.8001">
+ <feGaussianBlur
+ id="feGaussianBlur5039"
+ stdDeviation="3.3339431" />
+ </filter>
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="filter5045"
+ width="1.1392"
+ y="-0.80014998"
+ x="-0.069577999"
+ height="2.6003001">
+ <feGaussianBlur
+ id="feGaussianBlur5043"
+ stdDeviation="6.6678862" />
+ </filter>
</defs>
<sodipodi:namedview
stroke="#ef2929"
@@ -845,18 +1631,18 @@
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="322.57412"
- inkscape:cy="177.12079"
- inkscape:current-layer="layer8"
+ inkscape:zoom="8"
+ inkscape:cx="564.28877"
+ inkscape:cy="357.59288"
+ inkscape:current-layer="layer7"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
- inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-width="5120"
+ inkscape:window-height="2751"
inkscape:window-x="0"
- inkscape:window-y="27"
+ inkscape:window-y="55"
width="400px"
height="300px"
inkscape:snap-nodes="true"
@@ -991,7 +1777,10 @@
height="24"
x="568"
y="-60"
- inkscape:label="24x24" />
+ inkscape:label="24x24"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.30133247px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;enable-background:new"
@@ -1043,7 +1832,7 @@
clip-path="url(#clipPath7991)">
<path
d="m 76,-180 c -12,0 -12,12 -12,12 v 276 h 416 v -228 c 0,0 0,-12 -12,-12 H 280 c -3.5093,0 -9.09146,-0.51692 -13.46022,-5.3383 l -33.91554,-37.42936 C 228.8957,-178.88249 223.86532,-180 220,-180 Z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient6985);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.03651488;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient6985);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.03651488;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path11591"
sodipodi:nodetypes="cccccccsscc"
inkscape:connector-curvature="0" />
@@ -1069,53 +1858,6 @@
inkscape:connector-curvature="0" />
</g>
<g
- id="g8701">
- <path
- clip-path="none"
- d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5130);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5144);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- id="path11549"
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0" />
- <path
- d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z"
- id="path7147"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
- inkscape:radius="-1.0164655"
- sodipodi:type="inkscape:offset"
- transform="translate(1.6e-6,-2.3766313e-6)" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path11555"
- d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
- style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient8695);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
- </g>
- <g
- id="g11537"
- transform="translate(256,-224)"
- style="opacity:0.572">
- <rect
- rx="1"
- ry="1"
- y="184"
- x="307"
- height="2"
- width="18"
- id="rect11533"
- style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792)" />
- <rect
- rx="2"
- style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788)"
- id="rect11535"
- width="20"
- height="4"
- x="306"
- y="183"
- ry="2" />
- </g>
- <g
id="g8715">
<path
sodipodi:nodetypes="ccccccccccc"
@@ -1136,29 +1878,6 @@
style="opacity:0.17300002;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
- id="g8706">
- <path
- sodipodi:nodetypes="cccccccccccc"
- inkscape:connector-curvature="0"
- id="path11553"
- d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 11.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient8478);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5067);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
- <path
- d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z"
- id="path7002"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8474);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
- inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
- inkscape:radius="-1"
- sodipodi:type="inkscape:offset"
- transform="translate(-1.9624896e-6,1)" />
- <path
- style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient8472);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
- id="path11557"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
- <g
id="g8720">
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient8424);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5059);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
@@ -1521,11 +2240,6 @@
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
<path
inkscape:connector-curvature="0"
- id="path5901"
- d="m 579.9016,-49.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
- <path
- inkscape:connector-curvature="0"
id="path5905"
d="m 575.9407,-5.2696361 a 0.50005,0.50005 0 0 0 -0.033,0.00195 0.50005,0.50005 0 0 0 -0.023,0.00195 0.50005,0.50005 0 0 0 -0.4335,0.3867188 c -0.096,0.1054119 -0.2709,0.1237527 -0.3086,0.2734375 l 0.01,-0.035156 -0.5547,1.6640625 h -1.7246 c -0.2782,0 -0.5047,0.1317579 -0.664,0.3242188 -0.3553,0.4108805 -0.2844,0.9948116 0.164,1.3027344 0,9.237e-4 6e-4,0.00299 0,0.00391 l 1.3769,1.0117188 -0.5351,1.6738281 a 0.50005,0.50005 0 0 0 0,0.015625 c -0.1117,0.3891075 0.088,0.7378254 0.3359,0.9238281 0.2478,0.1860027 0.64,0.2822567 0.9824,0.066406 a 0.50005,0.50005 0 0 0 0.029,-0.019531 l 1.4154,-1.0410135 1.418,1.0410156 a 0.50005,0.50005 0 0 0 0.022,0.013672 c 0.3454,0.2262629 0.7665,0.1929902 1.0722,-0.080078 a 0.50005,0.50005 0 0 0 0.01,-0.00586 c 0.2536,-0.2346783 0.3473,-0.572636 0.2461,-0.90625 a 0.50005,0.50005 0 0 0 0,-0.00781 l -0.5351,-1.6738281 1.375,-1.0117188 c 0.453,-0.3068044 0.5241,-0.8949907 0.1679,-1.3066406 -0.1631,-0.1963607 -0.3895,-0.3159199 -0.6465,-0.3242188 a 0.50005,0.50005 0 0 0 -0.017,0 h -1.7559 l -0.5156,-1.6347656 c -0.043,-0.1602909 -0.1264,-0.2991013 -0.2461,-0.4121094 -0.073,-0.069482 -0.1826,-0.058759 -0.2715,-0.099609 a 0.50005,0.50005 0 0 0 -0.3359,-0.1464843 0.50005,0.50005 0 0 0 -0.01,0 z m 0.033,1.3242187 0.4863,1.546875 a 0.50005,0.50005 0 0 0 0.012,0.033203 c 0,0 0.066,0.145286 0.1719,0.234375 0.1054,0.089089 0.2752,0.1542968 0.4375,0.1542968 h 1.6699 l -1.3574,0.9960938 a 0.50005,0.50005 0 0 0 -0.1289,0.1386718 0.50005,0.50005 0 0 0 -0.01,0.00781 c -0.01,0.010503 0,-7.147e-4 -0.014,0.013672 -0.01,0.00664 0,0.02347 -0.01,0.03125 a 0.50005,0.50005 0 0 0 -0.035,0.109375 c 8e-4,-0.00389 0,-0.00398 0,-0.00781 -0.033,0.079121 -0.077,0.154375 -0.072,0.2363281 0.01,0.1280487 0.045,0.2119777 0.082,0.28125 l -0.035,-0.083984 0.4961,1.5429687 -1.2989,-0.95117188 a 0.50005,0.50005 0 0 0 -0.017,-0.0117188 c 0,0 -0.093,-0.0684594 -0.2286,-0.1015625 -0.1354,-0.0331031 -0.4016,-0.0248163 -0.5898,0.14453125 l 0.039,-0.03125 -1.2969,0.95117193 0.4941,-1.5429688 -0.06,0.1269531 c 0.058,-0.087035 0.1094,-0.2021235 0.1152,-0.3398438 0.01,-0.1377202 -0.047,-0.281773 -0.1133,-0.3710937 -0.1316,-0.1786413 -0.2968,-0.2148437 -0.2968,-0.2148436 l 0.1406,0.072266 -1.3574,-0.9960939 h 1.6347 c 0.3432,5.529e-4 0.5703,-0.3125 0.5703,-0.3125 a 0.50005,0.50005 0 0 0 0.047,-0.1015625 z m 2.0664,3.7324219 c -0.045,0.058226 -0.056,0.061826 -0.018,0.023437 0,-0.00258 0.01,-0.016345 0.01,-0.019531 z m -0.2559,1.8476563 v 0.00977 -0.00586 c -5e-4,-0.0018 5e-4,-0.00218 0,-0.00391 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
@@ -1535,16 +2249,105 @@
id="path5717-0-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsccccccscccccccccccccccccccccsscccccccccccccccccccccccccccccccccc" />
- <path
- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fde8d0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92400002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
- d="m 579.9016,-50.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
- id="path5862"
- inkscape:connector-curvature="0" />
+ <g
+ id="g4403">
+ <g
+ id="g8701"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path11549"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5130);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5144);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ clip-path="none" />
+ <path
+ transform="translate(1.6e-6,-2.3766313e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0164655"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path7147"
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z" />
+ <path
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient8695);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ id="path11555"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(264,-223.96717)"
+ id="g11537">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792)"
+ id="rect11533"
+ width="18"
+ height="2"
+ x="307"
+ y="184"
+ ry="1"
+ rx="1" />
+ <rect
+ ry="2"
+ y="182"
+ x="306"
+ height="4"
+ width="20"
+ id="rect11535"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788)"
+ rx="2" />
+ </g>
+ <g
+ id="g8706"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient8478);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5067);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ id="path11553"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="translate(-1.9624896e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8474);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="path7002"
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path11557"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient8472);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 579.9016,-49.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ id="path5901"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5862"
+ d="m 579.9016,-50.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fde8d0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92400002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
+ </g>
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fde8d0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92400002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
d="m 575.9407,-6.2696361 a 0.50005,0.50005 0 0 0 -0.033,0.00195 0.50005,0.50005 0 0 0 -0.023,0.00195 0.50005,0.50005 0 0 0 -0.4335,0.3867188 c -0.096,0.1054119 -0.2709,0.1237527 -0.3086,0.2734375 l 0.01,-0.035156 -0.5547,1.6640625 h -1.7246 c -0.2782,0 -0.5047,0.1317579 -0.664,0.3242188 -0.3553,0.4108805 -0.2844,0.9948116 0.164,1.3027344 0,9.237e-4 6e-4,0.00299 0,0.00391 l 1.3769,1.0117188 -0.5351,1.67382805 a 0.50005,0.50005 0 0 0 0,0.015625 c -0.1117,0.3891075 0.088,0.73782545 0.3359,0.92382815 0.2478,0.1860027 0.64,0.2822567 0.9824,0.066406 a 0.50005,0.50005 0 0 0 0.029,-0.019531 l 1.4154,-1.04101355 1.418,1.04101565 a 0.50005,0.50005 0 0 0 0.022,0.013672 c 0.3454,0.2262629 0.7665,0.1929902 1.0722,-0.080078 a 0.50005,0.50005 0 0 0 0.01,-0.00586 c 0.2536,-0.2346783 0.3473,-0.57263599 0.2461,-0.90625005 a 0.50005,0.50005 0 0 0 0,-0.007813 l -0.5351,-1.67382805 1.375,-1.0117188 c 0.453,-0.3068044 0.5241,-0.8949907 0.1679,-1.3066406 -0.1631,-0.1963607 -0.3895,-0.3159199 -0.6465,-0.3242188 a 0.50005,0.50005 0 0 0 -0.017,0 h -1.7559 l -0.5156,-1.6347656 c -0.043,-0.1602909 -0.1264,-0.2991013 -0.2461,-0.4121094 -0.073,-0.069482 -0.1826,-0.058759 -0.2715,-0.099609 a 0.50005,0.50005 0 0 0 -0.3359,-0.1464843 0.50005,0.50005 0 0 0 -0.01,0 z m 0.033,1.3242187 0.4863,1.546875 a 0.50005,0.50005 0 0 0 0.012,0.033203 c 0,0 0.066,0.145286 0.1719,0.234375 0.1054,0.089089 0.2752,0.1542968 0.4375,0.1542968 h 1.6699 l -1.3574,0.9960938 a 0.50005,0.50005 0 0 0 -0.1289,0.1386718 0.50005,0.50005 0 0 0 -0.01,0.00781 c -0.01,0.010503 0,-7.147e-4 -0.014,0.013672 -0.01,0.00664 0,0.02347 -0.01,0.03125 a 0.50005,0.50005 0 0 0 -0.035,0.109375 c 8e-4,-0.00389 0,-0.00398 0,-0.00781 -0.033,0.079121 -0.077,0.154375 -0.072,0.2363281 0.01,0.1280487 0.045,0.2119777 0.082,0.28125 l -0.035,-0.083984 0.4961,1.54296869 -1.2989,-0.95117189 a 0.50005,0.50005 0 0 0 -0.017,-0.011719 c 0,0 -0.093,-0.068459 -0.2286,-0.1015625 -0.1354,-0.033103 -0.4016,-0.024816 -0.5898,0.1445313 l 0.039,-0.03125 -1.2969,0.95117184 0.4941,-1.54296864 -0.06,0.1269531 c 0.058,-0.087035 0.1094,-0.2021235 0.1152,-0.3398438 0.01,-0.1377202 -0.047,-0.281773 -0.1133,-0.3710937 -0.1316,-0.1786414 -0.2968,-0.2148438 -0.2968,-0.2148438 l 0.1406,0.072266 -1.3574,-0.9960938 h 1.6347 c 0.3432,5.529e-4 0.5703,-0.3125 0.5703,-0.3125 a 0.50005,0.50005 0 0 0 0.047,-0.1015625 z m 2.0664,3.7324219 c -0.045,0.058226 -0.056,0.061826 -0.018,0.023437 0,-0.00258 0.01,-0.016345 0.01,-0.019531 z m -0.2559,1.84765622 v 0.009766 -0.005859 c -5e-4,-0.001803 5e-4,-0.002176 0,-0.003907 z"
id="path5879"
inkscape:connector-curvature="0" />
+ <rect
+ style="opacity:0;enable-background:new"
+ id="rect4889"
+ height="24"
+ width="24"
+ y="-100.99227"
+ x="694.50604" />
</g>
</g>
</svg>
diff --git a/SparkleShare/Common/Images/Sources/status-icons.svg b/SparkleShare/Common/Images/Sources/status-icons.svg
index b361de6..c9cf55f 100644
--- a/SparkleShare/Common/Images/Sources/status-icons.svg
+++ b/SparkleShare/Common/Images/Sources/status-icons.svg
@@ -15,7 +15,7 @@
height="400"
width="500"
version="1.0"
- inkscape:version="0.48.2 r9819"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="status-icons.svg">
<sodipodi:namedview
pagecolor="#ffffff"
@@ -26,17 +26,21 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:window-width="1046"
- inkscape:window-height="619"
+ inkscape:window-width="4242"
+ inkscape:window-height="2183"
id="namedview10348"
- showgrid="false"
- inkscape:zoom="0.70710678"
- inkscape:cx="466.4287"
- inkscape:cy="218.91387"
- inkscape:window-x="154"
- inkscape:window-y="85"
+ showgrid="true"
+ inkscape:zoom="32"
+ inkscape:cx="53.619826"
+ inkscape:cy="304.15882"
+ inkscape:window-x="436"
+ inkscape:window-y="363"
inkscape:window-maximized="0"
- inkscape:current-layer="layer20">
+ inkscape:current-layer="layer20"
+ inkscape:snap-bbox="true"
+ inkscape:object-nodes="false"
+ inkscape:snap-nodes="false"
+ inkscape:bbox-nodes="true">
<inkscape:grid
type="xygrid"
id="grid8724" />
@@ -54,7 +58,7 @@
<dc:title>Hylke Bons, Lapo Calamandrei</dc:title>
</cc:Agent>
</dc:creator>
- <dc:title></dc:title>
+ <dc:title />
<dc:subject>
<rdf:Bag>
<rdf:li>folder</rdf:li>
@@ -65,7 +69,7 @@
</dc:subject>
<dc:description>Derived from Jakub Steiner's design</dc:description>
<cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
<dc:rights>
<cc:Agent>
<dc:title>Hylke Bons, Lapo Calamandrei</dc:title>
@@ -73,7 +77,7 @@
</dc:rights>
</cc:Work>
<cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
@@ -203,7 +207,7 @@
gradientUnits="userSpaceOnUse"
cy="505.22"
cx="626"
- gradientTransform="matrix(1.4482 1.4653e-7 -2.6752e-7 2.6439 -280.57 -832.47)"
+ gradientTransform="matrix(1.4482,1.4653e-7,-2.6752e-7,2.6439,-280.57,-832.47)"
r="30.536">
<stop
id="stop10050"
@@ -1048,6 +1052,489 @@
offset="1"
id="stop10052-6" />
</linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908-3"
+ id="linearGradient5130"
+ x1="573"
+ y1="-55.032829"
+ x2="573"
+ y2="-45.032829"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient4908-3">
+ <stop
+ offset="0"
+ stop-color="#f57900"
+ id="stop4912-6" />
+ <stop
+ offset="1"
+ stop-color="#ce5c00"
+ id="stop4910-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5144"
+ x1="577"
+ y1="-54.032829"
+ x2="577"
+ y2="-48.032829"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient11481-5">
+ <stop
+ offset="0"
+ stop-color="#ce5c00"
+ id="stop11485-3" />
+ <stop
+ offset="1"
+ stop-color="#a04600"
+ id="stop11483-5" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient8695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2645115,0,0,0.63225606,-723.01371,-20.409786)"
+ cx="571.18335"
+ cy="-56.290825"
+ fx="571.18335"
+ fy="-56.290825"
+ r="8.0071211" />
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter5792"
+ x="-0.033333331"
+ width="1.0666667"
+ y="-0.30000001"
+ height="1.6">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.25"
+ id="feGaussianBlur5794" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter5788"
+ x="-0.071999997"
+ width="1.1440001"
+ y="-0.36000001"
+ height="1.72">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.6"
+ id="feGaussianBlur5790" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-6"
+ id="linearGradient8478"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99951"
+ y1="-52.967789"
+ x2="572"
+ y2="-41.002605"
+ gradientTransform="rotate(180,571.99977,-46.00031)" />
+ <linearGradient
+ id="linearGradient4989-6">
+ <stop
+ id="stop4991-2"
+ stop-color="#f57900"
+ offset="0" />
+ <stop
+ id="stop4993-9"
+ stop-color="#fcaf3e"
+ offset="0.06758628" />
+ <stop
+ id="stop4995-1"
+ stop-color="#fcaf3e"
+ offset="0.19854175" />
+ <stop
+ id="stop4997-2"
+ stop-color="#f57900"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5067"
+ x1="578"
+ y1="-53.032829"
+ x2="578"
+ y2="-38.032829"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="linearGradient8474"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99585"
+ y1="-41.306217"
+ x2="571.99585"
+ y2="-48.6875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient8472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9166362,0,0,0.49961033,-524.31592,-25.101494)"
+ cx="570.82074"
+ cy="-51.432213"
+ fx="570.82074"
+ fy="-51.432213"
+ r="9.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#radialGradient5079-6"
+ id="radialGradient5161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0724,0,0,0.32171472,-29.413957,-242.42777)"
+ cx="719.81"
+ cy="503.37"
+ r="4.6624999" />
+ <radialGradient
+ id="radialGradient5079-6"
+ gradientUnits="userSpaceOnUse"
+ cy="503.37"
+ cx="719.81"
+ gradientTransform="matrix(1.0724,0,0,0.32171472,-29.413957,-242.42777)"
+ r="4.6624999">
+ <stop
+ id="stop10118-0"
+ offset="0" />
+ <stop
+ id="stop10120-6"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#radialGradient5077-0"
+ id="radialGradient5163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4482,1.4653e-7,-2.6752e-7,2.6439,-280.57,-832.47)"
+ cx="626"
+ cy="505.22"
+ r="30.535999" />
+ <radialGradient
+ id="radialGradient5077-0"
+ gradientUnits="userSpaceOnUse"
+ cy="505.22"
+ cx="626"
+ gradientTransform="matrix(1.4482,1.4653e-7,-2.6752e-7,2.6439,-280.57,-832.47)"
+ r="30.535999">
+ <stop
+ id="stop10050-9"
+ stop-color="#f4e3d7"
+ offset="0" />
+ <stop
+ id="stop10052-3"
+ stop-color="#f4e3d7"
+ stop-opacity="0"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908-3"
+ id="linearGradient5165"
+ gradientUnits="userSpaceOnUse"
+ x1="573"
+ y1="-55.032829"
+ x2="573"
+ y2="-45.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5167"
+ gradientUnits="userSpaceOnUse"
+ x1="577"
+ y1="-54.032829"
+ x2="577"
+ y2="-48.032829" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2645115,0,0,0.63225606,-723.01371,-20.409786)"
+ cx="571.18335"
+ cy="-56.290825"
+ fx="571.18335"
+ fy="-56.290825"
+ r="8.0071211" />
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter5792-2"
+ x="-0.033333331"
+ width="1.0666667"
+ y="-0.30000001"
+ height="1.6">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.25"
+ id="feGaussianBlur5794-6" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter5788-1"
+ x="-0.071999997"
+ width="1.1440001"
+ y="-0.36000001"
+ height="1.72">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.6"
+ id="feGaussianBlur5790-8" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5173"
+ gradientUnits="userSpaceOnUse"
+ x1="578"
+ y1="-53.032829"
+ x2="578"
+ y2="-38.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="linearGradient5175"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99585"
+ y1="-41.306217"
+ x2="571.99585"
+ y2="-48.6875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9166362,0,0,0.49961033,-524.31592,-25.101494)"
+ cx="570.82074"
+ cy="-51.432213"
+ fx="570.82074"
+ fy="-51.432213"
+ r="9.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2645115,0,0,0.63225606,-723.01371,-20.409786)"
+ cx="571.18335"
+ cy="-56.290825"
+ fx="571.18335"
+ fy="-56.290825"
+ r="8.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9166362,0,0,0.49961033,-524.31592,-25.101494)"
+ cx="570.82074"
+ cy="-51.432213"
+ fx="570.82074"
+ fy="-51.432213"
+ r="9.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2645115,0,0,0.63225606,-723.01371,-20.409786)"
+ cx="571.18335"
+ cy="-56.290825"
+ fx="571.18335"
+ fy="-56.290825"
+ r="8.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient5009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9166362,0,0,0.49961033,-524.31592,-25.101494)"
+ cx="570.82074"
+ cy="-51.432213"
+ fx="570.82074"
+ fy="-51.432213"
+ r="9.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient4936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2645115,0,0,0.63225606,-723.01371,-20.409786)"
+ cx="571.18335"
+ cy="-56.290825"
+ fx="571.18335"
+ fy="-56.290825"
+ r="8.0071211" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="radialGradient4945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9166362,0,0,0.49961033,-524.31592,-25.101494)"
+ cx="570.82074"
+ cy="-51.432213"
+ fx="570.82074"
+ fy="-51.432213"
+ r="9.0071211" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908-3"
+ id="linearGradient5479"
+ gradientUnits="userSpaceOnUse"
+ x1="573"
+ y1="-55.032829"
+ x2="573"
+ y2="-45.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5481"
+ gradientUnits="userSpaceOnUse"
+ x1="577"
+ y1="-54.032829"
+ x2="577"
+ y2="-48.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-6"
+ id="linearGradient5483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(180,571.99977,-46.00031)"
+ x1="571.99951"
+ y1="-52.967789"
+ x2="572"
+ y2="-41.002605" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5485"
+ gradientUnits="userSpaceOnUse"
+ x1="578"
+ y1="-53.032829"
+ x2="578"
+ y2="-38.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="linearGradient5487"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99585"
+ y1="-41.306217"
+ x2="571.99585"
+ y2="-48.6875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908-3"
+ id="linearGradient5489"
+ gradientUnits="userSpaceOnUse"
+ x1="573"
+ y1="-55.032829"
+ x2="573"
+ y2="-45.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5491"
+ gradientUnits="userSpaceOnUse"
+ x1="577"
+ y1="-54.032829"
+ x2="577"
+ y2="-48.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-6"
+ id="linearGradient5493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(180,571.99977,-46.00031)"
+ x1="571.99951"
+ y1="-52.967789"
+ x2="572"
+ y2="-41.002605" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5495"
+ gradientUnits="userSpaceOnUse"
+ x1="578"
+ y1="-53.032829"
+ x2="578"
+ y2="-38.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="linearGradient5497"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99585"
+ y1="-41.306217"
+ x2="571.99585"
+ y2="-48.6875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4908-3"
+ id="linearGradient5499"
+ gradientUnits="userSpaceOnUse"
+ x1="573"
+ y1="-55.032829"
+ x2="573"
+ y2="-45.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5501"
+ gradientUnits="userSpaceOnUse"
+ x1="577"
+ y1="-54.032829"
+ x2="577"
+ y2="-48.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-6"
+ id="linearGradient5503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(180,571.99977,-46.00031)"
+ x1="571.99951"
+ y1="-52.967789"
+ x2="572"
+ y2="-41.002605" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11481-5"
+ id="linearGradient5505"
+ gradientUnits="userSpaceOnUse"
+ x1="578"
+ y1="-53.032829"
+ x2="578"
+ y2="-38.032829" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4613"
+ id="linearGradient5507"
+ gradientUnits="userSpaceOnUse"
+ x1="571.99585"
+ y1="-41.306217"
+ x2="571.99585"
+ y2="-48.6875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4989-6"
+ id="linearGradient5509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(180,571.99977,-46.00031)"
+ x1="571.99951"
+ y1="-52.967789"
+ x2="572"
+ y2="-41.002605" />
</defs>
<g
id="layer17"
@@ -1120,29 +1607,25 @@
fill="#eeeeec" />
<text
id="text4710"
- style="enable-background:new"
+ style="font-size:18.3010006px;line-height:0%;font-family:'Bitstream Vera Sans';display:inline;fill:#000000;enable-background:new"
xml:space="preserve"
font-size="18.301px"
display="inline"
y="-228.48639"
- x="45.970734"
- font-family="Bitstream Vera Sans"
- fill="#000000"><tspan
+ x="45.970734"><tspan
id="tspan4712"
x="45.970734"
y="-228.48639">places</tspan></text>
<text
id="text4714"
- style="enable-background:new"
+ style="font-weight:bold;font-size:18.3010006px;line-height:0%;font-family:'Droid Sans';display:inline;fill:#000000;enable-background:new"
line-height="125%"
font-weight="bold"
xml:space="preserve"
font-size="18.301px"
y="-228.48639"
x="166.9707"
- font-family="Droid Sans"
- display="inline"
- fill="#000000"><tspan
+ display="inline"><tspan
id="tspan4716"
x="166.9707"
y="-228.48639">sparkleshare</tspan></text>
@@ -1168,40 +1651,15 @@
<g
id="layer20">
<rect
- id="rect4885"
- opacity="0"
- height="24"
- width="24"
- y="-213"
- x="161" />
- <rect
id="rect4889"
- opacity="0"
- height="24"
- width="24"
- y="-213"
- x="41" />
- <rect
- id="rect4891"
- opacity="0"
- height="24"
- width="24"
- y="-213"
- x="71" />
- <rect
- id="rect4893"
- opacity="0"
- height="24"
- width="24"
- y="-213"
- x="101" />
- <rect
- id="rect4895"
- opacity="0"
height="24"
width="24"
- y="-213"
- x="131" />
+ y="-214"
+ x="41"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ style="opacity:0" />
<rect
id="rect4897"
opacity="0"
@@ -1357,152 +1815,6 @@
width="16"
y="39"
x="163" />
- <g
- id="g3367"
- opacity=".9"
- style="enable-background:new"
- fill-rule="evenodd"
- transform="matrix(.46656 0 0 .79230 -97.01 -265)">
- <path
- id="path3369"
- opacity=".5"
- d="m42.556 201h186.56c8.79 0 15.88 4.46 15.88 10s-7.0862 10-15.888 10h-186.56c-8.8021 0-15.888-4.46-15.888-10s7.0862-10 15.888-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4496)" />
- <path
- id="path3371"
- opacity=".3"
- style="enable-background:new"
- d="m30.157 201h211.35c8.3967 0 15.157 4.46 15.157 10s-6.7598 10-15.157 10h-211.35c-8.4 0-15.16-4.46-15.16-10s6.7598-10 15.157-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4508)" />
- </g>
- <g
- id="g3373"
- style="enable-background:new"
- transform="translate(-261,-390)">
- <path
- id="path3375"
- style="enable-background:new"
- d="m306.53 179.5c-0.57203 0.064-1.0035 0.54941-1 1.125v13.344c0.00006 0.62129 0.50371 1.1249 1.125 1.125h14.719c0.62129-0.00006 1.1249-0.50371 1.125-1.125v-11.312c-0.00006-0.62129-0.50371-1.1249-1.125-1.125h-6.8438c-0.3334 0-0.20853 0.0527-0.40625-0.21875l-0.96875-1.3438c-0.2098-0.29211-0.54661-0.46632-0.90625-0.46875h-5.5938c-0.0416-0.002-0.0834-0.002-0.125 0z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5089)"
- fill="url(#linearGradient5087)" />
- <path
- id="path3377"
- opacity=".4"
- style="enable-background:new"
- d="m306.62 180.44c-0.10325 0.0115-0.15688 0.0836-0.15625 0.1875v13.344c0.00001 0.11468 0.0728 0.18749 0.1875 0.1875h14.719c0.11468-0.00001 0.18749-0.0728 0.1875-0.1875v-11.312c-0.00001-0.11468-0.0728-0.18749-0.1875-0.1875h-6.8438c-0.0587 0-0.0805-0.001-0.15625 0-0.0757 0.001-0.29559 0.0325-0.5625-0.125-0.26691-0.15754-0.34468-0.32772-0.375-0.375-0.0303-0.0473-0.0322-0.0522-0.0625-0.0937l-0.96875-1.3438c-0.0355-0.0494-0.0954-0.0933-0.15625-0.0937h-5.5938c-0.0104 0.00017-0.0208 0.00017-0.0313 0l0.00005-0.0001z"
- stroke="url(#radialGradient5091)"
- fill="none" />
- <path
- id="path3381"
- opacity=".71595"
- style="enable-background:new"
- d="m250.06 476.75c-0.0458 1.3355-0.49131 2.357-1.2188 3.0625-0.72744 0.70545-1.7687 1.125-3.1875 1.125h-197.25c-1.4189 0-2.4805-0.44927-3.2188-1.1562-0.73826-0.70698-1.1869-1.7049-1.2188-3.0312v3c0.03187 1.3263 0.48049 2.3243 1.2188 3.0312 0.73826 0.70698 1.7998 1.1562 3.2188 1.1562h197.25c1.4188 0 2.4601-0.41955 3.1875-1.125 0.72744-0.70545 1.1729-1.727 1.2188-3.0625v-3z"
- fill-rule="evenodd"
- transform="matrix(.086612 0 0 .26364 301.19 67.064)"
- filter="url(#filter4375-3)"
- fill="url(#radialGradient5093)" />
- </g>
- <path
- id="path3634"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m49.54-204.51c0.5327 0 1.2151-1.0847 1.6478-1.6332 0.1341-0.20388 0.34688-0.35593 0.60228-0.35593h10.06l0.65038-0.0105v9.3335c0 3.2028-1.2901 3.677-1.6504 3.677h-15.699c-0.36031 0-1.6504-0.40781-1.6504-3.677v-7.3086l6.0396-0.0253z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5141)"
- fill="url(#linearGradient5139)" />
- <path
- id="path3636"
- opacity=".4"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m51.938-205.5c-0.17581 0.22664-0.44781 0.6386-0.78125 1.0312-0.17236 0.20297-0.35508 0.41053-0.59375 0.59375s-0.5515 0.375-1.0312 0.375h-4.6875c-0.20314 0-0.22418 0.0344-0.25 0.0625-0.0258 0.0281-0.0937 0.12531-0.0937 0.40625v5.8438c0 3.0049 1.0699 2.6875 0.65625 2.6875h15.688c-0.53644 0 0.65626 0.24559 0.65625-2.6875v-8.3125h-9.5625-0.00005z"
- stroke="url(#linearGradient5137)"
- fill="none" />
- <g
- id="g3441"
- opacity=".9"
- style="enable-background:new"
- fill-rule="evenodd"
- transform="matrix(.46656 0 0 .79230 -67.01 -265)">
- <path
- id="path3443"
- opacity=".5"
- d="m42.556 201h186.56c8.79 0 15.88 4.46 15.88 10s-7.0862 10-15.888 10h-186.56c-8.8021 0-15.888-4.46-15.888-10s7.0862-10 15.888-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4496)" />
- <path
- id="path3445"
- opacity=".3"
- style="enable-background:new"
- d="m30.157 201h211.35c8.3967 0 15.157 4.46 15.157 10s-6.7598 10-15.157 10h-211.35c-8.4 0-15.16-4.46-15.16-10s6.7598-10 15.157-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4508)" />
- </g>
- <g
- id="g3447"
- style="enable-background:new"
- transform="translate(-231,-390)">
- <path
- id="path3450"
- style="enable-background:new"
- d="m306.53 179.5c-0.57203 0.064-1.0035 0.54941-1 1.125v13.344c0.00006 0.62129 0.50371 1.1249 1.125 1.125h14.719c0.62129-0.00006 1.1249-0.50371 1.125-1.125v-11.312c-0.00006-0.62129-0.50371-1.1249-1.125-1.125h-6.8438c-0.3334 0-0.20853 0.0527-0.40625-0.21875l-0.96875-1.3438c-0.2098-0.29211-0.54661-0.46632-0.90625-0.46875h-5.5938c-0.0416-0.002-0.0834-0.002-0.125 0z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5089)"
- fill="url(#linearGradient5087)" />
- <path
- id="path3452"
- opacity=".4"
- style="enable-background:new"
- d="m306.62 180.44c-0.10325 0.0115-0.15688 0.0836-0.15625 0.1875v13.344c0.00001 0.11468 0.0728 0.18749 0.1875 0.1875h14.719c0.11468-0.00001 0.18749-0.0728 0.1875-0.1875v-11.312c-0.00001-0.11468-0.0728-0.18749-0.1875-0.1875h-6.8438c-0.0587 0-0.0805-0.001-0.15625 0-0.0757 0.001-0.29559 0.0325-0.5625-0.125-0.26691-0.15754-0.34468-0.32772-0.375-0.375-0.0303-0.0473-0.0322-0.0522-0.0625-0.0937l-0.96875-1.3438c-0.0355-0.0494-0.0954-0.0933-0.15625-0.0937h-5.5938c-0.0104 0.00017-0.0208 0.00017-0.0313 0l0.00005-0.0001z"
- stroke="url(#radialGradient5091)"
- fill="none" />
- <path
- id="path3454"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m305.85 185.49h4.6897c0.5327 0 1.2151-1.0847 1.6478-1.6332 0.1341-0.20388 0.34688-0.35593 0.60228-0.35593 3.5701 0.006 7.1406-0.0156 10.71 0.0141v9.309c0 3.2028-1.2901 3.677-1.6504 3.677h-15.699c-0.36031 0-1.6504-0.40781-1.6504-3.677v-7.3424s1.3498 0.009 1.3498 0.009v-0.00003z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5131)"
- fill="url(#linearGradient5129)" />
- <path
- id="path3456"
- opacity=".71595"
- style="enable-background:new"
- d="m250.06 476.75c-0.0458 1.3355-0.49131 2.357-1.2188 3.0625-0.72744 0.70545-1.7687 1.125-3.1875 1.125h-197.25c-1.4189 0-2.4805-0.44927-3.2188-1.1562-0.73826-0.70698-1.1869-1.7049-1.2188-3.0312v3c0.03187 1.3263 0.48049 2.3243 1.2188 3.0312 0.73826 0.70698 1.7998 1.1562 3.2188 1.1562h197.25c1.4188 0 2.4601-0.41955 3.1875-1.125 0.72744-0.70545 1.1729-1.727 1.2188-3.0625v-3z"
- fill-rule="evenodd"
- transform="matrix(.086612 0 0 .26364 301.19 67.064)"
- filter="url(#filter4375-3)"
- fill="url(#radialGradient5093)" />
- <path
- id="path3458"
- opacity=".4"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m312.94 184.5c-0.17581 0.22664-0.44781 0.6386-0.78125 1.0312-0.17236 0.20297-0.35508 0.41053-0.59375 0.59375s-0.5515 0.375-1.0312 0.375h-4.6875c-0.20314 0-0.22418 0.0344-0.25 0.0625-0.0258 0.0281-0.0937 0.12531-0.0937 0.40625v5.8438c0 3.0049 1.0699 2.6875 0.65625 2.6875h15.688c-0.53644 0 0.65626 0.24559 0.65625-2.6875v-8.3125h-9.5625-0.00005z"
- stroke="url(#linearGradient5135)"
- fill="none" />
- </g>
- <g
- id="g3460"
- stroke-linejoin="round"
- style="enable-background:new"
- transform="translate(-1827.7 -1029.1)"
- stroke-linecap="round"
- fill="none">
- <path
- id="path3462"
- style="enable-background:new"
- d="m1911 825.96c-0.1681 0.0217-0.3164 0.15386-0.3579 0.31842l-0.7155 2.1494c-0.019 0.0382-0.032 0.0777-0.039 0.11973-0.038-0.0191-0.078-0.0318-0.1196-0.0395h-2.1866c-0.1222 0-0.2415 0.0637-0.3181 0.15921-0.1612 0.18061-0.1208 0.50107 0.079 0.63685l1.7891 1.3136 0.038 0.19106-0.6757 2.1095c-0.094 0.32925 0.3466 0.66015 0.6361 0.47763l1.7889-1.3134h0.229l1.7891 1.3134c0.1556 0.1019 0.3785 0.0841 0.5167-0.0395 0.1171-0.10827 0.1659-0.28518 0.1196-0.4379l-0.6759-2.1095c-0.064-0.0127 0.025-0.12737 0.038-0.19105l1.7889-1.3136c0.2004-0.13577 0.2401-0.45623 0.079-0.63684-0.076-0.0955-0.1958-0.15526-0.318-0.15921h-2.2264c-0.042 0.0127-0.081 0.0204-0.1196 0.0395-0.013-0.042-0.02-0.0815-0.039-0.11973l-0.6759-2.1493c-0.02-0.0752-0.062-0.14546-0.1196-0.19908-0.084-0.0815-0.2016-0.1261-0.318-0.11973l0.014 0.00013-0.0006 0.00001z"
- stroke="#c56b0c" />
- <path
- id="path3464"
- style="enable-background:new"
- d="m1911 824.96c-0.1681 0.0217-0.3164 0.15386-0.3579 0.31842l-0.7155 2.1494c-0.019 0.0382-0.032 0.0777-0.039 0.11973-0.038-0.0191-0.078-0.0318-0.1196-0.0395h-2.1866c-0.1222 0-0.2415 0.0637-0.3181 0.15921-0.1612 0.18061-0.1208 0.50107 0.079 0.63685l1.7891 1.3136 0.038 0.19106-0.6757 2.1095c-0.094 0.32925 0.3466 0.66015 0.6361 0.47763l1.7889-1.3134h0.229l1.7891 1.3134c0.1556 0.1019 0.3785 0.0841 0.5167-0.0395 0.1171-0.10827 0.1659-0.28518 0.1196-0.4379l-0.6759-2.1095c-0.064-0.0127 0.025-0.12737 0.038-0.19105l1.7889-1.3136c0.2004-0.13577 0.2401-0.45623 0.079-0.63684-0.076-0.0955-0.1958-0.15526-0.318-0.15921h-2.2264c-0.042 0.0127-0.081 0.0204-0.1196 0.0395-0.013-0.042-0.02-0.0815-0.039-0.11973l-0.6759-2.1493c-0.02-0.0752-0.062-0.14546-0.1196-0.19908-0.084-0.0815-0.2016-0.1261-0.318-0.11973l0.014 0.00013-0.0006 0.00001z"
- stroke="#fde8d0" />
- </g>
<rect
id="rect12657-5"
style="color:#000000;enable-background:new"
@@ -1593,53 +1905,47 @@
fill="#dfdbd2" />
<flowRoot
id="flowRoot4826"
- opacity=".5"
- style="word-spacing:0px;letter-spacing:0px"
+ style="font-size:29.3560009px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000"
xml:space="preserve"
font-size="29.356px"
- transform="matrix(.34064 0 0 .34064 -133.68 -158.31)"
- line-height="125%"
- font-family="Liberation Sans"
- fill="#000000"><flowRegion
+ transform="matrix(0.34064,0,0,0.34064,-133.68,-158.31)"
+ line-height="125%"><flowRegion
id="flowRegion4828"><rect
id="rect4830"
- height="76.368"
- width="187.74"
+ height="76.367996"
+ width="187.74001"
y="200.95"
- x="497.1" /></flowRegion><flowPara
- id="flowPara4832">Ubuntu</flowPara></flowRoot> <flowRoot
+ x="497.10001" /></flowRegion><flowPara
+ id="flowPara4832"
+ style="font-size:29.3560009px;line-height:1.25">Ubuntu</flowPara></flowRoot> <flowRoot
id="flowRoot4834"
- opacity=".5"
- style="word-spacing:0px;letter-spacing:0px"
+ style="font-size:29.3560009px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000"
xml:space="preserve"
- transform="matrix(.34064 0 0 .34064 -133.68 -230.31)"
+ transform="matrix(0.34064,0,0,0.34064,-133.68,-230.31)"
line-height="125%"
- font-size="29.356px"
- font-family="Liberation Sans"
- fill="#000000"><flowRegion
+ font-size="29.356px"><flowRegion
id="flowRegion4836"><rect
id="rect4838"
height="102.32"
width="248.97"
y="200.95"
- x="497.1" /></flowRegion><flowPara
- id="flowPara4840">Mac</flowPara></flowRoot> <flowRoot
+ x="497.10001" /></flowRegion><flowPara
+ id="flowPara4840"
+ style="font-size:29.3560009px;line-height:1.25">Mac</flowPara></flowRoot> <flowRoot
id="flowRoot4842"
- opacity=".5"
- style="word-spacing:0px;letter-spacing:0px"
+ style="font-size:29.3560009px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000"
xml:space="preserve"
- transform="matrix(.34064 0 0 .34064 -133.68 -56.308)"
+ transform="matrix(0.34064,0,0,0.34064,-133.68,-56.308)"
line-height="125%"
- font-size="29.356px"
- font-family="Liberation Sans"
- fill="#000000"><flowRegion
+ font-size="29.356px"><flowRegion
id="flowRegion4844"><rect
id="rect4846"
- height="76.368"
+ height="76.367996"
width="240.58"
y="200.95"
- x="497.1" /></flowRegion><flowPara
- id="flowPara4848">Windows</flowPara></flowRoot> <path
+ x="497.10001" /></flowRegion><flowPara
+ id="flowPara4848"
+ style="font-size:29.3560009px;line-height:1.25">Windows</flowPara></flowRoot> <path
id="path6623"
opacity=".5"
style="enable-background:new"
@@ -1777,286 +2083,36 @@
id="path4627"
d="m173.07 45.031h-1.0719v3.9687h1.0719z"
fill="#626262" />
- <g
- id="g4633"
- opacity=".9"
- style="enable-background:new"
- fill-rule="evenodd"
- transform="matrix(.46656 0 0 .79230 -37.01 -265)">
- <path
- id="path4635"
- opacity=".5"
- d="m42.556 201h186.56c8.79 0 15.88 4.46 15.88 10s-7.0862 10-15.888 10h-186.56c-8.8021 0-15.888-4.46-15.888-10s7.0862-10 15.888-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4496)" />
- <path
- id="path4637"
- opacity=".3"
- style="enable-background:new"
- d="m30.157 201h211.35c8.3967 0 15.157 4.46 15.157 10s-6.7598 10-15.157 10h-211.35c-8.4 0-15.16-4.46-15.16-10s6.7598-10 15.157-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4508)" />
- </g>
- <g
- id="g4639"
- style="enable-background:new"
- transform="translate(-201,-390)">
- <path
- id="path4641"
- style="enable-background:new"
- d="m306.53 179.5c-0.57203 0.064-1.0035 0.54941-1 1.125v13.344c0.00006 0.62129 0.50371 1.1249 1.125 1.125h14.719c0.62129-0.00006 1.1249-0.50371 1.125-1.125v-11.312c-0.00006-0.62129-0.50371-1.1249-1.125-1.125h-6.8438c-0.3334 0-0.20853 0.0527-0.40625-0.21875l-0.96875-1.3438c-0.2098-0.29211-0.54661-0.46632-0.90625-0.46875h-5.5938c-0.0416-0.002-0.0834-0.002-0.125 0z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5089)"
- fill="url(#linearGradient5087)" />
- <path
- id="path4643"
- opacity=".4"
- style="enable-background:new"
- d="m306.62 180.44c-0.10325 0.0115-0.15688 0.0836-0.15625 0.1875v13.344c0.00001 0.11468 0.0728 0.18749 0.1875 0.1875h14.719c0.11468-0.00001 0.18749-0.0728 0.1875-0.1875v-11.312c-0.00001-0.11468-0.0728-0.18749-0.1875-0.1875h-6.8438c-0.0587 0-0.0805-0.001-0.15625 0-0.0757 0.001-0.29559 0.0325-0.5625-0.125-0.26691-0.15754-0.34468-0.32772-0.375-0.375-0.0303-0.0473-0.0322-0.0522-0.0625-0.0937l-0.96875-1.3438c-0.0355-0.0494-0.0954-0.0933-0.15625-0.0937h-5.5938c-0.0104 0.00017-0.0208 0.00017-0.0313 0l0.00005-0.0001z"
- stroke="url(#radialGradient5091)"
- fill="none" />
- <path
- id="path4645"
- opacity=".71595"
- style="enable-background:new"
- d="m250.06 476.75c-0.0458 1.3355-0.49131 2.357-1.2188 3.0625-0.72744 0.70545-1.7687 1.125-3.1875 1.125h-197.25c-1.4189 0-2.4805-0.44927-3.2188-1.1562-0.73826-0.70698-1.1869-1.7049-1.2188-3.0312v3c0.03187 1.3263 0.48049 2.3243 1.2188 3.0312 0.73826 0.70698 1.7998 1.1562 3.2188 1.1562h197.25c1.4188 0 2.4601-0.41955 3.1875-1.125 0.72744-0.70545 1.1729-1.727 1.2188-3.0625v-3z"
- fill-rule="evenodd"
- transform="matrix(.086612 0 0 .26364 301.19 67.064)"
- filter="url(#filter4375-3)"
- fill="url(#radialGradient5093)" />
- </g>
- <path
- id="path4647"
- stroke-linejoin="round"
- style="enable-background:new"
- fill="url(#linearGradient5111)"
- fill-rule="evenodd"
- stroke="url(#linearGradient5113)"
- d="m109.54-204.51c0.5327 0 1.2151-1.0847 1.6478-1.6332 0.1341-0.20388 0.34688-0.35593 0.60228-0.35593h10.06l0.65038-0.0105v9.3335c0 3.2028-1.2901 3.677-1.6504 3.677h-15.699c-0.36031 0-1.6504-0.40781-1.6504-3.677v-7.3086l6.0396-0.0253z" />
- <path
- id="path4655"
- opacity=".4"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m111.94-205.5c-0.17581 0.22664-0.44781 0.6386-0.78125 1.0312-0.17236 0.20297-0.35508 0.41053-0.59375 0.59375s-0.5515 0.375-1.0312 0.375h-4.6875c-0.20314 0-0.22418 0.0344-0.25 0.0625-0.0258 0.0281-0.0937 0.12531-0.0937 0.40625v5.8438c0 3.0049 1.0699 2.6875 0.65625 2.6875h15.688c-0.53644 0 0.65626 0.24559 0.65625-2.6875v-8.3125h-9.5625-0.00005z"
- stroke="url(#linearGradient5109)"
- fill="none" />
- <g
- id="g4671"
- opacity=".9"
- style="enable-background:new"
- fill-rule="evenodd"
- transform="matrix(.46656 0 0 .79230 -7.0098 -265)">
- <path
- id="path4673"
- opacity=".5"
- d="m42.556 201h186.56c8.79 0 15.88 4.46 15.88 10s-7.0862 10-15.888 10h-186.56c-8.8021 0-15.888-4.46-15.888-10s7.0862-10 15.888-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4496)" />
- <path
- id="path4675"
- opacity=".3"
- style="enable-background:new"
- d="m30.157 201h211.35c8.3967 0 15.157 4.46 15.157 10s-6.7598 10-15.157 10h-211.35c-8.4 0-15.16-4.46-15.16-10s6.7598-10 15.157-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4508)" />
- </g>
- <g
- id="g4677"
- style="enable-background:new"
- transform="translate(-171,-390)">
- <path
- id="path4679"
- style="enable-background:new"
- d="m306.53 179.5c-0.57203 0.064-1.0035 0.54941-1 1.125v13.344c0.00006 0.62129 0.50371 1.1249 1.125 1.125h14.719c0.62129-0.00006 1.1249-0.50371 1.125-1.125v-11.312c-0.00006-0.62129-0.50371-1.1249-1.125-1.125h-6.8438c-0.3334 0-0.20853 0.0527-0.40625-0.21875l-0.96875-1.3438c-0.2098-0.29211-0.54661-0.46632-0.90625-0.46875h-5.5938c-0.0416-0.002-0.0834-0.002-0.125 0z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5089)"
- fill="url(#linearGradient5087)" />
- <path
- id="path4681"
- opacity=".4"
- style="enable-background:new"
- d="m306.62 180.44c-0.10325 0.0115-0.15688 0.0836-0.15625 0.1875v13.344c0.00001 0.11468 0.0728 0.18749 0.1875 0.1875h14.719c0.11468-0.00001 0.18749-0.0728 0.1875-0.1875v-11.312c-0.00001-0.11468-0.0728-0.18749-0.1875-0.1875h-6.8438c-0.0587 0-0.0805-0.001-0.15625 0-0.0757 0.001-0.29559 0.0325-0.5625-0.125-0.26691-0.15754-0.34468-0.32772-0.375-0.375-0.0303-0.0473-0.0322-0.0522-0.0625-0.0937l-0.96875-1.3438c-0.0355-0.0494-0.0954-0.0933-0.15625-0.0937h-5.5938c-0.0104 0.00017-0.0208 0.00017-0.0313 0l0.00005-0.0001z"
- stroke="url(#radialGradient5091)"
- fill="none" />
- <path
- id="path4683"
- opacity=".71595"
- style="enable-background:new"
- d="m250.06 476.75c-0.0458 1.3355-0.49131 2.357-1.2188 3.0625-0.72744 0.70545-1.7687 1.125-3.1875 1.125h-197.25c-1.4189 0-2.4805-0.44927-3.2188-1.1562-0.73826-0.70698-1.1869-1.7049-1.2188-3.0312v3c0.03187 1.3263 0.48049 2.3243 1.2188 3.0312 0.73826 0.70698 1.7998 1.1562 3.2188 1.1562h197.25c1.4188 0 2.4601-0.41955 3.1875-1.125 0.72744-0.70545 1.1729-1.727 1.2188-3.0625v-3z"
- fill-rule="evenodd"
- transform="matrix(.086612 0 0 .26364 301.19 67.064)"
- filter="url(#filter4375-3)"
- fill="url(#radialGradient5093)" />
- </g>
- <path
- id="path4685"
- stroke-linejoin="round"
- style="enable-background:new"
- fill="url(#linearGradient5097)"
- fill-rule="evenodd"
- stroke="url(#linearGradient5099)"
- d="m139.54-204.51c0.5327 0 1.2151-1.0847 1.6478-1.6332 0.1341-0.20388 0.34688-0.35593 0.60228-0.35593h10.06l0.65038-0.0105v9.3335c0 3.2028-1.2901 3.677-1.6504 3.677h-15.699c-0.36031 0-1.6504-0.40781-1.6504-3.677v-7.3086l6.0396-0.0253z" />
- <path
- id="path4693"
- opacity=".4"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m141.94-205.5c-0.17581 0.22664-0.44781 0.6386-0.78125 1.0312-0.17236 0.20297-0.35508 0.41053-0.59375 0.59375s-0.5515 0.375-1.0312 0.375h-4.6875c-0.20314 0-0.22418 0.0344-0.25 0.0625-0.0258 0.0281-0.0937 0.12531-0.0937 0.40625v5.8438c0 3.0049 1.0699 2.6875 0.65625 2.6875h15.688c-0.53644 0 0.65626 0.24559 0.65625-2.6875v-8.3125h-9.5625-0.00005z"
- stroke="url(#linearGradient5095)"
- fill="none" />
- <g
- id="g4709"
- opacity=".9"
- style="enable-background:new"
- fill-rule="evenodd"
- transform="matrix(.46656 0 0 .79230 22.99 -265)">
- <path
- id="path4711"
- opacity=".5"
- d="m42.556 201h186.56c8.79 0 15.88 4.46 15.88 10s-7.0862 10-15.888 10h-186.56c-8.8021 0-15.888-4.46-15.888-10s7.0862-10 15.888-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4496)" />
- <path
- id="path4713"
- opacity=".3"
- style="enable-background:new"
- d="m30.157 201h211.35c8.3967 0 15.157 4.46 15.157 10s-6.7598 10-15.157 10h-211.35c-8.4 0-15.16-4.46-15.16-10s6.7598-10 15.157-10z"
- transform="matrix(.18370 0 0 .15777 296.62 56.633)"
- filter="url(#filter4508)" />
- </g>
- <g
- id="g4715"
- style="enable-background:new"
- transform="translate(-141,-390)">
- <path
- id="path4717"
- style="enable-background:new"
- d="m306.53 179.5c-0.57203 0.064-1.0035 0.54941-1 1.125v13.344c0.00006 0.62129 0.50371 1.1249 1.125 1.125h14.719c0.62129-0.00006 1.1249-0.50371 1.125-1.125v-11.312c-0.00006-0.62129-0.50371-1.1249-1.125-1.125h-6.8438c-0.3334 0-0.20853 0.0527-0.40625-0.21875l-0.96875-1.3438c-0.2098-0.29211-0.54661-0.46632-0.90625-0.46875h-5.5938c-0.0416-0.002-0.0834-0.002-0.125 0z"
- fill-rule="evenodd"
- stroke="url(#linearGradient5089)"
- fill="url(#linearGradient5087)" />
- <path
- id="path4719"
- opacity=".4"
- style="enable-background:new"
- d="m306.62 180.44c-0.10325 0.0115-0.15688 0.0836-0.15625 0.1875v13.344c0.00001 0.11468 0.0728 0.18749 0.1875 0.1875h14.719c0.11468-0.00001 0.18749-0.0728 0.1875-0.1875v-11.312c-0.00001-0.11468-0.0728-0.18749-0.1875-0.1875h-6.8438c-0.0587 0-0.0805-0.001-0.15625 0-0.0757 0.001-0.29559 0.0325-0.5625-0.125-0.26691-0.15754-0.34468-0.32772-0.375-0.375-0.0303-0.0473-0.0322-0.0522-0.0625-0.0937l-0.96875-1.3438c-0.0355-0.0494-0.0954-0.0933-0.15625-0.0937h-5.5938c-0.0104 0.00017-0.0208 0.00017-0.0313 0l0.00005-0.0001z"
- stroke="url(#radialGradient5091)"
- fill="none" />
- <path
- id="path4721"
- opacity=".71595"
- style="enable-background:new"
- d="m250.06 476.75c-0.0458 1.3355-0.49131 2.357-1.2188 3.0625-0.72744 0.70545-1.7687 1.125-3.1875 1.125h-197.25c-1.4189 0-2.4805-0.44927-3.2188-1.1562-0.73826-0.70698-1.1869-1.7049-1.2188-3.0312v3c0.03187 1.3263 0.48049 2.3243 1.2188 3.0312 0.73826 0.70698 1.7998 1.1562 3.2188 1.1562h197.25c1.4188 0 2.4601-0.41955 3.1875-1.125 0.72744-0.70545 1.1729-1.727 1.2188-3.0625v-3z"
- fill-rule="evenodd"
- transform="matrix(.086612 0 0 .26364 301.19 67.064)"
- filter="url(#filter4375-3)"
- fill="url(#radialGradient5093)" />
- </g>
- <path
- id="path4723"
- stroke-linejoin="round"
- style="enable-background:new"
- fill="url(#linearGradient5083)"
- fill-rule="evenodd"
- stroke="url(#linearGradient5085)"
- d="m169.54-204.51c0.5327 0 1.2151-1.0847 1.6478-1.6332 0.1341-0.20388 0.34688-0.35593 0.60228-0.35593h10.06l0.65038-0.0105v9.3335c0 3.2028-1.2901 3.677-1.6504 3.677h-15.699c-0.36031 0-1.6504-0.40781-1.6504-3.677v-7.3086l6.0396-0.0253z" />
- <g
- id="g4796"
- transform="translate(-260,-229)"
- fill="#fff">
- <path
- id="path4792"
- opacity=".59346"
- d="m433.02 25.996-4.0174 4h2v3h1.9861v-3z" />
- <path
- id="path4794"
- opacity=".87850"
- d="m434 33.996 4.0174-4h-2v-3h-1.9861v3z" />
- </g>
- <path
- id="path4731"
- opacity=".4"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m171.94-205.5c-0.17581 0.22664-0.44781 0.6386-0.78125 1.0312-0.17236 0.20297-0.35508 0.41053-0.59375 0.59375s-0.5515 0.375-1.0312 0.375h-4.6875c-0.20314 0-0.22418 0.0344-0.25 0.0625-0.0258 0.0281-0.0937 0.12531-0.0937 0.40625v5.8438c0 3.0049 1.0699 2.6875 0.65625 2.6875h15.688c-0.53644 0 0.65626 0.24559 0.65625-2.6875v-8.3125h-9.5625-0.00005z"
- stroke="url(#linearGradient5081)"
- fill="none" />
- <path
- id="path4768"
- d="m113.02-203-3.0174 4h2v4h1.9861v-4h2z"
- fill="#fde1c1" />
- <path
- id="path4749"
- d="m113.02-204-3.0174 4h2v4h1.9861v-4h2z"
- fill="#b75100" />
- <path
- id="path4774"
- d="m143.02-195-3.0174-4h2v-4h1.9861v4h2z"
- fill="#fff" />
- <path
- id="path4776"
- d="m143.02-196-3.0174-4h2v-4h1.9861v4h2z"
- fill="#b75100" />
- <g
- id="g4778"
- stroke-linejoin="round"
- style="enable-background:new"
- transform="translate(-1857.7 -1029.1)"
- stroke-linecap="round"
- fill="none">
- <path
- id="path4780"
- style="enable-background:new"
- d="m1911 825.96c-0.1681 0.0217-0.3164 0.15386-0.3579 0.31842l-0.7155 2.1494c-0.019 0.0382-0.032 0.0777-0.039 0.11973-0.038-0.0191-0.078-0.0318-0.1196-0.0395h-2.1866c-0.1222 0-0.2415 0.0637-0.3181 0.15921-0.1612 0.18061-0.1208 0.50107 0.079 0.63685l1.7891 1.3136 0.038 0.19106-0.6757 2.1095c-0.094 0.32925 0.3466 0.66015 0.6361 0.47763l1.7889-1.3134h0.229l1.7891 1.3134c0.1556 0.1019 0.3785 0.0841 0.5167-0.0395 0.1171-0.10827 0.1659-0.28518 0.1196-0.4379l-0.6759-2.1095c-0.064-0.0127 0.025-0.12737 0.038-0.19105l1.7889-1.3136c0.2004-0.13577 0.2401-0.45623 0.079-0.63684-0.076-0.0955-0.1958-0.15526-0.318-0.15921h-2.2264c-0.042 0.0127-0.081 0.0204-0.1196 0.0395-0.013-0.042-0.02-0.0815-0.039-0.11973l-0.6759-2.1493c-0.02-0.0752-0.062-0.14546-0.1196-0.19908-0.084-0.0815-0.2016-0.1261-0.318-0.11973l0.014 0.00013-0.0006 0.00001z"
- stroke="#c56b0c" />
- <path
- id="path4782"
- style="enable-background:new"
- d="m1911 824.96c-0.1681 0.0217-0.3164 0.15386-0.3579 0.31842l-0.7155 2.1494c-0.019 0.0382-0.032 0.0777-0.039 0.11973-0.038-0.0191-0.078-0.0318-0.1196-0.0395h-2.1866c-0.1222 0-0.2415 0.0637-0.3181 0.15921-0.1612 0.18061-0.1208 0.50107 0.079 0.63685l1.7891 1.3136 0.038 0.19106-0.6757 2.1095c-0.094 0.32925 0.3466 0.66015 0.6361 0.47763l1.7889-1.3134h0.229l1.7891 1.3134c0.1556 0.1019 0.3785 0.0841 0.5167-0.0395 0.1171-0.10827 0.1659-0.28518 0.1196-0.4379l-0.6759-2.1095c-0.064-0.0127 0.025-0.12737 0.038-0.19105l1.7889-1.3136c0.2004-0.13577 0.2401-0.45623 0.079-0.63684-0.076-0.0955-0.1958-0.15526-0.318-0.15921h-2.2264c-0.042 0.0127-0.081 0.0204-0.1196 0.0395-0.013-0.042-0.02-0.0815-0.039-0.11973l-0.6759-2.1493c-0.02-0.0752-0.062-0.14546-0.1196-0.19908-0.084-0.0815-0.2016-0.1261-0.318-0.11973l0.014 0.00013-0.0006 0.00001z"
- stroke="#fde8d0" />
- </g>
- <path
- id="path4786"
- d="m173.02-204-4.0174 4h2v3h1.9861v-3z"
- fill="#b75100" />
- <path
- id="path4790"
- d="m174-196 4.0174-4h-2v-3h-1.9861v3z"
- fill="#b75100" />
<flowRoot
id="flowRoot4800"
- style="word-spacing:0px;letter-spacing:0px"
+ style="font-weight:bold;font-size:35.22800064px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#000000"
font-weight="bold"
xml:space="preserve"
font-size="35.228px"
- transform="matrix(.34064 0 0 .34064 -132.68 -346.31)"
- line-height="125%"
- font-family="Liberation Sans"
- fill="#000000"><flowRegion
+ transform="matrix(0.34064,0,0,0.34064,-132.68,-346.31)"
+ line-height="125%"><flowRegion
id="flowRegion4802"><rect
id="rect4804"
height="102.32"
width="248.97"
y="200.95"
- x="497.1" /></flowRegion><flowPara
- id="flowPara4806">Status icons</flowPara></flowRoot> <flowRoot
+ x="497.10001" /></flowRegion><flowPara
+ id="flowPara4806"
+ style="font-size:35.22800064px;line-height:1.25">Status icons</flowPara></flowRoot> <flowRoot
id="flowRoot4808"
- opacity=".5"
- style="word-spacing:0px;letter-spacing:0px"
+ style="font-size:29.3560009px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000"
xml:space="preserve"
font-size="29.356px"
- transform="matrix(.34064 0 0 .34064 -133.68 -306.31)"
- line-height="125%"
- font-family="Liberation Sans"
- fill="#000000"><flowRegion
+ transform="matrix(0.34064,0,0,0.34064,-133.68,-306.31)"
+ line-height="125%"><flowRegion
id="flowRegion4810"><rect
id="rect4813"
- height="94.012"
- width="755.47"
+ height="94.012001"
+ width="755.46997"
y="200.95"
- x="497.1" /></flowRegion><flowPara
- id="flowPara4815">GNOME and legacy panels</flowPara></flowRoot> <path
+ x="497.10001" /></flowRegion><flowPara
+ id="flowPara4815"
+ style="font-size:29.3560009px;line-height:1.25">GNOME and legacy panels</flowPara></flowRoot> <path
id="path4837"
style="block-progression:tb;text-indent:0;color:#000000;enable-background:new;text-transform:none"
d="m74.469-33c-0.82205 0.092-1.4425 0.79783-1.4375 1.625v4.375h-0.5-0.5v0.5l-0.0312 5.5938c0 0.74984 0.1756 1.4368 0.5 1.9688 0.3244 0.5319 0.84196 0.9375 1.4688 0.9375h12.062c0.62679 0 1.1444-0.4056 1.4688-0.9375s0.5-1.2189 0.5-1.9688l0.0625-7.5938v-0.5h-0.5-0.5625v-0.34375l-0.0312-1.125v-0.5h-0.5-5.7188l-2.157-1.906-0.156-0.125h-0.1875-3.5625c-0.01-0.00046-0.0217 0.00031-0.0312 0-0.0385-0.001-0.0865-0.001-0.125 0h-0.0312-0.0312zm4.531 5h2l-0.25 5h-1.4688l-0.281-5zm0 6h2v2h-2v-2z"
@@ -2728,7 +2784,7 @@
transform="matrix(0.34064,0,0,0.34064,36.32,-306.31)"
font-size="29.356px"
xml:space="preserve"
- style="font-size:29.3560009px;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000;font-family:Liberation Sans"
+ style="font-size:29.3560009px;line-height:0.01%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;opacity:0.5;fill:#000000"
id="flowRoot8726"><flowRegion
id="flowRegion8728"><rect
x="497.10001"
@@ -2736,7 +2792,8 @@
width="755.46997"
height="94.012001"
id="rect8730" /></flowRegion><flowPara
- id="flowPara8732">GNOME 3</flowPara></flowRoot> <rect
+ id="flowPara8732"
+ style="font-size:29.3560009px;line-height:1.25">GNOME 3</flowPara></flowRoot> <rect
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/Users/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/process-syncing-error-48.png"
@@ -2902,7 +2959,7 @@
sodipodi:cy="522.125"
sodipodi:rx="28.5"
sodipodi:ry="28.5"
- d="m 654.5,522.125 a 28.5,28.5 0 1 1 -57,0 28.5,28.5 0 1 1 57,0 z"
+ d="m 654.5,522.125 a 28.5,28.5 0 0 1 -28.5,28.5 28.5,28.5 0 0 1 -28.5,-28.5 28.5,28.5 0 0 1 28.5,-28.5 28.5,28.5 0 0 1 28.5,28.5 z"
transform="matrix(0.3333316,0,0,0.1403497,525.83445,326.71987)" />
<path
sodipodi:type="arc"
@@ -2912,7 +2969,7 @@
sodipodi:cy="522.125"
sodipodi:rx="28.5"
sodipodi:ry="28.5"
- d="m 654.5,522.125 a 28.5,28.5 0 1 1 -57,0 28.5,28.5 0 1 1 57,0 z"
+ d="m 654.5,522.125 a 28.5,28.5 0 0 1 -28.5,28.5 28.5,28.5 0 0 1 -28.5,-28.5 28.5,28.5 0 0 1 28.5,-28.5 28.5,28.5 0 0 1 28.5,28.5 z"
transform="matrix(0.2280699,0,0,0.08771937,591.72828,354.69953)" />
<g
id="g10056">
@@ -2924,7 +2981,7 @@
sodipodi:cy="522.125"
sodipodi:rx="28.5"
sodipodi:ry="28.5"
- d="m 654.5,522.125 a 28.5,28.5 0 1 1 -57,0 28.5,28.5 0 1 1 57,0 z"
+ d="m 654.5,522.125 a 28.5,28.5 0 0 1 -28.5,28.5 28.5,28.5 0 0 1 -28.5,-28.5 28.5,28.5 0 0 1 28.5,-28.5 28.5,28.5 0 0 1 28.5,28.5 z"
transform="matrix(0.2807028,0,0,0.2807031,558.78002,246.93785)" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
@@ -2943,18 +3000,613 @@
sodipodi:cy="522.125"
sodipodi:rx="28.5"
sodipodi:ry="28.5"
- d="m 654.5,522.125 a 28.5,28.5 0 1 1 -57,0 28.5,28.5 0 1 1 57,0 z"
+ d="m 654.5,522.125 a 28.5,28.5 0 0 1 -28.5,28.5 28.5,28.5 0 0 1 -28.5,-28.5 28.5,28.5 0 0 1 28.5,-28.5 28.5,28.5 0 0 1 28.5,28.5 z"
transform="matrix(0.2456122,0,0,0.2456125,580.74671,265.25952)" />
</g>
</g>
+ <g
+ transform="translate(-527.01298,-154.04128)"
+ style="display:inline;enable-background:new"
+ id="g4403"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <g
+ id="g8701"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path11549"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5130);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5144);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ clip-path="none" />
+ <path
+ transform="translate(1.6e-6,-2.3766313e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0164655"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path7147"
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z" />
+ <path
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient8695);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ id="path11555"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(264,-223.96717)"
+ id="g11537">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792)"
+ id="rect11533"
+ width="18"
+ height="2"
+ x="307"
+ y="184"
+ ry="1"
+ rx="1" />
+ <rect
+ ry="2"
+ y="182"
+ x="306"
+ height="4"
+ width="20"
+ id="rect11535"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788)"
+ rx="2" />
+ </g>
+ <g
+ id="g8706"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient8478);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5067);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ id="path11553"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="translate(-1.9624896e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8474);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="path7002"
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path11557"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient8472);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 579.9016,-49.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ id="path5901"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5862"
+ d="m 579.9016,-50.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fde8d0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92400002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g4963"
+ transform="translate(-616.99902,-153.99597)">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect4902"
+ width="24"
+ height="24"
+ x="688"
+ y="-60"
+ inkscape:label="24x24"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-error.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96" />
+ <g
+ transform="translate(120)"
+ id="g4930">
+ <g
+ id="g4910"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path4904"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5479);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5481);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ clip-path="none" />
+ <path
+ transform="translate(1.6e-6,-2.3766313e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0164655"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4906"
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z" />
+ <path
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient4936);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ id="path4908"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(264,-223.96717)"
+ id="g4916">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792-2)"
+ id="rect4912"
+ width="18"
+ height="2"
+ x="307"
+ y="184"
+ ry="1"
+ rx="1" />
+ <rect
+ ry="2"
+ y="182"
+ x="306"
+ height="4"
+ width="20"
+ id="rect4914"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788-1)"
+ rx="2" />
+ </g>
+ <g
+ id="g4924"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5483);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5485);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ id="path4918"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="translate(-1.9624896e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5487);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="path4920"
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4922"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient4945);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c66f11;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 579.9016,-49.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ id="path4926"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4928"
+ d="m 579.9016,-50.683699 a 0.50005,0.50005 0 0 0 -0.01,0.002 0.50005,0.50005 0 0 0 -0.4531,0.390626 c -0.1198,0.119007 -0.3208,0.147869 -0.3652,0.324218 l -0.6639,1.996047 h -2.1093 c -0.2985,0 -0.5429,0.143479 -0.7149,0.351562 -0.3829,0.442206 -0.3052,1.080436 0.1797,1.410157 l -0.016,-0.0098 1.7031,1.25 -0.6562,2.042969 a 0.50005,0.50005 0 0 0 0,0.01563 c -0.1188,0.416168 0.095,0.793371 0.3652,0.996094 0.27,0.202722 0.6923,0.305072 1.0586,0.07422 a 0.50005,0.50005 0 0 0 0.029,-0.02148 l 1.7324,-1.271484 1.7324,1.271484 a 0.50005,0.50005 0 0 0 0.021,0.01563 c 0.3712,0.243327 0.8296,0.205796 1.1582,-0.08789 a 0.50005,0.50005 0 0 0 0.01,-0.0059 c 0.2728,-0.252577 0.3743,-0.61969 0.2656,-0.978516 a 0.50005,0.50005 0 0 0 0,-0.0078 l -0.6562,-2.042969 1.7031,-1.25 -0.016,0.0098 c 0.4862,-0.32933 0.5624,-0.968479 0.1797,-1.410157 -0.1765,-0.21343 -0.423,-0.342641 -0.6992,-0.351562 a 0.50005,0.50005 0 0 0 -0.016,0 h -2.1484 l -0.6348,-2.023438 v 0.01758 c -0.045,-0.164363 -0.132,-0.316265 -0.2617,-0.439453 -4e-4,-4.42e-4 0,4.4e-4 0,0 -0.086,-0.08255 -0.2134,-0.07584 -0.3203,-0.121094 a 0.50005,0.50005 0 0 0 -0.3438,-0.146485 v 0 h -0.012 a 0.50005,0.50005 0 0 0 -0.027,0.002 c 0,7.7e-5 0,-0.002 0,-0.002 z m 0.074,1.173829 0.6622,2.103515 a 0.50005,0.50005 0 0 0 0.012,0.0332 c 0,0 0.066,0.149815 0.1758,0.242188 0.1093,0.09237 0.2861,0.160156 0.4589,0.160156 h 2.2559 l -1.832,1.345703 a 0.50005,0.50005 0 0 0 -0.127,0.136719 c -0.014,0.01436 -0.01,0.0019 -0.029,0.0332 -0.011,0.01414 -0.01,0.04767 -0.02,0.06641 -0.049,0.08765 -0.103,0.200511 -0.098,0.308594 0.01,0.131193 0.048,0.219897 0.088,0.294922 l -0.035,-0.08203 0.6718,2.095703 -1.7636,-1.294922 a 0.50005,0.50005 0 0 0 -0.018,-0.01172 c 0,0 -0.099,-0.0705 -0.2422,-0.105469 -0.143,-0.03497 -0.4171,-0.02768 -0.6133,0.148438 l 0.037,-0.03125 -1.7617,1.294922 0.6699,-2.095703 -0.059,0.123046 c 0.062,-0.09339 0.1137,-0.211833 0.1192,-0.353515 0.01,-0.141682 -0.048,-0.287582 -0.1153,-0.378906 -0.1351,-0.182649 -0.3066,-0.222657 -0.3066,-0.222657 l 0.1406,0.07227 -1.832,-1.34375 h 2.2148 c 0.3598,-0.0011 0.5957,-0.326172 0.5957,-0.326172 a 0.50005,0.50005 0 0 0 0.047,-0.101562 z m 2.2286,6.880859 v 0.0098 -0.0078 c -5e-4,-0.0014 3e-4,-7.29e-4 0,-0.002 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#fde8d0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92400002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ transform="translate(-588,-154)"
+ id="g4995">
+ <rect
+ inkscape:label="24x24"
+ y="-60"
+ x="688"
+ height="24"
+ width="24"
+ id="rect4965-7"
+ style="display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-up.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96" />
+ <g
+ id="g4993"
+ transform="translate(120)">
+ <g
+ transform="translate(8,0.03283)"
+ style="display:inline;enable-background:new"
+ id="g4973">
+ <path
+ clip-path="none"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5489);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5491);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path4967"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z"
+ id="path4969"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ inkscape:radius="-1.0164655"
+ sodipodi:type="inkscape:offset"
+ transform="translate(1.6e-6,-2.3766313e-6)" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4971"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5001);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4979"
+ transform="translate(264,-223.96717)"
+ style="display:inline;opacity:0.572;enable-background:new">
+ <rect
+ rx="1"
+ ry="1"
+ y="184"
+ x="307"
+ height="2"
+ width="18"
+ id="rect4975-5"
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792-2)" />
+ <rect
+ rx="2"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788-1)"
+ id="rect4977"
+ width="20"
+ height="4"
+ x="306"
+ y="182"
+ ry="2" />
+ </g>
+ <g
+ transform="translate(8,0.03283)"
+ style="display:inline;enable-background:new"
+ id="g4987-9">
+ <path
+ sodipodi:nodetypes="cccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path4981"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5493);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5495);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
+ <path
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z"
+ id="path4983"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5497);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ inkscape:radius="-1"
+ sodipodi:type="inkscape:offset"
+ transform="translate(-1.9624896e-6)" />
+ <path
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient5009);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ id="path4985-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccc"
+ d="M 580.0174,-49 576,-44 h 7.9861 z"
+ id="path5236"
+ style="display:inline;fill:#c66f11;fill-opacity:1;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:#fde8d0;fill-opacity:1;enable-background:new"
+ id="path4749-3"
+ d="M 580.0174,-50 576,-45 h 7.9861 z"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ ry="1"
+ style="fill:#c66f11;fill-opacity:1;stroke-width:1.63299322"
+ y="-43"
+ x="578"
+ height="2"
+ width="4"
+ id="rect5234" />
+ <rect
+ id="rect5210"
+ width="4"
+ height="2"
+ x="578"
+ y="-44"
+ style="fill:#fde8d0;fill-opacity:1;stroke-width:1.63299322"
+ ry="1" />
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g5041"
+ transform="translate(-559,-154)">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect5011"
+ width="24"
+ height="24"
+ x="688"
+ y="-60"
+ inkscape:label="24x24"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-down.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96" />
+ <g
+ transform="translate(120)"
+ id="g5039">
+ <g
+ id="g5019"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path5013"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5499);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5501);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ clip-path="none" />
+ <path
+ transform="translate(1.6e-6,-2.3766313e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0164655"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path5015"
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z" />
+ <path
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5047);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ id="path5017"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(264,-223.96717)"
+ id="g5025">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792-2)"
+ id="rect5021"
+ width="18"
+ height="2"
+ x="307"
+ y="184"
+ ry="1"
+ rx="1" />
+ <rect
+ ry="2"
+ y="182"
+ x="306"
+ height="4"
+ width="20"
+ id="rect5023"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788-1)"
+ rx="2" />
+ </g>
+ <g
+ id="g5033"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5503);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5505);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ id="path5027"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="translate(-1.9624896e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5507);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="path5029"
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path5031"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient5055);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g5134"
+ transform="translate(-530.24353,-154.34531)">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect5104"
+ width="24"
+ height="24"
+ x="688.24353"
+ y="-59.65469"
+ inkscape:label="24x24"
+ inkscape:export-filename="/home/hbons/Projects/SparkleShare/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96" />
+ <g
+ transform="translate(120.24353,0.34531)"
+ id="g5132">
+ <g
+ id="g5112"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path5106"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5165);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5167);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 564.46875,-57.49151 c -0.5201,0.01563 -0.9484,0.459393 -0.9484,1.02276 L 563.49995,-41.5 h 17 l -0.0117,-13.05679 c 0,-0.49196 -0.40182,-0.96654 -0.93473,-0.96654 l -7.28464,0.0551 -1.68699,-2.02332 z"
+ clip-path="none" />
+ <path
+ transform="translate(1.6e-6,-2.3766313e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0164655"
+ inkscape:original="M 564.46875 -57.492188 C 563.94865 -57.476588 563.51953 -57.03212 563.51953 -56.46875 L 563.5 -41.5 L 580.5 -41.5 L 580.48828 -54.556641 C 580.48828 -55.048601 580.08564 -55.523437 579.55273 -55.523438 L 572.26953 -55.46875 L 570.58203 -57.492188 L 564.46875 -57.492188 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.06000001;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path5108"
+ d="m 564.5,-56.476562 c 0.0415,-0.0012 0.0352,-0.0394 0.0352,0.0078 a 1.0165672,1.0165672 0 0 1 0,0.002 l -0.0176,13.951172 h 14.9668 l -0.0117,-11.992187 -7.19532,0.05469 a 1.0165672,1.0165672 0 0 1 -0.78906,-0.365234 l -1.38281,-1.658203 z" />
+ <path
+ style="opacity:0.26300001;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5169);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="m 564.5,-56.5 h 5.61981 l 1.6748,2 H 579.5"
+ id="path5110"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ style="display:inline;opacity:0.572;enable-background:new"
+ transform="translate(264,-223.96717)"
+ id="g5118">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792-2)"
+ id="rect5114"
+ width="18"
+ height="2"
+ x="307"
+ y="184"
+ ry="1"
+ rx="1" />
+ <rect
+ ry="2"
+ y="182"
+ x="306"
+ height="4"
+ width="20"
+ id="rect5116"
+ style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5788-1)"
+ rx="2" />
+ </g>
+ <g
+ id="g5126"
+ style="display:inline;enable-background:new"
+ transform="translate(8,0.03283)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient5509);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5173);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="M 562.5,-39.99987 V -50 c -0.0111,-0.50823 0.5,-0.50056 0.5,-0.50056 l 4.5,-0.006 2,-1.99371 H 581 c 0,0 0.48895,-0.0188 0.5,0.50044 v 10.99969 c -0.0937,1.50001 -1.5,1.49987 -1.5,1.49987 h -16 c 0,0 -1.53125,-0.0311 -1.5,-1.49987 z"
+ id="path5120"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="translate(-1.9624896e-6)"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1"
+ inkscape:original="M 569.5 -52.5 L 567.5 -50.505859 L 563 -50.5 C 563 -50.5 562.4889 -50.50823 562.5 -50 L 562.5 -41 C 562.46875 -39.53123 564 -39.5 564 -39.5 L 580 -39.5 C 580 -39.5 581.4063 -39.49999 581.5 -41 L 581.5 -52 C 581.48895 -52.51924 581 -52.5 581 -52.5 L 569.5 -52.5 z "
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.23999999;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5175);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="path5122"
+ d="m 569.91602,-51.5 -1.70899,1.703125 a 1.0001,1.0001 0 0 1 -0.70508,0.291016 L 563.5,-49.5 v 8.5 a 1.0001,1.0001 0 0 1 0,0.02148 c -0.008,0.386958 0.0427,0.312601 0.18945,0.386719 0.14673,0.07412 0.33008,0.0918 0.33008,0.0918 H 580 c 0,0 0.12623,-0.0093 0.25586,-0.07617 0.12859,-0.06637 0.21595,-0.05389 0.24414,-0.482422 V -51.5 Z" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path5124"
+ d="m 580.5,-51.5 h -10.52072 l -2.00555,2 H 563.5"
+ style="opacity:0.68199978;fill:none;fill-rule:evenodd;stroke:url(#radialGradient5177);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g5159"
+ transform="translate(-653.50047,-111.99998)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5145"
+ style="opacity:0.7;fill:url(#radialGradient5161);stroke-width:1.01257634;enable-background:new"
+ d="m 747.51839,-80.485252 c 0,0.82843 -2.23863,1.50001 -5.00006,1.50001 -2.76143,0 -5.00007,-0.67157 -5.00007,-1.50001 0,-0.82843 2.23864,-1.50001 5.00007,-1.50001 2.76143,0 5.00006,0.67158 5.00006,1.50001 z" />
+ <g
+ style="enable-background:new"
+ id="g5157"
+ transform="translate(653.50094,112.00008)">
+ <path
+ d="m 89.005,-202.5 c -2.4868,0 -4.5,2.0133 -4.5,4.5 0,2.4867 2.0132,4.5 4.5,4.5 1.2126,0 2.3154,-0.4705 3.125,-1.25 0.21559,-0.54791 0.375,-1.3337 0.375,-2.4375 v -3.5938 c -0.82499,-1.0353 -2.0732,-1.7188 -3.5,-1.7188 z"
+ style="opacity:0.1;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;enable-background:new"
+ id="path5147"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="matrix(0.56285,0,0,0.56281,-324.41,-418.46)"
+ style="enable-background:new"
+ id="g5155">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.2807,0,0,0.2807,558.78,246.94)"
+ d="m 654.5,522.12 c 0,15.74 -12.76,28.5 -28.5,28.5 -15.74,0 -28.5,-12.76 -28.5,-28.5 0,-15.74 12.76,-28.5 28.5,-28.5 15.74,0 28.5,12.76 28.5,28.5 z"
+ style="fill:#ef2929;stroke:#cc0000;stroke-width:6.32959986;stroke-linecap:round;stroke-linejoin:round;enable-background:new"
+ id="path5149" />
+ <rect
+ x="729.16998"
+ y="391.72"
+ width="10.655"
+ height="3.5518"
+ ry="0.22199"
+ rx="0.16648"
+ style="fill:#ffffff;enable-background:new"
+ id="rect5151" />
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.21808,0,0,0.21807,597.98,279.64)"
+ d="m 654.5,522.12 c 0,15.74 -12.76,28.5 -28.5,28.5 -15.74,0 -28.5,-12.76 -28.5,-28.5 0,-15.74 12.76,-28.5 28.5,-28.5 15.74,0 28.5,12.76 28.5,28.5 z"
+ style="opacity:0.7;fill:none;stroke:url(#radialGradient5163);stroke-width:8.1473999;stroke-linecap:round;stroke-linejoin:round;enable-background:new"
+ id="path5153" />
+ </g>
+ </g>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:#c66f11;fill-opacity:1;enable-background:new"
+ id="path5238"
+ d="m 141.01741,-194.5 -4.0174,-5 h 7.9861 z"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 141.01741,-196 -4.0174,-5 h 7.9861 z"
+ id="path5240"
+ style="display:inline;fill:#fde8d0;fill-opacity:1;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ id="rect5242"
+ width="4"
+ height="2"
+ x="139"
+ y="201.00002"
+ style="display:inline;fill:#c66f11;fill-opacity:1;stroke-width:1.63299322;enable-background:new"
+ ry="1"
+ transform="scale(1,-1)" />
+ <rect
+ ry="1"
+ style="display:inline;fill:#fde8d0;fill-opacity:1;stroke-width:1.63299322;enable-background:new"
+ y="202.00002"
+ x="139"
+ height="2"
+ width="4"
+ id="rect5244"
+ transform="scale(1,-1)" />
+ <path
+ d="M 170.0174,-203 166,-199 h 2 v 3 h 1.9861 v -3 z"
+ id="path5298"
+ style="display:inline;fill:#c66f11;fill-opacity:1;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:#fde8d0;fill-opacity:1;enable-background:new"
+ id="path4786-1"
+ d="M 170.0174,-204 166,-200 h 2 v 3 h 1.9861 v -3 z" />
+ <path
+ d="m 170.9974,-195 4.0174,-4 h -2 v -3 h -1.9861 v 3 z"
+ id="path5300"
+ style="display:inline;fill:#c66f11;fill-opacity:1;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;fill:#fde8d0;fill-opacity:1;enable-background:new"
+ id="path4790-4"
+ d="m 170.9974,-196 4.0174,-4 h -2 v -3 h -1.9861 v 3 z" />
</g>
- <path
- id="path10114"
- opacity=".7"
- style="enable-background:new"
- d="m724.48 503.37c0 0.86647-2.0875 1.5689-4.6625 1.5689s-4.6625-0.70242-4.6625-1.5689 2.0875-1.5689 4.6625-1.5689 4.6625 0.70242 4.6625 1.5689z"
- transform="matrix(1.0724 0 0 .95609 -682.92 -673.76)"
- fill="url(#radialGradient5079)" />
<use
id="use3340"
style="enable-background:new"
@@ -2964,50 +3616,6 @@
width="500"
y="0"
x="0" />
- <path
- id="path10363-4"
- opacity=".1"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m89.005-202.5c-2.4868 0-4.5 2.0133-4.5 4.5s2.0132 4.5 4.5 4.5c1.2126 0 2.3154-0.4705 3.125-1.25 0.21559-0.54791 0.375-1.3337 0.375-2.4375v-3.5938c-0.82499-1.0353-2.0732-1.7188-3.5-1.7188z"
- fill-rule="evenodd"
- stroke="#000" />
- <g
- id="g10100"
- style="enable-background:new"
- transform="matrix(.56285 0 0 .56281 -324.41 -418.46)">
- <path
- id="path10102"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m654.5 522.12c0 15.74-12.76 28.5-28.5 28.5s-28.5-12.76-28.5-28.5 12.76-28.5 28.5-28.5 28.5 12.76 28.5 28.5z"
- transform="matrix(.28070 0 0 .28070 558.78 246.94)"
- stroke="#c00"
- stroke-linecap="round"
- stroke-width="6.3296"
- fill="#ef2929" />
- <rect
- id="rect10104"
- style="enable-background:new"
- rx=".16648"
- ry=".22199"
- height="3.5518"
- width="10.655"
- y="391.72"
- x="729.17"
- fill="#fff" />
- <path
- id="path10106"
- opacity=".7"
- stroke-linejoin="round"
- style="enable-background:new"
- d="m654.5 522.12c0 15.74-12.76 28.5-28.5 28.5s-28.5-12.76-28.5-28.5 12.76-28.5 28.5-28.5 28.5 12.76 28.5 28.5z"
- transform="matrix(.21808 0 0 .21807 597.98 279.64)"
- stroke="url(#radialGradient5077)"
- stroke-linecap="round"
- stroke-width="8.1474"
- fill="none" />
- </g>
<rect
id="rect6645"
rx=".98484"
diff --git a/SparkleShare/Common/Images/meson.build b/SparkleShare/Common/Images/meson.build
new file mode 100644
index 0000000..f5afcf7
--- /dev/null
+++ b/SparkleShare/Common/Images/meson.build
@@ -0,0 +1,11 @@
+image_files = ['tutorial-slide-1.png',
+ 'tutorial-slide-2.png',
+ 'side-splash.png',
+ 'about.png',
+ 'text-balloon.png',
+ 'user-icon-default.png']
+
+install_data(
+ sources: image_files,
+ install_dir: join_paths(install_dir, 'pixmaps'))
+
diff --git a/SparkleShare/Common/Makefile.am b/SparkleShare/Common/Makefile.am
deleted file mode 100644
index 8daf95b..0000000
--- a/SparkleShare/Common/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-SUBDIRS = HTML \
- Presets \
- Images
diff --git a/SparkleShare/Common/Presets/Makefile.am b/SparkleShare/Common/Presets/Makefile.am
deleted file mode 100644
index 40efbe9..0000000
--- a/SparkleShare/Common/Presets/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-dist_presets_DATA = \
- bitbucket.xml \
- github.xml \
- gitlab.xml \
- own-server.xml \
- planio.xml \
- github.png \
- gitlab.png \
- bitbucket.png \
- planio.png \
- own-server.png
-
-presetsdir = $(pkgdatadir)/presets/
-
-MAINTAINERCLEANFILES = \
- Makefile.in
-
diff --git a/SparkleShare/Common/Presets/meson.build b/SparkleShare/Common/Presets/meson.build
new file mode 100644
index 0000000..8885f44
--- /dev/null
+++ b/SparkleShare/Common/Presets/meson.build
@@ -0,0 +1,11 @@
+preset_files = ['github.xml', 'github.png',
+ 'gitlab.xml', 'gitlab.png',
+ 'bitbucket.xml', 'bitbucket.png',
+ 'planio.xml', 'planio.png',
+ 'own-server.xml', 'own-server.png'
+]
+
+install_data(
+ sources: preset_files,
+ install_dir: join_paths(install_dir, 'presets'))
+
diff --git a/SparkleShare/Common/SetupController.cs b/SparkleShare/Common/SetupController.cs
index 289bf1c..3e34173 100644
--- a/SparkleShare/Common/SetupController.cs
+++ b/SparkleShare/Common/SetupController.cs
@@ -346,8 +346,8 @@ namespace SparkleShare {
Logger.LogInfo ("Controller", "Added preset for " + uri.Host);
}
- } catch {
- Logger.LogInfo ("Controller", "Failed adding preset for " + uri.Host);
+ } catch (Exception e) {
+ Logger.LogInfo ("Controller", "Failed adding preset for " + uri.Host, e);
}
}
@@ -536,7 +536,6 @@ namespace SparkleShare {
string folder_name = Path.GetFileName (PreviousPath);
folder_name = folder_name.ReplaceUnderscoreWithSpace ();
- // TODO: Open SparkleShare/$HOST
SparkleShare.Controller.OpenSparkleShareFolder (folder_name);
FinishPageCompleted ();
}
@@ -561,7 +560,7 @@ namespace SparkleShare {
private bool IsValidEmail (string email)
{
- return new Regex (@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]+$", RegexOptions.IgnoreCase).IsMatch (email);
+ return email.Contains ("@");
}
}
}
diff --git a/SparkleShare/Common/SparkleShare.cs b/SparkleShare/Common/SparkleShare.cs
index 73f0c2f..8c7aa84 100644
--- a/SparkleShare/Common/SparkleShare.cs
+++ b/SparkleShare/Common/SparkleShare.cs
@@ -35,27 +35,8 @@ namespace SparkleShare {
#endif
public static void Main (string [] args)
{
- if (args.Length != 0 && (args [0].Equals ("help") || args [0].Equals ("version")) &&
- InstallationInfo.OperatingSystem != OS.Mac &&
- InstallationInfo.OperatingSystem != OS.Windows) {
-
- string n = Environment.NewLine;
-
- Console.WriteLine (n +
- "Share and collaborate by syncing with any Git repository instantly." + n +
- n +
- "Version: " + InstallationInfo.Version + n +
- "Copyright (C) 2010 Hylke Bons and others" + n +
- "This program comes with ABSOLUTELY NO WARRANTY." + n +
- n +
- "This is free software, and you are welcome to redistribute it" + n +
- "under certain conditions. Please read the GNU GPLv3 for details." + n);
-
- Environment.Exit (0);
- }
-
// Only allow one instance of SparkleShare (on Windows)
- if (!program_mutex.WaitOne (0, false)) {
+ if (!program_mutex.WaitOne (0, exitContext: false)) {
Console.WriteLine ("SparkleShare is already running.");
Environment.Exit (-1);
}
diff --git a/SparkleShare/Common/StatusIconController.cs b/SparkleShare/Common/StatusIconController.cs
index 40bb6ed..ba66b36 100644
--- a/SparkleShare/Common/StatusIconController.cs
+++ b/SparkleShare/Common/StatusIconController.cs
@@ -66,7 +66,7 @@ namespace SparkleShare {
}
if (IsPaused)
- return "Syncing Paused";
+ return "Paused";
if (HasError) {
switch (repo.Error) {
diff --git a/SparkleShare/Common/Translations/Makefile.in.in b/SparkleShare/Common/Translations/Makefile.in.in
deleted file mode 100644
index 06a8cfe..0000000
--- a/SparkleShare/Common/Translations/Makefile.in.in
+++ /dev/null
@@ -1,222 +0,0 @@
-# Makefile for program source directory in GNU NLS utilities package.
-# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-# Copyright (C) 2004-2008 Rodney Dawes <dobey.pwns@gmail.com>
-#
-# This file may be copied and used freely without restrictions. It may
-# be used in projects which are not available under a GNU Public License,
-# but which still want to provide support for the GNU gettext functionality.
-#
-# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
-# instead of PACKAGE and to look for po2tbl in ./ not in intl/
-#
-# - Modified by jacob berkman <jacob@ximian.com> to install
-# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
-#
-# - Modified by Rodney Dawes <dobey.pwns@gmail.com> for use with intltool
-#
-# We have the following line for use by intltoolize:
-# INTLTOOL_MAKEFILE
-
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-PACKAGE = @PACKAGE@
-VERSION = @VERSION@
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-top_builddir = @top_builddir@
-VPATH = @srcdir@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-datadir = @datadir@
-datarootdir = @datarootdir@
-libdir = @libdir@
-DATADIRNAME = @DATADIRNAME@
-itlocaledir = $(prefix)/$(DATADIRNAME)/locale
-subdir = po
-install_sh = @install_sh@
-# Automake >= 1.8 provides @mkdir_p@.
-# Until it can be supposed, use the safe fallback:
-mkdir_p = $(install_sh) -d
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-GMSGFMT = @GMSGFMT@
-MSGFMT = @MSGFMT@
-XGETTEXT = @XGETTEXT@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
-GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
-
-ALL_LINGUAS = @ALL_LINGUAS@
-
-PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
-
-USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
-
-USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
-
-POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
-
-DISTFILES = Makefile.in.in POTFILES.in $(POFILES)
-EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS
-
-POTFILES = \
-# This comment gets stripped out
-
-CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
-
-.SUFFIXES:
-.SUFFIXES: .po .pox .gmo .mo .msg .cat
-
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V))
-INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY))
-INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@;
-
-.po.pox:
- $(MAKE) $(GETTEXT_PACKAGE).pot
- $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
-
-.po.mo:
- $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $<
-
-.po.gmo:
- $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \
- && rm -f $$file && $(GMSGFMT) -o $$file $<
-
-.po.cat:
- sed -f ../intl/po2msg.sed < $< > $*.msg \
- && rm -f $@ && gencat $@ $*.msg
-
-
-all: all-@USE_NLS@
-
-all-yes: $(CATALOGS)
-all-no:
-
-$(GETTEXT_PACKAGE).pot: $(POTFILES)
- $(GENPOT)
-
-install: install-data
-install-data: install-data-@USE_NLS@
-install-data-no: all
-install-data-yes: all
- linguas="$(USE_LINGUAS)"; \
- for lang in $$linguas; do \
- dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
- $(mkdir_p) $$dir; \
- if test -r $$lang.gmo; then \
- $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
- echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
- else \
- $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
- echo "installing $(srcdir)/$$lang.gmo as" \
- "$$dir/$(GETTEXT_PACKAGE).mo"; \
- fi; \
- if test -r $$lang.gmo.m; then \
- $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
- echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
- else \
- if test -r $(srcdir)/$$lang.gmo.m ; then \
- $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
- $$dir/$(GETTEXT_PACKAGE).mo.m; \
- echo "installing $(srcdir)/$$lang.gmo.m as" \
- "$$dir/$(GETTEXT_PACKAGE).mo.m"; \
- else \
- true; \
- fi; \
- fi; \
- done
-
-# Empty stubs to satisfy archaic automake needs
-dvi info ctags tags CTAGS TAGS ID:
-
-# Define this as empty until I found a useful application.
-install-exec installcheck:
-
-uninstall:
- linguas="$(USE_LINGUAS)"; \
- for lang in $$linguas; do \
- rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
- rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
- done
-
-check: all $(GETTEXT_PACKAGE).pot
- rm -f missing notexist
- srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
- if [ -r missing -o -r notexist ]; then \
- exit 1; \
- fi
-
-mostlyclean:
- rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
- rm -f .intltool-merge-cache
-
-clean: mostlyclean
-
-distclean: clean
- rm -f Makefile Makefile.in POTFILES stamp-it
- rm -f *.mo *.msg *.cat *.cat.m *.gmo
-
-maintainer-clean: distclean
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
- rm -f Makefile.in.in
-
-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: $(DISTFILES)
- dists="$(DISTFILES)"; \
- extra_dists="$(EXTRA_DISTFILES)"; \
- for file in $$extra_dists; do \
- test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
- done; \
- for file in $$dists; do \
- test -f $$file || file="$(srcdir)/$$file"; \
- ln $$file $(distdir) 2> /dev/null \
- || cp -p $$file $(distdir); \
- done
-
-update-po: Makefile
- $(MAKE) $(GETTEXT_PACKAGE).pot
- tmpdir=`pwd`; \
- linguas="$(USE_LINGUAS)"; \
- for lang in $$linguas; do \
- echo "$$lang:"; \
- result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
- if $$result; then \
- if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
- rm -f $$tmpdir/$$lang.new.po; \
- else \
- if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
- :; \
- else \
- echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
- rm -f $$tmpdir/$$lang.new.po; \
- exit 1; \
- fi; \
- fi; \
- else \
- echo "msgmerge for $$lang.gmo failed!"; \
- rm -f $$tmpdir/$$lang.new.po; \
- fi; \
- done
-
-Makefile POTFILES: stamp-it
- @if test ! -f $@; then \
- rm -f stamp-it; \
- $(MAKE) stamp-it; \
- fi
-
-stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
- $(SHELL) ./config.status
-
-# Tell versions [3.59,3.63) of GNU make not to export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/SparkleShare/Linux/About.cs b/SparkleShare/Linux/About.cs
index f29b5bf..cb4e0cd 100755
--- a/SparkleShare/Linux/About.cs
+++ b/SparkleShare/Linux/About.cs
@@ -45,11 +45,11 @@ namespace SparkleShare {
Controller.WindowClosed ();
args.RetVal = true;
};
-
+
KeyPressEvent += delegate (object o, KeyPressEventArgs args) {
if (args.Event.Key == Gdk.Key.Escape ||
(args.Event.State == Gdk.ModifierType.ControlMask && args.Event.Key == Gdk.Key.w)) {
-
+
Controller.WindowClosed ();
}
};
@@ -80,10 +80,10 @@ namespace SparkleShare {
void CreateAbout ()
{
CssProvider window_css_provider = new CssProvider ();
- Image image = UserInterfaceHelpers.GetImage ("about.png");
+ string image_path = InstallationInfo.Directory + "/pixmaps/about.png";
window_css_provider.LoadFromData ("window, GtkWindow {" +
- " background-image: url(\"/app/share/sparkleshare/pixmaps/about.png\");" +
+ " background-image: url('" + image_path + "');" +
" background-repeat: no-repeat;" +
" background-position: left bottom;" +
"}");
@@ -104,7 +104,7 @@ namespace SparkleShare {
Xalign = 0, Xpad = 0
};
- if (InstallationInfo.Directory.StartsWith ("/app", StringComparison.InvariantCulture))
+ if (InstallationInfo.IsFlatpak)
version.Text += " (Flatpak)";
updates = new Label ("Checking for updates…") {
@@ -116,8 +116,8 @@ namespace SparkleShare {
Xalign = 0, Xpad = 0
};
- var license = new Label ("SparkleShare is Open Source and you’re free to use,\n" +
- "change, and share it under the GNU GPLv3") {
+ var license = new Label ("SparkleShare is Open Source and you’re free to\n" +
+ "use, change, and share it under the GNU GPLv3") {
Xalign = 0, Xpad = 0
};
@@ -137,7 +137,7 @@ namespace SparkleShare {
layout_vertical.PackStart (updates, false, false, 0);
layout_vertical.PackStart (copyright, false, false, 6);
layout_vertical.PackStart (license, false, false, 6);
- layout_vertical.PackStart (links_layout, false, false, 16);
+ layout_vertical.PackStart (links_layout, false, false, 6);
links_layout.PackStart (website_link, false, false, 0);
links_layout.PackStart (credits_link, false, false, 0);
@@ -151,13 +151,13 @@ namespace SparkleShare {
Add (layout_horizontal);
}
}
-
-
+
+
class Link : Label {
public Link (string label, string url)
{
- Markup = string.Format ("<a href=\"{0}\">{1}</a>", url, label);
+ Markup = string.Format ("<a href=\"{0}\">{1}</a>", url, label);
CanFocus = false;
CssProvider css_provider = new CssProvider ();
diff --git a/SparkleShare/Linux/Controller.cs b/SparkleShare/Linux/Controller.cs
index 5156a1b..51bb14f 100644
--- a/SparkleShare/Linux/Controller.cs
+++ b/SparkleShare/Linux/Controller.cs
@@ -23,14 +23,16 @@ using Gtk;
using Mono.Unix.Native;
using Sparkles;
+using Sparkles.Git;
namespace SparkleShare {
public class Controller : BaseController {
- public Controller (Configuration config)
- : base (config)
+ public Controller (Configuration config) : base (config)
{
+ if (InstallationInfo.IsFlatpak)
+ GitCommand.ExecPath = Path.Combine ("/app", "libexec", "git-core");
}
@@ -45,13 +47,13 @@ namespace SparkleShare {
public override void SetFolderIcon ()
{
- var gvfs_set_attribute = new Command ("gvfs-set-attribute", "\"" + Configuration.DefaultConfiguration.FoldersPath + "\" " +
+ var gio_set = new Command ("gio", "set \"" + Configuration.DefaultConfiguration.FoldersPath + "\" " +
"metadata::custom-icon-name org.sparkleshare.SparkleShare");
- gvfs_set_attribute.StartInfo.EnvironmentVariables ["XDG_DATA_HOME"] =
- Path.Combine (Config.HomePath, ".local", "share");
+ string XDG_DATA_HOME = Path.Combine (Config.HomePath, ".local", "share");
+ gio_set.StartInfo.EnvironmentVariables ["XDG_DATA_HOME"] = XDG_DATA_HOME;
- gvfs_set_attribute.StartAndWaitForExit ();
+ gio_set.StartAndWaitForExit ();
}
@@ -98,7 +100,10 @@ namespace SparkleShare {
public override void OpenFile (string path)
{
- Global.ShowUri (Gdk.Screen.Default, path);
+ if (InstallationInfo.IsFlatpak)
+ Global.ShowUri (Gdk.Screen.Default, path);
+ else
+ new Command ("xdg-open", string.Format ("\"{0}\"", path)).Start ();
}
@@ -136,5 +141,11 @@ namespace SparkleShare {
return Path.Combine (InstallationInfo.Directory, "presets");
}
}
+
+
+ public override void PlatformQuit ()
+ {
+ Environment.Exit (0);
+ }
}
}
diff --git a/SparkleShare/Linux/EventLog.cs b/SparkleShare/Linux/EventLog.cs
index b0c8b02..28ee613 100755
--- a/SparkleShare/Linux/EventLog.cs
+++ b/SparkleShare/Linux/EventLog.cs
@@ -48,11 +48,12 @@ namespace SparkleShare {
SetSizeRequest (480, 640);
Gdk.Rectangle monitor_0_rect = Gdk.Screen.Default.GetMonitorGeometry (0);
- pos_x = (int) (monitor_0_rect.Width * 0.61);
- pos_y = (int) (monitor_0_rect.Height * 0.5 - (HeightRequest * 0.5));
Resize (480, (int) (monitor_0_rect.Height * 0.8));
+ pos_x = (int) (monitor_0_rect.Width * 0.62);
+ pos_y = (int) ((monitor_0_rect.Height - (monitor_0_rect.Height * 0.8)) / 2);
+
this.size_label = new Label () { Xalign = 0, Markup = "<b>Size:</b> …" };
this.history_label = new Label () { Xalign = 0, Markup = "<b>History:</b> …" };
@@ -167,44 +168,34 @@ namespace SparkleShare {
html = html.Replace ("<!-- $a-hover-color -->", "#009ff8");
html = html.Replace ("<!-- $a-color -->", "#0085cf");
-
html = html.Replace ("<!-- $body-font-family -->", StyleContext.GetFont (StateFlags.Normal).Family);
html = html.Replace ("<!-- $body-font-size -->", (double) (StyleContext.GetFont (StateFlags.Normal).Size / 1024 + 3) + "px");
html = html.Replace ("<!-- $body-color -->", UserInterfaceHelpers.RGBAToHex (StyleContext.GetColor (StateFlags.Normal)));
-
- // TODO
- // html = html.Replace ("<!-- $body-background-color -->",
- // UserInterfaceHelpers.RGBAToHex (new TreeView ().StyleContext.GetStyleProperty ("background-color")));
-
+ html = html.Replace ("<!-- $body-background-color -->",UserInterfaceHelpers.RGBAToHex (new TreeView ().StyleContext.GetBackgroundColor (StateFlags.Normal)));
html = html.Replace ("<!-- $day-entry-header-font-size -->", (StyleContext.GetFont (StateFlags.Normal).Size / 1024 + 3) + "px");
- html = html.Replace ("<!-- $day-entry-header-background-color -->",
- UserInterfaceHelpers.RGBAToHex (StyleContext.GetBackgroundColor (StateFlags.Normal)));
-
+ html = html.Replace ("<!-- $day-entry-header-background-color -->", UserInterfaceHelpers.RGBAToHex (StyleContext.GetBackgroundColor (StateFlags.Normal)));
html = html.Replace ("<!-- $secondary-font-color -->", UserInterfaceHelpers.RGBAToHex (StyleContext.GetColor (StateFlags.Insensitive)));
-
html = html.Replace ("<!-- $small-color -->", UserInterfaceHelpers.RGBAToHex (StyleContext.GetColor (StateFlags.Insensitive)));
html = html.Replace ("<!-- $small-font-size -->", "90%");
-
html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path);
- html = html.Replace ("<!-- $document-added-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-added.png"));
- html = html.Replace ("<!-- $document-edited-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-edited.png"));
- html = html.Replace ("<!-- $document-deleted-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-deleted.png"));
- html = html.Replace ("<!-- $document-moved-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-moved.png"));
-
+ html = html.Replace ("<!-- $document-added-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-added.png"));
+ html = html.Replace ("<!-- $document-edited-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-edited.png"));
+ html = html.Replace ("<!-- $document-deleted-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-deleted.png"));
+ html = html.Replace ("<!-- $document-moved-background-image -->", "file://" + IO.Path.Combine (icons_path, "document-moved.png"));
+
this.spinner.Stop ();
this.scrolled_window.Remove (this.scrolled_window.Child);
- this.web_view.Dispose ();
- this.web_view = CreateWebView ();
this.web_view.LoadHtml (html, "file:///");
-
+
this.scrolled_window.Add (this.web_view);
this.content_wrapper.Remove (this.content_wrapper.Child);
this.content_wrapper.Add (this.scrolled_window);
+
this.scrolled_window.ShowAll ();
}
-
+
WebView CreateWebView ()
{
@@ -212,7 +203,7 @@ namespace SparkleShare {
web_view.Settings.EnablePlugins = false;
web_view.LinkClicked += Controller.LinkClicked;
-
+
return web_view;
}
@@ -230,13 +221,14 @@ namespace SparkleShare {
return false;
}
+ #pragma warning disable 0612
string uri = (decision as NavigationPolicyDecision).Request.Uri;
if (uri.Equals ("file:///")) {
decision.Use ();
return false;
}
-
+
LinkClicked (uri);
decision.Ignore ();
diff --git a/SparkleShare/Linux/Images/Makefile.am b/SparkleShare/Linux/Images/Makefile.am
deleted file mode 100755
index ebbcebc..0000000
--- a/SparkleShare/Linux/Images/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-SUBDIRS = icons
-
-dist_pixmaps_DATA = \
- tutorial-slide-3.png
-
-pixmapsdir = $(pkgdatadir)/pixmaps/
-
-MAINTAINERCLEANFILES = \
- Makefile.in
-
diff --git a/SparkleShare/Linux/Images/gnome-software-screenshot-1.jpg b/SparkleShare/Linux/Images/gnome-software-screenshot-1.jpg
new file mode 100644
index 0000000..7588896
--- /dev/null
+++ b/SparkleShare/Linux/Images/gnome-software-screenshot-1.jpg
Binary files differ
diff --git a/SparkleShare/Linux/Images/gnome-software-screenshot-2.jpg b/SparkleShare/Linux/Images/gnome-software-screenshot-2.jpg
new file mode 100644
index 0000000..e07bfa2
--- /dev/null
+++ b/SparkleShare/Linux/Images/gnome-software-screenshot-2.jpg
Binary files differ
diff --git a/SparkleShare/Linux/Images/gnome-software-screenshot-3.jpg b/SparkleShare/Linux/Images/gnome-software-screenshot-3.jpg
new file mode 100644
index 0000000..4634a45
--- /dev/null
+++ b/SparkleShare/Linux/Images/gnome-software-screenshot-3.jpg
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/Makefile.am b/SparkleShare/Linux/Images/icons/Makefile.am
deleted file mode 100755
index 7fccd42..0000000
--- a/SparkleShare/Linux/Images/icons/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-SUBDIRS = hicolor \
- ubuntu-mono-dark \
- ubuntu-mono-light
-
diff --git a/SparkleShare/Linux/Images/icons/hicolor/document-added-12.png b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-added.png
index 7c4c1bd..7c4c1bd 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/document-added-12.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-added.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/document-deleted-12.png b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-deleted.png
index 06f4291..06f4291 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/document-deleted-12.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-deleted.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/document-edited-12.png b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-edited.png
index c8b8f66..c8b8f66 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/document-edited-12.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-edited.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/document-moved-12.png b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-moved.png
index 9306514..9306514 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/document-moved-12.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/12x12/status/document-moved.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-16.png b/SparkleShare/Linux/Images/icons/hicolor/16x16/apps/org.sparkleshare.SparkleShare.png
index da499b9..da499b9 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-16.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/16x16/apps/org.sparkleshare.SparkleShare.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/list-point-16.png b/SparkleShare/Linux/Images/icons/hicolor/16x16/status/list-point.png
index fa89d31..fa89d31 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/list-point-16.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/16x16/status/list-point.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-working-22.png b/SparkleShare/Linux/Images/icons/hicolor/22x22/status/process-working.png
index 1b90a03..1b90a03 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/process-working-22.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/22x22/status/process-working.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png b/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png
new file mode 100644
index 0000000..59e9a73
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/24x24/apps/org.sparkleshare.SparkleShare.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-down.png b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-down.png
new file mode 100644
index 0000000..f7ccf45
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-down.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-error.png b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-error.png
new file mode 100755
index 0000000..3695942
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-error.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-up.png b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-up.png
new file mode 100644
index 0000000..5237f9d
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing-up.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing.png b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing.png
new file mode 100644
index 0000000..ed7f098
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/24x24/status/org.sparkleshare.SparkleShare-syncing.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-256.png b/SparkleShare/Linux/Images/icons/hicolor/256x256/apps/org.sparkleshare.SparkleShare.png
index b79a223..b79a223 100755
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-256.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/256x256/apps/org.sparkleshare.SparkleShare.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-48.png b/SparkleShare/Linux/Images/icons/hicolor/48x48/apps/org.sparkleshare.SparkleShare.png
index ed5013f..ed5013f 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-48.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/48x48/apps/org.sparkleshare.SparkleShare.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-48.png b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-down.png
index 8edbea1..8edbea1 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-48.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-down.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-48.png b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-error.png
index 95e6b5a..95e6b5a 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-48.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-error.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-48.png b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-up.png
index 95eeb03..95eeb03 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-48.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing-up.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-48.png b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing.png
index 46aef6a..46aef6a 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-48.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/48x48/status/org.sparkleshare.SparkleShare-syncing.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-512.png b/SparkleShare/Linux/Images/icons/hicolor/512x512/apps/org.sparkleshare.SparkleShare.png
index 7f100e7..7f100e7 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-512.png
+++ b/SparkleShare/Linux/Images/icons/hicolor/512x512/apps/org.sparkleshare.SparkleShare.png
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/Makefile.am b/SparkleShare/Linux/Images/icons/hicolor/Makefile.am
deleted file mode 100644
index aa9e46e..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-theme = hicolor
-app_themedir = $(pkgdatadir)/icons/$(theme)
-system_themedir = $(datadir)/icons/$(theme)
-
-system_theme_icons = \
- apps,org.sparkleshare.SparkleShare-16.png \
- apps,org.sparkleshare.SparkleShare-symbolic.svg \
- apps,org.sparkleshare.SparkleShare-22.png \
- apps,org.sparkleshare.SparkleShare-24.png \
- apps,org.sparkleshare.SparkleShare-32.png \
- apps,org.sparkleshare.SparkleShare-48.png \
- apps,org.sparkleshare.SparkleShare-256.png \
- apps,org.sparkleshare.SparkleShare-512.png
-
-app_theme_icons = \
- status,document-added-12.png \
- status,document-edited-12.png \
- status,document-deleted-12.png \
- status,document-moved-12.png \
- status,list-point-16.png \
- status,process-syncing-up-24.png \
- status,process-syncing-down-24.png \
- status,process-syncing-24.png \
- status,process-syncing-error-24.png \
- status,process-syncing-up-48.png \
- status,process-syncing-down-48.png \
- status,process-syncing-48.png \
- status,process-syncing-error-48.png
-
-install_icon_exec = $(top_srcdir)/build/icon-theme-installer \
- -t "$(theme)" \
- -s "$(srcdir)" \
- -d "x$(DESTDIR)" \
- -m "$(mkinstalldirs)" \
- -x "$(INSTALL_DATA)"
-
-install-data-local:
- @-$(install_icon_exec) -i -b "$(system_themedir)" $(system_theme_icons)
- @-$(install_icon_exec) -i -b "$(app_themedir)" $(app_theme_icons)
-
-uninstall-hook:
- @-$(install_icon_exec) -u -b "$(system_themedir)" $(system_theme_icons)
- @-$(install_icon_exec) -u -b "$(app_themedir)" $(app_theme_icons)
-
-MAINTAINERCLEANFILES = Makefile.in
-EXTRA_DIST = $(wildcard *.png *.svg)
-
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-22.png b/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-22.png
deleted file mode 100644
index a7445bd..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-22.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-24.png b/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-24.png
deleted file mode 100644
index 7c57122..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-32.png b/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-32.png
deleted file mode 100644
index 7c57122..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-32.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-24.png b/SparkleShare/Linux/Images/icons/hicolor/process-syncing-24.png
deleted file mode 100644
index 55b836b..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-24.png b/SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-24.png
deleted file mode 100644
index 384e259..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-down-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-24.png b/SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-24.png
deleted file mode 100755
index be9137e..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-error-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-24.png b/SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-24.png
deleted file mode 100644
index 955cd6c..0000000
--- a/SparkleShare/Linux/Images/icons/hicolor/process-syncing-up-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-symbolic.svg b/SparkleShare/Linux/Images/icons/hicolor/symbolic/apps/org.sparkleshare.SparkleShare-symbolic.svg
index cf8b194..cf8b194 100644
--- a/SparkleShare/Linux/Images/icons/hicolor/org.sparkleshare.SparkleShare-symbolic.svg
+++ b/SparkleShare/Linux/Images/icons/hicolor/symbolic/apps/org.sparkleshare.SparkleShare-symbolic.svg
diff --git a/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-down-symbolic.svg b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-down-symbolic.svg
new file mode 100644
index 0000000..369c78a
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-down-symbolic.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="SVGRoot"
+ sodipodi:docname="process-syncing-down-symbolic.svg"
+ inkscape:version="0.91+devel r14094">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.531812"
+ inkscape:cy="6.6741748"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4575"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1396"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:grid-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5794" />
+ </sodipodi:namedview>
+ <defs
+ id="defs5218" />
+ <metadata
+ id="metadata5221">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ transform="translate(19.99318,-4.4704621e-4)"
+ id="g4575">
+ <path
+ style="color:#000000;text-indent:0;text-transform:none;fill:#bebebe;enable-background:new"
+ d="M 7.7714844 0.99804688 L 7.7734375 1 C 7.0923875 1.18249 6.4982563 1.7146081 6.3476562 2.4238281 C 6.0411762 3.2857781 5.7868175 4.16535 5.4921875 5.03125 C 4.3730875 5.05615 3.2478125 4.9779719 2.1328125 5.0761719 C 0.9379125 5.3423119 0.3668975 7.1108219 1.3671875 7.9199219 C 2.1813575 8.6113319 3.0778875 9.19895 3.9296875 9.84375 C 3.6174175 10.94005 3.1764644 12.0057 2.9589844 13.125 C 2.8790844 14.418 4.6356781 15.417631 5.6425781 14.519531 C 6.4273681 13.952611 7.2083875 13.3807 7.9921875 12.8125 C 8.9258275 13.45599 9.7939435 14.200978 10.777344 14.767578 C 11.894344 15.257218 13.323941 14.125256 12.994141 12.916016 C 12.731511 11.878616 12.363097 10.86935 12.054688 9.84375 C 12.949936 9.15776 13.908259 8.5477344 14.755859 7.8027344 C 15.431419 7.0691644 15.180611 5.8674188 14.394531 5.3242188 C 13.689221 4.8604788 12.818391 5.08011 12.025391 5.03125 L 10.460938 5.03125 C 10.093227 3.9604499 9.7930125 2.8617937 9.3828125 1.8085938 C 9.2528125 1.3285938 8.4114844 0.99804687 7.7714844 0.99804688 z M 7 6 L 9 6 L 9 7 L 7 7 L 7 6 z M 5 8 L 11 8 L 8 11 L 5 8 z "
+ transform="translate(-19.99318,4.4704621e-4)"
+ id="path4553" />
+ </g>
+ </g>
+</svg>
diff --git a/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-error-symbolic.svg b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-error-symbolic.svg
new file mode 100644
index 0000000..eb24261
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-error-symbolic.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="SVGRoot"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
+ sodipodi:docname="process-syncing-error-symbolic.svg">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="8"
+ inkscape:cy="8"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="2493"
+ inkscape:window-height="1385"
+ inkscape:window-x="67"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:grid-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5794" />
+ </sodipodi:namedview>
+ <defs
+ id="defs5218" />
+ <metadata
+ id="metadata5221">
+ <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>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;text-indent:0;text-transform:none;fill:#bebebe;enable-background:new"
+ d="m 7.779297,0.998047 v 0.00195 C 7.098247,1.182487 6.506069,1.7146051 6.355469,2.4238251 6.048989,3.2857751 5.792677,4.165347 5.498047,5.031247 4.378947,5.056147 3.253672,4.977969 2.138672,5.076169 0.94377201,5.342309 0.37275701,7.1108189 1.373047,7.919919 c 0.81417,0.69141 1.7107,1.2790281 2.5625,1.9238281 -0.31227,1.0962999 -0.753223,2.1619499 -0.970703,3.2812499 -0.0799,1.293 1.678647,2.292631 2.685547,1.394531 0.78479,-0.56692 1.563856,-1.138831 2.347656,-1.707031 0.93364,0.64349 1.803709,1.388478 2.787109,1.955078 1.117,0.48964 2.544644,-0.642322 2.214844,-1.851562 -0.26263,-1.0374 -0.62909,-2.046666 -0.9375,-3.0722659 0.89525,-0.68599 1.853572,-1.2960156 2.701172,-2.0410156 0.67556,-0.7335701 0.424752,-1.9353158 -0.361328,-2.4785156 -0.70531,-0.46374 -1.576141,-0.2441088 -2.369141,-0.2929688 H 10.46875 c -0.36771,-1.0708 -0.669878,-2.1694562 -1.080078,-3.2226562 -0.13,-0.48 -0.969375,-0.8105469 -1.609375,-0.810547 z M 7,6 H 9 V 9.0000001 H 7 Z m 0,4 h 2 v 1 H 7 Z"
+ id="path4599" />
+ </g>
+</svg>
diff --git a/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-symbolic.svg b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-symbolic.svg
new file mode 100644
index 0000000..4a4b898
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-symbolic.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="SVGRoot"
+ sodipodi:docname="process-syncing-symbolic.svg"
+ inkscape:version="0.91+devel r14094">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="11.468044"
+ inkscape:cy="7.7124685"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4575"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1396"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:grid-bbox="true"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5794" />
+ </sodipodi:namedview>
+ <defs
+ id="defs5218" />
+ <metadata
+ id="metadata5221">
+ <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>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ transform="translate(19.99318,-4.4704621e-4)"
+ id="g4575">
+ <path
+ style="color:#000000;text-indent:0;text-transform:none;fill:#bebebe;enable-background:new"
+ d="M 7.7714844 0.99804688 L 7.7734375 1 C 7.0923875 1.18249 6.4982563 1.7146081 6.3476562 2.4238281 C 6.0411762 3.2857781 5.7868175 4.16535 5.4921875 5.03125 C 4.3730875 5.05615 3.2478125 4.9779719 2.1328125 5.0761719 C 0.9379125 5.3423119 0.3668975 7.1108219 1.3671875 7.9199219 C 2.1813575 8.6113319 3.0778875 9.19895 3.9296875 9.84375 C 3.6174175 10.94005 3.1764644 12.0057 2.9589844 13.125 C 2.8790844 14.418 4.6356781 15.417631 5.6425781 14.519531 C 6.4273681 13.952611 7.2083875 13.3807 7.9921875 12.8125 C 8.9258275 13.45599 9.7939435 14.200978 10.777344 14.767578 C 11.894344 15.257218 13.323941 14.125256 12.994141 12.916016 C 12.731511 11.878616 12.363097 10.86935 12.054688 9.84375 C 12.949936 9.15776 13.908259 8.5477344 14.755859 7.8027344 C 15.431419 7.0691644 15.180611 5.8674188 14.394531 5.3242188 C 13.689221 4.8604788 12.818391 5.08011 12.025391 5.03125 L 10.460938 5.03125 C 10.093227 3.9604499 9.7930125 2.8617937 9.3828125 1.8085938 C 9.2528125 1.3285938 8.4114844 0.99804687 7.7714844 0.99804688 z M 8 6 L 10 8 L 6 8 L 8 6 z M 6 9 L 10 9 L 8 11 L 6 9 z "
+ transform="translate(-19.99318,4.4704621e-4)"
+ id="path4553" />
+ </g>
+ </g>
+</svg>
diff --git a/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-up-symbolic.svg b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-up-symbolic.svg
new file mode 100644
index 0000000..547e09b
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/hicolor/symbolic/status/org.sparkleshare.SparkleShare-syncing-up-symbolic.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<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"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="SVGRoot"
+ sodipodi:docname="process-syncing-up-symbolic.svg"
+ inkscape:version="0.91+devel r14094">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="3.531812"
+ inkscape:cy="6.6741748"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4575"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1396"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:grid-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5794" />
+ </sodipodi:namedview>
+ <defs
+ id="defs5218" />
+ <metadata
+ id="metadata5221">
+ <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>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ transform="translate(19.99318,-4.4704621e-4)"
+ id="g4575">
+ <path
+ style="color:#000000;text-indent:0;text-transform:none;fill:#bebebe;enable-background:new"
+ d="M 7.7714844 0.99804688 L 7.7734375 1 C 7.0923875 1.18249 6.4982563 1.7146081 6.3476562 2.4238281 C 6.0411762 3.2857781 5.7868175 4.16535 5.4921875 5.03125 C 4.3730875 5.05615 3.2478125 4.9779719 2.1328125 5.0761719 C 0.9379125 5.3423119 0.3668975 7.1108219 1.3671875 7.9199219 C 2.1813575 8.6113319 3.0778875 9.19895 3.9296875 9.84375 C 3.6174175 10.94005 3.1764644 12.0057 2.9589844 13.125 C 2.8790844 14.418 4.6356781 15.417631 5.6425781 14.519531 C 6.4273681 13.952611 7.2083875 13.3807 7.9921875 12.8125 C 8.9258275 13.45599 9.7939435 14.200978 10.777344 14.767578 C 11.894344 15.257218 13.323941 14.125256 12.994141 12.916016 C 12.731511 11.878616 12.363097 10.86935 12.054688 9.84375 C 12.949936 9.15776 13.908259 8.5477344 14.755859 7.8027344 C 15.431419 7.0691644 15.180611 5.8674188 14.394531 5.3242188 C 13.689221 4.8604788 12.818391 5.08011 12.025391 5.03125 L 10.460938 5.03125 C 10.093227 3.9604499 9.7930125 2.8617937 9.3828125 1.8085938 C 9.2528125 1.3285938 8.4114844 0.99804687 7.7714844 0.99804688 z M 8 6 L 11 9 L 5 9 L 8 6 z M 7 10 L 9 10 L 9 11 L 7 11 L 7 10 z "
+ transform="translate(-19.99318,4.4704621e-4)"
+ id="path4553" />
+ </g>
+ </g>
+</svg>
diff --git a/SparkleShare/Linux/Images/icons/meson.build b/SparkleShare/Linux/Images/icons/meson.build
new file mode 100644
index 0000000..422bda5
--- /dev/null
+++ b/SparkleShare/Linux/Images/icons/meson.build
@@ -0,0 +1,67 @@
+# Install app icons in system theme
+theme_dir = join_paths(get_option('prefix'), 'share', 'icons', 'hicolor')
+icon_sizes = ['16', '24', '48', '256', '512']
+app_icon_name = 'org.sparkleshare.SparkleShare'
+
+foreach size : icon_sizes
+ icon_dir = join_paths(size + 'x' + size, 'apps')
+
+ install_data(
+ sources: join_paths('hicolor', icon_dir, app_icon_name + '.png'),
+ install_dir: join_paths(theme_dir, icon_dir))
+endforeach
+
+install_data(
+ sources: join_paths('hicolor', 'symbolic', 'apps', app_icon_name + '-symbolic.svg'),
+ install_dir: join_paths(theme_dir, 'symbolic', 'apps'))
+
+
+# Install the status icons
+status_icons = ['syncing',
+ 'syncing-up',
+ 'syncing-down',
+ 'syncing-error']
+
+foreach icon : status_icons
+ install_data(
+ sources: join_paths('hicolor', '24x24', 'status', app_icon_name + '-' + icon + '.png'),
+ install_dir: join_paths(theme_dir, '24x24', 'apps'))
+
+ install_data(
+ sources: join_paths('hicolor', '48x48', 'status', app_icon_name + '-' + icon + '.png'),
+ install_dir: join_paths(theme_dir, '48x48', 'apps'))
+
+ install_data(
+ sources: join_paths('hicolor', 'symbolic', 'status', app_icon_name + '-' + icon + '-symbolic.svg'),
+ install_dir: join_paths(theme_dir, 'symbolic', 'apps'))
+endforeach
+
+
+# Install other icons in app theme
+app_theme_dir = join_paths(install_dir, 'icons', 'hicolor')
+category = 'status'
+
+size = '12'
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'document-added.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'document-edited.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'document-deleted.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'document-moved.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
+size = '16'
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'list-point.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
+size = '22'
+
+install_data(sources: join_paths('hicolor', size + 'x' + size, category, 'process-working.png'),
+ install_dir: join_paths(app_theme_dir, size + 'x' + size, category))
+
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/Makefile.am b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/Makefile.am
deleted file mode 100644
index 42b3e74..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/Makefile.am
+++ /dev/null
@@ -1,26 +0,0 @@
-dark_theme = ubuntu-mono-dark
-dark_themedir = /usr/share/icons/$(dark_theme)
-
-dark_theme_icons = \
- status,process-syncing-idle-24.png \
- status,process-syncing-up-24.png \
- status,process-syncing-down-24.png \
- status,process-syncing-24.png \
- status,process-syncing-error-24.png
-
-install_icon_exec = $(top_srcdir)/build/icon-theme-installer \
- -t "$(dark_theme)" \
- -s "$(srcdir)" \
- -d "x$(DESTDIR)" \
- -m "$(mkinstalldirs)" \
- -x "$(INSTALL_DATA)"
-
-install-data-local:
- @-$(install_icon_exec) -i -b "$(dark_themedir)" $(dark_theme_icons)
-
-uninstall-hook:
- @-$(install_icon_exec) -u -b "$(dark_themedir)" $(dark_theme_icons)
-
-MAINTAINERCLEANFILES = Makefile.in
-EXTRA_DIST = $(wildcard *.png *.svg)
-
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-24.png
deleted file mode 100644
index 3cb78b5..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-down-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-down-24.png
deleted file mode 100644
index 6a00865..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-down-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-error-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-error-24.png
deleted file mode 100644
index cfe5261..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-error-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-idle-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-idle-24.png
deleted file mode 100644
index 32da58b..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-idle-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-up-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-up-24.png
deleted file mode 100644
index 6f129a6..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-dark/process-syncing-up-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/Makefile.am b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/Makefile.am
deleted file mode 100644
index a4e77c8..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-light_theme = ubuntu-mono-light
-light_themedir = /usr/share/icons/$(light_theme)
-
-light_theme_icons = \
- status,process-syncing-idle-24.png \
- status,process-syncing-up-24.png \
- status,process-syncing-down-24.png \
- status,process-syncing-24.png \
- status,process-syncing-error-24.png
-
-install_icon_exec = $(top_srcdir)/build/icon-theme-installer \
- -t "$(light_theme)" \
- -s "$(srcdir)" \
- -d "x$(DESTDIR)" \
- -m "$(mkinstalldirs)" \
- -x "$(INSTALL_DATA)"
-
-install-data-local:
- @-$(install_icon_exec) -i -b "$(light_themedir)" $(light_theme_icons)
-
-uninstall-hook:
- @-$(install_icon_exec) -u -b "$(light_themedir)" $(light_theme_icons)
-
-MAINTAINERCLEANFILES = Makefile.in
-EXTRA_DIST = $(wildcard *.png *.svg)
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-24.png
deleted file mode 100644
index 59df796..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-down-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-down-24.png
deleted file mode 100644
index 141243b..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-down-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-error-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-error-24.png
deleted file mode 100644
index 1f2dab5..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-error-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-idle-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-idle-24.png
deleted file mode 100644
index b0fa246..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-idle-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-up-24.png b/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-up-24.png
deleted file mode 100644
index 79d5084..0000000
--- a/SparkleShare/Linux/Images/icons/ubuntu-mono-light/process-syncing-up-24.png
+++ /dev/null
Binary files differ
diff --git a/SparkleShare/Linux/Images/meson.build b/SparkleShare/Linux/Images/meson.build
new file mode 100644
index 0000000..b015707
--- /dev/null
+++ b/SparkleShare/Linux/Images/meson.build
@@ -0,0 +1,6 @@
+image_files = ['tutorial-slide-3.png']
+
+install_data(
+ sources: image_files,
+ install_dir: join_paths(install_dir, 'pixmaps'))
+
diff --git a/SparkleShare/Linux/Makefile.am b/SparkleShare/Linux/Makefile.am
deleted file mode 100644
index f56def6..0000000
--- a/SparkleShare/Linux/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
-SUBDIRS = Images
-
-ASSEMBLY = SparkleShare
-TARGET = exe
-
-LINK = $(REF_SPARKLESHARE) $(NOTIFY_SHARP_LIBS) $(WEBKITGTK_SHARP_LIBS)
-
-if HAVE_APP_INDICATOR
-BUILD_DEFINES = "-define:HAVE_APP_INDICATOR"
-endif
-
-SOURCES = \
- ../Common/SparkleShare.cs \
- ../Common/AboutController.cs \
- ../Common/Avatars.cs \
- ../Common/BubblesController.cs \
- ../Common/BaseController.cs \
- ../Common/EventLogController.cs \
- ../Common/NoteController.cs \
- ../Common/SetupController.cs \
- ../Common/StatusIconController.cs \
- About.cs \
- Bubbles.cs \
- EventLog.cs \
- Note.cs \
- Setup.cs \
- SetupWindow.cs \
- StatusIcon.cs \
- UserInterface.cs \
- UserInterfaceHelpers.cs \
- Controller.cs
-
-include $(top_srcdir)/build/build.mk
-
-bin_SCRIPTS = sparkleshare
-
-Applicationsdir = $(datadir)/applications
-dist_Applications_DATA = \
- org.sparkleshare.SparkleShare.desktop \
- org.sparkleshare.SparkleShare.Invites.desktop \
- SparkleShare.Autostart.desktop
-
-install-data-hook:
- test -f $(datadir)/applications/defaults.list && \
- test -z $(DESTDIR) && update-desktop-database $(datadir)/applications || :
-
diff --git a/SparkleShare/Linux/Note.cs b/SparkleShare/Linux/Note.cs
index e4ccd29..6fe8187 100644
--- a/SparkleShare/Linux/Note.cs
+++ b/SparkleShare/Linux/Note.cs
@@ -15,6 +15,7 @@
// along with this program. If not, see (http://www.gnu.org/licenses/).
+using System.IO;
using Gtk;
namespace SparkleShare {
@@ -40,11 +41,11 @@ namespace SparkleShare {
Controller.WindowClosed ();
args.RetVal = true;
};
-
+
KeyPressEvent += delegate (object o, KeyPressEventArgs args) {
if (args.Event.Key == Gdk.Key.Escape ||
(args.Event.State == Gdk.ModifierType.ControlMask && args.Event.Key == Gdk.Key.w)) {
-
+
Controller.WindowClosed ();
}
};
@@ -55,6 +56,9 @@ namespace SparkleShare {
Controller.ShowWindowEvent += delegate {
Application.Invoke (delegate {
+ if (Child != null)
+ Remove (Child);
+
CreateNote ();
ShowAll ();
Present ();
@@ -64,14 +68,17 @@ namespace SparkleShare {
Controller.UpdateTitleEvent += delegate (string title) {
Application.Invoke (delegate { Title = title; });
};
-
- CreateNote ();
}
private void CreateNote ()
{
- var user_image = new Image (Controller.AvatarFilePath);
+ Image user_image;
+
+ if (File.Exists (Controller.AvatarFilePath))
+ user_image = new Image (Controller.AvatarFilePath);
+ else
+ user_image = UserInterfaceHelpers.GetImage ("user-icon-default.png");
/* TODO: Style the entry neatly, multiple lines, and add placeholder text
string balloon_image_path = new string [] { UserInterface.AssetsPath, "pixmaps", "text-balloon.png" }.Combine ();
@@ -96,8 +103,9 @@ namespace SparkleShare {
var cancel_button = new Button ("Cancel");
- var sync_button = new Button ("Sync"); // TODO: Make default button
- sync_button.CanDefault = true;
+ var sync_button = new Button ("Sync") { CanDefault = true };
+
+ sync_button.StyleContext.AddClass ("suggested-action");
cancel_button.Clicked += delegate { Controller.CancelClicked (); };
sync_button.Clicked += delegate { Controller.SyncClicked (balloon.Buffer.Text); };
@@ -136,4 +144,3 @@ namespace SparkleShare {
}
}
}
-
diff --git a/SparkleShare/Linux/README.md b/SparkleShare/Linux/README.md
index 197fec0..6b41075 100644
--- a/SparkleShare/Linux/README.md
+++ b/SparkleShare/Linux/README.md
@@ -1,96 +1,119 @@
# SparkleShare for Linux
-To run SparkleShare, you'll need these packages:
-
-```
-curl
-git >= 2.3
-git-lfs >= 1.3.0
-gtk-sharp3
-gvfs
-mono-core >= 4.0
-notify-sharp
-webkit2gtk-sharp
-```
-
-On Ubuntu you'll also need:
-
-```
-libappindicator-sharp
-```
-
-
## Building on Linux
### Common build requirements
-Make sure to have the `git` package installed when you're building on Linux.
-You will need the packages listed below for the most used Linux distributions:
+You will need the packages listed below for the most used Linux distributions:
```shell
# On Ubuntu 16.04:
+
+# Run requirements
sudo apt-get install \
- desktop-file-utils \
+ curl \
git \
+ git-lfs \
+ gvfs
+
+# Build requirements
+sudo apt-get install \
+ desktop-file-utils \
gtk-sharp3-gapi \
- intltool \
libappindicator3-0.1-cil-dev \
libdbus-glib2.0-cil-dev \
libgtk3.0-cil-dev \
+ libnotify3.0-cil-dev \
libsoup2.4-dev \
libtool-bin \
libwebkit2gtk-4.0 \
+ meson \
mono-devel \
mono-mcs \
- nant \
xsltproc
-# On Fedora 25:
-sudo dnf install # TODO
+
+# On Fedora 27:
+
+# Run requirements
+sudo dnf install \
+ curl \
+ git \
+ git-lfs \
+ gvfs
+
+# Build requirements
+sudo dnf install \
+ gtk-sharp3-devel \
+ gtk-sharp3-gapi \
+ libtool \
+ meson \
+ notify-sharp3-devel \
+ webkitgtk4-devel \
+ webkit2-sharp
```
### Additional source build requirements
-Install the `gtk-sharp3` bindings from:
-https://github.com/mono/gtk-sharp
-Or on Ubuntu, get it from this PPA:
-https://launchpad.net/~meebey/+archive/mono-preview
+Install mono-complete, [see instructions](https://www.mono-project.com/download/stable/#download-lin-ubuntu)
-Install the `notify-sharp` bindings from:
-https://download.gnome.org/sources/notify-sharp/3.0/
+Install these `soup-sharp` and `webkit2gtk-sharp` bindings:
-Install the `soup-sharp` and `webkit2gtk-sharp` bindings from:
-https://github.com/hbons/soup-sharp
-https://github.com/hbons/webkit2gtk-sharp
-
-All with the usual:
+```bash
+git clone https://github.com/hbons/soup-sharp
+cd soup-sharp/
+./autogen.sh
+make
+sudo make install
+```
```bash
+git clone https://github.com/hbons/webkit2-sharp
+cd webkit2-sharp/
./autogen.sh
make
sudo make install
```
-If you're using Ubuntu, also install the `appindicator-sharp` bindings from:
-https://github.com/hbons/appindicator-sharp
+On Ubuntu, also install these `appindicator-sharp` bindings:
+
+```bash
+sudo apt-get install libappindicator3-dev
+git clone https://github.com/hbons/appindicator-sharp
+cd appindicator-sharp/
+./autogen.sh
+make
+sudo make install
+```
### Start the build
-You can build and install SparkleShare like this:
+You can build and install SparkleShare with `meson` like this:
```bash
-$ ./configure (or ./autogen.sh if you build from the repository)
-$ make
-$ sudo make install
+meson build/
+ninja -C build/
+sudo ninja install -C build/
+```
+
+
+If your distribution has an out of date meson package, you can install the latest version using the Python package manager:
+
+```bash
+# Install pip using your system's package manager
+sudo apt-get install python3-pip # Ubuntu
+sudo dnf install python3-pip # Fedora
+
+pip3 install meson
```
### Uninstall
```bash
-sudo make uninstall
+sudo ninja uninstall
```
diff --git a/SparkleShare/Linux/Setup.cs b/SparkleShare/Linux/Setup.cs
index dd1aa4e..8ee91aa 100755
--- a/SparkleShare/Linux/Setup.cs
+++ b/SparkleShare/Linux/Setup.cs
@@ -152,22 +152,22 @@ namespace SparkleShare {
// Padding column
tree_view.AppendColumn ("Padding", new Gtk.CellRendererText (), "text", 0);
- tree_view.Columns [0].Cells [0].Xpad = 4;
+ tree_view.Columns [0].Cells [0].Xpad = 8;
// Icon column
tree_view.AppendColumn ("Icon", new Gtk.CellRendererPixbuf (), "pixbuf", 1);
- tree_view.Columns [1].Cells [0].Xpad = 4;
+ tree_view.Columns [1].Cells [0].Xpad = 6;
// Service column
TreeViewColumn service_column = new TreeViewColumn () { Title = "Service" };
- CellRendererText service_cell = new CellRendererText () { Ypad = 8 };
+ CellRendererText service_cell = new CellRendererText () { Ypad = 12 };
service_column.PackStart (service_cell, true);
service_column.SetCellDataFunc (service_cell, new TreeCellDataFunc (RenderServiceColumn));
foreach (Preset preset in Controller.Presets) {
store.AppendValues ("", new Gdk.Pixbuf (preset.ImagePath),
- "<span size=\"small\"><b>" + preset.Name + "</b>\n" +
- "<span fgcolor=\"" + SparkleShare.UI.SecondaryTextColor + "\">" + preset.Description + "</span>" +
+ "<span><b>" + preset.Name + "</b>\n" +
+ "<span size=\"small\" fgcolor=\"" + SparkleShare.UI.SecondaryTextColor + "\">" + preset.Description + "</span>" +
"</span>", preset);
}
diff --git a/SparkleShare/Linux/SetupWindow.cs b/SparkleShare/Linux/SetupWindow.cs
index 7320788..a1465d3 100644
--- a/SparkleShare/Linux/SetupWindow.cs
+++ b/SparkleShare/Linux/SetupWindow.cs
@@ -41,13 +41,13 @@ namespace SparkleShare {
TypeHint = Gdk.WindowTypeHint.Dialog;
- SetSizeRequest (400, 400);
+ SetSizeRequest (720, 540);
DeleteEvent += delegate (object sender, DeleteEventArgs args) { args.RetVal = true; };
VBox layout_vertical = new VBox (false, 16);
layout_vertical.BorderWidth = 16;
- this.content_area = new EventBox ();
+ this.content_area = new EventBox ();
this.option_area = new EventBox ();
this.buttons = CreateButtonBox ();
@@ -82,7 +82,7 @@ namespace SparkleShare {
public void AddOption (Widget widget)
- {
+ {
this.option_area.Add (widget);
}
@@ -99,7 +99,7 @@ namespace SparkleShare {
LineWrap = true,
LineWrapMode = Pango.WrapMode.WordChar
};
-
+
layout_vertical.PackStart (description, false, false, 0);
}
@@ -109,7 +109,7 @@ namespace SparkleShare {
this.content_area.Add (layout_vertical);
}
-
+
public void Reset ()
{
Header = "";
@@ -124,13 +124,13 @@ namespace SparkleShare {
foreach (Button button in this.buttons)
this.buttons.Remove (button);
}
-
-
+
+
new public void ShowAll ()
{
if (this.buttons.Children.Length > 0) {
Button default_button = (Button) this.buttons.Children [this.buttons.Children.Length - 1];
-
+
default_button.CanDefault = true;
Default = default_button;
default_button.StyleContext.AddClass ("suggested-action");
@@ -141,4 +141,3 @@ namespace SparkleShare {
}
}
}
-
diff --git a/SparkleShare/Linux/SparkleShare.Linux.csproj b/SparkleShare/Linux/SparkleShare.Linux.csproj
index 3c048d4..4f5b645 100644
--- a/SparkleShare/Linux/SparkleShare.Linux.csproj
+++ b/SparkleShare/Linux/SparkleShare.Linux.csproj
@@ -51,7 +51,6 @@
<Reference Include="System" />
<Reference Include="System.Net" />
<Reference Include="Mono.Posix" />
- <Reference Include="System.Xml" />
<Reference Include="atk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gdk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="gio-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -60,6 +59,7 @@
<Reference Include="pango-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
<Reference Include="notify-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2df29c54e245917a" />
<Reference Include="webkit2-sharp, Version=2.10.9.0, Culture=neutral, PublicKeyToken=bac11f94b446c2eb" />
+ <Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Sparkles\Git\Sparkles.Git.csproj">
@@ -134,6 +134,11 @@
<None Include="..\Common\Presets\planio%402x.png">
<Link>Presets\planio%402x.png</Link>
</None>
+ <None Include="org.sparkleshare.SparkleShare.appdata.xml" />
+ <None Include="org.sparkleshare.SparkleShare.desktop" />
+ <None Include="org.sparkleshare.SparkleShare.Invites.desktop" />
+ <None Include="SparkleShare.Autostart.desktop" />
+ <None Include="sparkleshare.in" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controller.cs" />
@@ -170,4 +175,4 @@
</ItemGroup>
<Import Project="..\Common\SparkleShare.projitems" Label="Shared" Condition="Exists('..\Common\SparkleShare.projitems')" />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-</Project> \ No newline at end of file
+</Project>
diff --git a/SparkleShare/Linux/StatusIcon.cs b/SparkleShare/Linux/StatusIcon.cs
index c3384eb..b64f49e 100644
--- a/SparkleShare/Linux/StatusIcon.cs
+++ b/SparkleShare/Linux/StatusIcon.cs
@@ -31,6 +31,7 @@ namespace SparkleShare {
public class StatusIcon {
public StatusIconController Controller = new StatusIconController ();
+ public static bool use_appindicator = true;
Gtk.StatusIcon status_icon;
@@ -47,10 +48,10 @@ namespace SparkleShare {
public StatusIcon ()
{
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
+ if (use_appindicator) {
#if HAVE_APP_INDICATOR
indicator = new Indicator ("sparkleshare", "sparkleshare", (int) IndicatorCategory.ApplicationStatus) {
- IconName = "process-syncing-idle",
+ IconName = "org.sparkleshare.SparkleShare-symbolic",
Status = (int) IndicatorStatus.Active
};
#endif
@@ -67,24 +68,22 @@ namespace SparkleShare {
Application.Invoke (delegate {
string icon_name = "org.sparkleshare.SparkleShare";
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
- icon_name = "process-syncing-idle";
- }
-
if (state == IconState.SyncingUp)
- icon_name = "process-syncing-up";
+ icon_name += "-syncing-up";
else if (state == IconState.SyncingDown)
- icon_name = "process-syncing-down";
+ icon_name += "-syncing-down";
else if (state == IconState.Syncing)
- icon_name = "process-syncing";
+ icon_name += "-syncing";
else if (state == IconState.Error)
- icon_name = "process-syncing-error";
+ icon_name += "-syncing-error";
+
+ if (use_appindicator) {
+ icon_name += "-symbolic";
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
#if HAVE_APP_INDICATOR
indicator.IconName = icon_name;
- // Force update of the status icon
+ // Hack to force update the status icon
indicator.Status = (int) IndicatorStatus.Attention;
indicator.Status = (int) IndicatorStatus.Active;
#endif
@@ -129,6 +128,7 @@ namespace SparkleShare {
ImageMenuItem folder_item = new SparkleMenuItem ("SparkleShare");
folder_item.Image = new Image (UserInterfaceHelpers.GetIcon ("org.sparkleshare.SparkleShare", 16));
+ folder_item.Submenu = new Menu ();
this.menu.Add (this.state_item);
this.menu.Add (new SeparatorMenuItem ());
@@ -148,7 +148,9 @@ namespace SparkleShare {
this.state_menu_items [i] = new SparkleMenuItem (project.StatusMessage) { Sensitive = false };
(item.Submenu as Menu).Add (this.state_menu_items [i]);
- (item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
+ if (!use_appindicator)
+ (item.Submenu as Menu).Add (new SeparatorMenuItem ());
if (project.IsPaused) {
MenuItem resume_item;
@@ -157,12 +159,17 @@ namespace SparkleShare {
string icons_path = Path.Combine (UserInterface.AssetsPath, "icons", "hicolor", "12x12", "status");
foreach (KeyValuePair<string, string> pair in project.UnsyncedChangesInfo) {
- string icon_path = Path.Combine (icons_path, pair.Value.Replace ("-12", ""));
- (item.Submenu as Menu).Add (new SparkleMenuItem (pair.Key) {
- Image = new Image (icon_path),
+ var change_item = new SparkleMenuItem (pair.Key) {
Sensitive = false
- });
+ };
+
+ if (!use_appindicator) {
+ string icon_path = Path.Combine (icons_path, pair.Value.Replace ("-12", ""));
+ change_item.Image = new Image (icon_path);
+ }
+
+ (item.Submenu as Menu).Add (change_item);
}
if (!string.IsNullOrEmpty (project.MoreUnsyncedChanges)) {
@@ -170,8 +177,10 @@ namespace SparkleShare {
Sensitive = false
});
}
-
- (item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
+ if (!use_appindicator)
+ (item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
resume_item = new MenuItem ("Sync and Resume…");
} else {
@@ -198,14 +207,21 @@ namespace SparkleShare {
(item.Child as Label).UseUnderline = false;
item.Image = new Image (folder_icon);
- this.menu.Add (item);
+ (folder_item.Submenu as Menu).Add (item);
i++;
};
}
- this.recent_events_item = new MenuItem ("History…");
- this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled;
+ this.recent_events_item = new MenuItem ("Recent Changes…");
+ this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled;
+
+ if (!use_appindicator)
+ (folder_item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
+ (folder_item.Submenu as Menu).Add (this.recent_events_item);
+
+
this.quit_item = new MenuItem ("Quit") { Sensitive = Controller.QuitItemEnabled };
MenuItem add_item = new MenuItem ("Sync Remote Project…");
@@ -221,7 +237,10 @@ namespace SparkleShare {
copy_item.Activated += delegate { Controller.CopyToClipboardClicked (); };
(link_code_item.Submenu as Menu).Add (code_item);
- (link_code_item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
+ if (!use_appindicator)
+ (link_code_item.Submenu as Menu).Add (new SeparatorMenuItem ());
+
(link_code_item.Submenu as Menu).Add (copy_item);
}
@@ -229,47 +248,19 @@ namespace SparkleShare {
about_item.Activated += delegate { Controller.AboutClicked (); };
add_item.Activated += delegate { Controller.AddHostedProjectClicked (); };
- this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked (); };
+ this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked (); };
this.quit_item.Activated += delegate { Controller.QuitClicked (); };
- folder_item.Submenu = new Menu ();
- (folder_item.Submenu as Menu).Add (this.recent_events_item);
-
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
- MenuItem notify_item;
-
- if (SparkleShare.Controller.NotificationsEnabled)
- notify_item = new MenuItem ("Turn Notifications Off");
- else
- notify_item = new MenuItem ("Turn Notifications On");
-
- notify_item.Activated += delegate {
- SparkleShare.Controller.ToggleNotifications ();
-
- Application.Invoke (delegate {
- if (SparkleShare.Controller.NotificationsEnabled)
- (notify_item.Child as Label).Text = "Turn Notifications Off";
- else
- (notify_item.Child as Label).Text = "Turn Notifications On";
- });
- };
-
- (folder_item.Submenu as Menu).Add (new SeparatorMenuItem ());
- (folder_item.Submenu as Menu).Add (notify_item);
- }
-
- (folder_item.Submenu as Menu).Add (new SeparatorMenuItem ());
- (folder_item.Submenu as Menu).Add (link_code_item);
- (folder_item.Submenu as Menu).Add (new SeparatorMenuItem ());
- (folder_item.Submenu as Menu).Add (about_item);
-
this.menu.Add (new SeparatorMenuItem ());
this.menu.Add (add_item);
+ this.menu.Add (link_code_item);
+ this.menu.Add (new SeparatorMenuItem ());
+ this.menu.Add (about_item);
this.menu.Add (new SeparatorMenuItem ());
this.menu.Add (this.quit_item);
this.menu.ShowAll ();
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
+ if (use_appindicator) {
#if HAVE_APP_INDICATOR
indicator.Menu = this.menu;
#endif
diff --git a/SparkleShare/Linux/UserInterface.cs b/SparkleShare/Linux/UserInterface.cs
index b6d687b..74fd555 100644
--- a/SparkleShare/Linux/UserInterface.cs
+++ b/SparkleShare/Linux/UserInterface.cs
@@ -16,16 +16,16 @@
using System;
+using System.IO;
+using System.Reflection;
using Gtk;
using Sparkles;
namespace SparkleShare
{
-
public class UserInterface
{
-
public static string AssetsPath = InstallationInfo.Directory;
public StatusIcon StatusIcon;
@@ -35,47 +35,80 @@ namespace SparkleShare
public About About;
public Note Note;
- public readonly string SecondaryTextColor;
- public readonly string SecondaryTextColorSelected;
+ public string SecondaryTextColor;
+ public string SecondaryTextColorSelected;
Application application;
public UserInterface ()
{
+ string gtk_version = string.Format ("{0}.{1}.{2}", Global.MajorVersion, Global.MinorVersion, Global.MicroVersion);
+ Logger.LogInfo ("Environment", "GTK+ " + gtk_version);
+
application = new Application ("org.sparkleshare.SparkleShare", GLib.ApplicationFlags.None);
+ application.Activated += ApplicationActivatedDelegate;
+
+ if (!application.IsRemote)
+ return;
application.Register (null);
- application.Activated += ApplicationActivatedDelegate;
+ }
- var label = new Label ();
- Gdk.Color color = UserInterfaceHelpers.RGBAToColor (label.StyleContext.GetColor (StateFlags.Insensitive));
- SecondaryTextColor = UserInterfaceHelpers.ColorToHex (color);
- var tree_view = new TreeView ();
+ public void Run (string [] args)
+ {
+ ParseArgs (args);
+
+ MethodInfo [] methods = typeof (GLib.Application).GetMethods (BindingFlags.Instance | BindingFlags.Public);
+ ParameterInfo [] run_parameters = new ParameterInfo [0];
+ MethodInfo run_method = methods [0];
+
+ foreach (MethodInfo method in methods) {
+ if (method.Name == "Run") {
+ run_parameters = method.GetParameters ();
+
+ if (run_parameters.Length == 2) {
+ run_method = method;
+ break;
+ }
+ }
+ }
- color = UserInterfaceHelpers.MixColors (
- UserInterfaceHelpers.RGBAToColor (tree_view.StyleContext.GetColor (StateFlags.Selected)),
- UserInterfaceHelpers.RGBAToColor (tree_view.StyleContext.GetBackgroundColor (StateFlags.Selected)),
- 0.39);
+ // Use the right Run method arguments depending on the installed GTK bindings
+ if (run_parameters [0].ParameterType == typeof (System.Int32) &&
+ run_parameters [1].ParameterType == typeof (System.String)) {
- SecondaryTextColorSelected = UserInterfaceHelpers.ColorToHex (color);
+ run_method.Invoke ((application as GLib.Application), new object [] { 0, null });
+
+ } else {
+ run_method.Invoke ((application as GLib.Application), new object [] { "org.sparkleshare.SparkleShare", new string [0] });
+ }
}
- public void Run (string [] args)
+ void ParseArgs (string [] args)
{
- // FIXME: Hack to cover API differences between Ubuntu and latest GNOME
- if (InstallationInfo.OperatingSystem == OS.Ubuntu) {
- #if HAVE_APP_INDICATOR
- (application as GLib.Application).Run (0, null);
- #endif
- } else {
- #if HAVE_APP_INDICATOR
- #else
- (application as GLib.Application).Run ("org.sparkleshare.SparkleShare", new string [0]);
- #endif
- }
+ if (args.Length > 0)
+ Logger.LogInfo ("Environment", "Arguments: " + string.Join (" ", args));
+
+ if (Array.IndexOf (args, "--status-icon=gtk") > -1)
+ StatusIcon.use_appindicator = false;
+
+ #if HAVE_APP_INDICATOR
+ if (Array.IndexOf (args, "--status-icon=appindicator") > -1)
+ StatusIcon.use_appindicator = true;
+ #else
+ if (StatusIcon.use_appindicator) {
+ Console.WriteLine ("AppIndicator not installed.");
+ Environment.Exit (-1);
+ }
+ #endif
+
+ if (StatusIcon.use_appindicator)
+ Logger.LogInfo ("Environment", "Status Icon: AppIndicator");
+ else
+ Logger.LogInfo ("Environment", "Status Icon: GtkStatusIcon");
}
@@ -97,6 +130,9 @@ namespace SparkleShare
return;
}
+ if (IconTheme.Default != null)
+ IconTheme.Default.AppendSearchPath (Path.Combine (UserInterface.AssetsPath, "icons"));
+
Setup = new Setup ();
EventLog = new EventLog ();
About = new About ();
@@ -107,8 +143,26 @@ namespace SparkleShare
Setup.Application = application;
EventLog.Application = application;
About.Application = application;
+ Note.Application = application;
+
+ DetectTextColors ();
SparkleShare.Controller.UIHasLoaded ();
}
+
+
+ void DetectTextColors ()
+ {
+ Gdk.Color text_color = UserInterfaceHelpers.RGBAToColor (new Label ().StyleContext.GetColor (StateFlags.Insensitive));
+ var tree_view_style = new TreeView ().StyleContext;
+
+ Gdk.Color text_color_selected = UserInterfaceHelpers.MixColors (
+ UserInterfaceHelpers.RGBAToColor (tree_view_style.GetColor (StateFlags.Selected)),
+ UserInterfaceHelpers.RGBAToColor (tree_view_style.GetBackgroundColor (StateFlags.Selected)),
+ 0.2);
+
+ SecondaryTextColor = UserInterfaceHelpers.ColorToHex (text_color);
+ SecondaryTextColorSelected = UserInterfaceHelpers.ColorToHex (text_color_selected);
+ }
}
}
diff --git a/SparkleShare/Linux/UserInterfaceHelpers.cs b/SparkleShare/Linux/UserInterfaceHelpers.cs
index aa08fa5..f72f627 100755
--- a/SparkleShare/Linux/UserInterfaceHelpers.cs
+++ b/SparkleShare/Linux/UserInterfaceHelpers.cs
@@ -18,6 +18,7 @@
using System;
using System.IO;
+using Sparkles;
using Gtk;
namespace SparkleShare {
@@ -27,15 +28,17 @@ namespace SparkleShare {
public static Gdk.Pixbuf GetIcon (string name, int size)
{
IconTheme icon_theme = new IconTheme ();
- icon_theme.AppendSearchPath (Path.Combine (UserInterface.AssetsPath, "icons"));
-
+ icon_theme.AppendSearchPath (Path.Combine (UserInterface.AssetsPath, "icons"));
+
foreach (string search_path in IconTheme.Default.SearchPath)
icon_theme.AppendSearchPath (search_path);
try {
return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
- } catch {
+ } catch (Exception e) {
+ Logger.LogInfo ("UI", "Failed to load icon " + name + " of size " + size, e);
+
try {
return icon_theme.LoadIcon ("gtk-missing-image", size, IconLookupFlags.GenericFallback);
@@ -63,7 +66,7 @@ namespace SparkleShare {
(int) Math.Truncate (color.Blue / 256.00));
}
-
+
public static Gdk.Color RGBAToColor (Gdk.RGBA rgba) {
return new Gdk.Color () {
Red = (ushort) (rgba.Red * 65535),
@@ -82,13 +85,11 @@ namespace SparkleShare {
public static Gdk.Color MixColors (Gdk.Color first_color, Gdk.Color second_color, double ratio)
{
return new Gdk.Color (
- Convert.ToByte ((255 * (Math.Min (65535, first_color.Red * (1.0 - ratio) +
- second_color.Red * ratio))) / 65535),
- Convert.ToByte ((255 * (Math.Min (65535, first_color.Green * (1.0 - ratio) +
- second_color.Green * ratio))) / 65535),
- Convert.ToByte ((255 * (Math.Min (65535, first_color.Blue * (1.0 - ratio) +
- second_color.Blue * ratio))) / 65535)
+ Convert.ToByte ((255 * (Math.Min (65535, first_color.Red * (1.0 - ratio) + second_color.Red * ratio))) / 65535),
+ Convert.ToByte ((255 * (Math.Min (65535, first_color.Green * (1.0 - ratio) + second_color.Green * ratio))) / 65535),
+ Convert.ToByte ((255 * (Math.Min (65535, first_color.Blue * (1.0 - ratio) + second_color.Blue * ratio))) / 65535)
);
}
}
}
+
diff --git a/SparkleShare/Linux/meson.build b/SparkleShare/Linux/meson.build
new file mode 100644
index 0000000..d3e0233
--- /dev/null
+++ b/SparkleShare/Linux/meson.build
@@ -0,0 +1,63 @@
+sparkleshare_src = ['../Common/SparkleShare.cs',
+ '../Common/AboutController.cs',
+ '../Common/Avatars.cs',
+ '../Common/BubblesController.cs',
+ '../Common/BaseController.cs',
+ '../Common/EventLogController.cs',
+ '../Common/NoteController.cs',
+ '../Common/SetupController.cs',
+ '../Common/StatusIconController.cs',
+ 'About.cs',
+ 'Bubbles.cs',
+ 'Controller.cs',
+ 'EventLog.cs',
+ 'Note.cs',
+ 'Setup.cs',
+ 'SetupWindow.cs',
+ 'StatusIcon.cs',
+ 'UserInterface.cs',
+ 'UserInterfaceHelpers.cs']
+
+
+# Startup script
+configure_file(
+ input: 'sparkleshare.in',
+ output: 'sparkleshare',
+ configuration: configuration, install_dir: get_option('bindir'))
+
+
+# .desktop and .appdata files
+apps_dir = join_paths(get_option('prefix'), 'share', 'applications')
+install_data(sources: 'org.sparkleshare.SparkleShare.desktop', install_dir: apps_dir)
+install_data(sources: 'org.sparkleshare.SparkleShare.Invites.desktop', install_dir: apps_dir)
+install_data(sources: 'SparkleShare.Autostart.desktop', install_dir: apps_dir)
+install_data(sources: 'org.sparkleshare.SparkleShare.appdata.xml', install_dir: join_paths(get_option('prefix'), 'share', 'appdata'))
+
+
+# Build SparkleShare
+gtk = dependency('gtk-sharp-3.0')
+gdk = dependency('gdk-sharp-3.0')
+gio = dependency('gio-sharp-3.0')
+glib = dependency('glib-sharp-3.0')
+webkit = dependency('webkit2-sharp-4.0')
+notify = dependency('notify-sharp-3.0')
+appindicator = dependency('appindicator3-sharp-0.1', required: get_option('ubuntu'))
+
+args = '-r:Mono.Posix'
+
+if appindicator.found()
+ args = [args, '-define:HAVE_APP_INDICATOR']
+endif
+
+sparkleshare = executable('SparkleShare',
+ dependencies: [gtk, gdk, gio, glib, webkit, notify, appindicator],
+ link_with: [sparkles, sparkles_git],
+ cs_args: args,
+ sources: sparkleshare_src,
+ install: true,
+ install_dir: install_dir)
+
+
+subdir('Images')
+subdir('Images/icons')
+
diff --git a/SparkleShare/Linux/org.sparkleshare.SparkleShare.Invites.desktop b/SparkleShare/Linux/org.sparkleshare.SparkleShare.Invites.desktop
index c34d1f1..db197aa 100644
--- a/SparkleShare/Linux/org.sparkleshare.SparkleShare.Invites.desktop
+++ b/SparkleShare/Linux/org.sparkleshare.SparkleShare.Invites.desktop
@@ -5,4 +5,3 @@ Exec=sparkleshare open %U
Terminal=false
MimeType=application/x-sparkleshare;x-scheme-handler/sparkleshare;
NoDisplay=true
-
diff --git a/SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml b/SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml
index a1f51d6..2742669 100644
--- a/SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml
+++ b/SparkleShare/Linux/org.sparkleshare.SparkleShare.appdata.xml
@@ -1,28 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
- <id type="desktop">org.sparkleshare.SparkleShare.desktop</id>
- <metadata_licence>CC0-1.0</metadata_licence>
- <project_license>GPL-3.0</project_license>
- <name>SparkleShare</name>
- <summary>Self hosted, instant, secure file sync</summary>
- <description>
- <p>SparkleShare creates a special folder on your computer. You can add remotely hosted folders (or "projects") to this folder. These projects will be automatically kept in sync with both the host and all of your peers when someone adds, removes or edits a file.</p>
- <p>SparkleShare was made to cover certain use cases, but doesn't handle every scenario well. To help you decide if SparkleShare is right for you, here's a few examples of what it does well and less well:</p>
- <p>Great:</p>
- <ul>
- <li>Frequently changing project files, like text, office documents, and images</li>
- <li>Tracking and syncing files edited by multiple people</li>
- <li>Reverting a file to any point in its history</li>
- <li>Preventing spying on your files on the server using encryption</li>
- </ul>
- <p>Not so great:</p>
- <ul>
- <li>Full computer backups</li>
- <li>Storing your photo or music collection</li>
- <li>Large binary files that change often, like video editing projects</li>
- </ul>
- <p>Have fun!</p>
- </description>
- <url type="homepage">http://www.sparkleshare.org/</url>
-</component>
+ <name>SparkleShare</name>
+ <summary>Magic self hosted Git file sync</summary>
+ <developer_name>Hylke Bons</developer_name>
+ <project_license>GPL-3.0+</project_license>
+ <url type="homepage">http://www.sparkleshare.org/</url>
+ <url type="bugtracker">https://www.github.com/hbons/SparkleShare/issues</url>
+
+ <description>
+ <p>SparkleShare is a file sharing and collaboration app. It works just like Dropbox, and you can run it on your own server.</p>
+ <p>SparkleShare is based on the popular version control system Git. It even supports the popular extension Git LFS to deal well with large files. So if you are already using Git repositories in your company, SparkleShare will integrate seamlessly.</p>
+ <p>Note: if you're using GNOME Shell as your desktop environment on a distribution other than Ubuntu, install the AppIndicator Support extension to show the SparkleShare status icon. If for whatever reason you need the legacy status icon, start SparkleShare with --status-icon=gtk.</p>
+ </description>
+
+ <releases>
+ <release version="3.28.0" date="2018-07-14" urgency="medium">
+ <description>
+ <p>Fixes and improvements:</p>
+ <ul>
+ <li>Use appindicator as the default status icon and supported by the flatpak</li>
+ <li>Fix recent changes window showing broken entries with newer versions of Git</li>
+ </ul>
+ </description>
+ </release>
+ <release version="2.0.1" date="2017-12-04" urgency="low">
+ <description>
+ <p>Fixes and improvements:</p>
+ <ul>
+ <li>Fix files created by conflict resolution being moved to the root folder</li>
+ <li>On conflicts, both diverging versions plus the original version are now kept</li>
+ </ul>
+ </description>
+ </release>
+ <release version="2.0.0" date="2017-09-10" urgency="medium">
+ <description>
+ <p>SparkleShare 2.0 is a clean break and will be incompatible with the 1.x series. Repositories added using 1.0 will likely not work and will have to be re-synced to take advantage of 2.0 features (1.x and 2.x clients will still be able to sync to the same repository without problems).</p>
+ <ul>
+ <li>Support for Git LFS managed repositories</li>
+ <li>Projects are now grouped by host or organisation</li>
+ <li>In encrypted repositories, name and email metadata is now also encrypted</li>
+ <li>Change notification preferences from GNOME System Settings</li>
+ <li>New GitLab preset</li>
+ <li>New app icon by Sam Hewitt</li>
+ </ul>
+ </description>
+ </release>
+ </releases>
+ <screenshots>
+ <screenshot type="default">
+ <caption>Sync projects to your computer</caption>
+ <image type="source" width="1200" height="675">https://raw.githubusercontent.com/hbons/SparkleShare/master/SparkleShare/Linux/Images/gnome-software-screenshot-1.jpg</image>
+ </screenshot>
+ <screenshot>
+ <caption>Projects added to your SparkleShare folder sync automatically</caption>
+ <image type="source" width="1200" height="675">https://raw.githubusercontent.com/hbons/SparkleShare/master/SparkleShare/Linux/Images/gnome-software-screenshot-2.jpg</image>
+ </screenshot>
+ <screenshot>
+ <caption>View your team's file history</caption>
+ <image type="source" width="1200" height="675">https://raw.githubusercontent.com/hbons/SparkleShare/master/SparkleShare/Linux/Images/gnome-software-screenshot-3.jpg</image>
+ </screenshot>
+ </screenshots>
+
+ <id type="desktop">org.sparkleshare.SparkleShare.desktop</id>
+ <launchable id="desktop-id">org.sparkleshare.SparkleShare.desktop</launchable>
+ <provides>
+ <binary>sparkleshare</binary>
+ </provides>
+
+ <metadata_licence>CC0-1.0</metadata_licence>
+ <update_contact>hi_AT_planetpeanut.uk</update_contact>
+</component>
diff --git a/SparkleShare/Linux/sparkleshare.in b/SparkleShare/Linux/sparkleshare.in
index fed7aec..ec709ed 100755
--- a/SparkleShare/Linux/sparkleshare.in
+++ b/SparkleShare/Linux/sparkleshare.in
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
if [[ $UID -eq 0 ]]; then
- echo "Please don't run SparkleShare as root. Things would go utterly wrong."
+ echo "SparkleShare can not be run as root. Things would go utterly wrong."
exit 1
fi
@@ -10,12 +10,20 @@ case $1 in
invite=`date -u +%N`
open=`echo $2 | sed 's/sparkleshare:\/\/addProject\///'`
curl --insecure --output ~/SparkleShare/.$invite.xml $open
- mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe"
+ mono "@ABS_INSTALL_DIR@/SparkleShare.exe"
;;
- help|--help|version|--version)
- mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" help
+ version|--version)
+ echo @VERSION@
+ ;;
+ help|--help)
+ echo "Usage:"
+ echo " sparkleshare [OPTION]"
+ echo
+ echo "Options:"
+ echo " --open sparkleshare://URL Open invite file at URL"
+ echo " --status-icon=[appindicator|gtk] Use a specific status icon implementation"
;;
*)
- mono "@expanded_libdir@/@PACKAGE@/SparkleShare.exe" $2
+ mono "@ABS_INSTALL_DIR@/SparkleShare.exe" $@
;;
esac
diff --git a/SparkleShare/Mac/Assets.xcassets/Contents.json b/SparkleShare/Mac/Assets.xcassets/Contents.json
deleted file mode 100644
index 2d92bd5..0000000
--- a/SparkleShare/Mac/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
diff --git a/SparkleShare/Mac/Controller.cs b/SparkleShare/Mac/Controller.cs
index 67eae50..bdd0113 100644
--- a/SparkleShare/Mac/Controller.cs
+++ b/SparkleShare/Mac/Controller.cs
@@ -80,16 +80,12 @@ namespace SparkleShare {
public override void SetFolderIcon ()
{
- if (Environment.OSVersion.Version.Major >= 14) {
- NSWorkspace.SharedWorkspace.SetIconforFile (
- NSImage.ImageNamed ("sparkleshare-folder-yosemite.icns"),
- SparkleShare.Controller.FoldersPath, 0);
-
- } else {
- NSWorkspace.SharedWorkspace.SetIconforFile (
- NSImage.ImageNamed ("sparkleshare-folder.icns"),
- SparkleShare.Controller.FoldersPath, 0);
- }
+ string folder_icon_name = "sparkleshare-folder.icns";
+
+ if (Environment.OSVersion.Version.Major >= 14)
+ folder_icon_name = "sparkleshare-folder-yosemite.icns";
+
+ NSWorkspace.SharedWorkspace.SetIconforFile (NSImage.ImageNamed (folder_icon_name), SparkleShare.Controller.FoldersPath, 0);
}
@@ -228,5 +224,13 @@ namespace SparkleShare {
new NSObject ().InvokeOnMainThread (() => code ());
}
}
+
+
+ public override void PlatformQuit ()
+ {
+ watcher.Dispose ();
+ NSRunningApplication.CurrentApplication.Terminate ();
+ }
+
}
}
diff --git a/SparkleShare/Mac/Info.plist b/SparkleShare/Mac/Info.plist
index 3df3ed2..5616f17 100755
--- a/SparkleShare/Mac/Info.plist
+++ b/SparkleShare/Mac/Info.plist
@@ -9,9 +9,9 @@
<key>CFBundleName</key>
<string>SparkleShare</string>
<key>CFBundleShortVersionString</key>
- <string>2.0.1</string>
+ <string>3.28.0</string>
<key>CFBundleVersion</key>
- <string>2.0.1</string>
+ <string>3.28.0</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
diff --git a/SparkleShare/Mac/README.md b/SparkleShare/Mac/README.md
index 2ab5bb9..5f79793 100644
--- a/SparkleShare/Mac/README.md
+++ b/SparkleShare/Mac/README.md
@@ -8,8 +8,8 @@ You can build SparkleShare from source or download the SparkleShare bundle.
Install [Xcode](https://itunes.apple.com/gb/app/xcode/id497799835?mt=12) from the macOS App Store, or [download](https://developer.apple.com/xcode/) it manually.
Install [Visual Studio](https://www.visualstudio.com/vs/visual-studio-mac/).
-The required `git` binaries are now built automatically. For doing this and for building the distribution release, where Mono libraries are merged into SparkleShare, we need
- the packes <tt>autoconf</tt> and <tt>pkg-config</tt>. You can install these in several ways, here's how it's done using [Homebrew](http://brew.sh/):
+For building the distribution release, where Mono libraries are merged into SparkleShare, we need
+ the `autoconf` and `pkg-config`. You can install these in several ways, here's how it's done using [Homebrew](https://brew.sh/):
```bash
brew install autoconf automake libtool pkg-config
diff --git a/SparkleShare/Mac/SparkleShare.Mac.csproj b/SparkleShare/Mac/SparkleShare.Mac.csproj
index 6c46443..6c8017a 100644
--- a/SparkleShare/Mac/SparkleShare.Mac.csproj
+++ b/SparkleShare/Mac/SparkleShare.Mac.csproj
@@ -157,20 +157,6 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-128.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-128%402x.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-16.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-16%402x.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-256.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-256%402x.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-32.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-32%402x.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-512.png" />
- <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-512%402x.png" />
- <ImageAsset Include="Assets.xcassets\Contents.json" />
- </ItemGroup>
- <ItemGroup>
<None Include="Info.plist" />
</ItemGroup>
<ItemGroup>
@@ -208,18 +194,6 @@
<BundleResource Include="..\Common\Images\about%402x.png">
<Link>Resources\about%402x.png</Link>
</BundleResource>
- <BundleResource Include="..\Linux\Images\icons\hicolor\document-added-12.png">
- <Link>Resources\document-added-12.png</Link>
- </BundleResource>
- <BundleResource Include="..\Linux\Images\icons\hicolor\document-deleted-12.png">
- <Link>Resources\document-deleted-12.png</Link>
- </BundleResource>
- <BundleResource Include="..\Linux\Images\icons\hicolor\document-edited-12.png">
- <Link>Resources\document-edited-12.png</Link>
- </BundleResource>
- <BundleResource Include="..\Linux\Images\icons\hicolor\document-moved-12.png">
- <Link>Resources\document-moved-12.png</Link>
- </BundleResource>
<BundleResource Include="Resources\process-syncing.png" />
<BundleResource Include="Resources\process-syncing%402x.png" />
<BundleResource Include="Resources\process-syncing-down.png" />
@@ -327,6 +301,18 @@
<BundleResource Include="..\Common\HTML\jquery.js">
<Link>HTML\jquery.js</Link>
</BundleResource>
+ <BundleResource Include="..\Linux\Images\icons\hicolor\12x12\status\document-added.png">
+ <Link>Resources\document-added.png</Link>
+ </BundleResource>
+ <BundleResource Include="..\Linux\Images\icons\hicolor\12x12\status\document-deleted.png">
+ <Link>Resources\document-deleted.png</Link>
+ </BundleResource>
+ <BundleResource Include="..\Linux\Images\icons\hicolor\12x12\status\document-edited.png">
+ <Link>Resources\document-edited.png</Link>
+ </BundleResource>
+ <BundleResource Include="..\Linux\Images\icons\hicolor\12x12\status\document-moved.png">
+ <Link>Resources\document-moved.png</Link>
+ </BundleResource>
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
diff --git a/SparkleShare/Mac/UserInterface/About.cs b/SparkleShare/Mac/UserInterface/About.cs
index b9393ff..8e0ee5b 100644
--- a/SparkleShare/Mac/UserInterface/About.cs
+++ b/SparkleShare/Mac/UserInterface/About.cs
@@ -38,7 +38,7 @@ namespace SparkleShare {
public About () : base ()
{
- SetFrame (new CGRect (0, 0, 640, 281), true);
+ SetFrame (new CGRect (0, 0, 640, 281), display: true);
Center ();
Delegate = new SparkleAboutDelegate ();
diff --git a/SparkleShare/Mac/UserInterface/EventLog.cs b/SparkleShare/Mac/UserInterface/EventLog.cs
index 52aa690..b0af200 100644
--- a/SparkleShare/Mac/UserInterface/EventLog.cs
+++ b/SparkleShare/Mac/UserInterface/EventLog.cs
@@ -52,8 +52,8 @@ namespace SparkleShare {
int min_height = 640;
int height = (int) (NSScreen.MainScreen.Frame.Height * 0.85);
- float x = (float) (NSScreen.MainScreen.Frame.Width * 0.61);
- float y = (float) (NSScreen.MainScreen.Frame.Height * 0.5 - (height * 0.5));
+ float x = (float) (NSScreen.MainScreen.Frame.Width * 0.61);
+ float y = (float) (NSScreen.MainScreen.Frame.Height * 0.5 - (height * 0.5));
SetFrame (
new CGRect (
@@ -85,7 +85,8 @@ namespace SparkleShare {
new CGSize (Frame.Width + 2, this.web_view.Frame.Height + 1)),
FillColor = NSColor.White,
BorderType = NSBorderType.NoBorder,
- BoxType = NSBoxType.NSBoxCustom
+ BoxType = NSBoxType.NSBoxCustom,
+ AutoresizingMask = NSViewResizingMask.WidthSizable | NSViewResizingMask.HeightSizable
};
this.hidden_close_button = new NSButton () {
@@ -106,7 +107,8 @@ namespace SparkleShare {
Frame = new CGRect (
new CGPoint (0, ContentView.Frame.Height - 31),
new CGSize (60, 20)),
- StringValue = "Size:"
+ StringValue = "Size:",
+ AutoresizingMask = NSViewResizingMask.MaxXMargin | NSViewResizingMask.MinYMargin
};
this.size_label_value = new NSTextField () {
@@ -118,10 +120,10 @@ namespace SparkleShare {
new CGPoint (60, ContentView.Frame.Height - 31),
new CGSize (60, 20)),
StringValue = "…",
- Font = NSFont.BoldSystemFontOfSize (12)
+ Font = NSFont.BoldSystemFontOfSize (12),
+ AutoresizingMask = NSViewResizingMask.MaxXMargin | NSViewResizingMask.MinYMargin
};
-
this.history_label = new NSTextField () {
Alignment = NSTextAlignment.Right,
BackgroundColor = NSColor.WindowBackground,
@@ -130,7 +132,8 @@ namespace SparkleShare {
Frame = new CGRect (
new CGPoint (130, ContentView.Frame.Height - 31),
new CGSize (60, 20)),
- StringValue = "History:"
+ StringValue = "History:",
+ AutoresizingMask = NSViewResizingMask.MaxXMargin | NSViewResizingMask.MinYMargin
};
this.history_label_value = new NSTextField () {
@@ -143,14 +146,16 @@ namespace SparkleShare {
new CGSize (60, 20)
),
StringValue = "…",
- Font = NSFont.BoldSystemFontOfSize (12)
+ Font = NSFont.BoldSystemFontOfSize (12),
+ AutoresizingMask = NSViewResizingMask.MaxXMargin | NSViewResizingMask.MinYMargin
};
this.popup_button = new NSPopUpButton () {
Frame = new CGRect (
new CGPoint (ContentView.Frame.Width - 156 - 12, ContentView.Frame.Height - 33),
new CGSize (156, 26)),
- PullsDown = false
+ PullsDown = false,
+ AutoresizingMask = NSViewResizingMask.MinXMargin | NSViewResizingMask.MinYMargin
};
this.background = new NSBox () {
@@ -159,18 +164,22 @@ namespace SparkleShare {
new CGSize (Frame.Width + 2, this.web_view.Frame.Height + 2)),
FillColor = NSColor.White,
BorderColor = NSColor.LightGray,
- BoxType = NSBoxType.NSBoxCustom
+ BoxType = NSBoxType.NSBoxCustom,
+ AutoresizingMask = NSViewResizingMask.WidthSizable | NSViewResizingMask.HeightSizable
};
this.progress_indicator = new NSProgressIndicator () {
Frame = new CGRect (
new CGPoint (Frame.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10),
new CGSize (20, 20)),
- Style = NSProgressIndicatorStyle.Spinning
+ Style = NSProgressIndicatorStyle.Spinning,
+ AutoresizingMask = NSViewResizingMask.MinXMargin | NSViewResizingMask.MaxXMargin |
+ NSViewResizingMask.MinYMargin | NSViewResizingMask.MaxYMargin
};
this.progress_indicator.StartAnimation (this);
+
ContentView.AddSubview (this.size_label);
ContentView.AddSubview (this.size_label_value);
ContentView.AddSubview (this.history_label);
@@ -180,116 +189,18 @@ namespace SparkleShare {
ContentView.AddSubview (this.background);
ContentView.AddSubview (this.hidden_close_button);
- (Delegate as SparkleEventsDelegate).WindowResized += delegate (CGSize new_window_size) {
- SparkleShare.Controller.Invoke (() => Relayout (new_window_size));
- };
+ Controller.HideWindowEvent += HideWindowEventDelegate;
+ Controller.ShowWindowEvent += ShowWindowEventDelegate;
+ Controller.ShowSaveDialogEvent += ShowSaveDialogEventDelegate;
- // Hook up the controller events
- Controller.HideWindowEvent += delegate {
- SparkleShare.Controller.Invoke (() => {
- this.progress_indicator.Hidden = true;
- PerformClose (this);
- });
- };
-
- Controller.ShowWindowEvent += delegate {
- SparkleShare.Controller.Invoke (() => OrderFrontRegardless ());
- };
-
- Controller.UpdateChooserEvent += delegate (string [] folders) {
- SparkleShare.Controller.Invoke (() => UpdateChooser (folders));
- };
+ Controller.UpdateChooserEvent += UpdateChooserEventDelegate;
+ Controller.UpdateChooserEnablementEvent += UpdateChooserEnablementEventDelegate;
+ Controller.UpdateContentEvent += UpdateContentEventDelegate;
+ Controller.UpdateSizeInfoEvent += UpdateSizeInfoEventDelegate;
- Controller.UpdateChooserEnablementEvent += delegate (bool enabled) {
- SparkleShare.Controller.Invoke (() => { this.popup_button.Enabled = enabled; });
- };
-
- Controller.UpdateContentEvent += delegate (string html) {
- SparkleShare.Controller.Invoke (() => {
- this.cover.RemoveFromSuperview ();
- this.progress_indicator.Hidden = true;
- UpdateContent (html);
- });
- };
-
- Controller.ContentLoadingEvent += delegate {
- SparkleShare.Controller.Invoke (() => {
- this.web_view.RemoveFromSuperview ();
- // FIXME: Hack to hide that the WebView sometimes doesn't disappear
- ContentView.AddSubview (this.cover);
- this.progress_indicator.Hidden = false;
- this.progress_indicator.StartAnimation (this);
- });
- };
-
- Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) {
- SparkleShare.Controller.Invoke (() => {
- this.size_label_value.StringValue = size;
- this.history_label_value.StringValue = history_size;
- });
- };
+ Controller.ContentLoadingEvent += ContentLoadingEventDelegate;
- Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) {
- SparkleShare.Controller.Invoke (() => {
- NSSavePanel panel = new NSSavePanel () {
- DirectoryUrl = new NSUrl (target_folder_path, true),
- NameFieldStringValue = file_name,
- ParentWindow = this,
- Title = "Restore from History",
- PreventsApplicationTerminationWhenModal = false
- };
-
- if ((NSPanelButtonType) (int) panel.RunModal () == NSPanelButtonType.Ok) {
- string target_file_path = Path.Combine (panel.DirectoryUrl.RelativePath, panel.NameFieldStringValue);
- Controller.SaveDialogCompleted (target_file_path);
-
- } else {
- Controller.SaveDialogCancelled ();
- }
- });
- };
- }
-
-
- public void Relayout (CGSize new_window_size)
- {
- this.web_view.Frame = new CGRect (this.web_view.Frame.Location,
- new CGSize (new_window_size.Width, new_window_size.Height - TitlebarHeight - 39));
-
- this.cover.Frame = new CGRect (this.cover.Frame.Location,
- new CGSize (new_window_size.Width, new_window_size.Height - TitlebarHeight - 39));
-
- this.background.Frame = new CGRect (this.background.Frame.Location,
- new CGSize (new_window_size.Width, new_window_size.Height - TitlebarHeight - 37));
-
- this.size_label.Frame = new CGRect (
- new CGPoint (this.size_label.Frame.X, new_window_size.Height - TitlebarHeight - 30),
- this.size_label.Frame.Size);
-
- this.size_label_value.Frame = new CGRect (
- new CGPoint (this.size_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 27),
- this.size_label_value.Frame.Size);
-
- this.history_label.Frame = new CGRect (
- new CGPoint (this.history_label.Frame.X, new_window_size.Height - TitlebarHeight - 30),
- this.history_label.Frame.Size);
-
- this.history_label_value.Frame = new CGRect (
- new CGPoint (this.history_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 27),
- this.history_label_value.Frame.Size);
-
- this.progress_indicator.Frame = new CGRect (
- new CGPoint (new_window_size.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10),
- this.progress_indicator.Frame.Size);
-
- this.popup_button.RemoveFromSuperview (); // Needed to prevent redraw glitches
-
- this.popup_button.Frame = new CGRect (
- new CGPoint (new_window_size.Width - this.popup_button.Frame.Width - 12, new_window_size.Height - TitlebarHeight - 33),
- this.popup_button.Frame.Size);
-
- ContentView.AddSubview (this.popup_button);
}
@@ -340,15 +251,18 @@ namespace SparkleShare {
html = html.Replace ("<!-- $a-color -->", "#009ff8");
html = html.Replace ("<!-- $a-hover-color -->", "#009ff8");
html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path);
- html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png");
- html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png");
- html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
- html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png");
+ html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added.png");
+ html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted.png");
+ html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited.png");
+ html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved.png");
this.web_view = new WebView (new CGRect (0, 0, 481, 579), "", "") {
Frame = new CGRect (new CGPoint (0, 0), new CGSize (ContentView.Frame.Width, ContentView.Frame.Height - 39))
};
+ this.web_view.AutoresizingMask = NSViewResizingMask.WidthSizable | NSViewResizingMask.HeightSizable;
+ this.web_view.Preferences.PlugInsEnabled = false;
+
this.web_view.MainFrame.LoadHtmlString (html, new NSUrl (""));
this.web_view.PolicyDelegate = new SparkleWebPolicyDelegate ();
@@ -360,6 +274,88 @@ namespace SparkleShare {
}
+ void HideWindowEventDelegate ()
+ {
+ SparkleShare.Controller.Invoke (() => {
+ this.progress_indicator.Hidden = true;
+ PerformClose (this);
+
+ });
+ }
+
+
+ void ShowWindowEventDelegate ()
+ {
+ SparkleShare.Controller.Invoke(() => OrderFrontRegardless ());
+ }
+
+
+ void UpdateChooserEventDelegate (string [] folders)
+ {
+ SparkleShare.Controller.Invoke(() => UpdateChooser (folders));
+ }
+
+
+ void UpdateChooserEnablementEventDelegate (bool enabled)
+ {
+ SparkleShare.Controller.Invoke(() => { this.popup_button.Enabled = enabled; });
+ }
+
+
+ void UpdateContentEventDelegate (string html)
+ {
+ SparkleShare.Controller.Invoke(() => {
+ this.cover.RemoveFromSuperview ();
+ this.progress_indicator.Hidden = true;
+ UpdateContent (html);
+ });
+ }
+
+
+ void ContentLoadingEventDelegate ()
+ {
+ SparkleShare.Controller.Invoke(() => {
+ this.web_view.RemoveFromSuperview ();
+
+ // FIXME: Hack to hide that the WebView sometimes doesn't disappear
+ ContentView.AddSubview (this.cover);
+ this.progress_indicator.Hidden = false;
+ this.progress_indicator.StartAnimation (this);
+ });
+ }
+
+
+ void UpdateSizeInfoEventDelegate (string size, string history_size)
+ {
+ SparkleShare.Controller.Invoke(() => {
+ this.size_label_value.StringValue = size;
+ this.history_label_value.StringValue = history_size;
+ });
+ }
+
+
+ void ShowSaveDialogEventDelegate (string file_name, string target_folder_path)
+ {
+ SparkleShare.Controller.Invoke(() => {
+ NSSavePanel panel = new NSSavePanel () {
+ DirectoryUrl = new NSUrl (target_folder_path, isDir: true),
+ NameFieldStringValue = file_name,
+ ParentWindow = this,
+ Title = "Restore from History",
+ PreventsApplicationTerminationWhenModal = false
+ };
+
+ if ((NSPanelButtonType) (int) panel.RunModal () == NSPanelButtonType.Ok) {
+ string target_file_path = Path.Combine (panel.DirectoryUrl.RelativePath, panel.NameFieldStringValue);
+ Controller.SaveDialogCompleted(target_file_path);
+
+ } else {
+ Controller.SaveDialogCancelled();
+ }
+ });
+ }
+
+
public override void OrderFrontRegardless ()
{
NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
@@ -376,7 +372,7 @@ namespace SparkleShare {
}
- public class SparkleEventsDelegate : NSWindowDelegate {
+ class SparkleEventsDelegate : NSWindowDelegate {
public event WindowResizedHandler WindowResized = delegate { };
public delegate void WindowResizedHandler (CGSize new_window_size);
@@ -395,7 +391,7 @@ namespace SparkleShare {
}
- public class SparkleWebPolicyDelegate : WebPolicyDelegate {
+ class SparkleWebPolicyDelegate : WebPolicyDelegate {
public event LinkClickedHandler LinkClicked = delegate { };
public delegate void LinkClickedHandler (string href);
diff --git a/SparkleShare/Mac/UserInterface/Note.cs b/SparkleShare/Mac/UserInterface/Note.cs
index 9e5c247..0e65797 100644
--- a/SparkleShare/Mac/UserInterface/Note.cs
+++ b/SparkleShare/Mac/UserInterface/Note.cs
@@ -38,7 +38,7 @@ namespace SparkleShare {
public Note () : base ()
{
- SetFrame (new CGRect (0, 0, 480, 240), true);
+ SetFrame (new CGRect (0, 0, 480, 240), display: true);
Center ();
Delegate = new SparkleNoteDelegate ();
diff --git a/SparkleShare/Mac/UserInterface/Setup.cs b/SparkleShare/Mac/UserInterface/Setup.cs
index 75aca2a..614960e 100644
--- a/SparkleShare/Mac/UserInterface/Setup.cs
+++ b/SparkleShare/Mac/UserInterface/Setup.cs
@@ -273,7 +273,7 @@ namespace SparkleShare {
};
}
- TableView.SelectRow (Controller.SelectedPresetIndex, false);
+ TableView.SelectRow (Controller.SelectedPresetIndex, byExtendingSelection: false);
TableView.ScrollRowToVisible (Controller.SelectedPresetIndex);
MakeFirstResponder ((NSResponder) TableView);
diff --git a/SparkleShare/Mac/UserInterface/SetupWindow.cs b/SparkleShare/Mac/UserInterface/SetupWindow.cs
index 83ffa54..18f841f 100644
--- a/SparkleShare/Mac/UserInterface/SetupWindow.cs
+++ b/SparkleShare/Mac/UserInterface/SetupWindow.cs
@@ -38,7 +38,7 @@ namespace SparkleShare {
public SetupWindow ()
{
- SetFrame (new CGRect (0, 0, 640, 420), true);
+ SetFrame (new CGRect (0, 0, 640, 420), display: true);
StyleMask = NSWindowStyle.Titled;
MaxSize = new CGSize (640, 420);
@@ -120,7 +120,7 @@ namespace SparkleShare {
public override void OrderFrontRegardless ()
{
- NSApplication.SharedApplication.AddWindowsItem (this, "SparkleShare Setup", false);
+ NSApplication.SharedApplication.AddWindowsItem (this, "SparkleShare Setup", isFilename: false);
NSApplication.SharedApplication.ActivateIgnoringOtherApps (true);
MakeKeyAndOrderFront (this);
diff --git a/SparkleShare/Mac/UserInterface/UserInterface.cs b/SparkleShare/Mac/UserInterface/UserInterface.cs
index 876a178..05dd05a 100755
--- a/SparkleShare/Mac/UserInterface/UserInterface.cs
+++ b/SparkleShare/Mac/UserInterface/UserInterface.cs
@@ -71,13 +71,7 @@ namespace SparkleShare {
public partial class AppDelegate : NSApplicationDelegate {
-
- public override void WillTerminate (NSNotification notification)
- {
- SparkleShare.Controller.Quit ();
- }
-
public override bool ApplicationShouldHandleReopen (NSApplication sender, bool has_visible_windows)
{
if (!has_visible_windows)
diff --git a/SparkleShare/Mac/checkGit.sh b/SparkleShare/Mac/checkGit.sh
index c882fbe..2a18a1f 100755
--- a/SparkleShare/Mac/checkGit.sh
+++ b/SparkleShare/Mac/checkGit.sh
@@ -11,17 +11,29 @@ function abspath()
esac
}
+
+LINE=$(cat ${projectFolder}/git.download)
+TMP=()
+
+for val in $LINE ; do
+ TMP+=("$val")
+done
+
export projectFolder=$(dirname $0)
export projectFolder=$(abspath ${projectFolder})
-export gitDownload=$(cat ${projectFolder}/git.download)
+export gitDownload="${TMP[0]}"
+export gitSHA256="${TMP[1]}"
set -e
+
if [ ! -f ${projectFolder}/git.tar.gz ]
then
- curl -s -L ${gitDownload} > git.tar.gz
+ curl --silent --location ${gitDownload} > git.tar.gz
test -e git.tar.gz || { echo "Failed to download git"; exit 1; }
+ printf "${gitSHA256} git.tar.gz" | shasum --check --algorithm 256
+
mkdir git/
tar xzf git.tar.gz --directory git/
tar czf git.tar.gz git/
diff --git a/SparkleShare/Mac/git.download b/SparkleShare/Mac/git.download
index 556ff9a..6d45ac8 100644
--- a/SparkleShare/Mac/git.download
+++ b/SparkleShare/Mac/git.download
@@ -1 +1 @@
-https://github.com/desktop/dugite-native/releases/download/v2.15.1-rc2/dugite-native-v2.15.1-macOS-56.tar.gz
+https://github.com/desktop/dugite-native/releases/download/v2.16.2/dugite-native-v2.16.2-macOS-119.tar.gz 65d608eb16e0e262bae6bd7828b28cf640455e949003fec94c1233e084b9ccde
diff --git a/SparkleShare/Makefile.am b/SparkleShare/Makefile.am
deleted file mode 100755
index a53148d..0000000
--- a/SparkleShare/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBDIRS = Linux \
- Common
diff --git a/SparkleShare/Windows/SparkleShare.wxs b/SparkleShare/Windows/SparkleShare.wxs
index 6ca687b..aadac8b 100644
--- a/SparkleShare/Windows/SparkleShare.wxs
+++ b/SparkleShare/Windows/SparkleShare.wxs
@@ -2,7 +2,7 @@
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Name='SparkleShare' Id='184950D5-67F6-4D06-9717-7E2F1607A7B0' UpgradeCode='D3DF1D99-87F5-47A7-A349-863DD6E4B73A'
- Language='1033' Codepage='1252' Version='2.0.1' Manufacturer='SparkleShare'>
+ Language='1033' Codepage='1252' Version='3.28.0' Manufacturer='SparkleShare'>
<Package Id='*' Keywords='Installer' Description="SparkleShare Setup" Manufacturer='SparkleShare'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
diff --git a/SparkleShare/Windows/UserInterface/About.cs b/SparkleShare/Windows/UserInterface/About.cs
index 85f6cf0..36c1ecc 100644
--- a/SparkleShare/Windows/UserInterface/About.cs
+++ b/SparkleShare/Windows/UserInterface/About.cs
@@ -16,7 +16,7 @@
using System;
-using System.ComponentModel;
+using System.ComponentModel;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
@@ -38,7 +38,7 @@ namespace SparkleShare {
Height = 288;
Width = 720;
Icon = UserInterfaceHelpers.GetImageSource("sparkleshare-app", "ico");
-
+
WindowStartupLocation = WindowStartupLocation.CenterScreen;
Closing += Close;
@@ -73,10 +73,10 @@ namespace SparkleShare {
Width = 720,
Height = 260
};
-
+
image.Source = UserInterfaceHelpers.GetImageSource ("about");
-
-
+
+
Label version = new Label () {
Content = "version " + Controller.RunningVersion,
FontSize = 11,
@@ -88,7 +88,7 @@ namespace SparkleShare {
FontSize = 11,
Foreground = new SolidColorBrush (Color.FromArgb (128, 255, 255, 255))
};
-
+
TextBlock credits = new TextBlock () {
FontSize = 11,
Foreground = new SolidColorBrush (Colors.White),
@@ -99,14 +99,14 @@ namespace SparkleShare {
TextWrapping = TextWrapping.Wrap,
Width = 318
};
-
+
SparkleLink website_link = new SparkleLink ("Website", Controller.WebsiteLinkAddress);
SparkleLink credits_link = new SparkleLink ("Credits", Controller.CreditsLinkAddress);
SparkleLink report_problem_link = new SparkleLink ("Report a problem", Controller.ReportProblemLinkAddress);
SparkleLink debug_log_link = new SparkleLink ("Debug log", Controller.DebugLogLinkAddress);
Canvas canvas = new Canvas ();
-
+
canvas.Children.Add (image);
Canvas.SetLeft (image, 0);
Canvas.SetTop (image, 0);
@@ -114,18 +114,18 @@ namespace SparkleShare {
canvas.Children.Add (version);
Canvas.SetLeft (version, 289);
Canvas.SetTop (version, 92);
-
+
canvas.Children.Add (this.updates);
Canvas.SetLeft (this.updates, 289);
Canvas.SetTop (this.updates, 109);
-
+
canvas.Children.Add (credits);
Canvas.SetLeft (credits, 294);
- Canvas.SetTop (credits, 142);
+ Canvas.SetTop (credits, 142);
canvas.Children.Add (website_link);
Canvas.SetLeft (website_link, 289);
- Canvas.SetTop (website_link, 222);
+ Canvas.SetTop (website_link, 222);
canvas.Children.Add (credits_link);
Canvas.SetLeft (credits_link, 289 + website_link.ActualWidth + 60);
@@ -133,21 +133,21 @@ namespace SparkleShare {
canvas.Children.Add (report_problem_link);
Canvas.SetLeft (report_problem_link, 289 + website_link.ActualWidth + credits_link.ActualWidth + 115);
- Canvas.SetTop (report_problem_link, 222);
+ Canvas.SetTop (report_problem_link, 222);
canvas.Children.Add (debug_log_link);
Canvas.SetLeft (debug_log_link, 289 + website_link.ActualWidth + credits_link.ActualWidth +
report_problem_link.ActualWidth + 220);
- Canvas.SetTop (debug_log_link, 222);
-
+ Canvas.SetTop (debug_log_link, 222);
+
Content = canvas;
}
-
-
+
+
private void Close (object sender, CancelEventArgs args)
{
Controller.WindowClosed ();
- args.Cancel = true;
+ args.Cancel = true;
}
}
@@ -177,7 +177,7 @@ namespace SparkleShare {
MouseUp += delegate {
SparkleShare.Controller.OpenWebsite (url);
- };
+ };
}
}
}
diff --git a/SparkleShare/meson.build b/SparkleShare/meson.build
new file mode 100644
index 0000000..836abb7
--- /dev/null
+++ b/SparkleShare/meson.build
@@ -0,0 +1,5 @@
+subdir('Linux')
+subdir('Common/Images')
+subdir('Common/HTML')
+subdir('Common/Presets')
+
diff --git a/Sparkles/AuthenticationInfo.cs b/Sparkles/AuthenticationInfo.cs
index bb59e82..9bfaafe 100644
--- a/Sparkles/AuthenticationInfo.cs
+++ b/Sparkles/AuthenticationInfo.cs
@@ -2,8 +2,8 @@
// Copyright (C) 2010 Hylke Bons <hi@planetpeanut.uk>
//
// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation, either version 3 of the
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
diff --git a/Sparkles/BaseFetcher.cs b/Sparkles/BaseFetcher.cs
index ae2be18..0cb1b90 100644
--- a/Sparkles/BaseFetcher.cs
+++ b/Sparkles/BaseFetcher.cs
@@ -127,7 +127,7 @@ namespace Sparkles {
try {
if (Directory.Exists (TargetFolder))
- Directory.Delete (TargetFolder, true);
+ Directory.Delete (TargetFolder, recursive: true);
} catch (IOException) {
errors.Add ("\"" + TargetFolder + "\" is read-only.");
diff --git a/Sparkles/BaseListener.cs b/Sparkles/BaseListener.cs
index 26c3001..bd1a3f9 100644
--- a/Sparkles/BaseListener.cs
+++ b/Sparkles/BaseListener.cs
@@ -2,8 +2,8 @@
// Copyright (C) 2010 Hylke Bons <hi@planetpeanut.uk>
//
// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation, either version 3 of the
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
@@ -33,7 +33,7 @@ namespace Sparkles {
public abstract class BaseListener {
public event Action Connected = delegate { };
-
+
public event DisconnectedEventHandler Disconnected = delegate { };
public delegate void DisconnectedEventHandler (DisconnectReason reason);
diff --git a/Sparkles/BaseRepository.cs b/Sparkles/BaseRepository.cs
index efe95e7..0883292 100644
--- a/Sparkles/BaseRepository.cs
+++ b/Sparkles/BaseRepository.cs
@@ -664,7 +664,7 @@ namespace Sparkles {
// this.listener.Dispose ();
- if (!UseCustomWatcher)
+ if (!UseCustomWatcher && this.watcher != null)
this.watcher.Dispose ();
}
}
diff --git a/Sparkles/ChangeSet.cs b/Sparkles/ChangeSet.cs
index 7a98e7b..8358012 100644
--- a/Sparkles/ChangeSet.cs
+++ b/Sparkles/ChangeSet.cs
@@ -44,7 +44,7 @@ namespace Sparkles {
public string ToMessage ()
{
string message = "added: {0}";
-
+
switch (Changes [0].Type) {
case ChangeType.Edited: message = "edited: {0}"; break;
case ChangeType.Deleted: message = "deleted: {0}"; break;
@@ -64,7 +64,7 @@ namespace Sparkles {
public ChangeType Type;
public DateTime Timestamp;
public bool IsFolder;
-
+
public string Path;
public string MovedToPath;
}
diff --git a/Sparkles/Command.cs b/Sparkles/Command.cs
index 3a24592..b186a7e 100644
--- a/Sparkles/Command.cs
+++ b/Sparkles/Command.cs
@@ -26,7 +26,7 @@ namespace Sparkles {
bool write_output;
- public Command (string path, string args) : this (path, args, true)
+ public Command (string path, string args) : this (path, args, write_output: true)
{
}
@@ -52,7 +52,7 @@ namespace Sparkles {
{
string folder = "";
- if (!string.IsNullOrEmpty (StartInfo.WorkingDirectory))
+ if (StartInfo.WorkingDirectory != Path.GetTempPath ())
folder = Path.GetFileName (StartInfo.WorkingDirectory) + " | ";
if (write_output)
diff --git a/Sparkles/Configuration.cs b/Sparkles/Configuration.cs
index e29c440..c1e31ed 100644
--- a/Sparkles/Configuration.cs
+++ b/Sparkles/Configuration.cs
@@ -16,9 +16,10 @@
using System;
-using System.IO;
using System.Collections.Generic;
+using System.IO;
using System.Xml;
+using System.Xml.Linq;
namespace Sparkles {
@@ -27,7 +28,7 @@ namespace Sparkles {
private static Lazy<Configuration> ConfigLazy = new Lazy<Configuration> (() => {
string app_data_path = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
- if (InstallationInfo.OperatingSystem != OS.Windows && InstallationInfo.OperatingSystem != OS.Mac)
+ if (InstallationInfo.OperatingSystem != OS.Windows && InstallationInfo.OperatingSystem != OS.macOS)
app_data_path = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), ".config");
string config_path = Path.Combine (app_data_path, "org.sparkleshare.SparkleShare");
@@ -42,6 +43,7 @@ namespace Sparkles {
public readonly string FilePath;
public readonly string TmpPath;
public readonly string BinPath;
+
public readonly string LogFilePath;
@@ -115,11 +117,10 @@ namespace Sparkles {
CreateInitialConfig ();
} else {
- throw new XmlException (FilePath + " does not contain a valid config XML structure.");
+ throw;
}
} finally {
- Load (FilePath);
TmpPath = Path.Combine (DirectoryPath, "tmp");
Directory.CreateDirectory (TmpPath);
}
@@ -138,17 +139,16 @@ namespace Sparkles {
user_name = user_name.TrimEnd (',');
}
- // TODO: Don't do this manually
- string n = Environment.NewLine;
- File.WriteAllText (FilePath,
- "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + n +
- "<sparkleshare>" + n +
- " <user>" + n +
- " <name>" + user_name + "</name>" + n +
- " <email>Unknown</email>" + n +
- " </user>" + n +
- " <notifications>True</notifications>" + n +
- "</sparkleshare>");
+ XElement xml =
+ new XElement ("sparkleshare",
+ new XElement ("user",
+ new XElement ("name", user_name),
+ new XElement ("email", "Unknown")
+ ),
+ new XElement ("notifications", bool.TrueString)
+ );
+
+ LoadXml (xml.ToString ());
}
@@ -351,9 +351,6 @@ namespace Sparkles {
void Save ()
{
- if (!File.Exists (FilePath))
- throw new FileNotFoundException (FilePath + " does not exist");
-
Save (FilePath);
Logger.LogInfo ("Config", "Wrote to '" + FilePath + "'");
}
diff --git a/Sparkles/Git/GitCommand.cs b/Sparkles/Git/Git.Command.cs
index be604e6..ba314c7 100644
--- a/Sparkles/Git/GitCommand.cs
+++ b/Sparkles/Git/Git.Command.cs
@@ -2,8 +2,8 @@
// Copyright (C) 2010 Hylke Bons <hi@planetpeanut.uk>
//
// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation, either version 3 of the
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
@@ -93,6 +93,12 @@ namespace Sparkles.Git {
SetEnvironmentVariable ("GIT_SSH_COMMAND", GIT_SSH_COMMAND);
SetEnvironmentVariable ("GIT_TERMINAL_PROMPT", "0");
+
+ // Don't let Git try to read the config options in PREFIX/etc or ~
+ SetEnvironmentVariable ("GIT_CONFIG_NOSYSTEM", "1");
+ SetEnvironmentVariable ("PREFIX", "");
+ SetEnvironmentVariable ("HOME", "");
+
SetEnvironmentVariable ("LANG", "en_US");
}
diff --git a/Sparkles/Git/GitFetcher.cs b/Sparkles/Git/Git.Fetcher.cs
index a737763..81bcfd5 100644
--- a/Sparkles/Git/GitFetcher.cs
+++ b/Sparkles/Git/Git.Fetcher.cs
@@ -151,7 +151,7 @@ namespace Sparkles.Git {
if (Directory.Exists (TargetFolder)) {
try {
- Directory.Delete (TargetFolder, true /* Recursive */ );
+ Directory.Delete (TargetFolder, recursive: true);
Logger.LogInfo ("Fetcher", "Deleted '" + TargetFolder + "'");
} catch (Exception e) {
@@ -225,7 +225,7 @@ namespace Sparkles.Git {
string git_lfs_tmp_path = Path.Combine (Configuration.DefaultConfiguration.TmpPath, "lfs");
if (Directory.Exists (git_lfs_tmp_path))
- Directory.Delete (git_lfs_tmp_path, true);
+ Directory.Delete (git_lfs_tmp_path, recursive: true);
return identifier;
}
@@ -336,10 +336,10 @@ namespace Sparkles.Git {
{
string [] settings = {
"core.autocrlf input",
- "core.quotepath false", // Don't quote "unusual" characters in path names
+ "core.quotepath false", // For commands to output Unicode characters "as is". e.g. '"h\303\251"' becomes 'hé'.
+ "core.precomposeunicode true", // Use the same Unicode form on all filesystems
"core.ignorecase false", // Be case sensitive explicitly to work on Mac
"core.filemode false", // Ignore permission changes
- "core.precomposeunicode true", // Use the same Unicode form on all filesystems
"core.safecrlf false",
"core.excludesfile \"\"",
"core.packedGitLimit 128m", // Some memory limiting options
@@ -414,20 +414,20 @@ namespace Sparkles.Git {
void InstallGitLFS ()
{
- var git_config_required = new GitCommand (TargetFolder, "config filter.lfs.required true");
+ var git_config_required = new GitCommand (TargetFolder, "config filter.lfs.required true");
string GIT_SSH_COMMAND = GitCommand.FormatGitSSHCommand (auth_info);
string smudge_command;
string clean_command;
- if (InstallationInfo.OperatingSystem == OS.Mac || InstallationInfo.OperatingSystem == OS.Windows) {
+ if (InstallationInfo.OperatingSystem == OS.macOS || InstallationInfo.OperatingSystem == OS.Windows) {
smudge_command = "env GIT_SSH_COMMAND='" + GIT_SSH_COMMAND + "' " +
Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " smudge %f";
clean_command = Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " clean %f";
} else {
- smudge_command = "env GIT_SSH_COMMAND='" + GIT_SSH_COMMAND + "' git-lfs smudge %f";
+ smudge_command = "env GIT_SSH_COMMAND='" + GIT_SSH_COMMAND + "' git-lfs smudge %f";
clean_command = "git-lfs clean %f";
}
@@ -436,7 +436,7 @@ namespace Sparkles.Git {
var git_config_clean = new GitCommand (TargetFolder,
string.Format ("config filter.lfs.clean '{0}'", clean_command));
-
+
git_config_required.StartAndWaitForExit ();
git_config_clean.StartAndWaitForExit ();
git_config_smudge.StartAndWaitForExit ();
diff --git a/Sparkles/Git/GitRepository.cs b/Sparkles/Git/Git.Repository.cs
index d0ef7d8..2588d82 100644
--- a/Sparkles/Git/GitRepository.cs
+++ b/Sparkles/Git/Git.Repository.cs
@@ -2,8 +2,8 @@
// Copyright (C) 2010 Hylke Bons <hi@planetpeanut.uk>
//
// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as
-// published by the Free Software Foundation, either version 3 of the
+// it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
@@ -34,7 +34,7 @@ namespace Sparkles.Git {
string branch {
get {
- if (!string.IsNullOrEmpty (this.cached_branch))
+ if (!string.IsNullOrEmpty (this.cached_branch))
return this.cached_branch;
var git = new GitCommand (LocalPath, "config core.ignorecase true");
@@ -44,7 +44,7 @@ namespace Sparkles.Git {
while (this.in_merge && HasLocalChanges) {
try {
ResolveConflict ();
-
+
} catch (IOException e) {
Logger.LogInfo ("Git", Name + " | Failed to resolve conflict, trying again...", e);
}
@@ -81,6 +81,8 @@ namespace Sparkles.Git {
git_config = new GitCommand (LocalPath, "config core.sshCommand " + GitCommand.FormatGitSSHCommand (auth_info));
git_config.StartAndWaitForExit();
+
+ PrepareGitLFS ();
}
@@ -98,11 +100,16 @@ namespace Sparkles.Git {
get {
string file_path = Path.Combine (LocalPath, ".git", "info", "size");
+ if (!File.Exists (file_path))
+ File.WriteAllText (file_path, "0");
+
+ string size = File.ReadAllText (file_path);
+
try {
- string size = File.ReadAllText (file_path);
return double.Parse (size);
- } catch {
+ } catch (Exception e) {
+ Logger.LogInfo ("Git", Name + " | Failed to parse " + file_path, e);
return 0;
}
}
@@ -113,11 +120,16 @@ namespace Sparkles.Git {
get {
string file_path = Path.Combine (LocalPath, ".git", "info", "history_size");
+ if (!File.Exists (file_path))
+ File.WriteAllText (file_path, "0");
+
+ string size = File.ReadAllText (file_path);
+
try {
- string size = File.ReadAllText (file_path);
return double.Parse (size);
- } catch {
+ } catch (Exception e) {
+ Logger.LogInfo ("Git", Name + " | Failed to parse " + file_path, e);
return 0;
}
}
@@ -175,7 +187,7 @@ namespace Sparkles.Git {
Error = ErrorStatus.None;
return true;
-
+
} else {
Logger.LogInfo ("Git", Name + " | Remote " + remote_revision + " is already in our history");
return false;
@@ -195,7 +207,7 @@ namespace Sparkles.Git {
return false;
}
- string message = base.status_message.Replace ("\"", "\\\"");
+ string message = base.status_message;
if (string.IsNullOrEmpty (message))
message = FormatCommitMessage ();
@@ -203,25 +215,7 @@ namespace Sparkles.Git {
if (message != null)
Commit (message);
- string pre_push_hook_path = Path.Combine (LocalPath, ".git", "hooks", "pre-push");
- string pre_push_hook_content;
-
- // The pre-push hook may have been changed by Git LFS, overwrite it to use our own configuration
- if (InstallationInfo.OperatingSystem == OS.Mac || InstallationInfo.OperatingSystem == OS.Windows) {
- pre_push_hook_content =
- "#!/bin/sh" + Environment.NewLine +
- "env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
- Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " pre-push \"$@\"";
-
- } else {
- pre_push_hook_content =
- "#!/bin/sh" + Environment.NewLine +
- "env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
- "git-lfs pre-push \"$@\"";
- }
-
- Directory.CreateDirectory (Path.GetDirectoryName (pre_push_hook_path));
- File.WriteAllText (pre_push_hook_path, pre_push_hook_content);
+ PrepareGitLFS ();
var git_push = new GitCommand (LocalPath, string.Format ("push --all --progress origin", RemoteUrl), auth_info);
git_push.StartInfo.RedirectStandardError = true;
@@ -247,7 +241,7 @@ namespace Sparkles.Git {
string lfs_is_behind_file_path = Path.Combine (LocalPath, ".git", "lfs", "is_behind");
if (StorageType == StorageType.LargeFiles)
- File.Create (lfs_is_behind_file_path);
+ File.Create (lfs_is_behind_file_path).Close ();
var git_fetch = new GitCommand (LocalPath, "fetch --progress origin " + branch, auth_info);
@@ -369,17 +363,17 @@ namespace Sparkles.Git {
// Commits the made changes
void Commit (string message)
{
- GitCommand git;
+ GitCommand git_config;
string user_name = base.local_config.User.Name;
string user_email = base.local_config.User.Email;
if (!this.user_is_set) {
- git = new GitCommand (LocalPath, "config user.name \"" + user_name + "\"");
- git.StartAndWaitForExit ();
+ git_config = new GitCommand (LocalPath, "config user.name \"" + user_name + "\"");
+ git_config.StartAndWaitForExit ();
- git = new GitCommand (LocalPath, "config user.email \"" + user_email + "\"");
- git.StartAndWaitForExit ();
+ git_config = new GitCommand (LocalPath, "config user.email \"" + user_email + "\"");
+ git_config.StartAndWaitForExit ();
this.user_is_set = true;
}
@@ -392,11 +386,26 @@ namespace Sparkles.Git {
user_email = user_email.AESEncrypt (password);
}
- git = new GitCommand (LocalPath,
- string.Format ("commit --all --message=\"{0}\" --author=\"{1} <{2}>\"",
- message, user_name, user_email));
+ GitCommand git_commit;
+ string message_file_path = Path.Combine (LocalPath, ".git", "info", "commit_message");
+
+ try {
+ File.WriteAllText (message_file_path, message);
+
+ // Commit from message stored in temporary file to avoid special character conflicts on the command line
+ git_commit = new GitCommand (LocalPath, string.Format ("commit --all --file=\"{0}\" --author=\"{1} <{2}>\"",
+ message_file_path, user_name, user_email));
+
+ } catch (IOException e) {
+ Logger.LogInfo ("Git", Name + " | Could not create commit message file: " + message_file_path, e);
+
+ // If committing with a temporary file fails, use a simple static commit message
+ git_commit = new GitCommand (LocalPath, string.Format ("commit --all --message=\"{0}\" --author=\"{1} <{2}>\"",
+ "Changes by SparkleShare", user_name, user_email));
+ }
- git.StartAndReadStandardOutput ();
+ git_commit.StartAndReadStandardOutput ();
+ File.Delete (message_file_path);
}
@@ -404,7 +413,7 @@ namespace Sparkles.Git {
bool Merge ()
{
string message = FormatCommitMessage ();
-
+
if (message != null) {
Add ();
Commit (message);
@@ -416,7 +425,7 @@ namespace Sparkles.Git {
if (this.in_merge) {
git = new GitCommand (LocalPath, "merge --abort");
git.StartAndWaitForExit ();
-
+
return false;
}
@@ -444,11 +453,11 @@ namespace Sparkles.Git {
git.StartAndWaitForExit ();
return false;
-
+
} else {
Logger.LogInfo ("Git", error_output);
Logger.LogInfo ("Git", Name + " | Conflict detected, trying to get out...");
-
+
while (this.in_merge && HasLocalChanges) {
try {
ResolveConflict ();
@@ -484,15 +493,14 @@ namespace Sparkles.Git {
// ?? unmerged, new files -> Stage the new files
var git_status = new GitCommand (LocalPath, "status --porcelain");
- string output = git_status.StartAndReadStandardOutput ();
+ string output = git_status.StartAndReadStandardOutput ();
string [] lines = output.Split ("\n".ToCharArray ());
bool trigger_conflict_event = false;
foreach (string line in lines) {
string conflicting_file_path = line.Substring (3);
- conflicting_file_path = EnsureSpecialCharacters (conflicting_file_path);
- conflicting_file_path = conflicting_file_path.Trim ("\"".ToCharArray ());
+ conflicting_file_path = conflicting_file_path.Trim ("\"".ToCharArray ());
// Remove possible rename indicators
string [] separators = {" -> \"", " -> "};
@@ -544,7 +552,7 @@ namespace Sparkles.Git {
string file_name_B = Path.GetFileNameWithoutExtension (conflicting_file_path) + clue_B + Path.GetExtension (conflicting_file_path);
string abs_conflicting_file_path = Path.Combine (LocalPath, conflicting_file_path);
-
+
string abs_file_path_A = Path.Combine (Path.GetDirectoryName (abs_conflicting_file_path), file_name_A);
string abs_file_path_B = Path.Combine (Path.GetDirectoryName (abs_conflicting_file_path), file_name_B);
@@ -581,15 +589,15 @@ namespace Sparkles.Git {
var git_add = new GitCommand (LocalPath, "add \"" + conflicting_file_path + "\"");
git_add.StartAndWaitForExit ();
-
+
// The local version has been modified, but the server version was removed
} else if (line.StartsWith ("UD")) {
-
+
// Recover our version
var git_theirs = new GitCommand (LocalPath, "checkout --ours \"" + conflicting_file_path + "\"");
git_theirs.StartAndWaitForExit ();
-
+
// Server and local versions were removed
} else if (line.StartsWith ("DD")) {
Logger.LogInfo ("Git", Name + " | No need to resolve: " + line);
@@ -597,7 +605,7 @@ namespace Sparkles.Git {
// New local files
} else if (line.StartsWith ("??")) {
Logger.LogInfo ("Git", Name + " | Found new file, no need to resolve: " + line);
-
+
} else {
Logger.LogInfo ("Git", Name + " | Don't know what to do with: " + line);
}
@@ -637,17 +645,16 @@ namespace Sparkles.Git {
// ...move it...
try {
File.Move (local_file_path, target_file_path);
-
- } catch {
- Logger.LogInfo ("Git",
- Name + " | Could not move \"" + local_file_path + "\" to \"" + target_file_path + "\"");
+
+ } catch (Exception e) {
+ string message = string.Format ("Failed to move \"{0}\" to \"{1}\"", local_file_path, target_file_path);
+ Logger.LogInfo ("Git", Name + " | " + message, e);
}
// ...and restore the most recent revision
git = new GitCommand (LocalPath, "checkout " + CurrentRevision + " \"" + path + "\"");
git.StartAndWaitForExit ();
-
if (target_file_path.StartsWith (LocalPath))
new Thread (() => OnFileActivity (null)).Start ();
}
@@ -668,279 +675,243 @@ namespace Sparkles.Git {
public override List<ChangeSet> GetChangeSets (string path)
{
return GetChangeSetsInternal (path);
- }
+ }
List<ChangeSet> GetChangeSetsInternal (string path)
{
var change_sets = new List <ChangeSet> ();
GitCommand git;
+ string log_args = "--since=1.month --name-status --date=iso --find-renames --no-merges --no-color";
+
if (path == null) {
- git = new GitCommand (LocalPath, "--no-pager log --since=1.month --raw --find-renames --date=iso " +
- "--format=medium --no-color --no-merges");
+ git = new GitCommand (LocalPath, "--no-pager log " + log_args);
} else {
path = path.Replace ("\\", "/");
-
- git = new GitCommand (LocalPath, "--no-pager log --raw --find-renames --date=iso " +
- "--format=medium --no-color --no-merges -- \"" + path + "\"");
+ git = new GitCommand (LocalPath, "--no-pager log " + log_args + " -- \"" + path + "\"");
}
string output = git.StartAndReadStandardOutput ();
if (path == null && string.IsNullOrWhiteSpace (output)) {
- git = new GitCommand (LocalPath, "--no-pager log -n 75 --raw --find-renames --date=iso " +
- "--format=medium --no-color --no-merges");
-
+ git = new GitCommand (LocalPath, "--no-pager log -n 75 " + log_args);
output = git.StartAndReadStandardOutput ();
}
- string [] lines = output.Split ("\n".ToCharArray ());
- List<string> entries = new List <string> ();
- // Split up commit entries
- int line_number = 0;
- bool first_pass = true;
- string entry = "", last_entry = "";
- foreach (string line in lines) {
- if (line.StartsWith ("commit") && !first_pass) {
- entries.Add (entry);
- entry = "";
- line_number = 0;
+ // Offset the output so our log_regex can be simpler
+ string commit_sep = "commit ";
- } else {
- first_pass = false;
- }
+ if (output.StartsWith (commit_sep))
+ output = output.Substring (commit_sep.Length) + "\n\n" + commit_sep;
- // Only parse first 250 files to prevent memory issues
- if (line_number < 250) {
- entry += line + "\n";
- line_number++;
- }
- last_entry = entry;
- }
+ MatchCollection matches = this.log_regex.Matches (output);
- entries.Add (last_entry);
+ foreach (Match match in matches) {
+ ChangeSet change_set = ParseChangeSet (match);
- // Parse commit entries
- foreach (string log_entry in entries) {
- Match match = this.log_regex.Match (log_entry);
+ if (change_set == null)
+ continue;
+
+ int count = 0;
+ foreach (string line in match.Groups ["files"].Value.Split ("\n".ToCharArray ())) {
+ if (count++ == 256)
+ break;
- if (!match.Success) {
- match = this.merge_regex.Match (log_entry);
+ Change change = ParseChange (line);
- if (!match.Success)
+ if (change == null)
continue;
+
+ change.Timestamp = change_set.Timestamp;
+ change_set.Changes.Add (change);
}
- ChangeSet change_set = new ChangeSet ();
- change_set.Folder = new SparkleFolder (Name);
- change_set.Revision = match.Groups [1].Value;
- change_set.User = new User (match.Groups [2].Value, match.Groups [3].Value);
+ if (path == null && change_sets.Count > 0) {
+ ChangeSet last_change_set = change_sets [change_sets.Count - 1];
- if (change_set.User.Name == "SparkleShare")
- continue;
+ // If a change set set already exists for this user and day, group into that one
+ if (change_set.Timestamp.Year == last_change_set.Timestamp.Year &&
+ change_set.Timestamp.Month == last_change_set.Timestamp.Month &&
+ change_set.Timestamp.Day == last_change_set.Timestamp.Day &&
+ change_set.User.Name.Equals (last_change_set.User.Name)) {
- change_set.RemoteUrl = RemoteUrl;
+ last_change_set.Changes.AddRange (change_set.Changes);
- if (StorageType == StorageType.Encrypted) {
- string password_file_path = Path.Combine (LocalPath, ".git", "info", "encryption_password");
- string password = File.ReadAllText (password_file_path);
+ if (DateTime.Compare (last_change_set.Timestamp, change_set.Timestamp) < 1) {
+ last_change_set.FirstTimestamp = last_change_set.Timestamp;
+ last_change_set.Timestamp = change_set.Timestamp;
+ last_change_set.Revision = change_set.Revision;
- try {
- change_set.User = new User (
- change_set.User.Name.AESDecrypt (password),
- change_set.User.Email.AESDecrypt (password));
+ } else {
+ last_change_set.FirstTimestamp = change_set.Timestamp;
+ }
- } catch (Exception e) {
- Console.WriteLine (e.StackTrace);
- change_set.User = new User (match.Groups [2].Value, match.Groups [3].Value);
+ } else {
+ change_sets.Add (change_set);
}
- }
- change_set.Timestamp = new DateTime (int.Parse (match.Groups [4].Value),
- int.Parse (match.Groups [5].Value), int.Parse (match.Groups [6].Value),
- int.Parse (match.Groups [7].Value), int.Parse (match.Groups [8].Value),
- int.Parse (match.Groups [9].Value));
+ } else if (path != null) {
+ // Don't show removals or moves in the history list of a file
+ var changes = new Change [change_set.Changes.Count];
+ change_set.Changes.CopyTo (changes);
- string time_zone = match.Groups [10].Value;
- int our_offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
- int their_offset = int.Parse (time_zone.Substring (0, 3));
- change_set.Timestamp = change_set.Timestamp.AddHours (their_offset * -1);
- change_set.Timestamp = change_set.Timestamp.AddHours (our_offset);
+ foreach (Change change in changes) {
+ if (!change.Path.Equals (path))
+ continue;
- string [] entry_lines = log_entry.Split ("\n".ToCharArray ());
+ if (change.Type == ChangeType.Deleted || change.Type == ChangeType.Moved)
+ change_set.Changes.Remove (change);
+ }
- // Parse file list. Lines containing file changes start with ":"
- foreach (string entry_line in entry_lines) {
- // Skip lines containing backspace characters
- if (!entry_line.StartsWith (":") || entry_line.Contains ("\\177"))
- continue;
+ change_sets.Add (change_set);
- string file_path = entry_line.Substring (39);
+ } else {
+ change_sets.Add (change_set);
+ }
+ }
- if (file_path.Equals (".sparkleshare"))
- continue;
+ return change_sets;
+ }
- string type_letter = entry_line [37].ToString ();
- bool change_is_folder = false;
- if (file_path.EndsWith (".empty")) {
- file_path = file_path.Substring (0, file_path.Length - ".empty".Length);
- change_is_folder = true;
- }
+ ChangeSet ParseChangeSet (Match match)
+ {
+ ChangeSet change_set = new ChangeSet ();
- try {
- file_path = EnsureSpecialCharacters (file_path);
-
- } catch (Exception e) {
- Logger.LogInfo ("Local", "Error parsing file name '" + file_path + "'", e);
- continue;
- }
+ // Set the name and email
+ if (match.Groups ["name"].Value == "SparkleShare")
+ return null;
- file_path = file_path.Replace ("\\\"", "\"");
+ change_set.Folder = new SparkleFolder (Name);
+ change_set.Revision = match.Groups ["commit"].Value;
+ change_set.User = new User (match.Groups ["name"].Value, match.Groups ["email"].Value);
+ change_set.RemoteUrl = RemoteUrl;
- Change change = new Change () {
- Path = file_path,
- IsFolder = change_is_folder,
- Timestamp = change_set.Timestamp,
- Type = ChangeType.Added
- };
+ if (StorageType == StorageType.Encrypted) {
+ string password_file_path = Path.Combine (LocalPath, ".git", "info", "encryption_password");
+ string password = File.ReadAllText (password_file_path);
- if (type_letter.Equals ("R")) {
- int tab_pos = entry_line.LastIndexOf ("\t");
- file_path = entry_line.Substring (42, tab_pos - 42);
- string to_file_path = entry_line.Substring (tab_pos + 1);
+ try {
+ change_set.User = new User (
+ change_set.User.Name.AESDecrypt (password),
+ change_set.User.Email.AESDecrypt (password));
- try {
- file_path = EnsureSpecialCharacters (file_path);
-
- } catch (Exception e) {
- Logger.LogInfo ("Local", "Error parsing file name '" + file_path + "'", e);
- continue;
- }
+ } catch (Exception) {
+ change_set.User = new User (match.Groups ["name"].Value, match.Groups ["email"].Value);
+ }
+ }
- try {
- to_file_path = EnsureSpecialCharacters (to_file_path);
+ // Get the right date and time by offsetting the timezones
+ change_set.Timestamp = new DateTime (
+ int.Parse (match.Groups ["year"].Value), int.Parse (match.Groups ["month"].Value), int.Parse (match.Groups ["day"].Value),
+ int.Parse (match.Groups ["hour"].Value), int.Parse (match.Groups ["minute"].Value), int.Parse (match.Groups ["second"].Value));
- } catch (Exception e) {
- Logger.LogInfo ("Local", "Error parsing file name '" + to_file_path + "'", e);
- continue;
- }
+ string time_zone = match.Groups ["timezone"].Value;
+ int our_offset = TimeZone.CurrentTimeZone.GetUtcOffset (DateTime.Now).Hours;
+ int their_offset = int.Parse (time_zone.Substring (0, 3));
- file_path = file_path.Replace ("\\\"", "\"");
- to_file_path = to_file_path.Replace ("\\\"", "\"");
+ change_set.Timestamp = change_set.Timestamp.AddHours (their_offset * -1);
+ change_set.Timestamp = change_set.Timestamp.AddHours (our_offset);
- if (file_path.EndsWith (".empty")) {
- file_path = file_path.Substring (0, file_path.Length - 6);
- change_is_folder = true;
- }
+ return change_set;
+ }
- if (to_file_path.EndsWith (".empty")) {
- to_file_path = to_file_path.Substring (0, to_file_path.Length - 6);
- change_is_folder = true;
- }
-
- change.Path = file_path;
- change.MovedToPath = to_file_path;
- change.Type = ChangeType.Moved;
- } else if (type_letter.Equals ("M")) {
- change.Type = ChangeType.Edited;
+ Change ParseChange (string line)
+ {
+ // Skip lines containing backspace characters or the .sparkleshare file
+ if (line.Contains ("\\177") || line.Contains (".sparkleshare"))
+ return null;
- } else if (type_letter.Equals ("D")) {
- change.Type = ChangeType.Deleted;
- }
+ // File lines start with a change type letter and then a tab character
+ if (!line.StartsWith ("A\t") &&
+ !line.StartsWith ("M\t") &&
+ !line.StartsWith ("D\t") &&
+ !line.StartsWith ("R100\t")) {
- change_set.Changes.Add (change);
- }
+ return null;
+ }
- // Group commits per user, per day
- if (change_sets.Count > 0 && path == null) {
- ChangeSet last_change_set = change_sets [change_sets.Count - 1];
+ Change change = new Change () { Type = ChangeType.Added };
+ string file_path;
- if (change_set.Timestamp.Year == last_change_set.Timestamp.Year &&
- change_set.Timestamp.Month == last_change_set.Timestamp.Month &&
- change_set.Timestamp.Day == last_change_set.Timestamp.Day &&
- change_set.User.Name.Equals (last_change_set.User.Name)) {
+ int first_tab_pos = line.IndexOf ('\t');
+ int last_tab_pos = line.LastIndexOf ('\t');
- last_change_set.Changes.AddRange (change_set.Changes);
+ if (first_tab_pos == last_tab_pos) {
+ char type_letter = line [0];
- if (DateTime.Compare (last_change_set.Timestamp, change_set.Timestamp) < 1) {
- last_change_set.FirstTimestamp = last_change_set.Timestamp;
- last_change_set.Timestamp = change_set.Timestamp;
- last_change_set.Revision = change_set.Revision;
+ if (type_letter == 'M')
+ change.Type = ChangeType.Edited;
- } else {
- last_change_set.FirstTimestamp = change_set.Timestamp;
- }
+ if (type_letter == 'D')
+ change.Type = ChangeType.Deleted;
- } else {
- change_sets.Add (change_set);
- }
+ file_path = line.Substring (first_tab_pos + 1);
- } else {
- // Don't show removals or moves in the revision list of a file
- if (path != null) {
- List<Change> changes_to_skip = new List<Change> ();
+ } else {
+ change.Type = ChangeType.Moved;
- foreach (Change change in change_set.Changes) {
- if ((change.Type == ChangeType.Deleted || change.Type == ChangeType.Moved)
- && change.Path.Equals (path)) {
+ // The "to" and "from" file paths are separated by a tab
+ string [] parts = line.Split ("\t".ToCharArray ());
- changes_to_skip.Add (change);
- }
- }
+ file_path = parts [1];
+ string to_file_path = parts [2];
- foreach (Change change_to_skip in changes_to_skip)
- change_set.Changes.Remove (change_to_skip);
- }
-
- change_sets.Add (change_set);
- }
+ to_file_path = to_file_path.Replace ("\\\"", "\"");
+ change.MovedToPath = to_file_path;
}
- return change_sets;
- }
+ file_path = file_path.Replace ("\\\"", "\"");
+ change.Path = file_path;
+ string empty_name = ".empty";
- string EnsureSpecialCharacters (string path)
- {
- // The path is quoted if it contains special characters
- if (path.StartsWith ("\""))
- path = ResolveSpecialChars (path.Substring (1, path.Length - 2));
+ // Handle .empty files as if they were folders
+ if (change.Path.EndsWith (empty_name)) {
+ change.Path = change.Path.Substring (0, change.Path.Length - empty_name.Length);
+
+ if (change.Type == ChangeType.Moved)
+ change.MovedToPath = change.MovedToPath.Substring (0, change.MovedToPath.Length - empty_name.Length);
- return path;
+ change.IsFolder = true;
+ }
+
+ return change;
}
- string ResolveSpecialChars (string s)
+ // The pre-push hook may have been changed by Git LFS, overwrite it to use our own configuration
+ void PrepareGitLFS ()
{
- StringBuilder builder = new StringBuilder (s.Length);
- List<byte> codes = new List<byte> ();
-
- for (int i = 0; i < s.Length; i++) {
- while (s [i] == '\\' &&
- s.Length - i > 3 &&
- char.IsNumber (s [i + 1]) &&
- char.IsNumber (s [i + 2]) &&
- char.IsNumber (s [i + 3])) {
-
- codes.Add (Convert.ToByte (s.Substring (i + 1, 3), 8));
- i += 4;
- }
+ string pre_push_hook_path = Path.Combine (LocalPath, ".git", "hooks", "pre-push");
+ string pre_push_hook_content;
- if (codes.Count > 0) {
- builder.Append (Encoding.UTF8.GetString (codes.ToArray ()));
- codes.Clear ();
- }
+ if (InstallationInfo.OperatingSystem == OS.macOS || InstallationInfo.OperatingSystem == OS.Windows) {
+ pre_push_hook_content =
+ "#!/bin/sh" + Environment.NewLine +
+ "env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
+ Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " pre-push \"$@\"";
- builder.Append (s [i]);
+ } else {
+ pre_push_hook_content =
+ "#!/bin/sh" + Environment.NewLine +
+ "env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
+ "git-lfs pre-push \"$@\"";
+ }
+
+ if (InstallationInfo.OperatingSystem != OS.Windows) {
+ // TODO: Use proper API
+ var chmod = new Command ("chmod", "700 " + pre_push_hook_path);
+ chmod.StartAndWaitForExit ();
}
- return builder.ToString ();
+ Directory.CreateDirectory (Path.GetDirectoryName (pre_push_hook_path));
+ File.WriteAllText (pre_push_hook_path, pre_push_hook_content);
}
@@ -961,18 +932,18 @@ namespace Sparkles.Git {
continue;
string HEAD_file_path = Path.Combine (child_path, "HEAD");
-
+
if (File.Exists (HEAD_file_path)) {
File.Move (HEAD_file_path, HEAD_file_path + ".backup");
Logger.LogInfo ("Git", Name + " | Renamed " + HEAD_file_path);
}
-
+
continue;
}
-
+
PrepareDirectories (child_path);
}
-
+
if (Directory.GetFiles (path).Length == 0 &&
Directory.GetDirectories (path).Length == 0 &&
!path.Equals (LocalPath)) {
@@ -982,8 +953,8 @@ namespace Sparkles.Git {
File.WriteAllText (Path.Combine (path, ".empty"), "I'm a folder!");
File.SetAttributes (Path.Combine (path, ".empty"), FileAttributes.Hidden);
- } catch {
- Logger.LogInfo ("Git", Name + " | Failed adding empty folder " + path);
+ } catch (Exception e) {
+ Logger.LogInfo ("Git", Name + " | Failed adding empty folder " + path, e);
}
}
}
@@ -1001,34 +972,34 @@ namespace Sparkles.Git {
var git_status = new GitCommand (LocalPath, "status --porcelain");
git_status.Start ();
-
+
while (!git_status.StandardOutput.EndOfStream) {
string line = git_status.StandardOutput.ReadLine ();
- line = line.Trim ();
-
+ line = line.Trim ();
+
if (line.EndsWith (".empty") || line.EndsWith (".empty\""))
line = line.Replace (".empty", "");
Change change;
-
+
if (line.StartsWith ("R")) {
string path = line.Substring (3, line.IndexOf (" -> ") - 3).Trim ("\" ".ToCharArray ());
string moved_to_path = line.Substring (line.IndexOf (" -> ") + 4).Trim ("\" ".ToCharArray ());
-
+
change = new Change () {
Type = ChangeType.Moved,
- Path = EnsureSpecialCharacters (path),
- MovedToPath = EnsureSpecialCharacters (moved_to_path)
+ Path = path,
+ MovedToPath = moved_to_path
};
-
+
} else {
string path = line.Substring (2).Trim ("\" ".ToCharArray ());
- change = new Change () { Path = EnsureSpecialCharacters (path) };
+ change = new Change () { Path = path };
change.Type = ChangeType.Added;
if (line.StartsWith ("M")) {
change.Type = ChangeType.Edited;
-
+
} else if (line.StartsWith ("D")) {
change.Type = ChangeType.Deleted;
}
@@ -1036,7 +1007,7 @@ namespace Sparkles.Git {
changes.Add (change);
}
-
+
git_status.StandardOutput.ReadToEnd ();
git_status.WaitForExit ();
@@ -1051,8 +1022,8 @@ namespace Sparkles.Git {
foreach (Change change in ParseStatus ()) {
if (change.Type == ChangeType.Moved) {
- message += "< ‘" + EnsureSpecialCharacters (change.Path) + "’\n";
- message += "> ‘" + EnsureSpecialCharacters (change.MovedToPath) + "’\n";
+ message += "< ‘" + change.Path + "’\n";
+ message += "> ‘" + change.MovedToPath + "’\n";
} else {
switch (change.Type) {
@@ -1086,7 +1057,7 @@ namespace Sparkles.Git {
try {
foreach (DirectoryInfo directory in parent.GetDirectories ()) {
if (directory.FullName.IsSymlink () ||
- directory.Name.Equals (".git") ||
+ directory.Name.Equals (".git") ||
directory.Name.Equals ("rebase-apply")) {
continue;
@@ -1103,13 +1074,13 @@ namespace Sparkles.Git {
foreach (FileInfo file in parent.GetFiles ()) {
if (file.FullName.IsSymlink ())
continue;
-
+
if (file.Name.Equals (".empty"))
File.SetAttributes (file.FullName, FileAttributes.Hidden);
else
size += file.Length;
}
-
+
} catch (Exception e) {
Logger.LogInfo ("Local", "Error calculating file size", e);
}
@@ -1117,7 +1088,7 @@ namespace Sparkles.Git {
return size;
}
-
+
bool IsSymlink (string file)
{
FileAttributes attributes = File.GetAttributes (file);
@@ -1125,17 +1096,13 @@ namespace Sparkles.Git {
}
- Regex log_regex = new Regex (@"commit ([a-f0-9]{40})*\n" +
- "Author: (.+) <(.+)>\n" +
- "Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
- "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.[0-9]{4})\n" +
- "*", RegexOptions.Compiled);
-
- Regex merge_regex = new Regex (@"commit ([a-f0-9]{40})\n" +
- "Merge: [a-f0-9]{7} [a-f0-9]{7}\n" +
- "Author: (.+) <(.+)>\n" +
- "Date: ([0-9]{4})-([0-9]{2})-([0-9]{2}) " +
- "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.[0-9]{4})\n" +
- "*", RegexOptions.Compiled);
+ Regex log_regex = new Regex (
+ "(?'commit'[a-f0-9]{40})\n" +
+ "Author: (?'name'.+?) <(?'email'.+?)>\n" +
+ "Date: (?'year'[0-9]{4})-(?'month'[0-9]{2})-(?'day'[0-9]{2}) (?'hour'[0-9]{2}):(?'minute'[0-9]{2}):(?'second'[0-9]{2}) (?'timezone'.[0-9]{4})\n" +
+ "\n" +
+ " (?'message'.+?)\n" +
+ "\n" +
+ "(?'files'.+?)\n\ncommit ", RegexOptions.Singleline | RegexOptions.Compiled);
}
}
diff --git a/Sparkles/Git/Makefile.am b/Sparkles/Git/Makefile.am
deleted file mode 100755
index 864c471..0000000
--- a/Sparkles/Git/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-ASSEMBLY = Sparkles.Git
-TARGET = library
-
-LINK = -r:$(DIR_BIN)/Sparkles.dll
-
-SOURCES = \
- GitCommand.cs \
- GitFetcher.cs \
- GitRepository.cs
-
-install-data-hook:
- for ASM in $(EXTRA_BUNDLE); do \
- $(INSTALL) -m 0755 $$ASM $(DESTDIR)$(moduledir); \
- done;
-
-uninstall-hook:
- for ASM in $(EXTRA_BUNDLE); do \
- rm -f $(DESTDIR)$(moduledir)/`basename $$ASM`; \
- done;
-
-include $(top_srcdir)/build/build.mk
-
diff --git a/Sparkles/Git/Sparkles.Git.csproj b/Sparkles/Git/Sparkles.Git.csproj
index 96b9f93..755b133 100644
--- a/Sparkles/Git/Sparkles.Git.csproj
+++ b/Sparkles/Git/Sparkles.Git.csproj
@@ -74,11 +74,11 @@
</Target>
-->
<ItemGroup>
- <Compile Include="GitFetcher.cs" />
- <Compile Include="GitCommand.cs">
+ <Compile Include="Git.Fetcher.cs" />
+ <Compile Include="Git.Command.cs">
<SubType>Component</SubType>
</Compile>
- <Compile Include="GitRepository.cs" />
+ <Compile Include="Git.Repository.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Sparkles.csproj">
@@ -86,4 +86,4 @@
<Name>Sparkles</Name>
</ProjectReference>
</ItemGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/Sparkles/Git/meson.build b/Sparkles/Git/meson.build
new file mode 100644
index 0000000..b9d5507
--- /dev/null
+++ b/Sparkles/Git/meson.build
@@ -0,0 +1,10 @@
+sparkles_git_src = ['Git.Command.cs',
+ 'Git.Fetcher.cs',
+ 'Git.Repository.cs']
+
+sparkles_git = library('Sparkles.Git',
+ link_with: sparkles,
+ sources: sparkles_git_src,
+ install: true,
+ install_dir: install_dir)
+
diff --git a/Sparkles/InstallationInfo.Directory.cs b/Sparkles/InstallationInfo.Directory.cs
index 13e5bfe..f7e1bd7 100644
--- a/Sparkles/InstallationInfo.Directory.cs
+++ b/Sparkles/InstallationInfo.Directory.cs
@@ -18,7 +18,7 @@
using System.Reflection;
[assembly:AssemblyTitle ("Sparkles")]
-[assembly:AssemblyVersion ("2.0.1")]
+[assembly:AssemblyVersion ("3.28.0")]
[assembly:AssemblyCopyright ("Copyright (c) 2010 Hylke Bons and others")]
namespace Sparkles {
diff --git a/Sparkles/InstallationInfo.Directory.cs.in b/Sparkles/InstallationInfo.Directory.cs.in
index 7d83912..82a50f5 100755
--- a/Sparkles/InstallationInfo.Directory.cs.in
+++ b/Sparkles/InstallationInfo.Directory.cs.in
@@ -24,6 +24,6 @@ using System.Reflection;
namespace Sparkles {
public partial class InstallationInfo {
- public const string Directory = "@expanded_datadir@/sparkleshare";
+ public const string Directory = "@ABS_INSTALL_DIR@";
}
}
diff --git a/Sparkles/InstallationInfo.cs b/Sparkles/InstallationInfo.cs
index 274eddc..c3b47bc 100644
--- a/Sparkles/InstallationInfo.cs
+++ b/Sparkles/InstallationInfo.cs
@@ -22,7 +22,7 @@ namespace Sparkles {
public enum OS {
Unknown,
- Mac,
+ macOS,
Windows,
Ubuntu,
GNOME
@@ -43,13 +43,13 @@ namespace Sparkles {
return operating_system;
}
- var uname = new Command ("uname", "-a", false);
+ var uname = new Command ("uname", "-a", write_output: false);
string output = uname.StartAndReadStandardOutput ();
// Environment.OSVersion.Platform.PlatformID.MacOSX is broken in Mono
// for historical reasons, so check manually
if (output.StartsWith ("Darwin", StringComparison.InvariantCulture)) {
- operating_system = OS.Mac;
+ operating_system = OS.macOS;
} else if (output.Contains ("Ubuntu")) {
operating_system = OS.Ubuntu;
@@ -63,29 +63,37 @@ namespace Sparkles {
}
- public static string MacOSVersion ()
- {
- var uname = new Command ("sw_vers", "-productVersion", false);
- string output = uname.StartAndReadStandardOutput ();
- string version = output;
-
- // Parse the version number between the periods (e.g. "10.12.1" -> 12)
- output = output.Substring (output.IndexOf (".") + 1);
- output = output.Substring (0, output.LastIndexOf ("."));
-
- string release = "Unreleased Version";
+ public static string OperatingSystemVersion {
+ get {
+ if (OperatingSystem == OS.macOS) {
+ var uname = new Command ("sw_vers", "-productVersion", write_output: false);
+ string output = uname.StartAndReadStandardOutput ();
+ string version = output;
+
+ // Parse the version number between the periods (e.g. "10.12.1" -> 12)
+ output = output.Substring (output.IndexOf (".") + 1);
+ if (output.LastIndexOf (".") != -1) {
+ output = output.Substring (0, output.LastIndexOf ("."));
+ }
+ string release = "Unreleased Version";
+
+ switch (int.Parse (output)) {
+ case 7: release = "Lion"; break;
+ case 8: release = "Mountain Lion"; break;
+ case 9: release = "Mavericks"; break;
+ case 10: release = "Yosemite"; break;
+ case 11: release = "El Capitan"; break;
+ case 12: release = "Sierra"; break;
+ case 13: release = "High Sierra"; break;
+ case 14: release = "Mojave"; break;
+ }
+
+ return string.Format ("{0} ({1})", version, release);
+ }
- switch (int.Parse (output)) {
- case 7: release = "Lion"; break;
- case 8: release = "Mountain Lion"; break;
- case 9: release = "Mavericks"; break;
- case 10: release = "Yosemite"; break;
- case 11: release = "El Capitan"; break;
- case 12: release = "Sierra"; break;
- case 13: release = "High Sierra"; break;
+ string os_version = Environment.OSVersion.ToString ();
+ return string.Format ("({0})", os_version.Replace ("Unix", "Linux"));
}
-
- return string.Format ("macOS {0} ({1})", version, release);
}
@@ -95,5 +103,12 @@ namespace Sparkles {
return version.Substring (0, version.Length - 2);
}
}
+
+
+ public static bool IsFlatpak {
+ get {
+ return Directory.StartsWith ("/app", StringComparison.InvariantCulture);
+ }
+ }
}
}
diff --git a/Sparkles/Logger.cs b/Sparkles/Logger.cs
index 3db3979..be1a624 100644
--- a/Sparkles/Logger.cs
+++ b/Sparkles/Logger.cs
@@ -22,8 +22,8 @@ namespace Sparkles {
public static class Logger {
- static object debug_lock = new object ();
- static int log_size;
+ static StreamWriter log_writer = File.CreateText (Configuration.DefaultConfiguration.LogFilePath);
+ static object log_writer_lock = new object ();
public static void LogInfo (string type, string message)
@@ -48,14 +48,14 @@ namespace Sparkles {
if (Configuration.DebugMode)
Console.WriteLine (line);
- lock (debug_lock) {
- if (log_size >= 1000) {
- File.WriteAllText (Configuration.DefaultConfiguration.LogFilePath, line + Environment.NewLine);
- log_size = 0;
+ lock (log_writer_lock) {
+ try {
+ log_writer.WriteLine (line);
+ log_writer.Flush ();
- } else {
- File.AppendAllText (Configuration.DefaultConfiguration.LogFilePath, line + Environment.NewLine);
- log_size++;
+ } catch (Exception e) {
+ Console.WriteLine (string.Format ("Could not write to log {0}: {1} {2}",
+ (log_writer.BaseStream as FileStream).Name, e.Message, e.StackTrace));
}
}
}
@@ -63,6 +63,9 @@ namespace Sparkles {
public static void WriteCrashReport (Exception e)
{
+ if (log_writer != null)
+ log_writer.Close ();
+
string home_path = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
if (InstallationInfo.OperatingSystem == OS.Windows)
diff --git a/Sparkles/Makefile.am b/Sparkles/Makefile.am
deleted file mode 100755
index cc77c30..0000000
--- a/Sparkles/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-ASSEMBLY = Sparkles
-TARGET = library
-
-ASSEMBLY_INFO_SOURCE = InstallationInfo.Directory.cs
-
-SOURCES = \
- AuthenticationInfo.cs \
- InstallationInfo.cs \
- BaseFetcher.cs \
- BaseListener.cs \
- BaseRepository.cs \
- ChangeSet.cs \
- Command.cs \
- Configuration.cs \
- Extensions.cs \
- Invite.cs \
- ListenerFactory.cs \
- Logger.cs \
- Preset.cs \
- SSHAuthenticationInfo.cs \
- SSHCommand.cs \
- SSHFetcher.cs \
- TcpListener.cs \
- User.cs \
- Watcher.cs
-
-install-data-hook:
- for ASM in $(EXTRA_BUNDLE); do \
- $(INSTALL) -m 0755 $$ASM $(DESTDIR)$(moduledir); \
- done;
-
-uninstall-hook:
- for ASM in $(EXTRA_BUNDLE); do \
- rm -f $(DESTDIR)$(moduledir)/`basename $$ASM`; \
- done;
-
-include $(top_srcdir)/build/build.mk
-
diff --git a/Sparkles/Preset.cs b/Sparkles/Preset.cs
index 1a85376..0828c92 100644
--- a/Sparkles/Preset.cs
+++ b/Sparkles/Preset.cs
@@ -17,6 +17,7 @@
using System;
using System.Xml;
+using System.Xml.Linq;
using IO = System.IO;
@@ -27,7 +28,7 @@ namespace Sparkles {
public static string PresetsPath = "";
public static string LocalPresetsPath = IO.Path.Combine (
- Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData), "sparkleshare", "presets");
+ Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData), "org.sparkleshare.SparkleShare", "presets");
new public string Name { get { return GetValue ("info", "name"); } }
public string Description { get { return GetValue ("info", "description"); } }
@@ -80,33 +81,31 @@ namespace Sparkles {
if (IO.File.Exists (preset_path))
return null;
- // TODO: Don't write manually
- string preset_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
- "<sparkleshare>" +
- " <preset>" +
- " <info>" +
- " <name>" + name + "</name>" +
- " <description>" + description + "</description>" +
- " <icon>own-server.png</icon>" +
- " </info>" +
- " <address>" +
- " <value>" + address_value + "</value>" +
- " <example>" + address_example + "</example>" +
- " </address>" +
- " <path>" +
- " <value>" + path_value + "</value>" +
- " <example>" + path_example + "</example>" +
- " </path>" +
- " </preset>" +
- "</sparkleshare>";
-
- preset_xml = preset_xml.Replace ("<value></value>", "<value/>");
- preset_xml = preset_xml.Replace ("<example></example>", "<example/>");
+ string icon_name = "own-server.png";
+
+ XElement xml =
+ new XElement ("sparkleshare",
+ new XElement ("preset",
+ new XElement ("info",
+ new XElement ("name", name),
+ new XElement ("description", description),
+ new XElement ("icon", icon_name)
+ ),
+ new XElement ("address",
+ new XElement ("value", address_value),
+ new XElement ("example", address_example)
+ ),
+ new XElement ("path",
+ new XElement ("value", path_value),
+ new XElement ("example", path_example)
+ )
+ )
+ );
if (!IO.Directory.Exists (LocalPresetsPath))
IO.Directory.CreateDirectory (LocalPresetsPath);
- IO.File.WriteAllText (preset_path, preset_xml);
+ IO.File.WriteAllText (preset_path, xml.ToString ());
return new Preset (preset_path);
}
diff --git a/Sparkles/SSHAuthenticationInfo.cs b/Sparkles/SSHAuthenticationInfo.cs
index 87487c3..0724a24 100644
--- a/Sparkles/SSHAuthenticationInfo.cs
+++ b/Sparkles/SSHAuthenticationInfo.cs
@@ -34,10 +34,9 @@ namespace Sparkles {
public string KnownHostsFilePath { get; private set; }
-
readonly string Path;
- // TODO: Store keys in the platform's secure key store
+
public SSHAuthenticationInfo ()
{
Path = IO.Path.Combine (Configuration.DefaultConfiguration.DirectoryPath, "ssh");
diff --git a/Sparkles/SSHCommand.cs b/Sparkles/SSHCommand.cs
index 0a5657b..3dd2f24 100644
--- a/Sparkles/SSHCommand.cs
+++ b/Sparkles/SSHCommand.cs
@@ -25,17 +25,17 @@ namespace Sparkles {
public static string SSHCommandPath {
get {
- return Path.Combine(SSHPath, "ssh").Replace("\\", "/");
+ return Path.Combine (SSHPath, "ssh").Replace ("\\", "/");
}
}
- public SSHCommand(string command, string args) : this (command, args, null)
+ public SSHCommand (string command, string args) : this (command, args, null)
{
}
- public SSHCommand(string command, string args, SSHAuthenticationInfo auth_info) :
+ public SSHCommand (string command, string args, SSHAuthenticationInfo auth_info) :
base (Path.Combine (SSHPath, command), args)
{
}
diff --git a/Sparkles/SSHFetcher.cs b/Sparkles/SSHFetcher.cs
index e0ead1a..d7950b3 100644
--- a/Sparkles/SSHFetcher.cs
+++ b/Sparkles/SSHFetcher.cs
@@ -25,6 +25,7 @@ namespace Sparkles {
public static string SSHKeyScan = "ssh-keyscan";
+
protected SSHFetcher (SparkleFetcherInfo info) : base (info)
{
}
@@ -32,18 +33,8 @@ namespace Sparkles {
public override bool Fetch ()
{
- // Tor has special domain names called ".onion addresses". They can only be
- // resolved by using a proxy via tor. While the rest of the openssh suite
- // fully supports proxying, ssh-keyscan does not, so we can't use it for .onion
- if (RemoteUrl.Host.EndsWith (".onion", StringComparison.InvariantCultureIgnoreCase)) {
- Logger.LogInfo ("Auth", "using tor .onion address skipping ssh-keyscan");
- return true;
- }
-
- if (RemoteUrl.Scheme.StartsWith ("http", StringComparison.InvariantCultureIgnoreCase))
- return true;
-
string host_key = FetchHostKey ();
+ bool host_key_warning = false;
if (string.IsNullOrEmpty (RemoteUrl.Host) || host_key == null) {
Logger.LogInfo ("Auth", "Could not fetch host key");
@@ -52,39 +43,24 @@ namespace Sparkles {
return false;
}
- bool warn = true;
-
if (RequiredFingerprint != null) {
- string host_fingerprint;
-
- try {
- host_fingerprint = DeriveFingerprint (host_key);
-
- } catch (InvalidOperationException e) {
- // "Unapproved cryptographic algorithms" won't work when FIPS is enabled on Windows.
- // Software like Cisco AnyConnect can demand this feature is on, so we show an error
- Logger.LogInfo ("Auth", "Unable to derive fingerprint: ", e);
- errors.Add ("error: Can't check fingerprint due to FIPS being enabled");
-
- return false;
- }
+ string host_fingerprint = DeriveFingerprint (host_key);
- if (host_fingerprint == null || !RequiredFingerprint.Equals (host_fingerprint)) {
+ if (host_fingerprint == null || RequiredFingerprint!= host_fingerprint) {
Logger.LogInfo ("Auth", "Fingerprint doesn't match");
errors.Add ("error: Host fingerprint doesn't match");
-
+
return false;
}
-
- warn = false;
+
Logger.LogInfo ("Auth", "Fingerprint matches");
-
+
} else {
Logger.LogInfo ("Auth", "Skipping fingerprint check");
+ host_key_warning = true;
}
-
- AcceptHostKey (host_key, warn);
-
+
+ AcceptHostKey (host_key, host_key_warning);
return true;
}
@@ -105,7 +81,7 @@ namespace Sparkles {
return null;
}
-
+
string DeriveFingerprint (string public_key)
{
try {
@@ -116,44 +92,45 @@ namespace Sparkles {
byte [] sha256_bytes = sha256.ComputeHash (base64_bytes);
string fingerprint = BitConverter.ToString (sha256_bytes);
- Console.WriteLine( fingerprint.ToLower ().Replace ("-", ":"));
- return fingerprint.ToLower ().Replace ("-", ":");
+ fingerprint = fingerprint.ToLower ().Replace ("-", ":");
+
+ return fingerprint;
} catch (Exception e) {
- Logger.LogInfo ("Fetcher", "Failed to create fingerprint: " + e.Message + " " + e.StackTrace);
+ Logger.LogInfo ("Fetcher", "Failed to create fingerprint: ", e);
return null;
}
}
-
-
+
+
void AcceptHostKey (string host_key, bool warn)
{
string ssh_config_path = Path.Combine (Configuration.DefaultConfiguration.DirectoryPath, "ssh");
string known_hosts_file_path = Path.Combine (ssh_config_path, "known_hosts");
-
+
if (!File.Exists (known_hosts_file_path)) {
if (!Directory.Exists (ssh_config_path))
Directory.CreateDirectory (ssh_config_path);
-
+
File.Create (known_hosts_file_path).Close ();
}
-
+
string host = RemoteUrl.Host;
string known_hosts = File.ReadAllText (known_hosts_file_path);
string [] known_hosts_lines = File.ReadAllLines (known_hosts_file_path);
-
+
foreach (string line in known_hosts_lines) {
if (line.StartsWith (host + " ", StringComparison.InvariantCulture))
return;
}
-
+
if (known_hosts.EndsWith ("\n", StringComparison.InvariantCulture))
File.AppendAllText (known_hosts_file_path, host_key + "\n");
else
File.AppendAllText (known_hosts_file_path, "\n" + host_key + "\n");
-
+
Logger.LogInfo ("Auth", "Accepted host key for " + host);
-
+
if (warn)
warnings.Add ("The following host key has been accepted:\n" + DeriveFingerprint (host_key));
}
diff --git a/Sparkles/Sparkles.csproj b/Sparkles/Sparkles.csproj
index 3ff026f..e9c3bc9 100644
--- a/Sparkles/Sparkles.csproj
+++ b/Sparkles/Sparkles.csproj
@@ -60,6 +60,7 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Xml" />
+ <Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="AuthenticationInfo.cs" />
@@ -90,5 +91,8 @@
</Compile>
</ItemGroup>
<ItemGroup />
+ <ItemGroup>
+ <None Include="InstallationInfo.Directory.cs.in" />
+ </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/Sparkles/meson.build b/Sparkles/meson.build
new file mode 100644
index 0000000..e4261c5
--- /dev/null
+++ b/Sparkles/meson.build
@@ -0,0 +1,33 @@
+directory_info_file = configure_file(
+ input: 'InstallationInfo.Directory.cs.in',
+ output: 'InstallationInfo.Directory.cs',
+ configuration: configuration)
+
+sparkles_src = ['AuthenticationInfo.cs',
+ 'BaseFetcher.cs',
+ 'BaseListener.cs',
+ 'BaseRepository.cs',
+ 'ChangeSet.cs',
+ 'Command.cs',
+ 'Configuration.cs',
+ 'Extensions.cs',
+ 'InstallationInfo.cs',
+ directory_info_file,
+ 'Invite.cs',
+ 'ListenerFactory.cs',
+ 'Logger.cs',
+ 'Preset.cs',
+ 'SSHAuthenticationInfo.cs',
+ 'SSHCommand.cs',
+ 'SSHFetcher.cs',
+ 'TcpListener.cs',
+ 'User.cs',
+ 'Watcher.cs']
+
+
+sparkles = library('Sparkles',
+ sources: sparkles_src,
+ cs_args: '-r:System.Xml.Linq',
+ install: true,
+ install_dir: install_dir)
+
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index 1e691c6..0000000
--- a/autogen.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env bash
-
-PROJECT=sparkleshare
-
-function error () {
- echo "Error: $1" 1>&2
- exit 1
-}
-
-function check_autotool_version () {
- which $1 &>/dev/null || {
- error "$1 is not installed, and is required to configure $PACKAGE"
- }
-
- version=$($1 --version | head -n 1 | cut -f4 -d' ')
- major=$(echo $version | cut -f1 -d.)
- minor=$(echo $version | cut -f2 -d.)
- rev=$(echo $version | cut -f3 -d. | sed 's/[^0-9].*$//')
- major_check=$(echo $2 | cut -f1 -d.)
- minor_check=$(echo $2 | cut -f2 -d.)
- rev_check=$(echo $2 | cut -f3 -d.)
-
- if [ $major -lt $major_check ]; then
- do_bail=yes
- elif [[ $minor -lt $minor_check && $major = $major_check ]]; then
- do_bail=yes
- elif [[ $rev -lt $rev_check && $minor = $minor_check && $major = $major_check ]]; then
- do_bail=yes
- fi
-
- if [ x"$do_bail" = x"yes" ]; then
- error "$1 version $2 or better is required to configure $PROJECT"
- fi
-}
-
-function run () {
- echo "Running $@ ..."
- $@ 2>.autogen.log || {
- cat .autogen.log 1>&2
- rm .autogen.log
- error "Could not run $1, which is required to configure $PROJECT"
- }
- rm .autogen.log
-}
-
-srcdir=$(dirname $0)
-test -z "$srcdir" && srcdir=.
-
-(test -f $srcdir/configure.ac) || {
- error "Directory \"$srcdir\" does not look like the top-level $PROJECT directory"
-}
-
-# MacPorts on OS X only seems to have glibtoolize
-WHICHLIBTOOLIZE=$(which libtoolize || which glibtoolize)
-if [ x"$WHICHLIBTOOLIZE" == x"" ]; then
- error "libtool is required to configure $PROJECT"
-fi
-LIBTOOLIZE=$(basename $WHICHLIBTOOLIZE)
-
-check_autotool_version aclocal 1.9
-check_autotool_version automake 1.9
-check_autotool_version autoconf 2.53
-check_autotool_version $LIBTOOLIZE 1.4.3
-#check_autotool_version intltoolize 0.35.0
-check_autotool_version pkg-config 0.14.0
-
-#run intltoolize --force --copy
-run $LIBTOOLIZE --force --copy --automake
-run aclocal -I build/m4/sparkleshare -I build/m4/shamrock -I build/m4/shave $ACLOCAL_FLAGS
-run autoconf
-
-run automake --gnu --add-missing --force --copy \
- -Wno-portability -Wno-portability
-
-if [ ! -z "$NOCONFIGURE" ]; then
- echo "Done. ./configure skipped."
- exit $?
-fi
-
-if [ $# = 0 ]; then
- echo "WARNING: I am going to run configure without any arguments."
-fi
-
-run ./configure --enable-maintainer-mode $@
-
diff --git a/build/Makefile.am b/build/Makefile.am
deleted file mode 100755
index c99d383..0000000
--- a/build/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-SUBDIRS = m4
-
-EXTRA_DIST = \
- icon-theme-installer
-
-MAINTAINERCLEANFILES = Makefile.in
-
diff --git a/build/build.environment.mk b/build/build.environment.mk
deleted file mode 100755
index c3aceea..0000000
--- a/build/build.environment.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# Initializers
-MONO_BASE_PATH =
-
-# Install paths
-DEFAULT_INSTALL_DIR = $(pkglibdir)
-DIR_BIN = $(top_builddir)/bin
-
-# External libraries to link against, generated from configure
-LINK_SYSTEM = -r:System
-LINK_MONO_POSIX = -r:Mono.Posix
-
-LINK_GLIB = $(GLIB_SHARP_LIBS)
-LINK_GTK = $(GTK_SHARP_LIBS)
-LINK_WEBKIT = $(WEBKIT2_SHARP_LIBS)
-LINK_APP_INDICATOR = $(APP_INDICATOR_LIBS)
-
-REF_SPARKLES = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
-LINK_SPARKLES = -r:$(DIR_BIN)/Sparkles.dll -r:$(DIR_BIN)/Sparkles.Git.dll
-LINK_SPARKLES_DEPS = $(REF_SPARKLES) $(LINK_SPARKLES)
-
-REF_SPARKLESHARE = $(LINK_TESTS) $(LINK_GTK) $(LINK_SPARKLES_DEPS) $(LINK_APP_INDICATOR) $(LINK_WEBKIT)
-
-# Cute hack to replace a space with something
-colon:= :
-empty:=
-space:= $(empty) $(empty)
-
-# Build path to allow running uninstalled
-RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
-
diff --git a/build/build.mk b/build/build.mk
deleted file mode 100755
index bb00ae7..0000000
--- a/build/build.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-include $(top_srcdir)/build/build.environment.mk
-include $(top_srcdir)/build/build.rules.mk
diff --git a/build/build.rules.mk b/build/build.rules.mk
deleted file mode 100755
index 678dc53..0000000
--- a/build/build.rules.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
-BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
-
-# Since all other attempts failed, we currently go this way:
-# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
-ASSEMBLY_INFO_SOURCE_REAL = \
- $(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))
-
-SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES))
-SOURCES_BUILD += $(ASSEMBLY_INFO_SOURCE_REAL)
-
-RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
-RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
- -resource:$(resource),$(notdir $(resource)))
-
-ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
-ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
-
-INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
-
-if ENABLE_TESTS
- LINK_TESTS = "$(NUNIT_LIBS)"
- ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
-endif
-
-FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
-DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
-
-OUTPUT_FILES = \
- $(ASSEMBLY_FILE) \
- $(ASSEMBLY_FILE).mdb
-
-moduledir = $(INSTALL_DIR_RESOLVED)
-module_SCRIPTS = $(OUTPUT_FILES)
-
-all: $(ASSEMBLY_FILE)
-
-run:
- @pushd $(top_builddir); \
- make run; \
- popd;
-
-# uncommented for now.
-# tests are currently excuted from Makefile in $(top_builddir)
-#test:
-# @pushd $(top_builddir)/tests; \
-# make $(ASSEMBLY); \
-# popd;
-
-build-debug:
- @echo $(DEP_LINK)
-
-$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
-
-$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
- @mkdir -p $(top_builddir)/bin
- $(MCS) \
- $(GMCS_FLAGS) \
- $(ASSEMBLY_BUILD_FLAGS) \
- -codepage:utf8 \
- -nowarn:0278 -nowarn:0078 $$warn \
- -define:HAVE_GTK_2_10 -define:NET_2_0 \
- -debug -target:$(TARGET) -out:$@ \
- $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
- $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
- @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
- cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
- fi;
- @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
- cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
- fi;
-
-EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED)
-
-CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
-DISTCLEANFILES = *.pidb
-MAINTAINERCLEANFILES = Makefile.in
diff --git a/build/bump-version.sh b/build/bump-version.sh
deleted file mode 100755
index ed8b657..0000000
--- a/build/bump-version.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-if [ "$1" = "" ]; then
- echo "No version number specified. Usage: ./bump-version.sh VERSION_NUMBER"
-else
- sed -i.bak "s/ Version='[^']*'/ Version='$1'/" ../SparkleShare/Windows/SparkleShare.wxs
- sed -i.bak "s/assembly:AssemblyVersion *(\"[^\"]*\")/assembly:AssemblyVersion (\"$1\")/" ../Sparkles/InstallationInfo.Directory.cs
- sed -i.bak "s/m4_define(.sparkleshare_version[^)]*)/m4_define([sparkleshare_version], [$1])/" ../configure.ac
- cat ../SparkleShare/Mac/Info.plist | eval "sed -e '/<key>CFBundleShortVersionString<\/key>/{N;s#<string>.*<\/string>#<string>$1<\/string>#;}'" > ../SparkleShare/Mac/Info.plist.tmp
- cat ../SparkleShare/Mac/Info.plist.tmp | eval "sed -e '/<key>CFBundleVersion<\/key>/{N;s#<string>.*<\/string>#<string>$1<\/string>#;}'" > ../SparkleShare/Mac/Info.plist
- rm ../SparkleShare/Mac/Info.plist.tmp
- rm ../SparkleShare/Windows/SparkleShare.wxs.bak
- rm ../Sparkles/InstallationInfo.Directory.cs.bak
- rm ../configure.ac.bak
-fi
-
diff --git a/build/icon-theme-installer b/build/icon-theme-installer
deleted file mode 100755
index bf1130f..0000000
--- a/build/icon-theme-installer
+++ /dev/null
@@ -1,187 +0,0 @@
-#!/usr/bin/env bash
-
-# icon-theme-installer
-# Copyright (C) 2006 Novell, Inc.
-# Written by Aaron Bockover <abock@gnome.org>
-# Licensed under the MIT/X11 license
-#
-# This script is meant to be invoked from within a Makefile/Makefile.am
-# in the install-data-local and uninstall-data sections. It handles the
-# task of properly installing icons into the icon theme. It requires a
-# few arguments to set up its environment, and a list of files to be
-# installed. The format of the file list is critical:
-#
-# <category>,<local-src-file-name>
-#
-# apps,music-player-banshee.svg
-# apps,music-player-banshee-16.png
-# apps,music-player-banshee-22.png
-#
-# <category> is the icon theme category, for instance, apps, devices,
-# actions, emblems...
-#
-# <local-src-file-name> must have a basename in the form of:
-#
-# proper-theme-name[-<SIZE>].<EXTENSION>
-#
-# Where <SIZE> should be either nothing, which will default to scalable
-# or \-[0-9]{2}, which will expand to <SIZE>x<SIZE>. For example:
-#
-# music-player-banshee-16.png
-#
-# The <SIZE> here is -16 and will expand to 16x16 per the icon theme spec
-#
-# What follows is an example Makefile.am for icon theme installation:
-#
-# ---------------
-# theme=hicolor
-# themedir=$(datadir)/icons/$(theme)
-# theme_icons = \
-# apps,music-player-banshee.svg \
-# apps,music-player-banshee-16.png \
-# apps,music-player-banshee-22.png \
-# apps,music-player-banshee-24.png \
-# apps,music-player-banshee-32.png
-#
-# install_icon_exec = $(top_srcdir)/build/icon-theme-installer -t $(theme) -s $(srcdir) -d "x$(DESTDIR)" -b $(themedir) -m "$(mkinstalldirs)" -x "$(INSTALL_DATA)"
-# install-data-local:
-# $(install_icon_exec) -i $(theme_icons)
-#
-# uninstall-hook:
-# $(install_icon_exec) -u $(theme_icons)
-#
-# MAINTAINERCLEANFILES = Makefile.in
-# EXTRA_DIST = $(wildcard *.svg *.png)
-# ---------------
-#
-# Arguments to this program:
-#
-# -i : Install
-# -u : Uninstall
-# -t <theme> : Theme name (hicolor)
-# -d <dir> : Theme installation dest directory [x$(DESTDIR)] - Always prefix
-# this argument with x; it will be stripped but will act as a
-# placeholder for zero $DESTDIRs (only set by packagers)
-# -b <dir> : Theme installation directory [$(hicolordir)]
-# -s <dir> : Source directory [$(srcdir)]
-# -m <exec> : Command to exec for directory creation [$(mkinstalldirs)]
-# -x <exec> : Command to exec for single file installation [$(INSTALL_DATA)]
-# <remainging> : All remainging should be category,filename pairs
-
-while getopts "iut:b:d:s:m:x:" flag; do
- case "$flag" in
- i) INSTALL=yes ;;
- u) UNINSTALL=yes ;;
- t) THEME_NAME=$OPTARG ;;
- d) INSTALL_DEST_DIR=${OPTARG##x} ;;
- b) INSTALL_BASE_DIR=$OPTARG ;;
- s) SRC_DIR=$OPTARG ;;
- m) MKINSTALLDIRS_EXEC=$OPTARG ;;
- x) INSTALL_DATA_EXEC=$OPTARG ;;
- esac
-done
-
-shift $(($OPTIND - 1))
-
-if test "x$INSTALL" = "xyes" -a "x$UNINSTALL" = "xyes"; then
- echo "Cannot pass both -i and -u"
- exit 1
-elif test "x$INSTALL" = "x" -a "x$UNINSTALL" = "x"; then
- echo "Must path either -i or -u"
- exit 1
-fi
-
-if test -z "$THEME_NAME"; then
- echo "Theme name required (-t hicolor)"
- exit 1
-fi
-
-if test -z "$INSTALL_BASE_DIR"; then
- echo "Base theme directory required [-b \$(hicolordir)]"
- exit 1
-fi
-
-if test ! -x $(echo "$MKINSTALLDIRS_EXEC" | cut -f1 -d' '); then
- echo "Cannot find '$MKINSTALLDIRS_EXEC'; You probably want to pass -m \$(mkinstalldirs)"
- exit 1
-fi
-
-if test ! -x $(echo "$INSTALL_DATA_EXEC" | cut -f1 -d' '); then
- echo "Cannot find '$INSTALL_DATA_EXEC'; You probably want to pass -x \$(INSTALL_DATA)"
- exit 1
-fi
-
-if test -z "$SRC_DIR"; then
- SRC_DIR=.
-fi
-
-for icon in $@; do
- size=$(echo $icon | sed s/[^0-9]*//g)
- category=$(echo $icon | cut -d, -f1)
- build_name=$(echo $icon | cut -d, -f2)
- install_name=$(echo $build_name | sed "s/[0-9]//g; s/-\././")
- install_name=$(basename $install_name)
-
- if test -z $size; then
- size=symbolic
-
- if [[ "${INSTALL_BASE_DIR}" == *ubuntu-mono-* ]]; then
- install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$category/$size
- else
- install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
- fi
- else
- if [[ "${INSTALL_BASE_DIR}" == *ubuntu-mono-* ]]; then
- install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$category/$size
- else
- size=${size}x${size};
- install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category
- fi
- fi
-
- install_path=$install_dir/$install_name
-
- if test "x$INSTALL" = "xyes"; then
- echo "Installing $size $install_name into $THEME_NAME icon theme"
-
- $($MKINSTALLDIRS_EXEC $install_dir) || {
- echo "Failed to create directory $install_dir"
- exit 1
- }
-
- $($INSTALL_DATA_EXEC $SRC_DIR/$build_name $install_path) || {
- echo "Failed to install $SRC_DIR/$build_name into $install_path"
- exit 1
- }
-
- if test ! -e $install_path; then
- echo "Failed to install $SRC_DIR/$build_name into $install_path"
- exit 1
- fi
- else
- if test -e $install_path; then
- echo "Removing $size $install_name from $THEME_NAME icon theme"
-
- rm $install_path || {
- echo "Failed to remove $install_path"
- exit 1
- }
- fi
- fi
-done
-
-gtk_update_icon_cache_bin="$((which gtk-update-icon-cache || echo /opt/gnome/bin/gtk-update-icon-cache)2>/dev/null)"
-gtk_update_icon_cache="$gtk_update_icon_cache_bin -f -t $INSTALL_BASE_DIR"
-
-if test -z "$INSTALL_DEST_DIR"; then
- if test -x $gtk_update_icon_cache_bin; then
- echo "Updating GTK icon cache"
- $gtk_update_icon_cache
- else
- echo "*** Icon cache not updated. Could not execute $gtk_update_icon_cache_bin"
- fi
-else
- echo "*** Icon cache not updated. After (un)install, run this:"
- echo "*** $gtk_update_icon_cache"
-fi
-
diff --git a/build/m4/Makefile.am b/build/m4/Makefile.am
deleted file mode 100755
index 2492a2c..0000000
--- a/build/m4/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-EXTRA_DIST = \
- $(srcdir)/sparkleshare/*.m4 \
- $(srcdir)/shamrock/*.m4 \
- $(srcdir)/shave/*.m4
-
-MAINTAINERCLEANFILES = Makefile.in
-
diff --git a/build/m4/shamrock/expansions.m4 b/build/m4/shamrock/expansions.m4
deleted file mode 100755
index ba62356..0000000
--- a/build/m4/shamrock/expansions.m4
+++ /dev/null
@@ -1,50 +0,0 @@
-AC_DEFUN([SHAMROCK_EXPAND_LIBDIR],
-[
- expanded_libdir=`(
- case $prefix in
- NONE) prefix=$ac_default_prefix ;;
- *) ;;
- esac
- case $exec_prefix in
- NONE) exec_prefix=$prefix ;;
- *) ;;
- esac
- eval echo $libdir
- )`
- AC_SUBST(expanded_libdir)
-])
-
-AC_DEFUN([SHAMROCK_EXPAND_BINDIR],
-[
- expanded_bindir=`(
- case $prefix in
- NONE) prefix=$ac_default_prefix ;;
- *) ;;
- esac
- case $exec_prefix in
- NONE) exec_prefix=$prefix ;;
- *) ;;
- esac
- eval echo $bindir
- )`
- AC_SUBST(expanded_bindir)
-])
-
-AC_DEFUN([SHAMROCK_EXPAND_DATADIR],
-[
- case $prefix in
- NONE) prefix=$ac_default_prefix ;;
- *) ;;
- esac
-
- case $exec_prefix in
- NONE) exec_prefix=$prefix ;;
- *) ;;
- esac
-
- expanded_datadir=`(eval echo $datadir)`
- expanded_datadir=`(eval echo $expanded_datadir)`
-
- AC_SUBST(expanded_datadir)
-])
-
diff --git a/build/m4/shamrock/gnome-doc.m4 b/build/m4/shamrock/gnome-doc.m4
deleted file mode 100755
index a349a23..0000000
--- a/build/m4/shamrock/gnome-doc.m4
+++ /dev/null
@@ -1,23 +0,0 @@
-AC_DEFUN([SHAMROCK_CHECK_GNOME_DOC_UTILS],
-[
- AC_ARG_ENABLE([user-help],
- AC_HELP_STRING([--enable-user-help], [Enable building the user-help [[default=auto]]]),,
- enable_user_help=auto)
-
- if test "x$enable_user_help" = "xauto"; then
- PKG_CHECK_MODULES(GNOME_DOC_UTILS,
- gnome-doc-utils,
- enable_user_help=yes, enable_user_help=no)
- elif test "x$enable_user_help" = "xyes"; then
- PKG_CHECK_MODULES(GNOME_DOC_UTILS, gnome-doc-utils)
- fi
-
- # GNOME_DOC_INIT sets ENABLE_SK, but if we have disabled
- # user docs, then this needs to be defined manually.
- AM_CONDITIONAL(ENABLE_SK, false)
- if test "x$enable_user_help" = "xyes"; then
- GNOME_DOC_INIT([$1], enable_user_help=yes, enable_user_help=no)
- fi
-
- AM_CONDITIONAL(HAVE_GNOME_DOC_UTILS, test "x$enable_user_help" = "xyes")
-])
diff --git a/build/m4/shamrock/i18n.m4 b/build/m4/shamrock/i18n.m4
deleted file mode 100755
index e632647..0000000
--- a/build/m4/shamrock/i18n.m4
+++ /dev/null
@@ -1,10 +0,0 @@
-AC_DEFUN([SHAMROCK_CONFIGURE_I18N],
-[
- ALL_LINGUAS=`grep -v '^#' $srcdir/po/LINGUAS | $SED ':a;N;$!ba;s/\n/ /g; s/[ ]+/ /g' | xargs`
- GETTEXT_PACKAGE=$1
- AC_SUBST(GETTEXT_PACKAGE)
- AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext Package])
- AM_GLIB_GNU_GETTEXT
- AC_SUBST([CONFIG_STATUS_DEPENDENCIES],['$(top_srcdir)/po/LINGUAS'])
-])
-
diff --git a/build/m4/shamrock/mono.m4 b/build/m4/shamrock/mono.m4
deleted file mode 100755
index 8981305..0000000
--- a/build/m4/shamrock/mono.m4
+++ /dev/null
@@ -1,72 +0,0 @@
-AC_DEFUN([SHAMROCK_FIND_MONO_1_0_COMPILER],
-[
- SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, mcs)
-])
-
-AC_DEFUN([SHAMROCK_FIND_MONO_2_0_COMPILER],
-[
- SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, gmcs)
-])
-
-AC_DEFUN([SHAMROCK_FIND_MONO_4_0_COMPILER],
-[
- SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, dmcs)
-])
-
-AC_DEFUN([SHAMROCK_FIND_MONO_4_5_COMPILER],
-[
- SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, mcs)
-])
-
-AC_DEFUN([SHAMROCK_FIND_MONO_RUNTIME],
-[
- SHAMROCK_FIND_PROGRAM_OR_BAIL(MONO, mono)
-])
-
-AC_DEFUN([_SHAMROCK_CHECK_MONO_MODULE],
-[
- PKG_CHECK_MODULES(MONO_MODULE, $1 >= $2)
-])
-
-AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE],
-[
- _SHAMROCK_CHECK_MONO_MODULE(mono, $1)
-])
-
-AC_DEFUN([SHAMROCK_CHECK_MONO2_MODULE],
-[
- _SHAMROCK_CHECK_MONO_MODULE(mono-2, $1)
-])
-
-AC_DEFUN([_SHAMROCK_CHECK_MONO_MODULE_NOBAIL],
-[
- PKG_CHECK_MODULES(MONO_MODULE, $2 >= $1,
- HAVE_MONO_MODULE=yes, HAVE_MONO_MODULE=no)
- AC_SUBST(HAVE_MONO_MODULE)
-])
-
-AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE_NOBAIL],
-[
- _SHAMROCK_CHECK_MONO_MODULE_NOBAIL(mono, $1)
-])
-
-AC_DEFUN([SHAMROCK_CHECK_MONO2_MODULE_NOBAIL],
-[
- _SHAMROCK_CHECK_MONO_MODULE_NOBAIL(mono-2, $1)
-])
-
-AC_DEFUN([SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES],
-[
- for asm in $(echo "$*" | cut -d, -f3- | sed 's/\,/ /g')
- do
- AC_MSG_CHECKING([for Mono $2 GAC for $asm.dll])
-
- eval "gacutil -l | grep '^$asm, ' &> /dev/null"
- if test $? == 0; then
- AC_MSG_RESULT([found])
- else
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([missing required Mono $2 assembly: $asm.dll])
- fi
- done
-])
diff --git a/build/m4/shamrock/monodoc.m4 b/build/m4/shamrock/monodoc.m4
deleted file mode 100755
index 891ac74..0000000
--- a/build/m4/shamrock/monodoc.m4
+++ /dev/null
@@ -1,25 +0,0 @@
-AC_DEFUN([SHAMROCK_CHECK_MONODOC],
-[
- AC_ARG_ENABLE(docs, AC_HELP_STRING([--disable-docs],
- [Do not build documentation]), , enable_docs=yes)
-
- if test "x$enable_docs" = "xyes"; then
- AC_PATH_PROG(MONODOCER, monodocer, no)
- if test "x$MONODOCER" = "xno"; then
- AC_MSG_ERROR([You need to install monodoc, or pass --disable-docs to configure to skip documentation installation])
- fi
-
- AC_PATH_PROG(MDASSEMBLER, mdassembler, no)
- if test "x$MDASSEMBLER" = "xno"; then
- AC_MSG_ERROR([You need to install mdassembler, or pass --disable-docs to configure to skip documentation installation])
- fi
-
- DOCDIR=`$PKG_CONFIG monodoc --variable=sourcesdir`
- AC_SUBST(DOCDIR)
- AM_CONDITIONAL(BUILD_DOCS, true)
- else
- AC_MSG_NOTICE([not building ${PACKAGE} API documentation])
- AM_CONDITIONAL(BUILD_DOCS, false)
- fi
-])
-
diff --git a/build/m4/shamrock/nunit.m4 b/build/m4/shamrock/nunit.m4
deleted file mode 100755
index 4d57d00..0000000
--- a/build/m4/shamrock/nunit.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-AC_DEFUN([SHAMROCK_CHECK_NUNIT],
-[
- NUNIT_REQUIRED=2.4.7
-
- AC_ARG_ENABLE(tests, AC_HELP_STRING([--enable-tests], [Enable NUnit tests]),
- enable_tests=$enableval, enable_tests="no")
-
- if test "x$enable_tests" = "xno"; then
- do_tests=no
- AM_CONDITIONAL(ENABLE_TESTS, false)
- else
- PKG_CHECK_MODULES(NUNIT, nunit >= $NUNIT_REQUIRED,
- do_tests="yes", do_tests="no")
-
- AC_SUBST(NUNIT_LIBS)
- AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
-
- if test "x$do_tests" = "xno"; then
- PKG_CHECK_MODULES(NUNIT, mono-nunit >= 2.4,
- do_tests="yes", do_tests="no")
-
- AC_SUBST(NUNIT_LIBS)
- AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
-
- if test "x$do_tests" = "xno"; then
- AC_MSG_WARN([Could not find nunit: tests will not be available]) fi
- fi
- fi
-])
diff --git a/build/m4/shamrock/programs.m4 b/build/m4/shamrock/programs.m4
deleted file mode 100755
index 2bdacfe..0000000
--- a/build/m4/shamrock/programs.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-AC_DEFUN([SHAMROCK_FIND_PROGRAM],
-[
- AC_PATH_PROG($1, $2, $3)
- AC_SUBST($1)
-])
-
-AC_DEFUN([SHAMROCK_FIND_PROGRAM_OR_BAIL],
-[
- SHAMROCK_FIND_PROGRAM($1, $2, no)
- if test "x$$1" = "xno"; then
- AC_MSG_ERROR([You need to install '$2'])
- fi
-])
-
-
diff --git a/build/m4/shamrock/util.m4 b/build/m4/shamrock/util.m4
deleted file mode 100755
index de85ba9..0000000
--- a/build/m4/shamrock/util.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-AC_DEFUN([SHAMROCK_CONCAT],
-[
- $1="$$1 $$2"
-])
-
-AC_DEFUN([SHAMROCK_CONCAT_MODULE],
-[
- SHAMROCK_CONCAT($1_CFLAGS, $2_CFLAGS)
- SHAMROCK_CONCAT($1_LIBS, $2_LIBS)
-])
-
diff --git a/build/m4/shave/shave-libtool.in b/build/m4/shave/shave-libtool.in
deleted file mode 100755
index 54ebd69..0000000
--- a/build/m4/shave/shave-libtool.in
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
-#
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation
-# files (the "Software"), to deal in the Software without
-# restriction, including without limitation the rights to use,
-# copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following
-# conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
- last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the real libtool to use
-LIBTOOL="$1"
-shift
-
-# if 1, don't print anything, the underlaying wrapper will do it
-pass_though=0
-
-# scan the arguments, keep the right ones for libtool, and discover the mode
-preserved_args=
-
-# have we seen the --tag option of libtool in the command line ?
-tag_seen=0
-
-while test "$#" -gt 0; do
- opt="$1"
- shift
-
- case $opt in
- --mode=*)
- mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
- preserved_args="$preserved_args $opt"
- ;;
- -o)
- lt_output="$1"
- preserved_args="$preserved_args $opt"
- ;;
- --tag=*)
- tag_seen=1
- preserved_args="$preserved_args $opt"
- ;;
- *)
- preserved_args="$preserved_args $opt"
- ;;
- esac
-done
-
-case "$mode" in
-compile)
- # shave will be called and print the actual CC/CXX/LINK line
- preserved_args="$preserved_args --shave-mode=$mode"
- pass_though=1
- ;;
-link)
- preserved_args="$preserved_args --shave-mode=$mode"
- Q=" LINK "
- ;;
-*)
- # let's u
- # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
- ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-# automake does not add a --tag switch to its libtool invocation when
-# assembling a .s file and rely on libtool to infer the right action based
-# on the compiler name. As shave is using CC to hook a wrapper, libtool gets
-# confused. Let's detect these cases and add a --tag=CC option.
-tag=""
-if test $tag_seen -eq 0 -a x"$mode" = xcompile; then
- tag="--tag=CC"
-fi
-
-if test -z $V; then
- if test $pass_though -eq 0; then
- echo "$Q$output"
- fi
- $LIBTOOL --silent $tag $preserved_args
-else
- echo $LIBTOOL $tag $preserved_args
- $LIBTOOL $tag $preserved_args
-fi
diff --git a/build/m4/shave/shave.in b/build/m4/shave/shave.in
deleted file mode 100755
index 490d6c5..0000000
--- a/build/m4/shave/shave.in
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
-#
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation
-# files (the "Software"), to deal in the Software without
-# restriction, including without limitation the rights to use,
-# copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following
-# conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-
-# we need sed
-SED=@SED@
-if test -z "$SED" ; then
-SED=sed
-fi
-
-lt_unmangle ()
-{
- last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
-}
-
-# the tool to wrap (cc, cxx, ar, ranlib, ..)
-tool="$1"
-shift
-
-# the reel tool (to call)
-REEL_TOOL="$1"
-shift
-
-pass_through=0
-preserved_args=
-while test "$#" -gt 0; do
- opt="$1"
- shift
-
- case $opt in
- --shave-mode=*)
- mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
- ;;
- -o)
- lt_output="$1"
- preserved_args="$preserved_args $opt"
- ;;
- -out:*|/out:*)
- lt_output="${opt#*:}"
- preserved_args="$preserved_args $opt"
- ;;
- *)
- preserved_args="$preserved_args $opt"
- ;;
- esac
-done
-
-# mode=link is handled in the libtool wrapper
-case "$mode,$tool" in
-link,*)
- pass_through=1
- ;;
-*,cxx)
- Q=" CXX "
- ;;
-*,cc)
- Q=" CC "
- ;;
-*,fc)
- Q=" FC "
- ;;
-*,f77)
- Q=" F77 "
- ;;
-*,objc)
- Q=" OBJC "
- ;;
-*,mcs)
- Q=" MCS "
- ;;
-*,*)
- # should not happen
- Q=" CC "
- ;;
-esac
-
-lt_unmangle "$lt_output"
-output=$last_result
-
-if test -z $V; then
- if test $pass_through -eq 0; then
- echo "$Q$output"
- fi
- $REEL_TOOL $preserved_args
-else
- echo $REEL_TOOL $preserved_args
- $REEL_TOOL $preserved_args
-fi
diff --git a/build/m4/shave/shave.m4 b/build/m4/shave/shave.m4
deleted file mode 100755
index 40e47f4..0000000
--- a/build/m4/shave/shave.m4
+++ /dev/null
@@ -1,102 +0,0 @@
-dnl Make automake/libtool output more friendly to humans
-dnl
-dnl Copyright (c) 2009, Damien Lespiau <damien.lespiau@gmail.com>
-dnl
-dnl Permission is hereby granted, free of charge, to any person
-dnl obtaining a copy of this software and associated documentation
-dnl files (the "Software"), to deal in the Software without
-dnl restriction, including without limitation the rights to use,
-dnl copy, modify, merge, publish, distribute, sublicense, and/or sell
-dnl copies of the Software, and to permit persons to whom the
-dnl Software is furnished to do so, subject to the following
-dnl conditions:
-dnl
-dnl The above copyright notice and this permission notice shall be
-dnl included in all copies or substantial portions of the Software.
-dnl
-dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-dnl EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-dnl OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-dnl NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-dnl HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-dnl WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-dnl OTHER DEALINGS IN THE SOFTWARE.
-dnl
-dnl SHAVE_INIT([shavedir],[default_mode])
-dnl
-dnl shavedir: the directory where the shave scripts are, it defaults to
-dnl $(top_builddir)
-dnl default_mode: (enable|disable) default shave mode. This parameter
-dnl controls shave's behaviour when no option has been
-dnl given to configure. It defaults to disable.
-dnl
-dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
-dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrites CC and
-dnl LIBTOOL, you don't want the configure tests to have these variables
-dnl re-defined.
-dnl * This macro requires GNU make's -s option.
-
-AC_DEFUN([_SHAVE_ARG_ENABLE],
-[
- AC_ARG_ENABLE([shave],
- AS_HELP_STRING(
- [--enable-shave],
- [use shave to make the build pretty [[default=$1]]]),,
- [enable_shave=$1]
- )
-])
-
-AC_DEFUN([SHAVE_INIT],
-[
- dnl you can tweak the default value of enable_shave
- m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
-
- if test x"$enable_shave" = xyes; then
- dnl where can we find the shave scripts?
- m4_if([$1],,
- [shavedir="$ac_pwd"],
- [shavedir="$ac_pwd/$1"])
- AC_SUBST(shavedir)
-
- dnl make is now quiet
- AC_SUBST([MAKEFLAGS], [-s])
- AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
-
- dnl we need sed
- AC_CHECK_PROG(SED,sed,sed,false)
-
- dnl substitute libtool
- SHAVE_SAVED_LIBTOOL=$LIBTOOL
- LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
- AC_SUBST(LIBTOOL)
-
- dnl substitute cc/cxx
- SHAVE_SAVED_CC=$CC
- SHAVE_SAVED_CXX=$CXX
- SHAVE_SAVED_FC=$FC
- SHAVE_SAVED_F77=$F77
- SHAVE_SAVED_OBJC=$OBJC
- SHAVE_SAVED_MCS=$MCS
- CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
- CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
- FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
- F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
- OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
- MCS="${SHELL} ${shavedir}/shave mcs ${SHAVE_SAVED_MCS}"
- AC_SUBST(CC)
- AC_SUBST(CXX)
- AC_SUBST(FC)
- AC_SUBST(F77)
- AC_SUBST(OBJC)
- AC_SUBST(MCS)
-
- V=@
- else
- V=1
- fi
- Q='$(V:1=)'
- AC_SUBST(V)
- AC_SUBST(Q)
-])
-
diff --git a/build/m4/sparkleshare/gtk-sharp.m4 b/build/m4/sparkleshare/gtk-sharp.m4
deleted file mode 100755
index 12ee06e..0000000
--- a/build/m4/sparkleshare/gtk-sharp.m4
+++ /dev/null
@@ -1,13 +0,0 @@
-AC_DEFUN([SPARKLESHARE_CHECK_GTK_SHARP],
-[
- GTK_SHARP_REQUIRED=2.99.1
-
- PKG_CHECK_MODULES(GTK_SHARP,
- gtk-sharp-3.0 >= $GTK_SHARP_REQUIRED)
- AC_SUBST(GTK_SHARP_LIBS)
-
- PKG_CHECK_MODULES(GLIB_SHARP,
- glib-sharp-3.0 >= $GTK_SHARP_REQUIRED)
- AC_SUBST(GLIB_SHARP_LIBS)
-])
-
diff --git a/configure.ac b/configure.ac
deleted file mode 100755
index 91f42c9..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,136 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-m4_define([sparkleshare_version], [2.0.1])
-
-AC_PREREQ([2.54])
-AC_INIT([SparkleShare], sparkleshare_version)
-AM_INIT_AUTOMAKE([1.11 dist-bzip2 dist-zip foreign tar-pax])
-AM_MAINTAINER_MODE
-LT_INIT
-
-AC_CONFIG_MACRO_DIRS([build/m4/sparkleshare build/m4/shamrock build/m4/shave])
-
-dnl Export Version Info
-AC_SUBST([ASM_VERSION], [sparkleshare_version])
-
-dnl pkg-config
-AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-if test "$PKG_CONFIG" = "no"; then
- AC_MSG_ERROR([pkg-config is not installed])
-fi
-
-SHAMROCK_EXPAND_LIBDIR
-SHAMROCK_EXPAND_BINDIR
-SHAMROCK_EXPAND_DATADIR
-
-AC_PROG_INSTALL
-
-dnl Mono and mcs
-SHAMROCK_CHECK_MONO_MODULE(3.2.8)
-SHAMROCK_FIND_MONO_RUNTIME
-
-PKG_CHECK_EXISTS([mono >= 3.2.8],
- [SHAMROCK_FIND_MONO_4_5_COMPILER
- SHAMROCK_CHECK_MONO_GAC_ASSEMBLIES([
- System
- ])])
-
-AC_ARG_ENABLE(debug,
- AC_HELP_STRING([--enable-debug],
- [Use 'DEBUG' Configuration [default=YES]]),
- enable_debug=yes, enable_debug=no)
-AM_CONDITIONAL(ENABLE_DEBUG, test "$enable_debug" = "yes")
-if test "$enable_debug" = "yes" ; then
- CONFIG_REQUESTED="yes"
-fi
-
-AC_ARG_ENABLE(release,
- AC_HELP_STRING([--enable-release],
- [Use 'RELEASE' Configuration [default=NO]]),
- enable_release=yes, enable_release=no)
-AM_CONDITIONAL(ENABLE_RELEASE, test "$enable_release" = "yes")
-if test "$enable_release" = "yes" ; then
- CONFIG_REQUESTED="yes"
-fi
-
-if test -z "$CONFIG_REQUESTED" ; then
- AM_CONDITIONAL(ENABLE_DEBUG, true)
- enable_debug=yes
-fi
-
-AC_ARG_ENABLE(appindicator,
- AS_HELP_STRING([--enable-appindicator[=@<:@no/auto/yes@:>@]],[Build support for application indicators ]),
- [enable_appindicator=$enableval],
- [enable_appindicator="auto"])
-
-GUISUBDIRS=
-
-OSNAME=`uname -s`
-if test "$OSNAME" = "Linux" ; then
- SPARKLESHARE_CHECK_GTK_SHARP
- PKG_CHECK_MODULES(NOTIFY_SHARP, notify-sharp-3.0)
-
- dnl check for webkit2-sharp
- PKG_CHECK_MODULES(WEBKIT2_SHARP, webkit2-sharp-4.0, have_webkit2_sharp=yes, have_webkit2_sharp=no)
- if test "$have_webkit2_sharp" = "no" ; then
- AC_MSG_ERROR([webkit2-sharp-4.0 is not installed])
- AC_SUBST(WEBKIT2_SHARP_LIBS)
- fi
-
- APPINDICATOR_REQUIRED=0.1
-
- if test "$enable_appindicator" = "auto" ; then
- PKG_CHECK_EXISTS([appindicator3-sharp-0.1 >= $APPINDICATOR_REQUIRED],
- enable_appindicator="yes", enable_appindicator="no")
- fi
-
- if test "$enable_appindicator" = "yes" ; then
- PKG_CHECK_EXISTS([appindicator3-sharp-0.1 >= $APPINDICATOR_REQUIRED],,
- AC_MSG_ERROR([appindicator3-sharp-0.1 is not installed]))
-
- PKG_CHECK_MODULES(APP_INDICATOR, appindicator3-sharp-0.1 >= $APPINDICATOR_REQUIRED)
- AC_SUBST(APP_INDICATOR_CFLAGS)
- AC_SUBST(APP_INDICATOR_LIBS)
- AC_DEFINE(HAVE_APP_INDICATOR, 1, [Have AppIndicator])
- fi
-
- GUISUBDIRS=SparkleShare
-fi
-
-AM_CONDITIONAL(HAVE_APP_INDICATOR, test "$enable_appindicator" = "yes")
-AM_CONDITIONAL(BUILD_FLATPAK, test "$prefix" = "/app")
-
-AC_SUBST([GUISUBDIRS])
-SHAMROCK_CHECK_NUNIT
-SHAVE_INIT([build/m4/shave], [enable])
-
-AC_OUTPUT([
- Makefile
- build/Makefile
- build/m4/Makefile
- build/m4/shave/shave
- build/m4/shave/shave-libtool
- Sparkles/InstallationInfo.Directory.cs
- Sparkles/Makefile
- Sparkles/Git/Makefile
- SparkleShare/Makefile
- SparkleShare/Common/Makefile
- SparkleShare/Common/HTML/Makefile
- SparkleShare/Common/Presets/Makefile
- SparkleShare/Common/Images/Makefile
- SparkleShare/Linux/Makefile
- SparkleShare/Linux/Images/Makefile
- SparkleShare/Linux/Images/icons/Makefile
- SparkleShare/Linux/Images/icons/hicolor/Makefile
- SparkleShare/Linux/Images/icons/ubuntu-mono-dark/Makefile
- SparkleShare/Linux/Images/icons/ubuntu-mono-light/Makefile
- SparkleShare/Linux/sparkleshare
-])
-
-echo "
-SparkleShare ${VERSION}
-
-Configuration:
- Prefix: ${prefix}
-
-"
-
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..55a6785
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,16 @@
+project('SparkleShare', 'cs')
+
+install_dir = 'share/sparkleshare'
+
+configuration = configuration_data()
+configuration.set('ABS_INSTALL_DIR', join_paths(get_option('prefix'), install_dir))
+
+# This line is changed by scripts/bump-version.sh, so keep it intact
+configuration.set('VERSION', '3.28.0')
+
+subdir('Sparkles')
+subdir('Sparkles/Git')
+subdir('SparkleShare')
+
+meson.add_install_script('scripts/post-install.sh')
+
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..a00dc67
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,2 @@
+option('ubuntu', type: 'boolean', value: false)
+
diff --git a/scripts/bump-version.sh b/scripts/bump-version.sh
new file mode 100755
index 0000000..ae4e9eb
--- /dev/null
+++ b/scripts/bump-version.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if [ "$1" = "" ]; then
+ echo "No version number specified. Usage: ./bump-version.sh VERSION_NUMBER"
+else
+ sed -i.bak "s/ Version='[^']*'/ Version='$1'/" ../SparkleShare/Windows/SparkleShare.wxs
+ sed -i.bak "s/assembly:AssemblyVersion *(\"[^\"]*\")/assembly:AssemblyVersion (\"$1\")/" ../Sparkles/InstallationInfo.Directory.cs
+ sed -i.bak "s/configuration.set('VERSION', '[^\"]*')/configuration.set('VERSION', '$1')/" ../meson.build
+ cat ../SparkleShare/Mac/Info.plist | eval "sed -e '/<key>CFBundleShortVersionString<\/key>/{N;s#<string>.*<\/string>#<string>$1<\/string>#;}'" > ../SparkleShare/Mac/Info.plist.tmp
+ cat ../SparkleShare/Mac/Info.plist.tmp | eval "sed -e '/<key>CFBundleVersion<\/key>/{N;s#<string>.*<\/string>#<string>$1<\/string>#;}'" > ../SparkleShare/Mac/Info.plist
+ rm ../meson.build.bak
+ rm ../SparkleShare/Mac/Info.plist.tmp
+ rm ../SparkleShare/Windows/SparkleShare.wxs.bak
+ rm ../Sparkles/InstallationInfo.Directory.cs.bak
+fi
+
diff --git a/build/ci/Dockerfile b/scripts/ci/Dockerfile
index b4f7b72..b8709ff 100644
--- a/build/ci/Dockerfile
+++ b/scripts/ci/Dockerfile
@@ -1,22 +1,27 @@
-FROM ubuntu:16.04
+FROM ubuntu:17.10
RUN apt-get update
RUN apt-get install -y \
+ automake \
+ autoconf \
desktop-file-utils \
git \
gtk-sharp3-gapi \
- intltool \
libappindicator3-0.1-cil-dev \
libdbus-glib2.0-cil-dev \
libgtk3.0-cil-dev \
+ libmono-system-xml-linq4.0-cil \
libsoup2.4-dev \
libtool-bin \
libwebkit2gtk-4.0 \
mono-devel \
mono-mcs \
- nant \
+ ninja-build \
+ python3-pip \
xsltproc
+RUN pip3 install meson
+
RUN git clone https://github.com/hbons/notify-sharp && \
cd notify-sharp/ && \
./autogen.sh --disable-docs && \
@@ -39,6 +44,9 @@ RUN git clone https://github.com/hbons/webkit2gtk-sharp && \
RUN cd ../
COPY ./ ./
-RUN ./autogen.sh && \
- make && make install
+RUN mkdir build/
+
+RUN meson build/ && \
+ cd build/ && \
+ ninja && ninja install
diff --git a/build/ci/flatpak/Dockerfile b/scripts/ci/flatpak/Dockerfile
index 0c4a0ca..0c4a0ca 100644
--- a/build/ci/flatpak/Dockerfile
+++ b/scripts/ci/flatpak/Dockerfile
diff --git a/scripts/post-install.sh b/scripts/post-install.sh
new file mode 100644
index 0000000..0598e9e
--- /dev/null
+++ b/scripts/post-install.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+echo "-> gtk-update-icon-cache"
+gtk-update-icon-cache --quiet --force --ignore-theme-index ${MESON_INSTALL_PREFIX}/share/icons/hicolor
+
+echo "-> update-desktop-database"
+update-desktop-database --quiet ${MESON_INSTALL_PREFIX}/share/applications
+