From 9d34fc394ce30a28ec0e43f2ad7172b8de8b3be6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 24 Jan 2014 16:18:50 +0100 Subject: Database*: move to db/ --- src/DatabaseHelpers.cxx | 131 ------------------------------------------------ 1 file changed, 131 deletions(-) delete mode 100644 src/DatabaseHelpers.cxx (limited to 'src/DatabaseHelpers.cxx') diff --git a/src/DatabaseHelpers.cxx b/src/DatabaseHelpers.cxx deleted file mode 100644 index 58e7aaa3b..000000000 --- a/src/DatabaseHelpers.cxx +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2003-2014 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "DatabaseHelpers.hxx" -#include "DatabasePlugin.hxx" -#include "LightSong.hxx" -#include "tag/Tag.hxx" - -#include -#include - -#include - -struct StringLess { - gcc_pure - bool operator()(const char *a, const char *b) const { - return strcmp(a, b) < 0; - } -}; - -typedef std::set StringSet; - -static bool -CollectTags(StringSet &set, TagType tag_type, const LightSong &song) -{ - const Tag *tag = song.tag; - - bool found = false; - for (unsigned i = 0; i < tag->num_items; ++i) { - if (tag->items[i]->type == tag_type) { - set.insert(tag->items[i]->value); - found = true; - } - } - - if (!found) - set.insert(""); - - return true; -} - -bool -VisitUniqueTags(const Database &db, const DatabaseSelection &selection, - TagType tag_type, - VisitString visit_string, - Error &error) -{ - StringSet set; - - using namespace std::placeholders; - const auto f = std::bind(CollectTags, std::ref(set), tag_type, _1); - if (!db.Visit(selection, f, error)) - return false; - - for (auto value : set) - if (!visit_string(value, error)) - return false; - - return true; -} - -static void -StatsVisitTag(DatabaseStats &stats, StringSet &artists, StringSet &albums, - const Tag &tag) -{ - if (tag.time > 0) - stats.total_duration += tag.time; - - for (unsigned i = 0; i < tag.num_items; ++i) { - const TagItem &item = *tag.items[i]; - - switch (item.type) { - case TAG_ARTIST: - artists.insert(item.value); - break; - - case TAG_ALBUM: - albums.insert(item.value); - break; - - default: - break; - } - } -} - -static bool -StatsVisitSong(DatabaseStats &stats, StringSet &artists, StringSet &albums, - const LightSong &song) -{ - ++stats.song_count; - - StatsVisitTag(stats, artists, albums, *song.tag); - - return true; -} - -bool -GetStats(const Database &db, const DatabaseSelection &selection, - DatabaseStats &stats, Error &error) -{ - stats.Clear(); - - StringSet artists, albums; - using namespace std::placeholders; - const auto f = std::bind(StatsVisitSong, - std::ref(stats), std::ref(artists), - std::ref(albums), _1); - if (!db.Visit(selection, f, error)) - return false; - - stats.artist_count = artists.size(); - stats.album_count = albums.size(); - return true; -} -- cgit v1.2.3