2 * Copyright (C) 2003-2010 The Music Player Daemon Project
3 * http://www.musicpd.org
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 #include "player_control.h"
31 void stats_global_init(void)
33 stats
.timer
= g_timer_new();
36 void stats_global_finish(void)
38 g_timer_destroy(stats
.timer
);
42 struct strset
*artists
;
43 struct strset
*albums
;
47 visit_tag(struct visit_data
*data
, const struct tag
*tag
)
50 stats
.song_duration
+= tag
->time
;
52 for (unsigned i
= 0; i
< tag
->num_items
; ++i
) {
53 const struct tag_item
*item
= tag
->items
[i
];
57 strset_add(data
->artists
, item
->value
);
61 strset_add(data
->albums
, item
->value
);
71 stats_collect_song(struct song
*song
, void *_data
)
73 struct visit_data
*data
= _data
;
77 if (song
->tag
!= NULL
)
78 visit_tag(data
, song
->tag
);
83 void stats_update(void)
85 struct visit_data data
;
88 stats
.song_duration
= 0;
89 stats
.artist_count
= 0;
91 data
.artists
= strset_new();
92 data
.albums
= strset_new();
94 db_walk(NULL
, stats_collect_song
, NULL
, &data
);
96 stats
.artist_count
= strset_size(data
.artists
);
97 stats
.album_count
= strset_size(data
.albums
);
99 strset_free(data
.artists
);
100 strset_free(data
.albums
);
103 int stats_print(struct client
*client
)
105 client_printf(client
,
116 (long)g_timer_elapsed(stats
.timer
, NULL
),
117 (long)(pc_get_total_play_time() + 0.5),