}
void
+devkit_disks_device_set_device_detection_time (DevkitDisksDevice *device, guint64 value)
+{
+ if (G_UNLIKELY (device->priv->device_detection_time != value))
+ {
+ device->priv->device_detection_time = value;
+ emit_changed (device, "device_detection_time");
+ }
+}
+
+void
+devkit_disks_device_set_device_media_detection_time (DevkitDisksDevice *device, guint64 value)
+{
+ if (G_UNLIKELY (device->priv->device_media_detection_time != value))
+ {
+ device->priv->device_media_detection_time = value;
+ emit_changed (device, "device_media_detection_time");
+ }
+}
+
+void
devkit_disks_device_set_job_in_progress (DevkitDisksDevice *device, gboolean value)
{
if (G_UNLIKELY (device->priv->job_in_progress != value))
char *object_path;
char *native_path;
guint64 device_detection_time;
+ guint64 device_media_detection_time;
gboolean removed;
void devkit_disks_device_set_job_is_cancellable (DevkitDisksDevice *device, gboolean value);
void devkit_disks_device_set_job_percentage (DevkitDisksDevice *device, gdouble value);
+void devkit_disks_device_set_device_detection_time (DevkitDisksDevice *device, guint64 value);
+void devkit_disks_device_set_device_media_detection_time (DevkitDisksDevice *device, guint64 value);
void devkit_disks_device_set_device_file (DevkitDisksDevice *device, const gchar *value);
void devkit_disks_device_set_device_file_by_id (DevkitDisksDevice *device, GStrv value);
void devkit_disks_device_set_device_file_by_path (DevkitDisksDevice *device, GStrv value);
PROP_NATIVE_PATH,
PROP_DEVICE_DETECTION_TIME,
+ PROP_DEVICE_MEDIA_DETECTION_TIME,
PROP_DEVICE_MAJOR,
PROP_DEVICE_MINOR,
PROP_DEVICE_FILE,
case PROP_DEVICE_DETECTION_TIME:
g_value_set_uint64 (value, device->priv->device_detection_time);
break;
+ case PROP_DEVICE_MEDIA_DETECTION_TIME:
+ g_value_set_uint64 (value, device->priv->device_media_detection_time);
+ break;
case PROP_DEVICE_MAJOR:
g_value_set_int64 (value, major (device->priv->dev));
break;
g_param_spec_uint64 ("device-detection-time", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READABLE));
g_object_class_install_property (
object_class,
+ PROP_DEVICE_MEDIA_DETECTION_TIME,
+ g_param_spec_uint64 ("device-media-detection-time", NULL, NULL, 0, G_MAXUINT64, 0, G_PARAM_READABLE));
+ g_object_class_install_property (
+ object_class,
PROP_DEVICE_MAJOR,
g_param_spec_int64 ("device-major", NULL, NULL, -G_MAXINT64, G_MAXINT64, 0, G_PARAM_READABLE));
g_object_class_install_property (
GPtrArray *holders;
gint major;
gint minor;
+ gboolean media_available;
ret = FALSE;
devkit_disks_device_set_device_is_removable (device, (sysfs_get_int (device->priv->native_path, "removable") != 0));
- /* device_is_media_available property */
+ /* device_is_media_available and device_media_detection_time property */
if (device->priv->device_is_removable) {
+ media_available = FALSE;
if (devkit_device_has_property (device->priv->d, "DKD_MEDIA_AVAILABLE")) {
- devkit_disks_device_set_device_is_media_available (device,
- devkit_device_get_property_as_boolean (device->priv->d, "DKD_MEDIA_AVAILABLE"));
+ media_available = devkit_device_get_property_as_boolean (device->priv->d, "DKD_MEDIA_AVAILABLE");
} else {
if (devkit_device_has_property (device->priv->d, "ID_CDROM_MEDIA_STATE")) {
- devkit_disks_device_set_device_is_media_available (device, TRUE);
+ media_available = TRUE;
} else {
- devkit_disks_device_set_device_is_media_available (device, FALSE);
+ media_available = FALSE;
}
}
} else {
- devkit_disks_device_set_device_is_media_available (device, TRUE);
+ media_available = TRUE;
}
+ devkit_disks_device_set_device_is_media_available (device, media_available);
+ if (media_available) {
+ if (device->priv->device_media_detection_time == 0)
+ devkit_disks_device_set_device_media_detection_time (device, (guint64) time (NULL));
+ } else {
+ devkit_disks_device_set_device_media_detection_time (device, 0);
+ }
/* device_size, device_block_size and device_is_read_only properties */
if (device->priv->device_is_media_available) {
was detected by the daemon.
</doc:para></doc:description></doc:doc>
</property>
+ <property name="device-media-detection-time" type="t" access="read">
+ <doc:doc><doc:description><doc:para>
+ The point in time (seconds since the Epoch Jan 1, 1970 0:00 UTC) when the
+ media currently in the device was detected by the daemon or 0 if the
+ device has no media.
+ </doc:para></doc:description></doc:doc>
+ </property>
<property name="device-major" type="x" access="read">
<doc:doc><doc:description><doc:para>
Major for the device or -1 if not set.
char *native_path;
guint64 device_detection_time;
+ guint64 device_media_detection_time;
gint64 device_major;
gint64 device_minor;
char *device_file;
else if (strcmp (key, "device-detection-time") == 0)
props->device_detection_time = g_value_get_uint64 (value);
+ else if (strcmp (key, "device-media-detection-time") == 0)
+ props->device_media_detection_time = g_value_get_uint64 (value);
else if (strcmp (key, "device-major") == 0)
props->device_major = g_value_get_int64 (value);
else if (strcmp (key, "device-minor") == 0)
g_print (" detected at: %s\n", time_buf);
g_print (" system internal: %d\n", props->device_is_system_internal);
g_print (" removable: %d\n", props->device_is_removable);
- g_print (" has media: %d\n", props->device_is_media_available);
+ g_print (" has media: %d", props->device_is_media_available);
+ if (props->device_media_detection_time != 0) {
+ time = (time_t) props->device_media_detection_time;
+ time_tm = localtime (&time);
+ strftime (time_buf, sizeof time_buf, "%c", time_tm);
+ g_print (" (detected at %s)", time_buf);
+ }
+ g_print ("\n");
g_print (" detects change: %d\n", props->device_is_media_change_detected);
g_print (" detection by polling: %d\n", props->device_is_media_change_detection_polling);
g_print (" detection inhibitable: %d\n", props->device_is_media_change_detection_inhibitable);