libOggFLAC.m4: Remove libOggFLAC.m4 as it's buggy.
[mpd-mk.git] / src / stats.c
blob673d531ec20d602a55dec0663eab7ec0c869caed
1 /*
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.
20 #include "config.h"
21 #include "stats.h"
22 #include "database.h"
23 #include "tag.h"
24 #include "song.h"
25 #include "client.h"
26 #include "player_control.h"
27 #include "strset.h"
29 struct stats stats;
31 void stats_global_init(void)
33 stats.timer = g_timer_new();
36 void stats_global_finish(void)
38 g_timer_destroy(stats.timer);
41 struct visit_data {
42 struct strset *artists;
43 struct strset *albums;
46 static void
47 visit_tag(struct visit_data *data, const struct tag *tag)
49 if (tag->time > 0)
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];
55 switch (item->type) {
56 case TAG_ARTIST:
57 strset_add(data->artists, item->value);
58 break;
60 case TAG_ALBUM:
61 strset_add(data->albums, item->value);
62 break;
64 default:
65 break;
70 static int
71 stats_collect_song(struct song *song, void *_data)
73 struct visit_data *data = _data;
75 ++stats.song_count;
77 if (song->tag != NULL)
78 visit_tag(data, song->tag);
80 return 0;
83 void stats_update(void)
85 struct visit_data data;
87 stats.song_count = 0;
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,
106 "artists: %u\n"
107 "albums: %u\n"
108 "songs: %i\n"
109 "uptime: %li\n"
110 "playtime: %li\n"
111 "db_playtime: %li\n"
112 "db_update: %li\n",
113 stats.artist_count,
114 stats.album_count,
115 stats.song_count,
116 (long)g_timer_elapsed(stats.timer, NULL),
117 (long)(pc_get_total_play_time() + 0.5),
118 stats.song_duration,
119 db_get_mtime());
120 return 0;