aboutsummaryrefslogtreecommitdiffstats
path: root/src/dbUtils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbUtils.c')
-rw-r--r--src/dbUtils.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/dbUtils.c b/src/dbUtils.c
index 370a38dd6..756431650 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -38,6 +38,12 @@ typedef struct _LocateTagItemArray {
LocateTagItem *items;
} LocateTagItemArray;
+typedef struct _SearchStats {
+ LocateTagItemArray locateArray;
+ int numberOfSongs;
+ int playTime;
+} SearchStats;
+
static int countSongsInDirectory(int fd, Directory * directory, void *data)
{
int *count = (int *)data;
@@ -120,6 +126,44 @@ int findSongsIn(int fd, char *name, int numItems, LocateTagItem * items)
return traverseAllIn(fd, name, findInDirectory, NULL, (void *)&array);
}
+static void printSearchStats(int fd, SearchStats *stats)
+{
+ fdprintf(fd, "songs: %i\n", stats->numberOfSongs);
+ fdprintf(fd, "playtime: %i\n", stats->playTime);
+}
+
+static int searchStatsInDirectory(int fd, Song * song, void *data)
+{
+ SearchStats *stats = data;
+
+ if (tagItemsFoundAndMatches(song, stats->locateArray.numItems,
+ stats->locateArray.items)) {
+ stats->numberOfSongs++;
+ if (song->tag->time > 0)
+ stats->playTime += song->tag->time;
+ }
+
+ return 0;
+}
+
+int searchStatsForSongsIn(int fd, char *name, int numItems,
+ LocateTagItem * items)
+{
+ SearchStats stats;
+ int ret;
+
+ stats.locateArray.numItems = numItems;
+ stats.locateArray.items = items;
+ stats.numberOfSongs = 0;
+ stats.playTime = 0;
+
+ ret = traverseAllIn(fd, name, searchStatsInDirectory, NULL, &stats);
+ if (ret == 0)
+ printSearchStats(fd, &stats);
+
+ return ret;
+}
+
int printAllIn(int fd, char *name)
{
return traverseAllIn(fd, name, printSongInDirectory,