From 79effd62e14c8c524552ae578d593750b038004a Mon Sep 17 00:00:00 2001
From: Warren Dukes <warren.dukes@gmail.com>
Date: Fri, 27 Feb 2004 15:39:19 +0000
Subject: [PATCH] display db_playtime in stats

git-svn-id: https://svn.musicpd.org/mpd/trunk@98 09075e82-0dd4-0310-85a5-a0d7c8717e4f
---
 src/directory.c | 19 +++++++++++++++++++
 src/directory.h |  2 ++
 src/stats.c     |  1 +
 src/stats.h     |  1 +
 4 files changed, 23 insertions(+)

diff --git a/src/directory.c b/src/directory.c
index c933a9f0c..9f85f2683 100644
--- a/src/directory.c
+++ b/src/directory.c
@@ -477,6 +477,7 @@ int writeDirectoryDB() {
 
 	sortDirectory(mp3rootDirectory);
 	stats.numberOfSongs = countSongsIn(stderr,NULL);
+	stats.dbPlayTime = sumSongTimesIn(stderr,NULL);
 
 	while(!(fp=fopen(directorydb,"w")) && errno==EINTR);
 	if(!fp) return -1;
@@ -570,6 +571,7 @@ int readDirectoryDB() {
 	while(fclose(fp) && errno==EINTR);
 
 	stats.numberOfSongs = countSongsIn(stderr,NULL);
+	stats.dbPlayTime = sumSongTimesIn(stderr,NULL);
 
 	return 0;
 }
@@ -777,6 +779,14 @@ int directoryPrintSongInfo(FILE * fp, Song * song, void * data) {
 	return printSongInfo(fp,song);
 }
 
+int sumSongTime(FILE * fp, Song * song, void * data) {
+	unsigned long * time = (unsigned long *)data;
+
+	if(song->tag && song->tag->time>=0) *time+=song->tag->time;
+
+	return 0;
+}
+
 int printInfoForAllIn(FILE * fp, char * name) {
         return traverseAllIn(fp,name,directoryPrintSongInfo,NULL,NULL);
 }
@@ -790,6 +800,15 @@ int countSongsIn(FILE * fp, char * name) {
 	return count;
 }
 
+unsigned long sumSongTimesIn(FILE * fp, char * name) {
+	unsigned long dbPlayTime = 0;
+	void * ptr = (void *)&dbPlayTime;
+	
+        traverseAllIn(fp,name,sumSongTime,NULL,ptr);
+
+	return dbPlayTime;
+}
+
 void initMp3Directory() {
 	mp3rootDirectory = newDirectory(NULL,NULL,0);
 	exploreDirectory(mp3rootDirectory);
diff --git a/src/directory.h b/src/directory.h
index 925bb5e22..d6813d365 100644
--- a/src/directory.h
+++ b/src/directory.h
@@ -50,6 +50,8 @@ int findSongsIn(FILE * fp, char * name, char * item, char * string);
 
 int countSongsIn(FILE * fp, char * name);
 
+unsigned long sumSongTimesIn(FILE * fp, char * name);
+
 Song * getSong(char * file);
 
 time_t getDbModTime();
diff --git a/src/stats.c b/src/stats.c
index 3d018ee0b..63ca87503 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -41,6 +41,7 @@ int printStats(FILE * fp) {
 	myfprintf(fp,"songs: %i\n",stats.numberOfSongs);
 	myfprintf(fp,"uptime: %li\n",time(NULL)-stats.daemonStart);
 	myfprintf(fp,"playtime: %li\n",(long)(getPlayerTotalPlayTime()+0.5));
+	myfprintf(fp,"db_playtime: %li\n",stats.dbPlayTime);
 	/*myfprintf(fp,"songs_played: %li\n",stats.songsPlayed);*/
 	myfprintf(fp,"db_update: %li\n",getDbModTime());
 	return 0;
diff --git a/src/stats.h b/src/stats.h
index d059db014..383a8db65 100644
--- a/src/stats.h
+++ b/src/stats.h
@@ -24,6 +24,7 @@
 typedef struct _Stats {
 	unsigned long daemonStart;
 	int numberOfSongs;
+	unsigned long dbPlayTime;
 	/*unsigned long playTime;
 	unsigned long songsPlayed;*/
 } Stats;