Hello community,

here is the log from the commit of package syncthing-gtk for openSUSE:Factory 
checked in at 2015-07-02 22:50:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/syncthing-gtk (Old)
 and      /work/SRC/openSUSE:Factory/.syncthing-gtk.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "syncthing-gtk"

Changes:
--------
--- /work/SRC/openSUSE:Factory/syncthing-gtk/syncthing-gtk.changes      
2015-06-12 20:32:12.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.syncthing-gtk.new/syncthing-gtk.changes 
2015-07-03 00:21:53.000000000 +0200
@@ -1,0 +2,13 @@
+Tue Jun 30 20:52:36 UTC 2015 - [email protected]
+
+- Update to 0.7.4:
+  * Add displaying "(watch)" next to directory's rescan interval if
+    filesystem watching is enabled.
+  * Add support for extenal and trashcan versioning.
+  * Add --nostdownloader argument to setup.py, for disabling
+    Syncthing updater on "compile" time.
+  * Fix compatibility with non-GNU nice command.
+  * Fix filesystem watcher not reporting files with space in path.
+- Disable Syncthing updater.
+
+-------------------------------------------------------------------

Old:
----
  syncthing-gtk-0.7.3.tar.gz

New:
----
  syncthing-gtk-0.7.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ syncthing-gtk.spec ++++++
--- /var/tmp/diff_new_pack.Iv2C46/_old  2015-07-03 00:21:54.000000000 +0200
+++ /var/tmp/diff_new_pack.Iv2C46/_new  2015-07-03 00:21:54.000000000 +0200
@@ -19,7 +19,7 @@
 %global __requires_exclude 
typelib\\(Caja\\)|typelib\\(Nautilus\\)|typelib\\(Nemo\\)
 %define _name   syncthing_gtk
 Name:           syncthing-gtk
-Version:        0.7.3
+Version:        0.7.4
 Release:        0
 Summary:        Syncthing Gtk-based graphical interface
 License:        GPL-2.0+
@@ -69,7 +69,7 @@
 sed -i 's/^\(Exec=\).*$/\1%{name}/' %{name}.desktop
 
 %build
-python2 setup.py build
+python2 setup.py build_py --nostdownloader
 
 %install
 python2 setup.py install --root=%{buildroot}

++++++ syncthing-gtk-0.7.3.tar.gz -> syncthing-gtk-0.7.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/app.glade 
new/syncthing-gtk-0.7.4/app.glade
--- old/syncthing-gtk-0.7.3/app.glade   2015-06-10 17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/app.glade   2015-06-30 11:17:12.000000000 +0200
@@ -33,7 +33,7 @@
                                                        <property 
name="visible">True</property>
                                                        <property 
if="!is_windows" name="icon-name">syncthing-gtk</property>
                                                        <property 
if="!is_windows" name="icon-size">24</property>
-                                                       <property 
if="is_windows"  name="icon">icons/24x24/apps/syncthing-gtk.png</property>
+                                                       <property 
if="is_windows"  name="file">icons/24x24/apps/syncthing-gtk.png</property>
                                                </object>
                                        </child>
                                </object>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/build_windows.py 
new/syncthing-gtk-0.7.4/build_windows.py
--- old/syncthing-gtk-0.7.3/build_windows.py    2015-06-10 17:44:51.000000000 
+0200
+++ new/syncthing-gtk-0.7.4/build_windows.py    2015-06-30 11:17:12.000000000 
+0200
@@ -79,6 +79,13 @@
                targetName = "syncthing-gtk.exe",
                base = "Win32GUI",
                icon = "icons/st-logo-128.ico",
+       ),
+       Executable(
+               "scripts/syncthing-gtk-exe.py",
+               compress = True,
+               targetName = "syncthing-gtk-console.exe",
+               base = "console",
+               icon = "icons/st-logo-128.ico",
        )
 ]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/folder-edit.glade 
new/syncthing-gtk-0.7.4/folder-edit.glade
--- old/syncthing-gtk-0.7.3/folder-edit.glade   2015-06-10 17:44:51.000000000 
+0200
+++ new/syncthing-gtk-0.7.4/folder-edit.glade   2015-06-30 11:17:12.000000000 
+0200
@@ -15,12 +15,16 @@
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjRescanInterval">
-    <property name="lower">0</property>
     <property name="upper">999999</property>
     <property name="value">5</property>
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjvCleanoutDays">
+    <property name="upper">9999</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkListStore" id="lsVersioningCombo">
     <columns>
       <!-- column-name key -->
@@ -41,6 +45,14 @@
         <col id="0">staggered</col>
         <col id="1" translatable="yes">Staggered</col>
       </row>
+      <row>
+        <col id="0">trashcan</col>
+        <col id="1" translatable="yes">Trashcan</col>
+      </row>
+      <row>
+        <col id="0">external</col>
+        <col id="1" translatable="yes">External</col>
+      </row>
     </data>
   </object>
   <object class="GtkDialog" id="editor">
@@ -428,7 +440,7 @@
                         <property name="can_focus">False</property>
                         <property name="orientation">vertical</property>
                         <child>
-                          <object class="GtkBox" id="bxVersioningSimple">
+                          <object class="GtkBox" id="bxVersioning_simple">
                             <property name="can_focus">False</property>
                             <property name="no_show_all">True</property>
                             <property name="orientation">vertical</property>
@@ -509,7 +521,7 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkBox" id="bxVersioningStaggered">
+                          <object class="GtkBox" id="bxVersioning_staggered">
                             <property name="can_focus">False</property>
                             <property name="no_show_all">True</property>
                             <property name="orientation">vertical</property>
@@ -625,6 +637,164 @@
                             <property name="position">1</property>
                           </packing>
                         </child>
+                        <child>
+                          <object class="GtkBox" id="bxVersioning_trashcan">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkLabel" id="label19">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="margin_bottom">10</property>
+                                <property name="xalign">0</property>
+                                <property name="label" 
translatable="yes">Files are moved to .stversions folder when replaced or 
deleted by Syncthing</property>
+                                <property name="wrap">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label20">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="label" 
translatable="yes">Clean out _after</property>
+                                <property name="use_underline">True</property>
+                                <property 
name="mnemonic_widget">vkeepVersions</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkSpinButton" id="vcleanoutDays">
+                                <property name="width_request">300</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="text" 
translatable="yes">5</property>
+                                <property 
name="adjustment">adjvCleanoutDays</property>
+                                <property name="climb_rate">1</property>
+                                <property name="snap_to_ticks">True</property>
+                                <property name="numeric">True</property>
+                                <property name="value">5</property>
+                                <signal name="output" 
handler="cb_format_value_days" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label21">
+                                <property name="width_request">200</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="label" translatable="yes">The 
number of days to keep files in the trash can.</property>
+                                <property name="wrap">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="bxVersioning_external">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkLabel" id="label22">
+                                <property name="width_request">200</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="margin_bottom">10</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="label" translatable="yes">An 
external command handles the versioning. It has to remove the file from the 
synced folder.</property>
+                                <property name="wrap">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label23">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="label" 
translatable="yes">Command</property>
+                                <property name="use_underline">True</property>
+                                <property 
name="mnemonic_widget">vkeepVersions</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" id="vcommand">
+                                <property name="width_request">300</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <signal name="changed" 
handler="cb_check_value" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label24">
+                                <property name="width_request">200</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="yalign">0</property>
+                                <property name="label" translatable="yes">The 
first command line parameter is the folder path and the second parameter is the 
relative path in the folder.</property>
+                                <property name="wrap">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">3</property>
+                          </packing>
+                        </child>
                       </object>
                     </child>
                   </object>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/setup.py 
new/syncthing-gtk-0.7.4/setup.py
--- old/syncthing-gtk-0.7.3/setup.py    2015-06-10 17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/setup.py    2015-06-30 11:17:12.000000000 +0200
@@ -1,6 +1,7 @@
 #!/usr/bin/env python2
 
 from distutils.core import setup
+from distutils.command.build_py import build_py
 from subprocess import Popen, PIPE
 import glob, os
 ICON_SIZES = (16, 24, 32, 64, 128, 256)
@@ -30,6 +31,32 @@
                path = path[0:-1]
        return version
 
+class BuildPyEx(build_py):
+       """ Little extension to install command; Allows --nostupdater argument 
"""
+       user_options = build_py.user_options + [
+               # Note to self: use
+               # # ./setup.py build_py --nostdownloader install
+               # to enable this option
+               #
+               ('nostdownloader', None, 'prevents installing StDownloader 
module; disables autoupdate capability'),
+       ]
+       
+       def run(self):
+               build_py.run(self)
+       
+       def initialize_options(self):
+               build_py.initialize_options(self)
+               self.nostdownloader = False
+       
+       def find_package_modules(self, package, package_dir):
+               rv = build_py.find_package_modules(self, package, package_dir)
+               if self.nostdownloader:
+                       for i in rv:
+                               if i[1] == "stdownloader":
+                                       rv.remove(i)
+                                       break
+               return rv
+
 if __name__ == "__main__" : 
        data_files = [
                ('share/syncthing-gtk', glob.glob("*.glade") ),
@@ -60,4 +87,5 @@
                packages = ['syncthing_gtk'],
                data_files = data_files,
                scripts = [ "scripts/syncthing-gtk" ],
-)
+               cmdclass = { 'build_py': BuildPyEx },
+       )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing-gtk.nsis 
new/syncthing-gtk-0.7.4/syncthing-gtk.nsis
--- old/syncthing-gtk-0.7.3/syncthing-gtk.nsis  2015-06-10 17:44:51.000000000 
+0200
+++ new/syncthing-gtk-0.7.4/syncthing-gtk.nsis  2015-06-30 11:17:12.000000000 
+0200
@@ -43,6 +43,7 @@
        SetOutPath $INSTDIR
        # Install good stuff
        File build\exe.win32-2.7\syncthing-gtk.exe
+       File build\exe.win32-2.7\syncthing-gtk-console.exe
        File build\exe.win32-2.7\library.zip
        File build\exe.win32-2.7\*.glade
        File build\exe.win32-2.7\__version__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/__init__.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/__init__.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/__init__.py   2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/__init__.py   2015-06-30 
11:17:12.000000000 +0200
@@ -19,7 +19,6 @@
        from foldereditor               import FolderEditorDialog
        from daemonsettings             import DaemonSettingsDialog
        from statusicon                 import get_status_icon
-       from uisettingsdialog   import UISettingsDialog
        from configuration              import Configuration
        from iddialog                   import IDDialog
        from aboutdialog                import AboutDialog
@@ -27,7 +26,12 @@
        from ribar                              import RIBar
        from identicon                  import IdentIcon
        from daemonoutputdialog import DaemonOutputDialog
-       from stdownloader               import StDownloader
+       try:
+               # May fail if stdownloader is removed from distribution
+               from stdownloader               import StDownloader
+       except ImportError:
+               StDownloader = None
+       from uisettingsdialog   import UISettingsDialog
        from wizard                             import Wizard
        from finddaemondialog   import FindDaemonDialog
        from app                                import App
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/app.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/app.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/app.py        2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/app.py        2015-06-30 
11:17:12.000000000 +0200
@@ -143,11 +143,12 @@
                        if cl.get_options_dict().contains("quit"):
                                self.cb_exit()
                                return 0
-                       if cl.get_options_dict().contains("force-update"):
-                               self.force_update_version = \
-                                       
cl.get_options_dict().lookup_value("force-update").get_string()
-                               if not 
self.force_update_version.startswith("v"):
-                                       self.force_update_version = "v%s" % 
(self.force_update_version,)
+                       if not StDownloader is None:
+                               if 
cl.get_options_dict().contains("force-update"):
+                                       self.force_update_version = \
+                                               
cl.get_options_dict().lookup_value("force-update").get_string()
+                                       if not 
self.force_update_version.startswith("v"):
+                                               self.force_update_version = 
"v%s" % (self.force_update_version,)
                        if cl.get_options_dict().contains("add-repo"):
                                path = os.path.abspath(os.path.expanduser(
                                        
cl.get_options_dict().lookup_value("add-repo").get_string()))
@@ -229,9 +230,10 @@
                                GLib.OptionArg.STRING)
                aso("remove-repo", 0, "If there is repository assigned with 
specified path, opens 'remove repository' dialog",
                                GLib.OptionArg.STRING)
-               aso("force-update", 0,
-                               "Force updater to download specific daemon 
version",
-                               GLib.OptionArg.STRING, GLib.OptionFlags.HIDDEN)
+               if not StDownloader is None:
+                       aso("force-update", 0,
+                                       "Force updater to download specific 
daemon version",
+                                       GLib.OptionArg.STRING, 
GLib.OptionFlags.HIDDEN)
        
        def setup_actions(self):
                def add_simple_action(name, callback):
@@ -425,6 +427,9 @@
                # User response is handled in App.cb_infobar_response
        
        def check_for_upgrade(self, *a):
+               if StDownloader is None:
+                       # Can't, someone stole my updater module :(
+                       return
                self.cancel_timer("updatecheck")
                if not self.config["st_autoupdate"]:
                        # Disabled, don't even bother
@@ -626,7 +631,7 @@
                                        else:
                                                self.display_run_daemon_dialog()
                        self.set_status(False)
-               elif reason == Daemon.OLD_VERSION and 
self.config["st_autoupdate"] and self.process != None:
+               elif reason == Daemon.OLD_VERSION and 
self.config["st_autoupdate"] and not self.process and not StDownloader is None:
                        # Daemon is too old, but autoupdater is enabled and I 
have control of deamon.
                        # Try to update.
                        from configuration import LONG_AGO
@@ -1260,7 +1265,8 @@
                box.set_value("path",   display_path)
                box.set_value("master", _("Yes") if is_master else _("No"))
                box.set_value("ignore", _("Yes") if ignore_perms else _("No"))
-               box.set_value("rescan", "%s s" % (rescan_interval,))
+               box.set_value("rescan", "%s s%s" % (
+                       rescan_interval, " " + _("(watch)" if id in 
self.config["use_inotify"] else "" )))
                box.set_value("shared", ", ".join([ n.get_title() for n in 
shared ]))
                box.set_value("b_master", is_master)
                box.set_value("can_override", False)
@@ -1650,6 +1656,7 @@
                path = os.path.expanduser(box["path"])
                if IS_WINDOWS:
                        # Don't attempt anything, use Windows Explorer on 
Windows
+                       path = path.replace("/", "\\")
                        os.system('explorer "%s"' % (path,))
                else:
                        # Try to use any of following, known commands to
@@ -1869,7 +1876,7 @@
                if proc == self.process:
                        # Whatever happens, if daemon dies while it shouldn't,
                        # restart it
-                       if self.config["st_autoupdate"] and 
os.path.exists(self.config["syncthing_binary"] + ".new"):
+                       if not StDownloader is None and 
self.config["st_autoupdate"] and os.path.exists(self.config["syncthing_binary"] 
+ ".new"):
                                # New daemon version is downloaded and ready to 
use.
                                # Switch to this version before restarting
                                self.swap_updated_binary()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/daemon.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/daemon.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/daemon.py     2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/daemon.py     2015-06-30 
11:17:12.000000000 +0200
@@ -16,7 +16,7 @@
 from dateutil import tz
 from xml.dom import minidom
 from datetime import datetime
-import json, os, sys, time, logging
+import json, os, sys, time, logging, urllib
 log = logging.getLogger("Daemon")
 
 # Minimal version supported by Daemon class
@@ -1219,18 +1219,18 @@
        
        def rescan(self, folder_id, path=None):
                """ Asks daemon to rescan entire folder or specified path """
-               # Errors here are ignored; Syncthing rescans stuff periodicaly,
-               # so it's not big problem if call fails.
+               def on_error(*a):
+                       log.error(a)
                if path is None:
-                       self._rest_post("db/scan?folder=%s" % (folder_id,), {}, 
lambda *a: a, lambda *a: a, folder_id)
+                       self._rest_post("db/scan?folder=%s" % (folder_id,), {}, 
lambda *a: a, on_error, folder_id)
                else:
-                       self._rest_post("db/scan?folder=%s&sub=%s" % 
(folder_id, path), {}, lambda *a: a, lambda *a: a, folder_id)
+                       path_enc = urllib.quote(path.encode('utf-8'), 
''.encode('utf-8'))
+                       self._rest_post("db/scan?folder=%s&sub=%s" % 
(folder_id, path_enc), {}, lambda *a: a, on_error, folder_id)
        
        def override(self, folder_id):
                """ Asks daemon to override changes made in specified folder """
-               # Errors here are non-fatal, not expected and thus ignored.
                def on_error(*a):
-                       print a
+                       log.error(a)
                self._rest_post("model/override?folder=%s" % (folder_id,), {}, 
lambda *a: a, on_error, folder_id)
        
        def request_events(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/daemonprocess.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/daemonprocess.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/daemonprocess.py      2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/daemonprocess.py      2015-06-30 
11:17:12.000000000 +0200
@@ -72,7 +72,7 @@
                                        self._proc = 
Gio.Subprocess.new(self.commandline, flags)
                                else:
                                        # I just really do hope that there is 
no distro w/out nice command
-                                       self._proc = Gio.Subprocess.new([ 
"nice", "-%s" % self.priority ] + self.commandline, flags)
+                                       self._proc = Gio.Subprocess.new([ 
"nice", "-n", "%s" % self.priority ] + self.commandline, flags)
                                self._proc.wait_check_async(None, 
self._cb_finished)
                                self._stdout = self._proc.get_stdout_pipe()
                        else:
@@ -81,7 +81,7 @@
                                        self._proc = Popen(self.commandline, 
stdout=PIPE)
                                else:
                                        # still hoping
-                                       self._proc = Popen([ "nice", "-%s" % 
self.priority ], stdout=PIPE)
+                                       self._proc = Popen([ "nice", "-n", "%s" 
% self.priority ], stdout=PIPE)
                                self._stdout = 
Gio.UnixInputStream.new(self._proc.stdout.fileno(), False)
                                self._check = GLib.timeout_add_seconds(1, 
self._cb_check_alive)
                except Exception, e:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/editordialog.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/editordialog.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/editordialog.py       2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/editordialog.py       2015-06-30 
11:17:12.000000000 +0200
@@ -317,8 +317,12 @@
                        value = self[x].get_text().strip()
                        if len(value) == 0:
                                # Empty value in field
-                               self["btSave"].set_sensitive(False)
-                               self.hide_error_message(x)
+                               if self.checks[x](value):
+                                       # ... but empty value is OK
+                                       self.hide_error_message(x)
+                               else:
+                                       self["btSave"].set_sensitive(False)
+                                       self.hide_error_message(x)
                        elif not self.checks[x](value):
                                # Invalid value in any field
                                self["btSave"].set_sensitive(False)
@@ -362,7 +366,7 @@
                if isinstance(w, Gtk.SpinButton):
                        self.set_value(strip_v(key), 
int(w.get_adjustment().get_value()))
                elif isinstance(w, Gtk.Entry):
-                       self.set_value(strip_v(key), w.get_text())
+                       self.set_value(strip_v(key), 
w.get_text().decode("utf-8"))
                elif isinstance(w, Gtk.CheckButton):
                        self.set_value(strip_v(key), w.get_active())
                elif isinstance(w, Gtk.ComboBox):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/syncthing-gtk-0.7.3/syncthing_gtk/finddaemondialog.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/finddaemondialog.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/finddaemondialog.py   2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/finddaemondialog.py   2015-06-30 
11:17:12.000000000 +0200
@@ -30,8 +30,9 @@
                          "%s bellow or click on <b>Download</b> "
                          "button to download latest Syncthing package.") % 
(exe,)
                ))
-               if IS_XP:
-                       # Downloading is not offered on XP - github will not 
talk to it
+               if IS_XP or StDownloader is None:
+                       # Downloading is not offered on XP (github will not 
talk to it)
+                       # or if StDownloader module is not packaged
                        self["lblMessage"].set_markup("%s\n%s" % (
                                _("Syncthing daemon binary cannot be found."),
                                _("If you have Syncthing installed, please, set 
path to "
@@ -39,8 +40,6 @@
                        ))
                        self.hide_download_button()
        
-       
-       
        ### Dialog emulation
        def set_transient_for(self, parent):
                self["editor"].set_transient_for(parent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/foldereditor.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/foldereditor.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/foldereditor.py       2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/foldereditor.py       2015-06-30 
11:17:12.000000000 +0200
@@ -21,8 +21,9 @@
 RE_GEN_ID = re.compile("([a-zA-Z0-9\-\._]{1,64}).*")
 VALUES = [ "vid", "vpath", "vreadOnly", "vignorePerms", "vdevices",
        "vversioning", "vkeepVersions", "vrescanIntervalS", "vmaxAge",
-       "vversionsPath", "vinotify"
+       "vversionsPath", "vinotify", "vcleanoutDays", "vcommand"
        ]
+VERSIONING_TYPES = set(['simple', 'staggered', 'trashcan', 'external'])
 
 class FolderEditorDialog(EditorDialog):
        MESSAGES = {
@@ -77,6 +78,10 @@
                        return self.get_burried_value("versioning/params/keep", 
self.values, 0, int)
                elif key == "maxAge":
                        return 
self.get_burried_value("versioning/params/maxAge", self.values, 0, int) / 86400 
# seconds to days
+               elif key == "cleanoutDays":
+                       return 
self.get_burried_value("versioning/params/cleanoutDays", self.values, 0, int)
+               elif key == "command":
+                       return 
self.get_burried_value("versioning/params/command", self.values, "")
                elif key == "versionsPath":
                        return 
self.get_burried_value("versioning/params/versionsPath", self.values, "")
                elif key == "versioning":
@@ -96,10 +101,18 @@
                        # Create structure if needed
                        self.create_dicts(self.values, ("versioning", "params", 
"keep"))
                        self.values["versioning"]["params"]["keep"] = 
str(int(value))
+               elif key == "cleanoutDays":
+                       # Create structure if needed
+                       self.create_dicts(self.values, ("versioning", "params", 
"cleanoutDays"))
+                       self.values["versioning"]["params"]["cleanoutDays"] = 
str(int(value))
                elif key == "maxAge":
                        # Create structure if needed
                        self.create_dicts(self.values, ("versioning", "params", 
"maxAge"))
                        self.values["versioning"]["params"]["maxAge"] = 
str(int(value) * 86400) # days to seconds
+               elif key == "command":
+                       # Create structure if needed
+                       self.create_dicts(self.values, ("versioning", "params", 
"command"))
+                       self.values["versioning"]["params"]["command"] = value
                elif key == "versionsPath":
                        # Create structure if needed
                        self.create_dicts(self.values, ("versioning", "params", 
"versionsPath"))
@@ -123,8 +136,9 @@
                                self.values = { strip_v(x) : "" for x in VALUES 
}
                                self.checks = {
                                        "vid" : self.check_folder_id,
-                                       "vpath" : self.check_path
-                                       }
+                                       "vpath" : self.check_path,
+                                       "vcommand" : self.check_command,
+                               }
                                if self.id != None:
                                        try:
                                                v = [ x for x in 
self.config["folders"] if x["id"] == self.id ][0]
@@ -140,7 +154,9 @@
                                self.set_value("keepVersions", 10)
                        else:
                                self.values = [ x for x in 
self.config["folders"] if x["id"] == self.id ][0]
-                               self.checks = {}
+                               self.checks = {
+                                       "vcommand" : self.check_command,
+                               }
                                self["vpath"].set_sensitive(False)
                                self["btBrowse"].set_sensitive(False)
                except KeyError, e:
@@ -179,8 +195,8 @@
                        if self["rvversioning"].get_reveal_child():
                                self["rvversioning"].set_reveal_child(False)
                else:
-                       
self["bxVersioningSimple"].set_visible(self.get_value("versioning") == "simple")
-                       
self["bxVersioningStaggered"].set_visible(self.get_value("versioning") == 
"staggered")
+                       for x in VERSIONING_TYPES:
+                               self["bxVersioning_" + 
x].set_visible(self.get_value("versioning") == x)
                        if not self["rvversioning"].get_reveal_child():
                                self["rvversioning"].set_reveal_child(True)
        
@@ -222,7 +238,15 @@
                                ))
                        box.set_color_hex(COLOR_NEW)
        
+       #@Overrides
+       def ui_value_changed(self, w, *a):
+               EditorDialog.ui_value_changed(self, w, *a)
+               self.cb_check_value(w, *a)
+       
        def check_folder_id(self, value):
+               if len(value.strip()) == 0:
+                       # Empty value
+                       return False
                if value in self.app.folders:
                        # Duplicate folder id
                        return False
@@ -233,7 +257,11 @@
        
        def check_path(self, value):
                # Any non-empty path is OK
-               return True
+               return len(value.strip()) > 0
+       
+       def check_command(self, value):
+               # Any non-empty command is OK
+               return self.get_value("versioning") != "external" or 
len(value.strip()) > 0
        
        def fill_folder_id(self, rid):
                """ Pre-fills folder Id for new-folder dialog """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/tools.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/tools.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/tools.py      2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/tools.py      2015-06-30 
11:17:12.000000000 +0200
@@ -346,7 +346,7 @@
        if IS_WINDOWS:
                return os.path.join(get_install_path(), "syncthing-gtk.exe")
        else:
-               executable = __main__.__file__
+               executable = __main__.__file__.decode("utf-8")
                if not os.path.isabs(executable):
                        executable = os.path.normpath(os.path.join(os.getcwd(), 
executable))
                if executable.endswith(".py"):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/syncthing-gtk-0.7.3/syncthing_gtk/uisettingsdialog.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/uisettingsdialog.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/uisettingsdialog.py   2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/uisettingsdialog.py   2015-06-30 
11:17:12.000000000 +0200
@@ -7,7 +7,7 @@
 from __future__ import unicode_literals
 from gi.repository import Gtk, Gdk
 from syncthing_gtk import EditorDialog
-from syncthing_gtk import Notifications, HAS_DESKTOP_NOTIFY
+from syncthing_gtk import Notifications, StDownloader, HAS_DESKTOP_NOTIFY
 from syncthing_gtk.tools import *
 from syncthing_gtk.configuration import LONG_AGO
 import os, logging
@@ -102,7 +102,9 @@
                        else:
                                log.warning("Cannot find %s.py required to 
support %s", plugin, name)
                self["fmLblIntegrationStatus"].set_text("\n".join(status))
-               
+               if StDownloader is None:
+                       self["vst_autoupdate"].set_visible(False)
+                       self["lblAutoupdate"].set_visible(False)
                self.cb_data_loaded(copy)
                self.cb_check_value()
        
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/watcher.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/watcher.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/watcher.py    2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/watcher.py    2015-06-30 
11:17:12.000000000 +0200
@@ -85,8 +85,7 @@
                                        self.watch(None, 
event.pathname.decode("utf-8"))
                                        self._report_created(event.pathname)
                                elif event.mask & pyinotify.IN_DELETE != 0:
-                                       # Deleted dir - Remove watch to deleted 
dir
-                                       self.remove(event.pathname)
+                                       # Deleted dir
                                        self._report_deleted(event.pathname)
                        elif event.mask & pyinotify.IN_CREATE != 0:
                                # New file - ignore event, 'IN_CLOSE_WRITE' is 
enought for my purpose
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/syncthing_gtk/wizard.py 
new/syncthing-gtk-0.7.4/syncthing_gtk/wizard.py
--- old/syncthing-gtk-0.7.3/syncthing_gtk/wizard.py     2015-06-10 
17:44:51.000000000 +0200
+++ new/syncthing-gtk-0.7.4/syncthing_gtk/wizard.py     2015-06-30 
11:17:12.000000000 +0200
@@ -228,11 +228,14 @@
        def prepare(self):
                self.paths = [ "./" ]
                self.paths += [ os.path.expanduser("~/.local/bin"), 
self.parent.st_configdir ]
-               suffix, trash = StDownloader.determine_platform()
-               self.binaries = ["syncthing", "syncthing%s" % (suffix,)]
-               if suffix == "x64":
-                       # Allow 32bit binary on 64bit
-                       self.binaries += ["syncthing.x86"]
+               if StDownloader is None:
+                       self.binaries = ["syncthing"]
+               else:
+                       suffix, trash = StDownloader.determine_platform()
+                       self.binaries = ["syncthing", "syncthing%s" % (suffix,)]
+                       if suffix == "x64":
+                               # Allow 32bit binary on 64bit
+                               self.binaries += ["syncthing.x86"]
                if IS_WINDOWS:
                        self.paths += [ "c:/Program Files/syncthing",
                                "c:/Program Files (x86)/syncthing",
@@ -258,8 +261,17 @@
                                # directly
                                self.parent.insert_and_go(DownloadSTPage())
                                return False
+                       elif StDownloader is None:
+                               # On Linux with updater disabled, generate and
+                               # display error page
+                               title = _("Syncthing daemon not found.")
+                               message = _("Please, use package manager to 
install the Syncthing package.")
+                               page = self.parent.error(self, title, message, 
False)
+                               page.show_all()
+                               return False
                        else:
-                               # On Linux, generate and display error page
+                               # On Linux with updater generate similar 
display error
+                               # and offer download
                                from syncthing_gtk.app import MIN_ST_VERSION
                                target_folder_link = '<a 
href="file://%s">%s</a>' % (
                                                
os.path.expanduser(StDownloader.get_target_folder()),
@@ -300,7 +312,7 @@
                                page.show_all()
                                # Add Download page
                                self.parent.insert(DownloadSTPage())
-                               return
+                               return False
                
                for bin in self.binaries:
                        bin_path = os.path.join(path, bin)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/syncthing-gtk-0.7.3/ui-settings.glade 
new/syncthing-gtk-0.7.4/ui-settings.glade
--- old/syncthing-gtk-0.7.3/ui-settings.glade   2015-06-10 17:44:51.000000000 
+0200
+++ new/syncthing-gtk-0.7.4/ui-settings.glade   2015-06-30 11:17:12.000000000 
+0200
@@ -685,6 +685,7 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
+                    <property name="no_show_all">True</property>
                     <property name="margin_top">10</property>
                     <property name="xalign">0</property>
                     <property name="draw_indicator">True</property>
@@ -708,9 +709,10 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label8">
+                  <object class="GtkLabel" id="lblAutoupdate">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="no_show_all">True</property>
                     <property name="margin_left">10</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">If enabled, 
Syncthing-GTK will automatically check for new daemon releases and replace 
binary with latest version.</property>


Reply via email to