From 872083753433064cd89f7c86d24b6c34f10130d8 Mon Sep 17 00:00:00 2001 From: Rene Kjellerup Date: Sun, 29 Dec 2019 21:59:28 -0800 Subject: [PATCH] storing revision information in XfburnDevice for implementing feature request from bug #14467 using sysfs via gudev if available or from libburn otherwise --- xfburn/xfburn-device-list.c | 9 +++++++-- xfburn/xfburn-device.c | 11 +++++++++++ xfburn/xfburn-preferences-dialog.c | 17 +++++++++++------ xfburn/xfburn-udev-manager.c | 9 +++++++-- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/xfburn/xfburn-device-list.c b/xfburn/xfburn-device-list.c index 84b676d..f1995dc 100644 --- a/xfburn/xfburn-device-list.c +++ b/xfburn/xfburn-device-list.c @@ -276,9 +276,14 @@ get_libburn_device_list (XfburnDeviceList *devlist) for (i = 0; i < priv->num_drives; i++) { XfburnDevice *device = xfburn_device_new (); const gchar *name; - char addr[BURN_DRIVE_ADR_LEN];; - + char addr[BURN_DRIVE_ADR_LEN]; + char rev[5]; + name = xfburn_device_set_name (device, drives[i].vendor, drives[i].product); + strncpy (rev, drives[i].revision, 5); + rev[5] = '\0'; + + g_object_set (device, "revision", rev, NULL); xfburn_device_fillin_libburn_info (device, &drives[i]); diff --git a/xfburn/xfburn-device.c b/xfburn/xfburn-device.c index 8d9b546..c40674d 100644 --- a/xfburn/xfburn-device.c +++ b/xfburn/xfburn-device.c @@ -33,6 +33,7 @@ enum { PROP_0, PROP_NAME, PROP_ADDRESS, + PROP_REVISION, PROP_ACCESSIBLE, PROP_SUPPORTED_SPEEDS, PROP_DISC_STATUS, @@ -65,6 +66,7 @@ typedef struct _XfburnDevicePrivate XfburnDevicePrivate; struct _XfburnDevicePrivate { gchar *name; gchar *addr; + gchar *rev; gboolean details_known; gint buffer_size; @@ -108,6 +110,9 @@ xfburn_device_get_property (GObject *object, guint property_id, case PROP_ADDRESS: g_value_set_string (value, priv->addr); break; + case PROP_REVISION: + g_value_set_string (value, priv->rev); + break; case PROP_SUPPORTED_SPEEDS: g_value_set_pointer (value, priv->supported_speeds); break; @@ -171,6 +176,9 @@ xfburn_device_set_property (GObject *object, guint property_id, case PROP_ADDRESS: priv->addr = g_value_dup_string (value); break; + case PROP_REVISION: + priv->rev = g_value_dup_string (value); + break; case PROP_SUPPORTED_SPEEDS: priv->supported_speeds = g_value_get_pointer (value); break; @@ -249,6 +257,9 @@ xfburn_device_class_init (XfburnDeviceClass *klass) g_object_class_install_property (object_class, PROP_ADDRESS, g_param_spec_string ("address", _("Device address"), _("Device address"), "", G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_REVISION, + g_param_spec_string ("revision", _("Device revision"), + _("Device Revision"), "", G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_SUPPORTED_SPEEDS, g_param_spec_pointer ("supported-speeds", _("Burn speeds supported by the device"), _("Burn speeds supported by the device"), G_PARAM_READABLE)); diff --git a/xfburn/xfburn-preferences-dialog.c b/xfburn/xfburn-preferences-dialog.c index 1d46b9c..d2720b2 100644 --- a/xfburn/xfburn-preferences-dialog.c +++ b/xfburn/xfburn-preferences-dialog.c @@ -67,6 +67,7 @@ enum { DEVICE_LIST_COLUMN_ICON, DEVICE_LIST_COLUMN_NAME, + DEVICE_LIST_COLUMN_REV, DEVICE_LIST_COLUMN_NODE, DEVICE_LIST_COLUMN_CDR, DEVICE_LIST_COLUMN_CDRW, @@ -227,7 +228,7 @@ xfburn_preferences_dialog_init (XfburnPreferencesDialog * obj) gtk_widget_show (scrolled_window); gtk_box_pack_start (GTK_BOX (vbox2), scrolled_window, TRUE, TRUE, BORDER); - store = gtk_list_store_new (DEVICE_LIST_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, + store = gtk_list_store_new (DEVICE_LIST_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); priv->treeview_devices = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); @@ -252,6 +253,8 @@ xfburn_preferences_dialog_init (XfburnPreferencesDialog * obj) gtk_tree_view_column_set_attributes (column_name, cell_name, "text", DEVICE_LIST_COLUMN_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (priv->treeview_devices), column_name); + gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->treeview_devices), -1, _("Revision"), + gtk_cell_renderer_text_new (), "text", DEVICE_LIST_COLUMN_REV, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->treeview_devices), -1, _("Node"), gtk_cell_renderer_text_new (), "text", DEVICE_LIST_COLUMN_NODE, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->treeview_devices), -1, _("Write CD-R"), @@ -417,28 +420,30 @@ refresh_devices_list (XfburnPreferencesDialog * dialog) while (device) { GtkTreeIter iter; XfburnDevice *device_data; - gchar *name, *addr; + gchar *name, *addr, *rev; gboolean cdr, cdrw, dvdr, dvdram, bd; device_data = (XfburnDevice *) device->data; g_object_get (G_OBJECT (device_data), "name", &name, "address", &addr, - "cdr", &cdr, "cdrw", &cdrw, "dvdr", &dvdr, "dvdram", &dvdram, - "bd", &bd, NULL); + "revision", &rev, "cdr", &cdr, "cdrw", &cdrw, "dvdr", &dvdr, + "dvdram", &dvdram, "bd", &bd, NULL); gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, DEVICE_LIST_COLUMN_NAME, name, + DEVICE_LIST_COLUMN_REV, rev, DEVICE_LIST_COLUMN_NODE, addr, DEVICE_LIST_COLUMN_CDR, cdr, DEVICE_LIST_COLUMN_CDRW, cdrw, - DEVICE_LIST_COLUMN_DVDR, dvdr, - DEVICE_LIST_COLUMN_DVDRAM, dvdram, + DEVICE_LIST_COLUMN_DVDR, dvdr, + DEVICE_LIST_COLUMN_DVDRAM, dvdram, DEVICE_LIST_COLUMN_BD, bd, -1); g_free (name); g_free (addr); + g_free (rev); device = g_list_next (device); } diff --git a/xfburn/xfburn-udev-manager.c b/xfburn/xfburn-udev-manager.c index 0d84b3e..2e65a32 100644 --- a/xfburn/xfburn-udev-manager.c +++ b/xfburn/xfburn-udev-manager.c @@ -232,7 +232,7 @@ xfburn_udev_manager_get_devices (XfburnUdevManager *udevman, gint *drives, gint if (cdr || dvdr || dvdram || bdr) { XfburnDevice *device; - const gchar *addr, *name, *str_model, *str_vendor; + const gchar *addr, *name, *rev, *str_model, *str_vendor; device = xfburn_device_new (); @@ -253,9 +253,14 @@ xfburn_udev_manager_get_devices (XfburnUdevManager *udevman, gint *drives, gint str_model = g_udev_device_get_property (l->data, "ID_MODEL"); if (str_model == NULL) str_model = g_udev_device_get_sysfs_attr (l->data, "product"); - + name = xfburn_device_set_name (device, str_vendor, str_model); + /* revision */ + rev = g_udev_device_get_sysfs_attr(l->data, "device/rev"); + if (rev != NULL) + g_object_set (G_OBJECT (device), "revision", rev, NULL); + addr = g_udev_device_get_device_file(l->data); #ifdef DEBUG_NULL_DEVICE g_object_set (G_OBJECT (device), "address", "stdio:/dev/null", NULL); -- 2.23.0