class RBOX_SONG_FIELDS
Fields mapping to Rhythmbox XML song data
Example Entry
<entry type="song"> <title>L'Autre Valse d'Amélie</title> <genre>Vals (Modern)</genre> <artist>Yann Tiersen</artist> <album>Le Fabuleux Destin d'Amélie Poulain</album> <comment>Composer: Yann Tiersen</comment> <album-artist>Composer: Yann Tiersen</album-artist> <track-number>6</track-number> <duration>93</duration> <file-size>2244105</file-size> <location>file://$MUSIC/Vals%20(Modern)/Yann%20Tiersen/L'Autre%20Valse%20d'Am%C3%A9lie.02.mp3</location> <mtime>1335094508</mtime> <first-seen>1358180915</first-seen> <last-seen>1382259840</last-seen> <bitrate>192</bitrate> <date>730486</date> <media-type>audio/mpeg</media-type> <mb-trackid>CF22F4A6:D9D3:B4A6:674B:3866B6129A3C</mb-trackid> <mb-artistsortname>Tiersen, Yann</mb-artistsortname> <composer>Yann Tiersen</composer> </entry>
note
description: "[
Fields mapping to Rhythmbox XML song data
**Example Entry**
<entry type="song">
<title>L'Autre Valse d'Amélie</title>
<genre>Vals (Modern)</genre>
<artist>Yann Tiersen</artist>
<album>Le Fabuleux Destin d'Amélie Poulain</album>
<comment>Composer: Yann Tiersen</comment>
<album-artist>Composer: Yann Tiersen</album-artist>
<track-number>6</track-number>
<duration>93</duration>
<file-size>2244105</file-size>
<location>file://$MUSIC/Vals%20(Modern)/Yann%20Tiersen/L'Autre%20Valse%20d'Am%C3%A9lie.02.mp3</location>
<mtime>1335094508</mtime>
<first-seen>1358180915</first-seen>
<last-seen>1382259840</last-seen>
<bitrate>192</bitrate>
<date>730486</date>
<media-type>audio/mpeg</media-type>
<mb-trackid>CF22F4A6:D9D3:B4A6:674B:3866B6129A3C</mb-trackid>
<mb-artistsortname>Tiersen, Yann</mb-artistsortname>
<composer>Yann Tiersen</composer>
</entry>
]"
author: "Finnian Reilly"
copyright: "Copyright (c) 2001-2022 Finnian Reilly"
contact: "finnian at eiffel hyphen loop dot com"
license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
date: "2024-09-13 19:14:30 GMT (Friday 13th September 2024)"
revision: "10"
deferred class
RBOX_SONG_FIELDS
feature -- Access
album_picture_checksum: NATURAL
do
if mb_albumid.is_natural then
Result := mb_albumid.to_natural
end
end
first_seen_time: DATE_TIME
do
create Result.make_from_epoch (first_seen)
end
formatted_duration_time: STRING
--
local
l_time: TIME
do
create l_time.make_by_seconds (duration)
Result := l_time.formatted_out ("mi:[0]ss")
end
last_seen_time: DATE_TIME
do
create Result.make_from_epoch (last_seen)
end
modification_time: DATE_TIME
do
create Result.make_from_epoch (mtime)
end
feature -- Rhythmbox XML fields
album_artist: ZSTRING
bitrate: INTEGER
comment: ZSTRING
disc_number: INTEGER
duration: INTEGER
file_size: INTEGER
first_seen: INTEGER
last_played: INTEGER
last_seen: INTEGER
mb_albumartistid: ZSTRING
mb_albumid: ZSTRING
mb_artistid: ZSTRING
mb_artistsortname: ZSTRING
mtime: INTEGER
-- Combination of file modification time and file size
--
-- rhythmdb.c
-- /* compare modification time and size to the values in the Database.
-- * if either has changed, we'll re-read the file.
-- */
-- new_mtime = g_file_info_get_attribute_uint64 (event->file_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
-- new_size = g_file_info_get_attribute_uint64 (event->file_info, G_FILE_ATTRIBUTE_STANDARD_SIZE);
-- if (entry->mtime == new_mtime && (new_size == 0 || entry->file_size == new_size)) {
-- rb_debug ("not modified: %s", rb_refstring_get (event->real_uri));
-- } else {
-- rb_debug ("changed: %s", rb_refstring_get (event->real_uri));
play_count: INTEGER
replaygain_album_gain: DOUBLE
replaygain_album_peak: DOUBLE
replaygain_track_gain: DOUBLE
replaygain_track_peak: DOUBLE
track_number: INTEGER
beats_per_minute: INTEGER
-- If beats per minute <= 3 it indicates silence duration appended to playlist
composer: ZSTRING
feature -- Element change
set_album_picture_checksum (picture_checksum: NATURAL)
-- Set this if album art changes to affect the main checksum
do
mb_albumid := picture_checksum.out
end
set_beats_per_minute (a_beats_per_minute: like beats_per_minute)
--
do
beats_per_minute := a_beats_per_minute
end
set_bitrate (a_bitrate: like bitrate)
--
do
bitrate := a_bitrate
end
set_comment (a_comment: like comment)
--
do
comment := a_comment
end
set_composer (a_composer: like composer)
--
do
Composer_set.put (a_composer)
composer := Composer_set.found_item
end
set_duration (a_duration: like duration)
do
duration := a_duration
end
set_last_seen_time (a_last_seen_time: DATE_TIME)
local
time: EL_TIME_ROUTINES
do
last_seen := time.unix_date_time (a_last_seen_time)
end
set_modification_time (a_modification_time: DATE_TIME)
local
time: EL_TIME_ROUTINES
do
mtime := time.unix_date_time (a_modification_time)
end
set_track_number (a_track_number: like track_number)
do
track_number := a_track_number
end
feature {NONE} -- Implementation
node: EL_DOCUMENT_NODE_STRING
deferred
end
feature {NONE} -- Constants
Composer_set: EL_HASH_SET [ZSTRING]
once
create Result.make_equal (100)
end
end