diff options
author | Hyacinthe Cartiaux | 2016-08-18 00:42:25 +0200 |
---|---|---|
committer | Hyacinthe Cartiaux | 2016-08-18 00:42:25 +0200 |
commit | cc23e7c6918d7c80411efa4c623fed09877209b2 (patch) | |
tree | 3a74ac964e2d061006b2d96d32a3572260d3a8ca | |
parent | d713866a7236435ea84a7e6b00b0dd1201045cc5 (diff) | |
download | aur-cc23e7c6918d7c80411efa4c623fed09877209b2.tar.gz |
Pkgrel bump: create and apply the patch for kde 5 compatibility
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | PKGBUILD | 47 | ||||
-rw-r--r-- | kde5.patch | 1862 |
3 files changed, 1896 insertions, 23 deletions
@@ -1,8 +1,10 @@ +# Generated by mksrcinfo v8 +# Wed Aug 17 22:41:27 UTC 2016 pkgbase = kde-servicemenus-dropbox pkgdesc = A servicemenu for KDE4 which allows easy access to most of Dropbox features. It uses Dropbox CLI to generate public urls, and pyndexer to allow sharing directories in public directory. pkgver = 0.16.1 - pkgrel = 7 - url = http://kde-apps.org/content/show.php?content=124416 + pkgrel = 8 + url = https://www.kde-look.org/p/998468/ arch = any license = GPL depends = dropbox @@ -15,8 +17,10 @@ pkgbase = kde-servicemenus-dropbox depends = sqlite depends = xdg-utils conflicts = dropbox-servicemenu - source = http://kde-look.org/CONTENT/content-files/124416-DropboxServiceMenu-0.16.1.tar.gz + source = https://dl.opendesktop.org/api/files/download/id/1466690475/124416-DropboxServiceMenu-0.16.1.tar.gz + source = kde5.patch md5sums = 3c0186649311611abfbb8ac016a67791 + md5sums = a6945d04da03a52d88d8117f785035a3 pkgname = kde-servicemenus-dropbox @@ -3,41 +3,48 @@ pkgname=kde-servicemenus-dropbox pkgver=0.16.1 -pkgrel=7 +pkgrel=8 pkgdesc="A servicemenu for KDE4 which allows easy access to most of Dropbox features. It uses Dropbox CLI to generate public urls, and pyndexer to allow sharing directories in public directory." -url="http://kde-apps.org/content/show.php?content=124416" +url="https://www.kde-look.org/p/998468/" license=('GPL') arch=(any) conflicts=('dropbox-servicemenu') depends=('dropbox' 'python2' 'kdebase-kdialog' 'python2-m2crypto' 'sharutils' 'recode' 'perl' 'sqlite' 'xdg-utils') -source=(http://kde-look.org/CONTENT/content-files/124416-DropboxServiceMenu-${pkgver}.tar.gz) -md5sums=('3c0186649311611abfbb8ac016a67791') +source=("https://dl.opendesktop.org/api/files/download/id/1466690475/124416-DropboxServiceMenu-${pkgver}.tar.gz" + "kde5.patch") +md5sums=('3c0186649311611abfbb8ac016a67791' + 'a6945d04da03a52d88d8117f785035a3') + - build() { - cd "$srcdir/DropboxServiceMenu-${pkgver}/" - _SCRIPT_PATH="`kde4-config --prefix`/" - _PATTERN='`kde4-config --localprefix`' + cd "$srcdir" + + # Apply the patch given by "swyear" in the comments section of the kde-look.org page + patch -s -p0 < kde5.patch + cd "$srcdir/DropboxServiceMenu-${pkgver}/" sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/' dropbox-scripts/dropbox.py sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/' dropbox-scripts/dropbox-notify.py sed -i 's/#!\/usr\/bin\/env python/#!\/usr\/bin\/env python2/' dropbox-scripts/pyndexer.py - - sed -i "s,${_PATTERN},${_SCRIPT_PATH}," dropbox-scripts/dropbox_menu.sh - sed -i 's/qdbus/qdbus-qt4/' dropbox-scripts/dropbox_menu.sh + _SCRIPT_PATH="/usr/" + _PATTERN="\$HOME/.local" + + sed -i "s,${_PATTERN},${_SCRIPT_PATH}," dropbox-scripts/dropbox_menu.sh sed -i "s,${_PATTERN},${_SCRIPT_PATH}," dropbox_all.desktop sed -i "s,${_PATTERN},${_SCRIPT_PATH}," dropbox_files.desktop sed -i "s,${_PATTERN},${_SCRIPT_PATH}," dropbox_directories.desktop + + } package() { - cd "$srcdir/DropboxServiceMenu-${pkgver}/" - - mkdir -p ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/" - mkdir -p ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/dropbox-scripts/" - install -m 755 dropbox-scripts/* ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/dropbox-scripts/" - install -m 644 dropbox_all.desktop ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/" - install -m 644 dropbox_files.desktop ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/" - install -m 644 dropbox_directories.desktop ${pkgdir}/"`kde4-config --prefix`/share/kde4/services/ServiceMenus/" -} + cd "$srcdir/DropboxServiceMenu-${pkgver}/" + + mkdir -p "${pkgdir}/usr/share/kservices5/ServiceMenus/dropbox-scripts" + install -m 644 dropbox_all.desktop "${pkgdir}/usr/share/kservices5/ServiceMenus/" + install -m 644 dropbox_files.desktop "${pkgdir}/usr/share/kservices5/ServiceMenus/" + install -m 644 dropbox_directories.desktop "${pkgdir}/usr/share/kservices5/ServiceMenus/" + install -m 755 dropbox-scripts/* "${pkgdir}/usr/share/kservices5/ServiceMenus/dropbox-scripts/" + +} diff --git a/kde5.patch b/kde5.patch new file mode 100644 index 000000000000..fc78d92ed1a5 --- /dev/null +++ b/kde5.patch @@ -0,0 +1,1862 @@ +diff -ruN DropboxServiceMenu-0.16.1/Changelog ServiceMenus4KDE5-0.0.1/Changelog +--- DropboxServiceMenu-0.16.1/Changelog 2012-01-29 10:12:29.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/Changelog 2015-12-03 18:32:33.000000000 +0100 +@@ -1,3 +1,13 @@ ++ServiceMenus4KDE5 ++ ++0.0.1 ++- Change install path for KDE5 ++- Update dropbox.py ++- Modify dropbox_menu.sh to fit KDE5 path, add funtion get_uid, modify function revisions ++- Modify get_dropbox_folder.sh for new config.db path ++ ++ServiceMenus ++ + 0.16.1 + - Danish translation updated thanks to Ole Holm Frandsen + +diff -ruN DropboxServiceMenu-0.16.1/deinstall.sh ServiceMenus4KDE5-0.0.1/deinstall.sh +--- DropboxServiceMenu-0.16.1/deinstall.sh 2010-06-13 09:54:40.000000000 +0200 ++++ ServiceMenus4KDE5-0.0.1/deinstall.sh 2015-12-03 18:19:18.000000000 +0100 +@@ -1,5 +1,5 @@ + #!/bin/bash +-cd "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/" ++cd "$HOME/.local/share/kservices5/ServiceMenus/" + rm dropbox_all.desktop dropbox_files.desktop dropbox_directories.desktop + rm -r dropbox-scripts + +diff -ruN DropboxServiceMenu-0.16.1/dropbox_all.desktop ServiceMenus4KDE5-0.0.1/dropbox_all.desktop +--- DropboxServiceMenu-0.16.1/dropbox_all.desktop 2012-01-29 10:10:25.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/dropbox_all.desktop 2015-12-02 15:03:22.000000000 +0100 +@@ -23,21 +23,21 @@ + Name[zh_TW]=移到 Public 資料夾並貼上 URL 到 Klipper 剪貼簿 + Name[hu]=Áthelyezés a Publikus könyvtárba és másold be az URL-t a Vágólapra(Klipper) + Name[nl]=Verplaatsen naar Publieke map, en URL kopiëren naar Klipper +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh move "%f" nl + Icon=go-jump + + [Desktop Action copyAndGetPublicURL] +@@ -56,21 +56,21 @@ + Name[zh_TW]=複製到 Public 資料夾並貼上 URL 到 Klipper 剪貼簿 + Name[hu]=Másold a Publikus könyvtárba és másold be az URL-t a Vágólapra(Klipper) + Name[nl]=Kopiëren naar Publieke map, en URL kopiëren naar Klipper +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh copy "%f" nl + Icon=edit-copy + + [Desktop Action generatePublicURL] +@@ -89,21 +89,21 @@ + Name[zh_TW]=產生公開的 URL... + # Name[hu]= + Name[nl]=Publieke URL genereren +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh klipperurl "%f" nl + Icon=download + + [Desktop Action sendPublicURLmail] +@@ -123,21 +123,21 @@ + Name[zh_TW]=由 email 發送公開的 URL + Name[hu]=Publikus URL küldése emaillel + Name[nl]=Publieke URL verzenden via e-mail +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh mailurl "%f" nl + Icon=mail-send + + [Desktop Action sendPublicURLgmail] +@@ -156,19 +156,19 @@ + Name[zh_TW]=由 GMail 發送公開的 URL + Name[hu]=Publikus URL küldése GMail-lel... + Name[nl]=Publieke URL via GMail verzenden +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh gmailurl "%f" nl + Icon=mail-send +\ No newline at end of file +diff -ruN DropboxServiceMenu-0.16.1/dropbox_directories.desktop ServiceMenus4KDE5-0.0.1/dropbox_directories.desktop +--- DropboxServiceMenu-0.16.1/dropbox_directories.desktop 2012-01-26 17:36:05.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/dropbox_directories.desktop 2015-12-02 15:03:59.000000000 +0100 +@@ -23,21 +23,21 @@ + # Name[pt]= + Name[hu]=Könyvtár titkosítása... + Name[nl]=Oplijsting van de mapinhoud versleutelen... +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh encrypt "%f" nl + Icon=document-encrypt + + [Desktop Action shareFolder] +@@ -56,19 +56,19 @@ + Name[zh_TW]=分享此資料夾... + Name[hu]=Könyvtár megosztása... + Name[nl]=Deze map delen... +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh share "%f" nl + Icon=folder-remote +\ No newline at end of file +diff -ruN DropboxServiceMenu-0.16.1/dropbox_files.desktop ServiceMenus4KDE5-0.0.1/dropbox_files.desktop +--- DropboxServiceMenu-0.16.1/dropbox_files.desktop 2012-01-26 17:36:05.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/dropbox_files.desktop 2015-12-02 15:04:37.000000000 +0100 +@@ -23,19 +23,19 @@ + Name[zh_TW]=檢視較早版本... + Name[hu]=Korábbi verziók megtekintése.... + Name[nl]=Vorige versies bekijken +-Exec=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" +-Exec[de]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" de +-Exec[pl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" pl +-Exec[cs]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" cs +-Exec[tr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" tr +-Exec[ru]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" ru +-Exec[lt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" lt +-Exec[es]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" es +-Exec[it]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" it +-Exec[fr]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" fr +-Exec[da]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" da +-Exec[pt]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" pt +-Exec[zh_TW]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" zh_TW +-Exec[hu]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" hu +-Exec[nl]=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" nl ++Exec=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" ++Exec[de]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" de ++Exec[pl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" pl ++Exec[cs]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" cs ++Exec[tr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" tr ++Exec[ru]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" ru ++Exec[lt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" lt ++Exec[es]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" es ++Exec[it]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" it ++Exec[fr]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" fr ++Exec[da]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" da ++Exec[pt]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" pt ++Exec[zh_TW]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" zh_TW ++Exec[hu]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" hu ++Exec[nl]=$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/dropbox_menu.sh revisions "%f" nl + Icon=chronometer +\ No newline at end of file +diff -ruN DropboxServiceMenu-0.16.1/dropbox-scripts/dropbox_menu.sh ServiceMenus4KDE5-0.0.1/dropbox-scripts/dropbox_menu.sh +--- DropboxServiceMenu-0.16.1/dropbox-scripts/dropbox_menu.sh 2012-01-26 17:36:05.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/dropbox-scripts/dropbox_menu.sh 2015-12-02 14:56:03.000000000 +0100 +@@ -21,7 +21,7 @@ + # Fifth Floor, Boston, MA 02110-1301 USA + SCRIPTS_PATH=`which dropbox_menu.sh` + SCRIPTS_PATH=`echo "$SCRIPTS_PATH" | sed "s|"${SCRIPTS_PATH##*/}"||g"` +-SCRIPTS_PATH="`kde4-config --localprefix`share/kde4/services/ServiceMenus/dropbox-scripts/" ++SCRIPTS_PATH="$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/" + . ${SCRIPTS_PATH}dropbox_menu_translations.sh + + fileurl="$2" +@@ -88,13 +88,19 @@ + } + + revisions() { ++ get_uid + if [ "$is_in_dropbox" != "" ]; then +- xdg-open https://www.dropbox.com/revisions/"$relative_path" ++ xdg-open https://www.dropbox.com/revisions/"$relative_path"?_subject_uid="$my_uid" + else + $python ${SCRIPTS_PATH}dropbox-notify.py --icon dialog-error -t $error_timeout Dropbox "$revisions_error" + fi + } + ++get_uid() { ++ testurl=`$python ${SCRIPTS_PATH}dropbox.py puburl "$dropbox_path"/Public/index.html` ++ my_uid=`set - $(IFS="/"; echo $testurl); echo $4` ++} ++ + klipper_url() { + if [ "$is_in_public" != "" ]; then + if [ -d "$fileurl" ]; then +diff -ruN DropboxServiceMenu-0.16.1/dropbox-scripts/dropbox.py ServiceMenus4KDE5-0.0.1/dropbox-scripts/dropbox.py +--- DropboxServiceMenu-0.16.1/dropbox-scripts/dropbox.py 2010-05-12 14:53:26.000000000 +0200 ++++ ServiceMenus4KDE5-0.0.1/dropbox-scripts/dropbox.py 2015-12-02 09:49:50.000000000 +0100 +@@ -1,52 +1,126 @@ + #!/usr/bin/python + # +-# Copyright 2008 Evenflow, Inc. ++# Copyright (c) Dropbox, Inc. + # +-# dropbox.py ++# dropbox + # Dropbox frontend script ++# This file is part of nautilus-dropbox 2015.10.28. + # +-# dropbox.py is free software: you can redistribute it and/or modify ++# nautilus-dropbox is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. + # +-# dropbox.py is distributed in the hope that it will be useful, ++# nautilus-dropbox is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License +-# along with dropbox.py. If not, see <http://www.gnu.org/licenses/>. ++# along with nautilus-dropbox. If not, see <http://www.gnu.org/licenses/>. + # +- + from __future__ import with_statement + +-import sys ++import errno ++import locale + import optparse +-import socket + import os +-import time + import platform ++import shutil ++import socket ++import StringIO ++import subprocess ++import sys + import tarfile ++import tempfile + import threading +-import urllib +-import subprocess +-import fcntl +-import errno +-import locale +-from contextlib import closing ++import thread ++import time ++import traceback ++import urllib2 ++ ++try: ++ import gpgme ++except ImportError: ++ gpgme = None ++ ++from contextlib import closing, contextmanager ++from posixpath import curdir, sep, pardir, join, abspath, commonprefix + + INFO = u"Dropbox is the easiest way to share and store your files online. Want to learn more? Head to" +-LINK = u"http://www.getdropbox.com/" ++LINK = u"https://www.dropbox.com/" + WARNING = u"In order to use Dropbox, you must download the proprietary daemon." ++GPG_WARNING = u"Note: python-gpgme is not installed, we will not be able to verify binary signatures." ++ERROR_CONNECTING = u"Trouble connecting to Dropbox servers. Maybe your internet connection is down, or you need to set your http_proxy environment variable." ++ERROR_SIGNATURE = u"Downloaded binary does not match Dropbox signature, aborting install." ++ ++DOWNLOAD_LOCATION_FMT = "https://www.dropbox.com/download?plat=%s" ++SIGNATURE_LOCATION_FMT = "https://www.dropbox.com/download?plat=%s&signature=1" + + DOWNLOADING = u"Downloading Dropbox... %d%%" + UNPACKING = u"Unpacking Dropbox... %d%%" + + PARENT_DIR = os.path.expanduser("~") + DROPBOXD_PATH = "%s/.dropbox-dist/dropboxd" % PARENT_DIR ++DESKTOP_FILE = u"/usr/share/applications/dropbox.desktop" + + enc = locale.getpreferredencoding() ++ ++# Available from https://linux.dropbox.com/fedora/rpm-public-key.asc ++DROPBOX_PUBLIC_KEY = """ ++-----BEGIN PGP PUBLIC KEY BLOCK----- ++Version: SKS 1.1.0 ++ ++mQENBEt0ibEBCACv4hZRPqwtpU6z8+BB5YZU1a3yjEvg2W68+a6hEwxtCa2U++4dzQ+7EqaU ++q5ybQnwtbDdpFpsOi9x31J+PCpufPUfIG694/0rlEpmzl2GWzY8NqfdBFGGm/SPSSwvKbeNc ++FMRLu5neo7W9kwvfMbGjHmvUbzBUVpCVKD0OEEf1q/Ii0Qcekx9CMoLvWq7ZwNHEbNnij7ec ++nvwNlE2MxNsOSJj+hwZGK+tM19kuYGSKw4b5mR8IyThlgiSLIfpSBh1n2KX+TDdk9GR+57TY ++vlRu6nTPu98P05IlrrCP+KF0hYZYOaMvQs9Rmc09tc/eoQlN0kkaBWw9Rv/dvLVc0aUXABEB ++AAG0MURyb3Bib3ggQXV0b21hdGljIFNpZ25pbmcgS2V5IDxsaW51eEBkcm9wYm94LmNvbT6J ++ATYEEwECACAFAkt0ibECGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRD8kYszUESRLi/z ++B/wMscEa15rS+0mIpsORknD7kawKwyda+LHdtZc0hD/73QGFINR2P23UTol/R4nyAFEuYNsF ++0C4IAD6y4pL49eZ72IktPrr4H27Q9eXhNZfJhD7BvQMBx75L0F5gSQwuC7GdYNlwSlCD0AAh ++Qbi70VBwzeIgITBkMQcJIhLvllYo/AKD7Gv9huy4RLaIoSeofp+2Q0zUHNPl/7zymOqu+5Ox ++e1ltuJT/kd/8hU+N5WNxJTSaOK0sF1/wWFM6rWd6XQUP03VyNosAevX5tBo++iD1WY2/lFVU ++JkvAvge2WFk3c6tAwZT/tKxspFy4M/tNbDKeyvr685XKJw9ei6GcOGHD ++=5rWG ++-----END PGP PUBLIC KEY BLOCK----- ++""" ++ ++# Futures ++ ++def methodcaller(name, *args, **kwargs): ++ def caller(obj): ++ return getattr(obj, name)(*args, **kwargs) ++ return caller ++ ++def relpath(path, start=curdir): ++ """Return a relative version of a path""" ++ ++ if not path: ++ raise ValueError("no path specified") ++ ++ if type(start) is unicode: ++ start_list = unicode_abspath(start).split(sep) ++ else: ++ start_list = abspath(start).split(sep) ++ ++ if type(path) is unicode: ++ path_list = unicode_abspath(path).split(sep) ++ else: ++ path_list = abspath(path).split(sep) ++ ++ # Work out how much of the filepath is shared by start and path. ++ i = len(commonprefix([start_list, path_list])) ++ ++ rel_list = [pardir] * (len(start_list)-i) + path_list[i:] ++ if not rel_list: ++ return curdir ++ return join(*rel_list) ++ ++# End Futures ++ ++ + def console_print(st=u"", f=sys.stdout, linebreak=True): + global enc + assert type(st) is unicode +@@ -68,7 +142,7 @@ + return False + else: + console_print(u"Sorry, I didn't understand that. Please type yes or no.") +- ++ + def plat(): + if sys.platform.lower().startswith('linux'): + arch = platform.machine() +@@ -100,62 +174,98 @@ + def unicode_abspath(path): + global enc + assert type(path) is unicode +- # shouldn't pass unicode to this craphead, it appends with os.getcwd() which is always a str ++ # shouldn't pass unicode to this craphead, it appends with os.getcwd() which is always a str + return os.path.abspath(path.encode(sys.getfilesystemencoding())).decode(sys.getfilesystemencoding()) + +-# This sets a custom User-Agent +-class DropboxURLopener(urllib.FancyURLopener): +- version = "DropboxLinuxDownloader/0.6.1" +-urllib._urlopener = DropboxURLopener() +- +-class DownloadState(object): +- def __init__(self): +- try: +- self.file = urllib.urlopen("http://www.getdropbox.com/download?plat=%s" % plat()) +- except IOError: +- FatalVisibleError("Trouble connecting to Dropbox servers. Maybe your internet connection is down, or you need to set your http_proxy environment variable.") +- +- fcntl.fcntl(self.file, fcntl.F_SETFL, os.O_NONBLOCK) +- +- self.size = int(self.file.info()['content-length']) +- self.progress = 0 ++@contextmanager ++def gpgme_context(keys): ++ gpg_conf_contents = '' ++ _gpghome = tempfile.mkdtemp(prefix='tmp.gpghome') + +- self.local_path = "%s/dropbox.tar.gz" % PARENT_DIR +- self.local_file = open(self.local_path, 'wb') ++ try: ++ os.environ['GNUPGHOME'] = _gpghome ++ fp = open(os.path.join(_gpghome, 'gpg.conf'), 'wb') ++ fp.write(gpg_conf_contents) ++ fp.close() ++ ctx = gpgme.Context() ++ ++ loaded = [] ++ for key_file in keys: ++ result = ctx.import_(key_file) ++ key = ctx.get_key(result.imports[0][0]) ++ loaded.append(key) ++ ++ ctx.signers = loaded ++ ++ yield ctx ++ finally: ++ del os.environ['GNUPGHOME'] ++ shutil.rmtree(_gpghome, ignore_errors=True) ++ ++class SignatureVerifyError(Exception): ++ pass ++ ++def verify_signature(key_file, sig_file, plain_file): ++ with gpgme_context([key_file]) as ctx: ++ sigs = ctx.verify(sig_file, plain_file, None) ++ return sigs[0].status == None ++ ++def download_file_chunk(url, buf): ++ opener = urllib2.build_opener() ++ opener.addheaders = [('User-Agent', "DropboxLinuxDownloader/2015.10.28")] ++ sock = opener.open(url) ++ ++ size = int(sock.info()['content-length']) ++ bufsize = max(size / 200, 4096) ++ progress = 0 + +- def copy_data(self): ++ with closing(sock) as f: ++ yield (0, True) + while True: + try: +- chunk = os.read(self.file.fileno(), 4096) +- self.progress += len(chunk) +- self.local_file.write(chunk) +- yield True +- if self.progress == self.size: ++ chunk = f.read(bufsize) ++ progress += len(chunk) ++ buf.write(chunk) ++ yield (float(progress)/size, True) ++ if progress == size: + break + except OSError, e: + if hasattr(e, 'errno') and e.errno == errno.EAGAIN: + # nothing left to read +- yield False ++ yield (float(progress)/size, False) + else: + raise + +- self.file.close() ++class DownloadState(object): ++ def __init__(self): ++ self.local_file = StringIO.StringIO() ++ ++ def copy_data(self): ++ return download_file_chunk(DOWNLOAD_LOCATION_FMT % plat(), self.local_file) + + def unpack(self): +- self.local_file.close() +- archive = tarfile.open(self.local_path, 'r:gz') ++ # download signature ++ signature = StringIO.StringIO() ++ for _ in download_file_chunk(SIGNATURE_LOCATION_FMT % plat(), signature): ++ pass ++ signature.seek(0) ++ self.local_file.seek(0) ++ ++ if gpgme: ++ if not verify_signature(StringIO.StringIO(DROPBOX_PUBLIC_KEY), signature, self.local_file): ++ raise SignatureVerifyError() ++ ++ self.local_file.seek(0) ++ archive = tarfile.open(fileobj=self.local_file, mode='r:gz') + total_members = len(archive.getmembers()) + for i, member in enumerate(archive.getmembers()): + archive.extract(member, PARENT_DIR) + yield member.name, i, total_members + archive.close() +- os.remove(self.local_path) + + def cancel(self): + if not self.local_file.closed: + self.local_file.close() +- if os.path.exists(self.local_path): +- os.remove(self.local_path) + + def load_serialized_images(): + global box_logo_pixbuf, window_icon +@@ -174,6 +284,8 @@ + import pango + import webbrowser + ++ gtk.gdk.threads_init() ++ + load_serialized_images() + + global FatalVisibleError +@@ -188,17 +300,51 @@ + gtk.main_quit() + sys.exit(-1) + +- def gtk_flush_events(): +- while gtk.events_pending(): +- gtk.main_iteration() ++ class GeneratorTask(object): ++ def __init__(self, generator, loop_callback, on_done=None, on_exception=None): ++ self.generator = generator ++ self.loop_callback = loop_callback ++ self.on_done = on_done ++ self.on_exception = on_exception ++ ++ def _run(self, *args, **kwargs): ++ self._stopped = False ++ try: ++ for ret in self.generator(*args, **kwargs): ++ if ret is None: ++ ret = () ++ if not isinstance(ret, tuple): ++ ret = (ret,) ++ gobject.idle_add(self.loop_callback, *ret) ++ ++ if self._stopped: ++ thread.exit() ++ except Exception, ex: ++ print ex ++ if self.on_exception is not None: ++ gobject.idle_add(self.on_exception, ex) ++ else: ++ if self.on_done is not None: ++ gobject.idle_add(self.on_done) ++ ++ def start(self, *args, **kwargs): ++ t = threading.Thread(target=self._run, args=args, kwargs=kwargs) ++ t.setDaemon(True) ++ t.start() ++ ++ def stop(self): ++ self._stopped = True + + class DownloadDialog(gtk.Dialog): + def handle_delete_event(self, wid, ev, data=None): + self.handle_cancel(wid) + ++ def handle_dont_show_toggle(self, button, data=None): ++ reroll_autostart(not button.get_active()) ++ + def handle_cancel(self, button): +- if self.watch: +- gobject.source_remove(self.watch) ++ if self.task: ++ self.task.stop() + if self.download: + self.download.cancel() + gtk.main_quit() +@@ -208,47 +354,51 @@ + # begin download + self.ok.hide() + self.download = DownloadState() +- self.one_chunk = self.download.copy_data() +- self.watch = gobject.io_add_watch(self.download.file, +- gobject.IO_IN | +- gobject.IO_PRI | +- gobject.IO_ERR | +- gobject.IO_HUP, +- self.handle_data_waiting) ++ + self.label.hide() ++ if self.dont_show_again_align is not None: ++ self.dont_show_again_align.hide() + self.progress.show() + +- def update_progress(self, text, fraction): +- self.progress.set_text(text % int(fraction*100)) +- self.progress.set_fraction(fraction) +- gtk_flush_events() ++ def download_progress(progress, status): ++ if not status: ++ self.task.stop() ++ self.update_progress(DOWNLOADING, progress) + +- def handle_data_waiting(self, fd, condition): +- if condition == gobject.IO_HUP: +- FatalVisibleError("Connection to server unexpectedly closed.") +- elif condition == gobject.IO_ERR: +- FatalVisibleError("Unexpected error occurred with download.") +- try: +- while self.one_chunk.next(): +- self.update_progress(DOWNLOADING, float(self.download.progress)/self.download.size) +- except StopIteration: ++ def finished(): + self.update_progress(DOWNLOADING, 1.0) + self.unpack_dropbox() +- return False +- else: +- self.update_progress(DOWNLOADING, float(self.download.progress)/self.download.size) +- return True ++ ++ def error(ex): ++ FatalVisibleError(ERROR_CONNECTING) ++ ++ self.update_progress(DOWNLOADING, 0) ++ self.task = GeneratorTask(self.download.copy_data, ++ download_progress, ++ finished, error).start() ++ ++ def update_progress(self, text, fraction): ++ self.progress.set_text(text % int(fraction*100)) ++ self.progress.set_fraction(fraction) + + def unpack_dropbox(self): +- one_member = self.download.unpack() +- try: +- while True: +- name, i, total = one_member.next() +- self.update_progress(UNPACKING, float(i)/total) +- except StopIteration: ++ def unpack_progress(name, i, total): ++ self.update_progress(UNPACKING, float(i)/total) ++ ++ def finished(): + self.update_progress(UNPACKING, 1.0) + gtk.main_quit() + ++ def error(ex): ++ if isinstance(ex, SignatureVerifyError): ++ FatalVisibleError(ERROR_SIGNATURE) ++ else: ++ FatalVisibleError(ERROR_CONNECTING) ++ ++ self.task = GeneratorTask(self.download.unpack, ++ unpack_progress, ++ finished, error).start() ++ + def mouse_down(self, widget, event): + if self.hovering: + self.clicked_link = True +@@ -277,10 +427,10 @@ + title = "Dropbox Installation") + + self.download = None +- self.watch = None + self.hovering = False + self.clicked_link = False + self.user_cancelled = False ++ self.task = None + + self.ok = ok = gtk.Button(stock=gtk.STOCK_OK) + ok.connect('clicked', self.handle_ok) +@@ -303,7 +453,8 @@ + self.progress.set_property('width-request', 300) + + self.label = gtk.Label() +- self.label.set_markup('%s <span foreground="#000099" underline="single" weight="bold">%s</span>\n\n%s' % (INFO, LINK, WARNING)) ++ GPG_WARNING_MSG = (u"\n\n" + GPG_WARNING) if not gpgme else u"" ++ self.label.set_markup('%s <span foreground="#000099" underline="single" weight="bold">%s</span>\n\n%s%s' % (INFO, LINK, WARNING, GPG_WARNING_MSG)) + self.label.set_line_wrap(True) + self.label.set_property('width-request', 300) + self.label.show() +@@ -313,6 +464,7 @@ + self.label_box.connect("button-release-event", self.mouse_up) + self.label_box.connect("button-press-event", self.mouse_down) + self.label_box.connect("motion-notify-event", self.label_motion) ++ + self.label_box.show() + def on_realize(widget): + self.label_box.add_events(gtk.gdk.POINTER_MOTION_MASK) +@@ -326,7 +478,31 @@ + self.hbox.show() + + self.vbox.add(self.hbox) +- self.set_resizable(False) ++ ++ self.dont_show_again_align = None ++ ++ try: ++ if can_reroll_autostart(): ++ dont_show_again = gtk.CheckButton("_Don't show this again") ++ dont_show_again.connect('toggled', self.handle_dont_show_toggle) ++ dont_show_again.show() ++ ++ self.dont_show_again_align = gtk.Alignment(xalign=1.0, yalign=0.0, xscale=0.0, yscale=0.0) ++ self.dont_show_again_align.add(dont_show_again) ++ self.dont_show_again_align.show() ++ ++ hbox = gtk.HBox() ++ hbox.set_property('border-width', 10) ++ hbox.pack_start(self.dont_show_again_align, True, True) ++ hbox.show() ++ ++ self.vbox.add(hbox) ++ ++ self.set_resizable(False) ++ except: ++ traceback.print_exc() ++ ++ self.ok.grab_focus() + + dialog = DownloadDialog() + dialog.show() +@@ -366,42 +542,71 @@ + write(save) + flush() + console_print(u"%s %s\n" % (INFO, LINK)) ++ GPG_WARNING_MSG = (u"\n%s" % GPG_WARNING) if not gpgme else u"" + +- if not yes_no_question(WARNING): ++ if not yes_no_question("%s%s" % (WARNING, GPG_WARNING_MSG)): + return + + download = DownloadState() +- one_chunk = download.copy_data() + +- try: +- while True: +- one_chunk.next() +- setprogress(DOWNLOADING, float(download.progress)/download.size) +- except StopIteration: ++ try: ++ for progress, status in download.copy_data(): ++ if not status: ++ break ++ setprogress(DOWNLOADING, progress) ++ except Exception: ++ FatalVisibleError(ERROR_CONNECTING) ++ else: + setprogress(DOWNLOADING, 1.0) + console_print() + write(save) + +- one_member = download.unpack() +- + try: +- while True: +- name, i, total = one_member.next() ++ for name, i, total in download.unpack(): + setprogress(UNPACKING, float(i)/total) +- except StopIteration: ++ except SignatureVerifyError: ++ FatalVisibleError(ERROR_SIGNATURE) ++ except Exception: ++ FatalVisibleError(ERROR_CONNECTING) ++ else: + setprogress(UNPACKING, 1.0) + + console_print() + ++class CommandTicker(threading.Thread): ++ def __init__(self): ++ threading.Thread.__init__(self) ++ self.stop_event = threading.Event() ++ ++ def stop(self): ++ self.stop_event.set() ++ ++ def run(self): ++ ticks = ['[. ]', '[.. ]', '[...]', '[ ..]', '[ .]', '[ ]'] ++ i = 0 ++ first = True ++ while True: ++ self.stop_event.wait(0.25) ++ if self.stop_event.isSet(): break ++ if i == len(ticks): ++ first = False ++ i = 0 ++ if not first: ++ sys.stderr.write("\r%s\r" % ticks[i]) ++ sys.stderr.flush() ++ i += 1 ++ sys.stderr.flush() ++ ++ + class DropboxCommand(object): + class CouldntConnectError(Exception): pass + class BadConnectionError(Exception): pass + class EOFError(Exception): pass + class CommandError(Exception): pass + +- def __init__(self): ++ def __init__(self, timeout=5): + self.s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) +- self.s.settimeout(3) ++ self.s.settimeout(timeout) + try: + self.s.connect(os.path.expanduser(u'~/.dropbox/command_socket')) + except socket.error, e: +@@ -431,10 +636,23 @@ + [v])) + u"\n").encode('utf8') + for k,v in args.iteritems()) + self.f.write(u"done\n".encode('utf8')) +- ++ + self.f.flush() + +- ok = self.__readline() == u"ok" ++ # Start a ticker ++ ticker_thread = CommandTicker() ++ ticker_thread.start() ++ ++ # This is the potentially long-running call. ++ try: ++ ok = self.__readline() == u"ok" ++ except KeyboardInterrupt: ++ raise DropboxCommand.BadConnectionError("Keyboard interruption detected") ++ finally: ++ # Tell the ticker to stop. ++ ticker_thread.stop() ++ ticker_thread.join() ++ + if ok: + toret = {} + for i in range(21): +@@ -444,7 +662,7 @@ + line = self.__readline() + if line == u"done": + break +- ++ + argval = line.split(u"\t") + toret[argval[0]] = argval[1:] + +@@ -458,9 +676,9 @@ + line = self.__readline() + if line == u"done": + break +- ++ + problems.append(line) +- ++ + raise DropboxCommand.CommandError(u"\n".join(problems)) + + # this is the hotness, auto marshalling +@@ -474,21 +692,33 @@ + return __spec_command + + commands = {} ++aliases = {} + + def command(meth): +- global commands ++ global commands, aliases + assert meth.__doc__, "All commands need properly formatted docstrings (even %r!!)" % meth + if hasattr(meth, 'im_func'): # bound method, if we ever have one + meth = meth.im_func + commands[meth.func_name] = meth ++ meth_aliases = [unicode(alias) for alias in aliases.iterkeys() if aliases[alias].func_name == meth.func_name] ++ if meth_aliases: ++ meth.__doc__ += u"\nAliases: %s" % ",".join(meth_aliases) + return meth + ++def alias(name): ++ def decorator(meth): ++ global commands, aliases ++ assert name not in commands, "This alias is the name of a command." ++ aliases[name] = meth ++ return meth ++ return decorator ++ + def requires_dropbox_running(meth): + def newmeth(*n, **kw): + if is_dropbox_running(): + return meth(*n, **kw) + else: +- console_print(u"Dropbox isn't running!") ++ console_print(u"Dropbox isn't running!") + newmeth.func_name = meth.func_name + newmeth.__doc__ = meth.__doc__ + return newmeth +@@ -500,7 +730,7 @@ + # we don't reap the child because we're gonna die anyway, let init do it + a = subprocess.Popen([db_path], preexec_fn=os.setsid, cwd=os.path.expanduser("~"), + stderr=sys.stderr, stdout=f, close_fds=True) +- ++ + # in seconds + interval = 0.5 + wait_for = 60 +@@ -509,13 +739,89 @@ + return True + # back off from connect for a while + time.sleep(interval) +- ++ + return False + else: + return False + ++# Extracted and modified from os.cmd.Cmd ++def columnize(list, display_list=None, display_width=None): ++ if not list: ++ console_print(u"<empty>") ++ return ++ ++ non_unicode = [i for i in range(len(list)) if not (isinstance(list[i], unicode))] ++ if non_unicode: ++ raise TypeError, ("list[i] not a string for i in %s" % ++ ", ".join(map(unicode, non_unicode))) ++ ++ if not display_width: ++ d = os.popen('stty size', 'r').read().split() ++ if d: ++ display_width = int(d[1]) ++ else: ++ for item in list: ++ console_print(item) ++ return ++ ++ if not display_list: ++ display_list = list ++ ++ size = len(list) ++ if size == 1: ++ console_print(display_list[0]) ++ return ++ ++ for nrows in range(1, len(list)): ++ ncols = (size+nrows-1) // nrows ++ colwidths = [] ++ totwidth = -2 ++ for col in range(ncols): ++ colwidth = 0 ++ for row in range(nrows): ++ i = row + nrows*col ++ if i >= size: ++ break ++ x = list[i] ++ colwidth = max(colwidth, len(x)) ++ colwidths.append(colwidth) ++ totwidth += colwidth + 2 ++ if totwidth > display_width: ++ break ++ if totwidth <= display_width: ++ break ++ else: ++ nrows = len(list) ++ ncols = 1 ++ colwidths = [0] ++ lines = [] ++ for row in range(nrows): ++ texts = [] ++ display_texts = [] ++ for col in range(ncols): ++ i = row + nrows*col ++ if i >= size: ++ x = "" ++ y = "" ++ else: ++ x = list[i] ++ y = display_list[i] ++ texts.append(x) ++ display_texts.append(y) ++ while texts and not texts[-1]: ++ del texts[-1] ++ original_texts = texts[:] ++ for col in range(len(texts)): ++ texts[col] = texts[col].ljust(colwidths[col]) ++ texts[col] = texts[col].replace(original_texts[col], display_texts[col]) ++ line = u" ".join(texts) ++ lines.append(line) ++ for line in lines: ++ console_print(line) ++ + @command + @requires_dropbox_running ++@alias('stat') + def filestatus(args): + u"""get current sync status of one or more files + dropbox filestatus [-l] [-a] [FILE]... +@@ -526,17 +832,19 @@ + -l --list prints out information in a format similar to ls. works best when your console supports color :) + -a --all do not ignore entries starting with . + """ ++ global enc ++ + oparser = optparse.OptionParser() + oparser.add_option("-l", "--list", action="store_true", dest="list") + oparser.add_option("-a", "--all", action="store_true", dest="all") + (options, args) = oparser.parse_args(args) + +- # first check if dropbox is already running + try: + with closing(DropboxCommand()) as dc: + if options.list: +- # TODO: ls style columns ++ # Listing. + ++ # Separate directories from files. + if len(args) == 0: + dirs, nondirs = [u"."], [] + else: +@@ -544,95 +852,128 @@ + + for a in args: + try: +- (dirs if os.path.isdir(a) else nondirs).\ +- append(a.decode(sys.getfilesystemencoding())) ++ (dirs if os.path.isdir(a) else nondirs).append(a.decode(enc)) + except UnicodeDecodeError: +- pass ++ continue + + if len(dirs) == 0 and len(nondirs) == 0: ++ #TODO: why? + exit(1) + +- def lowerkey(st): +- return st.lower() +- +- dirs.sort(key=lowerkey) +- nondirs.sort(key=lowerkey) +- +- def printstatus(fp): +- if not os.path.exists(fp): +- console_print(u"%s (File doesn't exist!)" % os.path.basename(fp)) +- return ++ dirs.sort(key=methodcaller('lower')) ++ nondirs.sort(key=methodcaller('lower')) + ++ # Gets a string representation for a path. ++ def path_to_string(file_path): ++ if not os.path.exists(file_path): ++ path = u"%s (File doesn't exist!)" % os.path.basename(file_path) ++ return (path, path) + try: +- status = dc.icon_overlay_file_status(path=fp).get(u'status', [None])[0] ++ status = dc.icon_overlay_file_status(path=file_path).get(u'status', [None])[0] + except DropboxCommand.CommandError, e: +- console_print(u"%s (%s)" % (os.path.basename(fp), e)) +- return ++ path = u"%s (%s)" % (os.path.basename(file_path), e) ++ return (path, path) + +- if not sys.stdout.isatty(): +- console_print(os.path.basename(fp)) +- return ++ env_term = os.environ.get('TERM','') ++ supports_color = (sys.stderr.isatty() and ( ++ env_term.startswith('vt') or ++ env_term.startswith('linux') or ++ 'xterm' in env_term or ++ 'color' in env_term ++ ) ++ ) ++ ++ # TODO: Test when you don't support color. ++ if not supports_color: ++ path = os.path.basename(file_path) ++ return (path, path) + + if status == u"up to date": +- INIT, CLEANUP = "\x1b[32m", "\x1b[0m" ++ init, cleanup = "\x1b[32;1m", "\x1b[0m" + elif status == u"syncing": +- INIT, CLEANUP = "\x1b[36m", "\x1b[0m" ++ init, cleanup = "\x1b[36;1m", "\x1b[0m" + elif status == u"unsyncable": +- INIT, CLEANUP = "\x1b[41m", "\x1b[0m" ++ init, cleanup = "\x1b[41;1m", "\x1b[0m" ++ elif status == u"selsync": ++ init, cleanup = "\x1b[37;1m", "\x1b[0m" + else: +- INIT, CLEANUP = '', '' ++ init, cleanup = '', '' + +- console_print(u"%s%s%s" % (INIT, os.path.basename(fp), CLEANUP)) ++ path = os.path.basename(file_path) ++ return (path, u"%s%s%s" % (init, path, cleanup)) + +- def printdir(name): +- for subname in sorted(os.listdir(name), key=lowerkey): ++ # Prints a directory. ++ def print_directory(name): ++ clean_paths = [] ++ formatted_paths = [] ++ for subname in sorted(os.listdir(name), key=methodcaller('lower')): + if type(subname) != unicode: + continue +- ++ + if not options.all and subname[0] == u'.': + continue + + try: +- printstatus(unicode_abspath(os.path.join(name, subname))) ++ clean, formatted = path_to_string(unicode_abspath(os.path.join(name, subname))) ++ clean_paths.append(clean) ++ formatted_paths.append(formatted) + except (UnicodeEncodeError, UnicodeDecodeError), e: + continue ++ ++ columnize(clean_paths, formatted_paths) ++ + try: + if len(dirs) == 1 and len(nondirs) == 0: +- printdir(dirs[0]) ++ print_directory(dirs[0]) + else: ++ nondir_formatted_paths = [] ++ nondir_clean_paths = [] + for name in nondirs: + try: +- printstatus(unicode_abspath(name)) ++ clean, formatted = path_to_string(unicode_abspath(name)) ++ nondir_clean_paths.append(clean) ++ nondir_formatted_paths.append(formatted) + except (UnicodeEncodeError, UnicodeDecodeError), e: + continue + ++ if nondir_clean_paths: ++ columnize(nondir_clean_paths, nondir_formatted_paths) ++ + if len(nondirs) == 0: + console_print(dirs[0] + u":") +- printdir(dirs[0]) ++ print_directory(dirs[0]) + dirs = dirs[1:] + + for name in dirs: + console_print() + console_print(name + u":") +- printdir(name) ++ print_directory(name) ++ + except DropboxCommand.EOFError: + console_print(u"Dropbox daemon stopped.") + except DropboxCommand.BadConnectionError, e: + console_print(u"Dropbox isn't responding!") + else: + if len(args) == 0: +- args = [name for name in os.listdir(u".") if type(name) == unicode] ++ args = [name for name in sorted(os.listdir(u"."), key=methodcaller('lower')) if type(name) == unicode] ++ if len(args) == 0: ++ # Bail early if there's nothing to list to avoid crashing on indent below ++ console_print(u"<empty>") ++ return + indent = max(len(st)+1 for st in args) + for file in args: ++ + try: +- fp = unicode_abspath(file.decode(sys.getfilesystemencoding())) ++ if type(file) is not unicode: ++ file = file.decode(enc) ++ fp = unicode_abspath(file) + except (UnicodeEncodeError, UnicodeDecodeError), e: + continue + if not os.path.exists(fp): + console_print(u"%-*s %s" % \ + (indent, file+':', "File doesn't exist")) + continue +- ++ + try: + status = dc.icon_overlay_file_status(path=fp).get(u'status', [u'unknown'])[0] + console_print(u"%-*s %s" % (indent, file+':', status)) +@@ -654,10 +995,10 @@ + @command + @requires_dropbox_running + def puburl(args): +- u"""get public url of a file in your dropbox ++ u"""get public url of a file in your dropbox's public folder + dropbox puburl FILE + +-Prints out a public url for FILE. ++Prints out a public url for FILE (which must be in your public folder). + """ + if len(args) != 1: + console_print(puburl.__doc__,linebreak=False) +@@ -670,7 +1011,154 @@ + except DropboxCommand.CommandError, e: + console_print(u"Couldn't get public url: " + str(e)) + except DropboxCommand.BadConnectionError, e: +- console_print(u"Dropbox isn't responding!") ++ console_print(u"Dropbox isn't responding!") ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ ++@command ++@requires_dropbox_running ++def sharelink(args): ++ u"""get a shared link for a file in your dropbox ++dropbox sharelink FILE ++ ++Prints out a shared link for FILE. ++""" ++ if len(args) != 1: ++ console_print(sharelink.__doc__, linebreak=False) ++ return ++ ++ try: ++ with closing(DropboxCommand()) as dc: ++ try: ++ path = unicode_abspath(args[0].decode(sys.getfilesystemencoding())) ++ link = dc.get_shared_link(path=path).get('link', [u'No link'])[0] ++ console_print(link) ++ except DropboxCommand.CommandError, e: ++ console_print(u"Couldn't get shared link: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding!") ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ ++@command ++@requires_dropbox_running ++def proxy(args): ++ u"""set proxy settings for Dropbox ++dropbox proxy MODE [TYPE] [HOST] [PORT] [USERNAME] [PASSWORD] ++ ++Set proxy settings for Dropbox. ++ ++MODE - one of "none", "auto", "manual" ++TYPE - one of "http", "socks4", "socks5" (only valid with "manual" mode) ++HOST - proxy hostname (only valid with "manual" mode) ++PORT - proxy port (only valid with "manual" mode) ++USERNAME - (optional) proxy username (only valid with "manual" mode) ++PASSWORD - (optional) proxy password (only valid with "manual" mode) ++""" ++ mode = None ++ type_ = None ++ if len(args) >= 1: ++ mode = args[0].decode(sys.getfilesystemencoding()).lower() ++ if len(args) >= 2: ++ type_ = args[1].decode(sys.getfilesystemencoding()).lower() ++ ++ if (len(args) == 0 or ++ mode not in [u'none', u'auto', u'manual'] or ++ (mode == 'manual' and len(args) not in (4, 6)) or ++ (mode != 'manual' and len(args) != 1) or ++ (mode == 'manual' and type_ not in [u'http', u'socks4', u'socks5'])): ++ # Print help ++ console_print(proxy.__doc__, linebreak=False) ++ return ++ ++ ARGS = ['mode', 'type', 'host', 'port', 'username', 'password'] ++ ++ # Load the args into a dictionary ++ kwargs = dict(zip(ARGS, [a.decode(sys.getfilesystemencoding()) for a in args])) ++ ++ # Re-set these two because they were coerced to lower case ++ kwargs['mode'] = mode ++ if type_: ++ kwargs['type'] = type_ ++ ++ try: ++ with closing(DropboxCommand()) as dc: ++ try: ++ dc.set_proxy_settings(**kwargs) ++ console_print(u'set') ++ except DropboxCommand.CommandError, e: ++ console_print(u"Couldn't set proxy: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding!") ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ ++@command ++@requires_dropbox_running ++def throttle(args): ++ u"""set bandwidth limits for Dropbox ++dropbox throttle DOWNLOAD UPLOAD ++ ++Set bandwidth limits for file sync. ++ ++DOWNLOAD - either "unlimited" or a manual limit in KB/s ++UPLOAD - one of "unlimited", "auto", or a manual limit in KB/s ++""" ++ if len(args) != 2: ++ console_print(throttle.__doc__, linebreak=False) ++ return ++ ++ downlimit = args[0].decode(sys.getfilesystemencoding()).lower() ++ uplimit = args[1].decode(sys.getfilesystemencoding()).lower() ++ ++ download_limit = None ++ download_mode = None ++ if downlimit == u'unlimited': ++ download_mode = downlimit ++ else: ++ try: ++ download_limit = int(downlimit) ++ download_mode = u'manual' ++ except ValueError: ++ console_print(throttle.__doc__, linebreak=False) ++ return ++ ++ upload_limit = None ++ upload_mode = None ++ if uplimit in [u'unlimited', u'auto']: ++ upload_mode = uplimit ++ else: ++ try: ++ upload_limit = int(uplimit) ++ upload_mode = u'manual' ++ except ValueError: ++ console_print(throttle.__doc__, linebreak=False) ++ return ++ ++ kwargs = { ++ u'download_mode': download_mode, ++ u'upload_mode': upload_mode, ++ } ++ if download_limit: ++ kwargs[u'download_limit'] = unicode(download_limit) ++ if upload_limit: ++ kwargs[u'upload_limit'] = unicode(upload_limit) ++ ++ try: ++ with closing(DropboxCommand()) as dc: ++ try: ++ dc.set_bandwidth_limits(**kwargs) ++ console_print(u'set') ++ except DropboxCommand.CommandError, e: ++ console_print(u"Couldn't set bandwidth limits: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding!") + except DropboxCommand.EOFError: + console_print(u"Dropbox daemon stopped.") + except DropboxCommand.CouldntConnectError, e: +@@ -693,7 +1181,7 @@ + try: + lines = dc.get_dropbox_status()[u'status'] + if len(lines) == 0: +- console_print(u'Idle') ++ console_print(u'Idle') + else: + for line in lines: + console_print(line) +@@ -709,6 +1197,15 @@ + console_print(u"Dropbox isn't running!") + + @command ++def running(argv): ++ u"""return whether dropbox is running ++dropbox running ++ ++Returns 1 if running 0 if not running. ++""" ++ return int(is_dropbox_running()) ++ ++@command + @requires_dropbox_running + def stop(args): + u"""stop dropboxd +@@ -721,17 +1218,164 @@ + try: + dc.tray_action_hard_exit() + except DropboxCommand.BadConnectionError, e: +- console_print(u"Dropbox isn't responding!") ++ console_print(u"Dropbox isn't responding!") ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ ++#returns true if link is necessary ++def grab_link_url_if_necessary(): ++ try: ++ with closing(DropboxCommand()) as dc: ++ try: ++ link_url = dc.needs_link().get(u"link_url", None) ++ if link_url is not None: ++ console_print(u"To link this computer to a dropbox account, visit the following url:\n%s" % link_url[0]) ++ return True ++ else: ++ return False ++ except DropboxCommand.CommandError, e: ++ pass ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding!") + except DropboxCommand.EOFError: + console_print(u"Dropbox daemon stopped.") + except DropboxCommand.CouldntConnectError, e: + console_print(u"Dropbox isn't running!") + + @command ++@requires_dropbox_running ++def lansync(argv): ++ u"""enables or disables LAN sync ++dropbox lansync [y/n] ++ ++options: ++ y dropbox will use LAN sync (default) ++ n dropbox will not use LAN sync ++""" ++ if len(argv) != 1: ++ console_print(lansync.__doc__, linebreak=False) ++ return ++ ++ s = argv[0].lower() ++ if s.startswith('y') or s.startswith('-y'): ++ should_lansync = True ++ elif s.startswith('n') or s.startswith('-n'): ++ should_lansync = False ++ else: ++ should_lansync = None ++ ++ if should_lansync is None: ++ console_print(lansync.__doc__,linebreak=False) ++ else: ++ with closing(DropboxCommand()) as dc: ++ dc.set_lan_sync(lansync='enabled' if should_lansync else 'disabled') ++ ++ ++@command ++@requires_dropbox_running ++def exclude(args): ++ u"""ignores/excludes a directory from syncing ++dropbox exclude [list] ++dropbox exclude add [DIRECTORY] [DIRECTORY] ... ++dropbox exclude remove [DIRECTORY] [DIRECTORY] ... ++ ++"list" prints a list of directories currently excluded from syncing. ++"add" adds one or more directories to the exclusion list, then resynchronizes Dropbox. ++"remove" removes one or more directories from the exclusion list, then resynchronizes Dropbox. ++With no arguments, executes "list". ++Any specified path must be within Dropbox. ++""" ++ if len(args) == 0: ++ try: ++ with closing(DropboxCommand()) as dc: ++ try: ++ lines = [relpath(path) for path in dc.get_ignore_set()[u'ignore_set']] ++ lines.sort() ++ if len(lines) == 0: ++ console_print(u'No directories are being ignored.') ++ else: ++ console_print(u'Excluded: ') ++ for line in lines: ++ console_print(unicode(line)) ++ except KeyError: ++ console_print(u"Couldn't get ignore set: daemon isn't responding") ++ except DropboxCommand.CommandError, e: ++ if e.args[0].startswith(u"No command exists by that name"): ++ console_print(u"This version of the client does not support this command.") ++ else: ++ console_print(u"Couldn't get ignore set: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding!") ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ elif len(args) == 1 and args[0] == u"list": ++ exclude([]) ++ elif len(args) >= 2: ++ sub_command = args[0] ++ paths = args[1:] ++ absolute_paths = [unicode_abspath(path.decode(sys.getfilesystemencoding())) for path in paths] ++ if sub_command == u"add": ++ try: ++ with closing(DropboxCommand(timeout=None)) as dc: ++ try: ++ result = dc.ignore_set_add(paths=absolute_paths) ++ if result[u"ignored"]: ++ console_print(u"Excluded: ") ++ lines = [relpath(path) for path in result[u"ignored"]] ++ for line in lines: ++ console_print(unicode(line)) ++ except KeyError: ++ console_print(u"Couldn't add ignore path: daemon isn't responding") ++ except DropboxCommand.CommandError, e: ++ if e.args[0].startswith(u"No command exists by that name"): ++ console_print(u"This version of the client does not support this command.") ++ else: ++ console_print(u"Couldn't get ignore set: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding! [%s]" % e) ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ elif sub_command == u"remove": ++ try: ++ with closing(DropboxCommand(timeout=None)) as dc: ++ try: ++ result = dc.ignore_set_remove(paths=absolute_paths) ++ if result[u"removed"]: ++ console_print(u"No longer excluded: ") ++ lines = [relpath(path) for path in result[u"removed"]] ++ for line in lines: ++ console_print(unicode(line)) ++ except KeyError: ++ console_print(u"Couldn't remove ignore path: daemon isn't responding") ++ except DropboxCommand.CommandError, e: ++ if e.args[0].startswith(u"No command exists by that name"): ++ console_print(u"This version of the client does not support this command.") ++ else: ++ console_print(u"Couldn't get ignore set: " + str(e)) ++ except DropboxCommand.BadConnectionError, e: ++ console_print(u"Dropbox isn't responding! [%s]" % e) ++ except DropboxCommand.EOFError: ++ console_print(u"Dropbox daemon stopped.") ++ except DropboxCommand.CouldntConnectError, e: ++ console_print(u"Dropbox isn't running!") ++ else: ++ console_print(exclude.__doc__, linebreak=False) ++ return ++ else: ++ console_print(exclude.__doc__, linebreak=False) ++ return ++ ++@command + def start(argv): + u"""start dropboxd + dropbox start [-i] +- ++ + Starts the dropbox daemon, dropboxd. If dropboxd is already running, this will do nothing. + + options: +@@ -739,10 +1383,11 @@ + """ + + should_install = "-i" in argv or "--install" in argv +- ++ + # first check if dropbox is already running + if is_dropbox_running(): +- console_print(u"Dropbox is already running!") ++ if not grab_link_url_if_necessary(): ++ console_print(u"Dropbox is already running!") + return + + console_print(u"Starting Dropbox...", linebreak=False) +@@ -751,22 +1396,75 @@ + if not should_install: + console_print() + console_print(u"The Dropbox daemon is not installed!") +- console_print(u"Run with -i to install the daemon") ++ console_print(u"Run \"dropbox start -i\" to install the daemon") + return + + # install dropbox!!! + try: + download() + except: +- pass ++ traceback.print_exc() + else: + if GUI_AVAILABLE: + start_dropbox() ++ console_print(u"Done!") + else: +- console_print(u"Dropbox has been downloaded successfully.") +- console_print(u"In order to link to an account for the first time, a graphical environment is required.") +- console_print(u"Try running 'dropbox start' from X windows") +- console_print(u"Done!") ++ if start_dropbox(): ++ if not grab_link_url_if_necessary(): ++ console_print(u"Done!") ++ else: ++ if not grab_link_url_if_necessary(): ++ console_print(u"Done!") ++ ++ ++def can_reroll_autostart(): ++ return u".config" in os.listdir(os.path.expanduser(u'~')) ++ ++def reroll_autostart(should_autostart): ++ home_dir = os.path.expanduser(u'~') ++ contents = os.listdir(home_dir) ++ ++ # UBUNTU ++ if u".config" in contents: ++ autostart_dir = os.path.join(home_dir, u".config", u"autostart") ++ autostart_link = os.path.join(autostart_dir, u"dropbox.desktop") ++ if should_autostart: ++ if os.path.exists(DESKTOP_FILE): ++ if not os.path.exists(autostart_dir): ++ os.makedirs(autostart_dir) ++ shutil.copyfile(DESKTOP_FILE, autostart_link) ++ elif os.path.exists(autostart_link): ++ os.remove(autostart_link) ++ ++ ++ ++@command ++def autostart(argv): ++ u"""automatically start dropbox at login ++dropbox autostart [y/n] ++ ++options: ++ n dropbox will not start automatically at login ++ y dropbox will start automatically at login (default) ++ ++Note: May only work on current Ubuntu distributions. ++""" ++ if len(argv) != 1: ++ console_print(''.join(autostart.__doc__.split('\n', 1)[1:]).decode('ascii')) ++ return ++ ++ s = argv[0].lower() ++ if s.startswith('y') or s.startswith('-y'): ++ should_autostart = True ++ elif s.startswith('n') or s.startswith('-n'): ++ should_autostart = False ++ else: ++ should_autostart = None ++ ++ if should_autostart is None: ++ console_print(autostart.__doc__,linebreak=False) ++ else: ++ reroll_autostart(should_autostart) + + @command + def help(argv): +@@ -781,11 +1479,16 @@ + if command == argv[0]: + console_print(commands[command].__doc__.split('\n', 1)[1].decode('ascii')) + return ++ for alias in aliases: ++ if alias == argv[0]: ++ console_print(aliases[alias].__doc__.split('\n', 1)[1].decode('ascii')) ++ return + console_print(u"unknown command '%s'" % argv[0], f=sys.stderr) + + def usage(argv): + console_print(u"Dropbox command-line interface\n") + console_print(u"commands:\n") ++ console_print(u"Note: use dropbox help <command> to view usage for a specific command.\n") + out = [] + for command in commands: + out.append((command, commands[command].__doc__.splitlines()[0])) +@@ -802,12 +1505,13 @@ + # separate the argv list at that point + cut = None + for i in range(len(argv)): +- if argv[i] in commands: ++ if argv[i] in commands or argv[i] in aliases: + cut = i + break +- ++ + if cut == None: + usage(argv) ++ os._exit(0) + return + + # lol no options for now +@@ -815,7 +1519,19 @@ + globaloptionparser.parse_args(argv[0:i]) + + # now dispatch and run +- return commands[argv[i]](argv[i+1:]) ++ result = None ++ if argv[i] in commands: ++ result = commands[argv[i]](argv[i+1:]) ++ elif argv[i] in aliases: ++ result = aliases[argv[i]](argv[i+1:]) ++ ++ # flush, in case output is rerouted to a file. ++ console_flush() ++ ++ # done ++ return result + + if __name__ == "__main__": +- main(sys.argv) ++ ret = main(sys.argv) ++ if ret is not None: ++ sys.exit(ret) +diff -ruN DropboxServiceMenu-0.16.1/dropbox-scripts/get_dropbox_folder.sh ServiceMenus4KDE5-0.0.1/dropbox-scripts/get_dropbox_folder.sh +--- DropboxServiceMenu-0.16.1/dropbox-scripts/get_dropbox_folder.sh 2012-01-26 16:40:23.000000000 +0100 ++++ ServiceMenus4KDE5-0.0.1/dropbox-scripts/get_dropbox_folder.sh 2015-11-27 14:05:03.000000000 +0100 +@@ -60,9 +60,9 @@ + fatal "Please install sqlite3" + fi + # which database have we got? +- if [ -f "$HOME/.dropbox/config.db" ] ++ if [ -f "$HOME/.dropbox/instance1/config.db" ] + then +- local DBFILE="$HOME/.dropbox/config.db" ++ local DBFILE="$HOME/.dropbox/instance1/config.db" + local DBVER=$( "$SQLITE3" "$DBFILE" 'SELECT value FROM config WHERE key="config_schema_version"' ) + elif [ -f "$HOME/.dropbox/dropbox.db" ] + then +diff -ruN DropboxServiceMenu-0.16.1/install-it.sh ServiceMenus4KDE5-0.0.1/install-it.sh +--- DropboxServiceMenu-0.16.1/install-it.sh 2010-06-13 09:52:53.000000000 +0200 ++++ ServiceMenus4KDE5-0.0.1/install-it.sh 2015-12-03 18:17:44.000000000 +0100 +@@ -1,12 +1,8 @@ + #!/bin/bash +-sed 's/#SCRIPTS_PATH/SCRIPTS_PATH/g' -i dropbox-scripts/dropbox_menu.sh +-sed 's|=dropbox_menu.sh|=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh|g' -i dropbox_all.desktop +-sed 's|=dropbox_menu.sh|=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh|g' -i dropbox_files.desktop +-sed 's|=dropbox_menu.sh|=`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/dropbox_menu.sh|g' -i dropbox_directories.desktop +-mkdir -p "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts" +-install -m 644 dropbox_all.desktop "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/" +-install -m 644 dropbox_files.desktop "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/" +-install -m 644 dropbox_directories.desktop "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/" +-install -m 755 dropbox-scripts/* "`kde4-config --localprefix`/share/kde4/services/ServiceMenus/dropbox-scripts/" ++mkdir -p "$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts" ++install -m 644 dropbox_all.desktop "$HOME/.local/share/kservices5/ServiceMenus/" ++install -m 644 dropbox_files.desktop "$HOME/.local/share/kservices5/ServiceMenus/" ++install -m 644 dropbox_directories.desktop "$HOME/.local/share/kservices5/ServiceMenus/" ++install -m 755 dropbox-scripts/* "$HOME/.local/share/kservices5/ServiceMenus/dropbox-scripts/" + + |