Hello community,

here is the log from the commit of package cdemu-client for openSUSE:Factory 
checked in at 2017-02-16 17:04:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cdemu-client (Old)
 and      /work/SRC/openSUSE:Factory/.cdemu-client.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "cdemu-client"

Changes:
--------
--- /work/SRC/openSUSE:Factory/cdemu-client/cdemu-client.changes        
2015-11-26 17:04:04.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.cdemu-client.new/cdemu-client.changes   
2017-02-16 17:04:09.491426349 +0100
@@ -1,0 +2,7 @@
+Mon Feb  6 19:05:14 UTC 2017 - [email protected]
+
+- Update to new upstream release 3.0.3
+  * set displayed process name to "cdemu"
+  * ported from dbus-python to GDBus
+
+-------------------------------------------------------------------

Old:
----
  cdemu-client-3.0.1.tar.bz2

New:
----
  cdemu-client-3.0.3.tar.bz2

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

Other differences:
------------------
++++++ cdemu-client.spec ++++++
--- /var/tmp/diff_new_pack.BgBIx0/_old  2017-02-16 17:04:09.971358444 +0100
+++ /var/tmp/diff_new_pack.BgBIx0/_new  2017-02-16 17:04:09.971358444 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package cdemu-client
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           cdemu-client
-Version:        3.0.1
+Version:        3.0.3
 Release:        0
 Summary:        Command-line client to control cdemu-daemon
 License:        GPL-2.0+

++++++ cdemu-client-3.0.1.tar.bz2 -> cdemu-client-3.0.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/CMakeLists.txt 
new/cdemu-client-3.0.3/CMakeLists.txt
--- old/cdemu-client-3.0.1/CMakeLists.txt       2015-11-21 15:10:29.000000000 
+0100
+++ new/cdemu-client-3.0.3/CMakeLists.txt       2016-10-10 00:26:53.000000000 
+0200
@@ -19,7 +19,6 @@
 # Dependencies
 find_package (IntlTool 0.21 REQUIRED)
 find_package (Gettext 0.15 REQUIRED)
-find_package (PythonInterp 2.6 REQUIRED)
 
 if (POST_INSTALL_HOOKS)
     find_program (UPDATE_DESKTOP_DATABASE_EXECUTABLE NAMES 
update-desktop-database)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/README 
new/cdemu-client-3.0.3/README
--- old/cdemu-client-3.0.1/README       2015-11-21 15:10:29.000000000 +0100
+++ new/cdemu-client-3.0.3/README       2016-10-10 00:26:53.000000000 +0200
@@ -1,5 +1,5 @@
 CDEmu client
-3.0.1
+3.0.3
 ~~~~~
 
 Table of Contents:
@@ -27,7 +27,7 @@
 2. Requirements:
 ~~~~~~~~~~~~~~~~
  - Python >= 2.6
- - D-BUS Python bindings
+ - PyGObject >= 3.0.0 (glib and gio modules are required)
  - IntlTool >= 0.21
  - GetText >= 0.15
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/debian/changelog 
new/cdemu-client-3.0.3/debian/changelog
--- old/cdemu-client-3.0.1/debian/changelog     2015-11-21 15:10:29.000000000 
+0100
+++ new/cdemu-client-3.0.3/debian/changelog     2016-10-10 00:26:53.000000000 
+0200
@@ -1,7 +1,3 @@
-cdemu-client (3.0.1-1) debian; urgency=low
-  * Updated to 3.0.1
- -- Rok Mandeljc <[email protected]>  Sat, 21 Nov 2015 12:00:00 +0100
-
-cdemu-client (3.0.0-1) debian; urgency=low
+cdemu-client (3.0.3-1) debian; urgency=low
   * Initial Release. Closes: #705409
- -- Henrik Stokseth <[email protected]>  Sat, 05 Apr 2014 12:00:00 +0100
+ -- Henrik Stokseth <[email protected]>  Sat, 05 Apr 2014 
12:00:00 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/debian/control 
new/cdemu-client-3.0.3/debian/control
--- old/cdemu-client-3.0.1/debian/control       2015-11-21 15:10:29.000000000 
+0100
+++ new/cdemu-client-3.0.3/debian/control       2016-10-10 00:26:53.000000000 
+0200
@@ -2,16 +2,16 @@
 Section: utils
 Priority: optional
 Homepage: http://cdemu.sourceforge.net/
-Maintainer: Henrik Stokseth <[email protected]>
+Maintainer: Henrik Stokseth <[email protected]>
 Build-Depends: debhelper (>= 9)
 Build-Depends-Indep: python (>= 2.6.6-3), intltool, cmake (>= 2.8.5)
 X-Python-Version: >= 2.6.6
-Standards-Version: 3.9.5
+Standards-Version: 3.9.7
 
 
 Package: cdemu-client
 Architecture: all
-Depends: python (>= 2.6.6-3), python-dbus, cdemu-daemon (>= 3.0.0), 
${python:Depends}, ${misc:Depends}
+Depends: python (>= 2.6.6-3), python-gi (>= 3.0.0), gir1.2-glib-2.0, 
cdemu-daemon (>= 3.0.0), ${python:Depends}, ${misc:Depends}
 Recommends: bash-completion, gcdemu (>= 3.0.0)
 Description: Command-line client to control CDEmu daemon
  This is cdemu-client, a command-line client for controlling the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/debian/copyright 
new/cdemu-client-3.0.3/debian/copyright
--- old/cdemu-client-3.0.1/debian/copyright     2015-11-21 15:10:29.000000000 
+0100
+++ new/cdemu-client-3.0.3/debian/copyright     2016-10-10 00:26:53.000000000 
+0200
@@ -1,4 +1,4 @@
-This package was debianized by Henrik Stokseth <henrik AT hw0 DOT org> on
+This package was debianized by Henrik Stokseth 
<[email protected]> on
 Mon, 24 Des 2007 12:00:00 +0100.
 
 It was downloaded from: http://cdemu.sourceforge.net/
@@ -32,6 +32,6 @@
 On Debian systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL'.
 
-The Debian packaging is (C) 2007, Henrik Stokseth <henrik AT hw0 DOT org> and
+The Debian packaging is (C) 2007, Henrik Stokseth 
<[email protected]> and
 is licensed under the GPL, see above.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/cdemu-client-3.0.1/src/cdemu 
new/cdemu-client-3.0.3/src/cdemu
--- old/cdemu-client-3.0.1/src/cdemu    2015-11-21 15:10:29.000000000 +0100
+++ new/cdemu-client-3.0.3/src/cdemu    2016-10-10 00:26:53.000000000 +0200
@@ -21,10 +21,15 @@
 from __future__ import print_function
 
 import argparse
+import datetime
 import sys
 import os.path
 import getpass
-import dbus
+
+import gi
+from gi.repository import GLib
+from gi.repository import Gio
+
 
 try:
     import configparser
@@ -35,15 +40,27 @@
 from gettext import bindtextdomain, textdomain
 
 # *** Globals ***
-app_name = "cdemu-client"
-app_version = "3.0.1"
+app_name = "cdemu"
+app_version = "3.0.3"
 supported_daemon_interface_version = [ 7, 0 ]
 
 # I18n
-bindtextdomain("cdemu")
-textdomain("cdemu")
+bindtextdomain(app_name)
+textdomain(app_name)
+
+
+# Set process name
+if sys.platform == "linux2":
+    # Set process name.  Only works on Linux >= 2.1.57.
+    try:
+        import ctypes
+        libc = ctypes.CDLL("libc.so.6")
+        libc.prctl(15, app_name, 0, 0, 0) # 15 = PR_SET_NAME
+    except Exception:
+        pass
 
 
+# String to boolean conversion helper
 def str2bool (value):
     return value.lower() in ("yes", "true", "t", "1")
 
@@ -97,31 +114,31 @@
         parser.add_argument("--encoding", type=str, help=_("encoding for 
text-based images"))
         parser.add_argument("--dvd-report-css", action="store_true", 
help=_("flag the DVD disc as CSS-encoded"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # We need to pass absolute filenames to daemon
         filenames = map(os.path.abspath, arguments.image_file)
 
         # Gather parser parameters into a dictionary
         parser_params = {}
         if hasattr(arguments, "encoding"):
-            parser_params["encoding"] = arguments.encoding
+            parser_params["encoding"] = GLib.Variant("s", arguments.encoding)
         if hasattr(arguments, "password"):
-            parser_params["password"] = arguments.password
+            parser_params["password"] = GLib.Variant("s", arguments.password)
         if hasattr(arguments, "dvd_report_css"):
-            parser_params["dvd-report-css"] = arguments.dvd_report_css
+            parser_params["dvd-report-css"] = GLib.Variant("b", 
arguments.dvd_report_css)
 
         # Particular device vs. any device
         if arguments.device == "any":
             try:
-                num_devices = dbus_iface.GetNumberOfDevices()
-            except dbus.DBusException as e:
+                num_devices = proxy.GetNumberOfDevices()
+            except GLib.Error as e:
                 raise CDEmuError(_("Failed to get number of devices: %s") % 
(e))
 
             for device in range(0, num_devices):
                 # Device's status
                 try:
-                    status = dbus_iface.DeviceGetStatus(device)
-                except dbus.DBusException as e:
+                    status = proxy.DeviceGetStatus(device)
+                except GLib.Error as e:
                     print_warning(_("Failed to get status of device %i: %s") % 
(device, e))
                     continue
 
@@ -130,7 +147,7 @@
                     continue
 
                 # Load device
-                return self.load_device(dbus_iface, device, filenames, 
parser_params)
+                return self.load_device(proxy, device, filenames, 
parser_params)
             else:
                 # If we're here, it means we didn't get an empty device
                 raise CDEmuError(_("No empty device found"))
@@ -140,23 +157,23 @@
             except ValueError:
                 raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
 
-            return self.load_device(dbus_iface, device, filenames, 
parser_params)
+            return self.load_device(proxy, device, filenames, parser_params)
 
     # Device loading with password query support
-    def load_device (self, dbus_iface, device, filenames, params={}):
+    def load_device (self, proxy, device, filenames, params={}):
         # Try to load it
         try:
-            dbus_iface.DeviceLoad(device, filenames, params)
-        except dbus.DBusException as e:
-            if e.get_dbus_name() == 
"net.sf.cdemu.CDEmuDaemon.errorMirage.EncryptedImage":
+            proxy.DeviceLoad(device, filenames, params)
+        except GLib.Error as e:
+            if "net.sf.cdemu.CDEmuDaemon.errorMirage.EncryptedImage" in str(e):
                 # We need password
                 print(_("The image you are trying to load is encrypted."))
-                params["password"] = getpass.getpass(_("Password: ")) # Append 
password to params
+                password = getpass.getpass(_("Password: ")) # Append password 
to params
+                params["password"] = GLib.Variant("s", password)
                 return load_device(device, filenames, params)
             else:
                 raise CDEmuError(_("Failed to load image: %s") % (e))
 
-
 ########################################################################
 #                              Create blank                            #
 ########################################################################
@@ -175,36 +192,36 @@
         parser.add_argument("--medium-type", type=str, nargs="?", 
choices=['cdr74', 'cdr80', 'cdr90', 'cdr99', 'dvd+r'], help=_("medium type"))
         parser.add_argument("--param", type=str, nargs="?", action='append', 
help=_("additional writer parameter(s)"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # We need to pass absolute filename/basename to daemon
         filename = os.path.abspath(arguments.image_file)
 
         # Gather writer parameters into a dictionary
         parameters = {}
         if hasattr(arguments, "writer_id"):
-            parameters["writer-id"] = arguments.writer_id
+            parameters["writer-id"] = GLib.Variant("s", arguments.writer_id)
         if hasattr(arguments, "medium_type"):
-            parameters["medium-type"] = arguments.medium_type
+            parameters["medium-type"] = GLib.Variant("s", 
arguments.medium_type)
         if hasattr(arguments, "param"):
             # Process parameters
             writer_parameters = self.process_writer_parameters(arguments.param)
             # Validate parameters using writer's parameter sheet
-            writer_parameters = self.validate_writer_parameters(dbus_iface, 
arguments.writer_id, writer_parameters)
+            writer_parameters = self.validate_writer_parameters(proxy, 
arguments.writer_id, writer_parameters)
             # Set to parameters dictionary that we will send to daemon
             parameters.update(writer_parameters)
 
         # Particular device vs. any device
         if arguments.device == "any":
             try:
-                num_devices = dbus_iface.GetNumberOfDevices()
-            except dbus.DBusException as e:
+                num_devices = proxy.GetNumberOfDevices()
+            except GLib.Error as e:
                 raise CDEmuError(_("Failed to get number of devices: %s") % 
(e))
 
             for device in range(0, num_devices):
                 # Device's status
                 try:
-                    status = dbus_iface.DeviceGetStatus(device)
-                except dbus.DBusException as e:
+                    status = proxy.DeviceGetStatus(device)
+                except GLib.Error as e:
                     print_warning(_("Failed to get status of device %i: %s") % 
(device, e))
                     continue
 
@@ -213,7 +230,7 @@
                     continue
 
                 # Load device
-                return self.load_device(dbus_iface, device, filename, 
parameters)
+                return self.load_device(proxy, device, filename, parameters)
             else:
                 # If we're here, it means we didn't get an empty device
                 raise CDEmuError(_("No empty device found"))
@@ -223,14 +240,14 @@
             except ValueError:
                 raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
 
-            return self.load_device(dbus_iface, device, filename, parameters)
+            return self.load_device(proxy, device, filename, parameters)
 
     # Device loading
-    def load_device (self, dbus_iface, device, filenames, params={}):
+    def load_device (self, proxy, device, filenames, params={}):
         # Try to load it
         try:
-            dbus_iface.DeviceCreateBlank(device, filenames, params)
-        except dbus.DBusException as e:
+            proxy.DeviceCreateBlank(device, filenames, params)
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to load blank image: %s") % (e))
 
     # Image writer parameter processing
@@ -257,11 +274,11 @@
         return parameters
 
     # Writer parameter validation
-    def validate_writer_parameters (self, dbus_iface, writer_id, parameters):
+    def validate_writer_parameters (self, proxy, writer_id, parameters):
         # Grab writer's parameter sheet
         try:
-            parameter_sheet = dbus_iface.EnumWriterParameters(writer_id)
-        except dbus.DBusException as e:
+            parameter_sheet = proxy.EnumWriterParameters(writer_id)
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get parameter sheet for writer: %s") 
% (e))
 
         # Convert the XML tree into a dictionary for convenience
@@ -275,6 +292,7 @@
                 parameter_entry = valid_parameters[key]
             except KeyError as e:
                 print_warning(_("Parameter '%s' not found in writer's 
parameter sheet!") % (key))
+                parameters.pop(key, '') # Remove from dictionary
                 continue
 
             # Determine type
@@ -283,19 +301,20 @@
                 # on the list of valid values, and if not, print a warning
                 for enum_value in parameter_entry[4]:
                     if value == enum_value:
+                        parameters[key] = GLib.Variant("s", value)
                         break
                 else:
                     print_warning(_("Invalid value '%s' given for parameter 
'%s'!") % (value, key))
-            elif isinstance(parameter_entry[3], dbus.String):
-                # String; nothing to do here
-                continue
-            elif isinstance(parameter_entry[3], dbus.Boolean):
+            elif isinstance(parameter_entry[3], str):
+                # String
+                parameters[key] = GLib.Variant("s", value)
+            elif isinstance(parameter_entry[3], bool):
                 # Boolean; convert string value to boolean
-                parameters[key] = str2bool(value)
-            elif isinstance(parameter_entry[3], dbus.Int32):
+                parameters[key] = GLib.Variant("b", str2bool(value))
+            elif isinstance(parameter_entry[3], int):
                 # Convert string value to integer
                 try:
-                    parameters[key] = int(value, 0)
+                    parameters[key] = GLib.Variant("i", int(value, 0))
                 except ValueError:
                     raise CDEmuError(_("String '%s' given as value for 
parameter '%s' is not a number!") % (value, key))
             else:
@@ -319,25 +338,25 @@
 
         parser.add_argument("device", type=str, help=_("device"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Particular device vs. all devices
         if arguments.device == "all":
             try:
-                num_devices = dbus_iface.GetNumberOfDevices()
-            except dbus.DBusException as e:
+                num_devices = proxy.GetNumberOfDevices()
+            except GLib.Error as e:
                 raise CDEmuError(_("Failed to get number of devices: %s") % 
(e))
 
             for device in range(0, num_devices):
                 try:
-                    dbus_iface.DeviceUnload(device)
-                except dbus.DBusException as e:
+                    proxy.DeviceUnload(device)
+                except GLib.Error as e:
                     print_warning(_("Failed to unload device %i: %s") % 
(device, e))
                     continue
         else:
             try:
                 device = int(arguments.device, 0)
-                dbus_iface.DeviceUnload(device)
-            except dbus.DBusException as e:
+                proxy.DeviceUnload(device)
+            except GLib.Error as e:
                 raise CDEmuError(_("Failed to unload device %i: %s") % 
(device, e))
             except ValueError:
                 raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -355,19 +374,19 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Print status for all devices
         try:
-            num_devices = dbus_iface.GetNumberOfDevices()
-        except dbus.DBusException as e:
+            num_devices = proxy.GetNumberOfDevices()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get number of devices: %s") % (e))
 
         print_header(_("Devices' status:"))
         print("%-5s %-10s %s" % (_("DEV"), _("LOADED"), _("FILENAME")))
         for device in range (0, num_devices):
             try:
-                [loaded, filenames] = dbus_iface.DeviceGetStatus(device, 
utf8_strings=True)
-            except dbus.DBusException as e:
+                [loaded, filenames] = proxy.DeviceGetStatus(device)
+            except GLib.Error as e:
                 print_warning(_("Failed to get status of device %i: %s") % 
(device, e))
                 continue
 
@@ -392,19 +411,19 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Print device mapping for all devices
         try:
-            num_devices = dbus_iface.GetNumberOfDevices()
-        except dbus.DBusException as e:
+            num_devices = proxy.GetNumberOfDevices()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get number of devices: %s") % (e))
 
         print_header(_("Device mapping:"))
         print("%-5s %-15s %-15s" % (_("DEV"), _("SCSI CD-ROM"), _("SCSI 
generic")))
         for device in range (0, num_devices):
             try:
-                [dev_sr, dev_sg] = dbus_iface.DeviceGetMapping(device)
-            except dbus.DBusException as e:
+                [dev_sr, dev_sg] = proxy.DeviceGetMapping(device)
+            except GLib.Error as e:
                 print_warning(_("Failed to get device mapping of device %i: 
%s") % (device, e))
                 continue
 
@@ -427,7 +446,7 @@
         parser.add_argument("new_value", nargs="?", type=str, help=_("new 
value"))
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set daemon debug mask
         if hasattr(arguments, "new_value"):
             try:
@@ -437,15 +456,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting daemon debug mask of all devices to 0x%X.") % 
(mask))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, 
"daemon-debug-mask", mask)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "daemon-debug-mask", 
GLib.Variant("i", mask))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set daemon debug mask of 
device %i to 0x%X: %s") % (device, mask, e))
                         continue
             else:
@@ -456,8 +475,8 @@
 
                 print(_("Setting daemon debug mask of device %i to 0x%X.") % 
(device, mask))
                 try:
-                    dbus_iface.DeviceSetOption(device, "daemon-debug-mask", 
mask)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "daemon-debug-mask", 
GLib.Variant("i", mask))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set daemon debug mask of 
device %i to 0x%X: %s") % (device, mask, e))
 
         # Get daemon debug mask
@@ -465,8 +484,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print_header(_("Devices' daemon debug masks:"))
@@ -474,8 +493,8 @@
 
                 for device in range(0, num_devices):
                     try:
-                        mask = dbus_iface.DeviceGetOption(device, 
"daemon-debug-mask")
-                    except dbus.DBusException as e:
+                        mask = proxy.DeviceGetOption(device, 
"daemon-debug-mask")
+                    except GLib.Error as e:
                         print_warning(_("Failed to get daemon debug mask of 
device %i: %s") % (device, e))
                         continue
 
@@ -483,8 +502,8 @@
             else:
                 try:
                     device = int(arguments.device, 0)
-                    mask = dbus_iface.DeviceGetOption(device, 
"daemon-debug-mask")
-                except dbus.DBusException as e:
+                    mask = proxy.DeviceGetOption(device, "daemon-debug-mask")
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get daemon debug mask of 
device %i: %s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -507,7 +526,7 @@
         parser.add_argument("device", type=str, help=_("device"))
         parser.add_argument("new_value", nargs="?", type=str, help=_("new 
value"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set debug mask
         if hasattr(arguments, "new_value"):
             try:
@@ -517,15 +536,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting library debug mask of all devices to 0x%X.") 
% (mask))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, 
"library-debug-mask", mask)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "library-debug-mask", 
GLib.Variant("i", mask))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set library debug mask of 
device %i to 0x%X: %s") % (device, mask, e))
                         continue
             else:
@@ -536,8 +555,8 @@
 
                 print(_("Setting library debug mask of device %i to 0x%X.") % 
(device, mask))
                 try:
-                    dbus_iface.DeviceSetOption(device, "library-debug-mask", 
mask)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "library-debug-mask", 
GLib.Variant("i", mask))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set library debug mask of 
device %i to 0x%X: %s") % (device, mask, e))
 
         # Get debug mask
@@ -545,8 +564,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print_header(_("Devices' library debug masks:"))
@@ -554,16 +573,16 @@
 
                 for device in range(0, num_devices):
                     try:
-                        mask = dbus_iface.DeviceGetOption(device, 
"library-debug-mask")
-                    except dbus.DBusException as e:
+                        mask = proxy.DeviceGetOption(device, 
"library-debug-mask")
+                    except GLib.Error as e:
                         print_warning(_("Failed to get library debug mask of 
device %i: %s") % (device, e))
 
                     print("%-5s 0x%08X" % (device, mask))
             else:
                 try:
                     device = int(arguments.device, 0)
-                    mask = dbus_iface.DeviceGetOption(device, 
"library-debug-mask")
-                except dbus.DBusException as e:
+                    mask = proxy.DeviceGetOption(device, "library-debug-mask")
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get library debug mask of 
device %i: %s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % (mask))
@@ -586,7 +605,7 @@
         parser.add_argument("device", type=str, help=_("device"))
         parser.add_argument("new_value", nargs="?", type=str, help=_("new 
value"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set DPM emulation flag
         if hasattr(arguments, "new_value"):
             try:
@@ -596,15 +615,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting DPM emulation flag of all devices to %i.") % 
(enabled))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, "dpm-emulation", 
enabled)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "dpm-emulation", 
GLib.Variant("b", enabled))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set DPM emulation flag of 
device %i to %i: %s") % (device, enabled, e))
                         continue
             else:
@@ -615,8 +634,8 @@
 
                 print(_("Setting DPM emulation flag of device %i to %i.") % 
(device, enabled))
                 try:
-                    dbus_iface.DeviceSetOption(device, "dpm-emulation", 
enabled)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "dpm-emulation", 
GLib.Variant("b", enabled))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set DPM emulation flag of 
device %i to %i: %s") % (device, enabled, e))
 
         # Get DPM emulation flag
@@ -624,8 +643,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print_header(_("Devices' DPM emulation flag:"))
@@ -633,8 +652,8 @@
 
                 for device in range(0, num_devices):
                     try:
-                        enabled = dbus_iface.DeviceGetOption(device, 
"dpm-emulation")
-                    except dbus.DBusException as e:
+                        enabled = proxy.DeviceGetOption(device, 
"dpm-emulation")
+                    except GLib.Error as e:
                         print_warning(_("Failed to get DPM emulation flag of 
device %i: %s") % (device, e))
                         continue
 
@@ -642,8 +661,8 @@
             else:
                 try:
                     device = int(arguments.device, 0)
-                    enabled = dbus_iface.DeviceGetOption(device, 
"dpm-emulation")
-                except dbus.DBusException as e:
+                    enabled = proxy.DeviceGetOption(device, "dpm-emulation")
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get DPM emulation flag of 
device %i: %s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -666,7 +685,7 @@
         parser.add_argument("device", type=str, help=_("device"))
         parser.add_argument("new_value", nargs="?", type=str, help=_("new 
value"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set TR emulation flag
         if hasattr(arguments, "new_value"):
             try:
@@ -676,15 +695,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting transfer rate emulation flag of all devices 
to %i.") % (enabled))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, "tr-emulation", 
enabled)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "tr-emulation", 
GLib.Variant("b", enabled))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set transfer rate emulation 
flag of device %i to %i: %s") % (device, enabled, e))
                         continue
             else:
@@ -695,8 +714,8 @@
 
                 print(_("Setting transfer rate emulation flag of device %i to 
%i.") % (device, enabled))
                 try:
-                    dbus_iface.DeviceSetOption(device, "tr-emulation", enabled)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "tr-emulation", 
GLib.Variant("b", enabled))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set transfer rate emulation 
flag of device %i to %i: %s") % (device, enabled, e))
 
         # Get TR emulation flag
@@ -704,8 +723,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Devices' transfer rate emulation flag:"))
@@ -713,8 +732,8 @@
 
                 for device in range(0, num_devices):
                     try:
-                        enabled = dbus_iface.DeviceGetOption(device, 
"tr-emulation")
-                    except dbus.DBusException as e:
+                        enabled = proxy.DeviceGetOption(device, "tr-emulation")
+                    except GLib.Error as e:
                         print_warning(_("Failed to get transfer rate emulation 
flag of device %i: %s") % (device, e))
                         continue
 
@@ -722,8 +741,8 @@
             else:
                 try:
                     device = int(arguments.device, 0)
-                    enabled = dbus_iface.DeviceGetOption(device, 
"tr-emulation")
-                except dbus.DBusException as e:
+                    enabled = proxy.DeviceGetOption(device, "tr-emulation")
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get transfer rate emulation 
flag of device %i: %s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -746,7 +765,7 @@
         parser.add_argument("device", type=str, help=_("device"))
         parser.add_argument("new_value", nargs="?", type=str, help=_("new 
value"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set bad sector emulation flag
         if hasattr(arguments, "new_value"):
             try:
@@ -756,15 +775,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting bad sector emulation flag of all devices to 
%i.") % (enabled))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, 
"bad-sector-emulation", enabled)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "bad-sector-emulation", 
GLib.Variant("b", enabled))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set bad sector emulation 
flag of device %i to %i: %s") % (device, enabled, e))
                         continue
             else:
@@ -775,8 +794,8 @@
 
                 print(_("Setting bad sector emulation flag of device %i to 
%i.") % (device, enabled))
                 try:
-                    dbus_iface.DeviceSetOption(device, "bad-sector-emulation", 
enabled)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "bad-sector-emulation", 
GLib.Variant("b", enabled))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set bad sector emulation 
flag of device %i to %i: %s") % (device, enabled, e))
 
         # Get bad sector emulation flag
@@ -784,8 +803,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print_header(_("Devices' bad sector emulation flag:"))
@@ -793,8 +812,8 @@
 
                 for device in range(0, num_devices):
                     try:
-                        enabled = dbus_iface.DeviceGetOption(device, 
"bad-sector-emulation")
-                    except dbus.DBusException as e:
+                        enabled = proxy.DeviceGetOption(device, 
"bad-sector-emulation")
+                    except GLib.Error as e:
                         print_warning(_("Failed to get bad sector emulation 
flag of device %i: %s") % (device, e))
                         continue
 
@@ -802,8 +821,8 @@
             else:
                 try:
                     device = int(arguments.device, 0)
-                    enabled = dbus_iface.DeviceGetOption(device, 
"bad-sector-emulation")
-                except dbus.DBusException as e:
+                    enabled = proxy.DeviceGetOption(device, 
"bad-sector-emulation")
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get bad sector emulation 
flag of device %i: %s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -826,7 +845,7 @@
         parser.add_argument("device", type=str, help=_("device"))
         parser.add_argument("new_id", nargs='*', type=str, help=_("new device 
ID: vendor ID, product ID, revision and vendor-specific string"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Set device ID
         if hasattr(arguments, "new_id"):
             device_id = tuple(arguments.new_id)
@@ -836,15 +855,15 @@
 
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print(_("Setting device ID of all devices to %s.") % 
(device_id))
                 for device in range(0, num_devices):
                     try:
-                        dbus_iface.DeviceSetOption(device, "device-id", 
device_id)
-                    except dbus.DBusException as e:
+                        proxy.DeviceSetOption(device, "device-id", 
GLib.Variant("(ssss)", device_id))
+                    except GLib.Error as e:
                         print_warning(_("Failed to set device ID of device %i 
to %s: %s") % (device, device_id, e))
                         continue
             else:
@@ -855,8 +874,8 @@
 
                 print(_("Setting device ID of device %i to %s.") % (device, 
device_id))
                 try:
-                    dbus_iface.DeviceSetOption(device, "device-id", device_id)
-                except dbus.DBusException as e:
+                    proxy.DeviceSetOption(device, "device-id", 
GLib.Variant("(ssss)", device_id))
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to set device ID of device %i 
to %s: %s") % (device, device_id, e))
 
 
@@ -865,8 +884,8 @@
             # Particular device vs. all devices
             if arguments.device == "all":
                 try:
-                    num_devices = dbus_iface.GetNumberOfDevices()
-                except dbus.DBusException as e:
+                    num_devices = proxy.GetNumberOfDevices()
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get number of devices: %s") 
% (e))
 
                 print_header(_("Devices' IDs:"))
@@ -874,9 +893,9 @@
 
                 for device in range(0, num_devices):
                     try:
-                        values = dbus_iface.DeviceGetOption(device, 
"device-id")
+                        values = proxy.DeviceGetOption(device, "device-id")
                         device_id = map(str, values)
-                    except dbus.DBusException as e:
+                    except GLib.Error as e:
                         print_warning(_("Failed to get device ID of device %i: 
%s") % (device, e))
                         continue
 
@@ -884,9 +903,9 @@
             else:
                 try:
                     device = int(arguments.device, 0)
-                    values = dbus_iface.DeviceGetOption(device, "device-id")
+                    values = proxy.DeviceGetOption(device, "device-id")
                     device_id = map (str, values)
-                except dbus.DBusException as e:
+                except GLib.Error as e:
                     raise CDEmuError(_("Failed to get device ID of device %i: 
%s") % (device, e))
                 except ValueError:
                     raise CDEmuError(_("String '%s' is not a number") % 
(arguments.device))
@@ -906,11 +925,11 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Display supported parsers
         try:
-            parsers = dbus_iface.EnumSupportedParsers()
-        except dbus.DBusException as e:
+            parsers = proxy.EnumSupportedParsers()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to enumerate supported parsers: %s") % 
(e))
             return False
 
@@ -934,11 +953,11 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Display supported writers
         try:
-            writers = dbus_iface.EnumSupportedWriters()
-        except dbus.DBusException as e:
+            writers = proxy.EnumSupportedWriters()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to enumerate supported writers: %s") % 
(e))
 
         # Print all writers
@@ -959,11 +978,11 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Display supported filter streams
         try:
-            filter_streams = dbus_iface.EnumSupportedFilterStreams()
-        except dbus.DBusException as e:
+            filter_streams = proxy.EnumSupportedFilterStreams()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to enumerate supported filter streams: 
%s") % (e))
 
         # Print all filter streams
@@ -987,11 +1006,11 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Print module's debug masks
         try:
-            debug_masks = dbus_iface.EnumDaemonDebugMasks()
-        except dbus.DBusException as e:
+            debug_masks = proxy.EnumDaemonDebugMasks()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to enumerate supported daemon debug 
masks: %s") % (e))
 
         print_header(_("Supported daemon debug masks:"))
@@ -1011,11 +1030,11 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Print module's debug masks
         try:
-            debug_masks = dbus_iface.EnumLibraryDebugMasks()
-        except dbus.DBusException as e:
+            debug_masks = proxy.EnumLibraryDebugMasks()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to enumerate supported library debug 
masks: %s") % (e))
 
         print_header(_("Supported library debug masks:"))
@@ -1037,11 +1056,11 @@
 
         parser.add_argument("writer", type=str, help=_("writer ID"))
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Get parameter sheet for the specified writer
         try:
-            parameter_sheet = dbus_iface.EnumWriterParameters(arguments.writer)
-        except dbus.DBusException as e:
+            parameter_sheet = proxy.EnumWriterParameters(arguments.writer)
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get parameter sheet for writer: %s") 
% (e))
 
         # Print the sheet
@@ -1061,11 +1080,11 @@
     def parameter_type_name (self, parameter):
         if len(parameter[4]):
             return _("enum")
-        elif isinstance(parameter[3], dbus.String):
+        elif isinstance(parameter[3], str):
             return _("string")
-        elif isinstance(parameter[3], dbus.Boolean):
+        elif isinstance(parameter[3], bool):
             return _("boolean")
-        elif isinstance(parameter[3], dbus.Int32):
+        elif isinstance(parameter[3], int):
             return _("integer")
         else:
             return _("unknown")
@@ -1073,15 +1092,13 @@
 
 # This is a stand-alone function because it is shared between
 # enum-writer-parameters and create-blank implementations
-def fetch_and_parse_writer_parameter_sheet (dbus_iface, writer_id):
+def fetch_and_parse_writer_parameter_sheet (proxy, writer_id):
     # Enumerate all supported writers
     try:
-        parameter_sheet = dbus_iface.EnumWriterParameters(writer_id)
-    except dbus.DBusException as e:
+        parameter_sheet = proxy.EnumWriterParameters(writer_id)
+    except GLib.Error as e:
         raise CDEmuError(_("Failed to get parameter sheet for writer: %s") % 
(e))
 
-    print(parameter_sheet)
-
     # Find the one we want
     for writer in writers:
         if writer[0] == writer_id:
@@ -1110,16 +1127,16 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         # Print version information
         try:
-            library_version = dbus_iface.GetLibraryVersion()
-        except dbus.DBusException as e:
+            library_version = proxy.GetLibraryVersion()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get library version: %s") % (e))
 
         try:
-            daemon_version = dbus_iface.GetDaemonVersion()
-        except dbus.DBusException as e:
+            daemon_version = proxy.GetDaemonVersion()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to get daemon version: %s") % (e))
 
         print(_("Library version: %s") % (str(library_version)))
@@ -1138,10 +1155,10 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         try:
-            dbus_iface.AddDevice()
-        except dbus.DBusException as e:
+            proxy.AddDevice()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to add device: %s") % (e))
 
         print(_("Device added successfully."))
@@ -1159,10 +1176,10 @@
         parser = subparsers.add_parser(name, description=description_msg, 
help=help_msg, formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
         parser.set_defaults(command_function=self)
 
-    def __call__ (self, dbus_iface, arguments):
+    def __call__ (self, proxy, arguments):
         try:
-            dbus_iface.RemoveDevice()
-        except dbus.DBusException as e:
+            proxy.RemoveDevice()
+        except GLib.Error as e:
             raise CDEmuError(_("Failed to remove device: %s") % (e))
 
         print(_("Device removed successfully."))
@@ -1185,9 +1202,10 @@
 def create_parser ():
     parser = CDEmuCommandLineParser(description=_("Command-line CDEmu 
client."), formatter_class=argparse.ArgumentDefaultsHelpFormatter, 
argument_default=argparse.SUPPRESS)
     parser.add_argument("--bus", metavar="BUS", choices=["system", "session"], 
help=_("sets D-BUS bus type to use"))
-    parser.add_argument("--version", action="version", version="%s %s - (C) 
Rok Mandeljc" % (app_name, app_version))
+    parser.add_argument("--version", action="version", version="%s %s - (C) 
2006-%d Rok Mandeljc" % (app_name, app_version, datetime.date.today().year))
 
     subparsers = parser.add_subparsers(title=_("valid commands"), 
metavar="command", help=_("command help"))
+    subparsers.required = True
 
     # Command sub-parsers
     cmd_load(subparsers) # Load
@@ -1215,35 +1233,95 @@
 
 
 ########################################################################
-#                          D-Bus connection                            #
+#               CDEmuDaemonProxy: Daemon proxy object                  #
 ########################################################################
-def connect_to_daemon (bus_type):
-    try:
-        if bus_type == "system":
-            dbus_bus = dbus.SystemBus()
-        elif bus_type == "session":
-            dbus_bus = dbus.SessionBus()
-        else:
-            print_warning(_("Invalid bus parameter '%s', using default!") % 
(bus_type))
-            dbus_bus = dbus.SessionBus() # Use session bus by default
+class CDEmuDaemonProxy ():
+    _name = 'net.sf.cdemu.CDEmuDaemon'
+    _object_path = '/Daemon'
 
-        dbus_proxy = dbus_bus.get_object("net.sf.cdemu.CDEmuDaemon", "/Daemon")
-        dbus_iface = dbus.Interface(dbus_proxy, "net.sf.cdemu.CDEmuDaemon")
-    except dbus.DBusException as e:
-        raise CDEmuError(_("Failed to connect to CDEmu daemon: %s") % (e))
+    def __init__ (self, bus_type):
+        try:
+            if bus_type == "system":
+                bus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None)
+            elif bus_type == "session":
+                bus = Gio.bus_get_sync(Gio.BusType.SESSION, None)
+            else:
+                print_warning(_("Invalid bus parameter '%s', using default!") 
% (bus_type))
+                bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) # Use 
session bus by default
 
-    # Get daemon interface version
-    try:
-        interface_version = dbus_iface.GetDaemonInterfaceVersion2()
-    except dbus.DBusException as e:
-        raise CDEmuError(_("Failed to acquire daemon interface version (this 
most likely means your daemon is out-of-date): %s") % (e))
+            self.proxy = Gio.DBusProxy.new_sync(bus, 0, None, 
"net.sf.cdemu.CDEmuDaemon", "/Daemon", "net.sf.cdemu.CDEmuDaemon", None)
+        except GLib.Error as e:
+            raise CDEmuError(_("Failed to connect to CDEmu daemon: %s") % (e))
+
+        # Get daemon interface version
+        try:
+            interface_version = self.GetDaemonInterfaceVersion2()
+        except GLib.Error as e:
+            raise CDEmuError(_("Failed to acquire daemon interface version 
(this most likely means your daemon is out-of-date): %s") % (e))
+
+        # Check daemon interface version
+        if interface_version[0] != supported_daemon_interface_version[0] or 
interface_version[1] < supported_daemon_interface_version[1]:
+            raise CDEmuError(_("CDEmu daemon interface version %i.%i detected, 
but version %i.%i is required!") % (interface_version[0], interface_version[1], 
supported_daemon_interface_version[0], supported_daemon_interface_version[1]))
+
+    def GetDaemonVersion (self):
+        return self.proxy.GetDaemonVersion()
+
+    def GetLibraryVersion (self):
+        return self.proxy.GetLibraryVersion()
+
+    def GetDaemonInterfaceVersion2 (self):
+        return self.proxy.GetDaemonInterfaceVersion2()
+
+    def EnumDaemonDebugMasks (self):
+        return self.proxy.EnumDaemonDebugMasks()
+
+    def EnumLibraryDebugMasks (self):
+        return self.proxy.EnumLibraryDebugMasks()
+
+    def EnumSupportedParsers (self):
+        return self.proxy.EnumSupportedParsers()
+
+    def EnumSupportedWriters (self):
+        return self.proxy.EnumSupportedWriters()
+
+    def EnumSupportedFilterStreams (self):
+        return self.proxy.EnumSupportedFilterStreams()
+
+    def EnumWriterParameters (self, writer_id):
+        return self.proxy.EnumWriterParameters('(s)', writer_id)
+
+
+    def GetNumberOfDevices (self):
+        return self.proxy.GetNumberOfDevices()
+
+
+    def DeviceGetMapping (self, device_number):
+        return self.proxy.DeviceGetMapping('(i)', device_number)
+
+    def DeviceGetStatus (self, device_number):
+        return self.proxy.DeviceGetStatus('(i)', device_number)
+
+    def DeviceLoad (self, device_number, filenames, parameters):
+        return self.proxy.DeviceLoad('(iasa{sv})', device_number, filenames, 
parameters)
+
+    def DeviceCreateBlank (self, device_number, filename, parameters):
+        return self.proxy.DeviceCreateBlank('(isa{sv})', device_number, 
filename, parameters)
+
+    def DeviceUnload (self, device_number):
+        return self.proxy.DeviceUnload('(i)', device_number)
+
+    def DeviceGetOption (self, device_number, option_name):
+        return self.proxy.DeviceGetOption('(is)', device_number, option_name)
+
+    def DeviceSetOption (self, device_number, option_name, option_value):
+        return self.proxy.DeviceSetOption('(isv)', device_number, option_name, 
option_value)
 
-    # Check daemon interface version
-    if interface_version[0] != supported_daemon_interface_version[0] or 
interface_version[1] < supported_daemon_interface_version[1]:
-        raise CDEmuError(_("CDEmu daemon interface version %i.%i detected, but 
version %i.%i is required!") % (interface_version[0], interface_version[1], 
supported_daemon_interface_version[0], supported_daemon_interface_version[1]))
 
+    def AddDevice (self):
+        return self.proxy.AddDevice()
 
-    return dbus_iface
+    def RemoveDevice (self):
+        return self.proxy.RemoveDevice()
 
 
 ########################################################################
@@ -1281,10 +1359,10 @@
         bus_type = arguments.bus
 
     # *** Connect to daemon ***
-    dbus_iface = connect_to_daemon(bus_type)
+    proxy = CDEmuDaemonProxy(bus_type)
 
     # *** Execute command ***
-    arguments.command_function(dbus_iface, arguments)
+    arguments.command_function(proxy, arguments)
 
 if __name__ == "__main__":
     try:


Reply via email to