<!-- MediaRemovable: Whether the media can be removed from the drive. -->
<property name="MediaRemovable" type="b" access="read"/>
+ <!-- Optical: %TRUE if the drive contains an optical disc. -->
+ <property name="Optical" type="b" access="read"/>
+
+ <!-- OpticalBlank: %TRUE if the disc is blank.
+ This is only valid if the property #org.freedesktop.UDisks2.Drive:Optical is %TRUE.
+ -->
+ <property name="OpticalBlank" type="b" access="read"/>
+
+ <!-- OpticalNumTracks: The number of tracks.
+ This is only valid if the property #org.freedesktop.UDisks2.Drive:Optical is %TRUE.
+ -->
+ <property name="OpticalNumTracks" type="u" access="read"/>
+
+ <!-- OpticalNumAudioTracks: The number of audio tracks.
+ This is only valid if the property #org.freedesktop.UDisks2.Drive:Optical is %TRUE.
+ -->
+ <property name="OpticalNumAudioTracks" type="u" access="read"/>
+
+ <!-- OpticalNumDataTracks: The number of data tracks.
+ This is only valid if the property #org.freedesktop.UDisks2.Drive:Optical is %TRUE.
+ -->
+ <property name="OpticalNumDataTracks" type="u" access="read"/>
+
+ <!-- OpticalNumSessions: The number of sessions.
+ This is only valid if the property #org.freedesktop.UDisks2.Drive:Optical is %TRUE.
+ -->
+ <property name="OpticalNumSessions" type="u" access="read"/>
+
<!-- RotationRate: The rotational rate of the drive.
<itemizedlist>
<listitem><para>-1 if known to be rotating media but rotation rate isn't known</para></listitem>
udisks_drive_get_media
udisks_drive_get_media_compatibility
udisks_drive_get_media_removable
+udisks_drive_get_optical
+udisks_drive_get_optical_blank
+udisks_drive_get_optical_num_tracks
+udisks_drive_get_optical_num_audio_tracks
+udisks_drive_get_optical_num_data_tracks
+udisks_drive_get_optical_num_sessions
udisks_drive_get_model
udisks_drive_get_revision
udisks_drive_get_rotation_rate
udisks_drive_set_media
udisks_drive_set_media_compatibility
udisks_drive_set_media_removable
+udisks_drive_set_optical
+udisks_drive_set_optical_blank
+udisks_drive_set_optical_num_tracks
+udisks_drive_set_optical_num_audio_tracks
+udisks_drive_set_optical_num_data_tracks
+udisks_drive_set_optical_num_sessions
udisks_drive_set_model
udisks_drive_set_revision
udisks_drive_set_rotation_rate
guint n;
GPtrArray *media_compat_array;
const gchar *media_in_drive;
+ gboolean is_disc = FALSE;
+ gboolean disc_is_blank = FALSE;
+ guint disc_session_count = 0;
+ guint disc_track_count = 0;
+ guint disc_track_count_audio = 0;
+ guint disc_track_count_data = 0;
media_compat_array = g_ptr_array_new ();
for (n = 0; drive_media_mapping[n].udev_property != NULL; n++)
udisks_drive_set_media_compatibility (iface, (const gchar* const *) media_compat_array->pdata);
udisks_drive_set_media (iface, media_in_drive);
g_ptr_array_free (media_compat_array, TRUE);
+
+ if (g_udev_device_get_property_as_boolean (device, "ID_CDROM_MEDIA"))
+ {
+ const gchar *state;
+ is_disc = TRUE;
+ state = g_udev_device_get_property (device, "ID_CDROM_MEDIA_STATE");
+ if (g_strcmp0 (state, "blank") == 0)
+ disc_is_blank = TRUE;
+ disc_session_count = g_udev_device_get_property_as_int (device, "ID_CDROM_MEDIA_SESSION_COUNT");
+ disc_track_count = g_udev_device_get_property_as_int (device, "ID_CDROM_MEDIA_TRACK_COUNT");
+ disc_track_count_audio = g_udev_device_get_property_as_int (device, "ID_CDROM_MEDIA_TRACK_COUNT_AUDIO");
+ disc_track_count_data = g_udev_device_get_property_as_int (device, "ID_CDROM_MEDIA_TRACK_COUNT_DATA");
+ }
+ udisks_drive_set_optical (iface, is_disc);
+ udisks_drive_set_optical_blank (iface, disc_is_blank);
+ udisks_drive_set_optical_num_sessions (iface, disc_session_count);
+ udisks_drive_set_optical_num_tracks (iface, disc_track_count);
+ udisks_drive_set_optical_num_audio_tracks (iface, disc_track_count_audio);
+ udisks_drive_set_optical_num_data_tracks (iface, disc_track_count_data);
}
static void
g_free (s);
}
- /* TODO: prepend "Blank ", "Mixed " or "Audio " for optical discs */
+ /* prepend a qualifier to the media description, based on the disc state */
+ if (udisks_drive_get_optical_blank (drive))
+ {
+ gchar *s;
+ /* Translators: String used for a blank disc. The %s is the disc type e.g. "CD-RW Disc" */
+ s = g_strdup_printf (_("Blank %s"), media_description);
+ g_free (media_description);
+ media_description = s;
+ }
+ else if (udisks_drive_get_optical_num_audio_tracks (drive) > 0 &&
+ udisks_drive_get_optical_num_data_tracks (drive) > 0)
+ {
+ gchar *s;
+ /* Translators: String used for a mixed disc. The %s is the disc type e.g. "CD-ROM Disc" */
+ s = g_strdup_printf (_("Mixed %s"), media_description);
+ g_free (media_description);
+ media_description = s;
+ }
+ else if (udisks_drive_get_optical_num_audio_tracks (drive) > 0 &&
+ udisks_drive_get_optical_num_data_tracks (drive) == 0)
+ {
+ gchar *s;
+ /* Translators: String used for an audio disc. The %s is the disc type e.g. "CD-ROM Disc" */
+ s = g_strdup_printf (_("Audio %s"), media_description);
+ g_free (media_description);
+ media_description = s;
+ }
/* return values to caller */
if (out_name != NULL)