]> git.0d.be Git - jack_mixer.git/commitdiff
Remove GConf. Use plaintext preferences file.
authorDaniel Sheeler <dsheeler@pobox.com>
Wed, 24 Jun 2020 22:25:25 +0000 (17:25 -0500)
committerDaniel Sheeler <dsheeler@pobox.com>
Wed, 24 Jun 2020 22:27:09 +0000 (17:27 -0500)
INSTALL
Makefile.am
configure.ac
gui.py
preferences.py

diff --git a/INSTALL b/INSTALL
index 34ed0b82db9fd52ee703510d52ae9e206277822c..ba69b665071fe28eef753e9c113abf996f07634b 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -19,9 +19,7 @@ Runtime requirements (checked by configure script):
 Runtime optional things, that will enable you to get full functionality:
  * To get LASH (Linux audio session) support, you need LASH compiled
    with Python bindings. This means at least 0.5.3 release.
- * If you want your settings to be preserved in GConf you need gconf
-   introspection data for gobject. It may be provided by a package
-   named gir1.2-gconf-2.0.
+ * PyXDG to save preferences between invocations.
 
 ===================================================
 These are the generic installation instructions.
index 885b7d2fe2e04a11f51e25e9242f338cc65b6cfc..dba5d9846c866ef891960b45497edc09a5acb237 100644 (file)
@@ -41,7 +41,7 @@ jack_mixer_c_la_SOURCES = \
 dist_jack_mixer_DATA = abspeak.py channel.py gui.py meter.py scale.py serialization.py serialization_xml.py slider.py preferences.py
 
 CLEANFILES = *.pyc
-EXTRA_DIST = test.py COPYING jack_mixer.schemas jack_mixer.py NEWS
+EXTRA_DIST = test.py COPYING jack_mixer.py NEWS
 
 bin_SCRIPTS = $(srcdir)/jack_mixer.py
 
@@ -59,21 +59,9 @@ jack_mix_box_LDADD = $(JACKMIXER_LIBS) -lm
 test: _jack_mixer_c.so
        @./test.py
 
-schemadir = @GCONF_SCHEMA_FILE_DIR@
-schema_DATA = jack_mixer.schemas
-
 install-exec-hook:
        ln -vfs jack_mixer.py $(DESTDIR)$(bindir)/jack_mixer
 
-if GCONF_SCHEMAS_INSTALL
-install-data-hook:
-       GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA)
-
-uninstall-hook:
-       GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-uninstall-rule $(srcdir)/$(schema_DATA)
-       rm -vf $(DESTDIR)$(bindir)/jack_mixer
-endif
-
 pacoinstall:
        test `whoami` == root # test for root
        -paco -rvB jack_mixer
index 0649fec373f36b3855b89e3ebdfd6fc3ca5932f3..62dbc79a257a199146c7507b7d26f11b4f282624 100644 (file)
@@ -86,10 +86,6 @@ else
   AC_MSG_WARN([Checks for python modules required runtime have been force disabled])
 fi
 
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-AM_GCONF_SOURCE_2
-AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "x$ac_cv_path_GCONFTOOL" != "xno"])
-
 AC_OUTPUT([
 Makefile
 data/Makefile
@@ -101,7 +97,6 @@ AC_MSG_RESULT([*****************************************************************
 AC_MSG_RESULT([])
 AC_MSG_RESULT([Prefix:            $prefix])
 AC_MSG_RESULT([Python dir:        $pythondir])
-#AC_MSG_RESULT([GConf schema dir:  $GCONF_SCHEMA_FILE_DIR])
 AC_MSG_RESULT([])
 AC_MSG_RESULT([MIDI support:      $have_jackmidi])
 AC_MSG_RESULT([])
diff --git a/gui.py b/gui.py
index 9b555e1c3cbd9e67b8da478301c1a69ff661902c..c335e1cfb2735b4ebfe4372a0611bb2de44924ab 100644 (file)
--- a/gui.py
+++ b/gui.py
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 
 import gi
-gi.require_version('GConf', '2.0')
 from gi.repository import GObject
+import os
+import configparser
 
 try:
-    from gi.repository import GConf
+    import xdg
+    from xdg import BaseDirectory
 except:
-    print("Cannot load Python bindings for GConf, your preferences will not be preserved across jack_mixer invocations")
-    GConf = None
+    xdg = None
 
 def lookup_scale(scales, scale_id):
     for scale in scales:
@@ -38,106 +39,92 @@ class Factory(GObject.GObject):
         self.meter_scales = meter_scales
         self.slider_scales = slider_scales
 
-        if GConf:
-            self.gconf_client = GConf.Client.get_default()
-
-            scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_meter_scale")
-            self.default_meter_scale = lookup_scale(meter_scales, scale_id)
-            if not self.default_meter_scale:
-                self.default_meter_scale = meter_scales[0]
-
-            scale_id = self.gconf_client.get_string("/apps/jack_mixer/default_slider_scale")
-            self.default_slider_scale = lookup_scale(slider_scales, scale_id)
-            if not self.default_slider_scale:
-                self.default_slider_scale = slider_scales[0]
-
-            self.vumeter_color_scheme = self.gconf_client.get_string(
-                            '/apps/jack_mixer/vumeter_color_scheme')
-            self.vumeter_color = self.gconf_client.get_string(
-                            '/apps/jack_mixer/vumeter_color')
-            if not self.vumeter_color:
-                self.vumeter_color = '#ccb300'
-
-            self.use_custom_widgets = self.gconf_client.get_bool(
-                            '/apps/jack_mixer/use_custom_widgets')
-
-            self.gconf_client.add_dir("/apps/jack_mixer", GConf.ClientPreloadType.PRELOAD_NONE)
-            self.gconf_client.notify_add("/apps/jack_mixer/default_meter_scale", self.on_gconf_default_meter_scale_changed)
-            self.gconf_client.notify_add("/apps/jack_mixer/default_slider_scale", self.on_gconf_default_slider_scale_changed)
-            self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color', self.on_gconf_vumeter_color_change)
-            self.gconf_client.notify_add('/apps/jack_mixer/vumeter_color_scheme', self.on_gconf_vumeter_color_scheme_change)
-            self.gconf_client.notify_add('/apps/jack_mixer/use_custom_widgets', self.on_gconf_use_custom_widgets_change)
+        if xdg:
+            self.config = configparser.ConfigParser()
+            self.path = os.path.join(BaseDirectory.save_config_path('jack_mixer'), 'preferences.ini')
+            if os.path.isfile(self.path):
+                self.read_preferences()
+            else:
+                self.set_default_preferences()
+                self.write_preferences()
         else:
+            print("Cannot load PyXDG. Your preferences will not be preserved across jack_mixer invocations")
+            self.set_default_preferences()
+
+    def set_default_preferences(self):
+        self.default_meter_scale = self.meter_scales[0]
+        self.default_slider_scale = self.slider_scales[0]
+        self.vumeter_color = '#ccb300'
+        self.vumeter_color_scheme = 'default'
+        self.use_custom_widgets = False
+
+    def read_preferences(self):
+        self.config.read(self.path)
+        scale_id = self.config['Preferences']['default_meter_scale']
+        self.default_meter_scale = lookup_scale(self.meter_scales, scale_id)
+        if not self.default_meter_scale:
             self.default_meter_scale = meter_scales[0]
+
+        scale_id = self.config['Preferences']['default_slider_scale']
+        self.default_slider_scale = lookup_scale(self.slider_scales, scale_id)
+        if not self.default_slider_scale:
             self.default_slider_scale = slider_scales[0]
-            self.vumeter_color = '#ccb300'
+
+        self.vumeter_color_scheme = self.config['Preferences']['vumeter_color_scheme']
+        if not self.vumeter_color_scheme:
             self.vumeter_color_scheme = 'default'
-            self.use_custom_widgets = False
 
-    def on_gconf_default_meter_scale_changed(self, client, connection_id, entry):
-        #print "GConf default_meter_scale changed"
-        scale_id = entry.get_value().get_string()
-        scale = lookup_scale(self.meter_scales, scale_id)
-        self.set_default_meter_scale(scale, from_gconf=True)
+        self.vumeter_color = self.config['Preferences']['vumeter_color']
+        if not self.vumeter_color:
+            self.vumeter_color = '#ccb300'
 
-    def set_default_meter_scale(self, scale, from_gconf=False):
-        if scale:
-            if GConf and not from_gconf:
-                self.gconf_client.set_string("/apps/jack_mixer/default_meter_scale", scale.scale_id)
-            else:
-                self.default_meter_scale = scale
-                self.emit("default-meter-scale-changed", self.default_meter_scale)
-        else:
-            print("Ignoring GConf default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
+        self.use_custom_widgets = self.config["Preferences"]["use_custom_widgets"] == 'True'
 
-    def on_gconf_default_slider_scale_changed(self, client, connection_id, entry):
-        #print "GConf default_slider_scale changed"
-        scale_id = entry.get_value().get_string()
-        scale = lookup_scale(self.slider_scales, scale_id)
-        self.set_default_slider_scale(scale, from_gconf=True)
+    def write_preferences(self):
+        self.config['Preferences'] = {}
+        self.config['Preferences']['default_meter_scale'] = self.default_meter_scale.scale_id
+        self.config['Preferences']['default_slider_scale'] = self.default_slider_scale.scale_id
+        self.config['Preferences']['vumeter_color_scheme'] = self.vumeter_color_scheme
+        self.config['Preferences']['vumeter_color'] = self.vumeter_color
+        self.config['Preferences']['use_custom_widgets'] = str(self.use_custom_widgets)
+        with open(self.path, 'w') as configfile:
+            self.config.write(configfile)
 
-    def set_default_slider_scale(self, scale, from_gconf=False):
+    def set_default_meter_scale(self, scale):
         if scale:
-            if GConf and not from_gconf:
-                self.gconf_client.set_string("/apps/jack_mixer/default_slider_scale", scale.scale_id)
-            else:
-                self.default_slider_scale = scale
-                self.emit("default-slider-scale-changed", self.default_slider_scale)
+            self.default_meter_scale = scale
+            if xdg:
+                self.write_preferences()
+            self.emit("default-meter-scale-changed", self.default_meter_scale)
         else:
-            print("Ignoring GConf default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
+            print("Ignoring default_meter_scale setting, because \"%s\" scale is not known" % scale_id)
 
-    def set_vumeter_color(self, color, from_gconf=False):
-        if GConf and not from_gconf:
-            self.gconf_client.set_string('/apps/jack_mixer/vumeter_color', color)
-        else:
-            self.vumeter_color = color
-            self.emit('vumeter-color-changed', self.vumeter_color)
-
-    def on_gconf_vumeter_color_change(self, client, connection_id, entry):
-        color = entry.get_value().get_string()
-        self.set_vumeter_color(color, from_gconf=True)
-
-    def set_vumeter_color_scheme(self, color_scheme, from_gconf=False):
-        if GConf and not from_gconf:
-            self.gconf_client.set_string('/apps/jack_mixer/vumeter_color_scheme', color_scheme)
-        else:
-            self.vumeter_color_scheme = color_scheme
-            self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
-
-    def on_gconf_vumeter_color_scheme_change(self, client, connection_id, entry):
-        color_scheme = entry.get_value().get_string()
-        self.set_vumeter_color_scheme(color_scheme, from_gconf=True)
-
-    def set_use_custom_widgets(self, use_custom, from_gconf=False):
-        if GConf and not from_gconf:
-            self.gconf_client.set_bool('/apps/jack_mixer/use_custom_widgets', use_custom)
+    def set_default_slider_scale(self, scale):
+        if scale:
+            self.default_slider_scale = scale
+            if xdg:
+                self.write_preferences()
+            self.emit("default-slider-scale-changed", self.default_slider_scale)
         else:
-            self.use_custom_widgets = use_custom
-            self.emit('use-custom-widgets-changed', self.use_custom_widgets)
-
-    def on_gconf_use_custom_widgets_change(self, client, connection_id, entry):
-        use_custom = entry.get_value().get_bool()
-        self.set_use_custom_widgets(use_custom, from_gconf=True)
+            print("Ignoring default_slider_scale setting, because \"%s\" scale is not known" % scale_id)
+
+    def set_vumeter_color(self, color):
+        self.vumeter_color = color
+        if xdg:
+            self.write_preferences()
+        self.emit('vumeter-color-changed', self.vumeter_color)
+
+    def set_vumeter_color_scheme(self, color_scheme):
+        self.vumeter_color_scheme = color_scheme
+        if xdg:
+            self.write_preferences()
+        self.emit('vumeter-color-scheme-changed', self.vumeter_color_scheme)
+
+    def set_use_custom_widgets(self, use_custom):
+        self.use_custom_widgets = use_custom
+        if xdg:
+            self.write_preferences()
+        self.emit('use-custom-widgets-changed', self.use_custom_widgets)
 
     def get_default_meter_scale(self):
         return self.default_meter_scale
@@ -154,7 +141,6 @@ class Factory(GObject.GObject):
     def get_use_custom_widgets(self):
         return self.use_custom_widgets
 
-
 GObject.signal_new("default-meter-scale-changed", Factory,
                 GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION,
                 None, [GObject.TYPE_PYOBJECT])
index 67c040b90d2f33d7d15629285f4905b8f5041aee..b07051f823699d8cf3597ff336de214d14b16b8c 100644 (file)
@@ -20,17 +20,6 @@ from gi.repository import Gtk
 from gi.repository import Gdk
 from gi.repository import GObject
 
-try:
-    from gi.repository import GConf
-except ImportError:
-    gconf = None
-
-def lookup_scale(scales, scale_id):
-    for scale in scales:
-        if scale_id == scale.scale_id:
-            return scale
-    return None
-
 class PreferencesDialog(Gtk.Dialog):
     def __init__(self, parent):
         self.app = parent