/* * Copyright (C) 2014 Emeric Poupon * * This file is part of LMS. * * LMS 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 3 of the License, or * (at your option) any later version. * * LMS 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 LMS. If not, see . */ #include "Playlist.hpp" #include #include "User.hpp" #include "Track.hpp" namespace Database { Playlist::Playlist() : _isPublic(false) { } Playlist::Playlist(std::string name, bool isPublic, Wt::Dbo::ptr user) : _name(name), _isPublic(isPublic), _user(user) { } Playlist::pointer Playlist::create(Wt::Dbo::Session& session, std::string name, bool isPublic, Wt::Dbo::ptr user) { return session.add( std::make_unique(name, isPublic, user) ); } PlaylistEntry::PlaylistEntry() { } PlaylistEntry::pointer PlaylistEntry::getById(Wt::Dbo::Session& session, PlaylistEntry::id_type id) { return session.find().where("id = ?").bind(id); } Playlist::pointer Playlist::get(Wt::Dbo::Session& session, std::string name, Wt::Dbo::ptr user) { return session.find().where("name = ? AND user_id = ?").bind(name).bind(user.id()); } std::vector Playlist::getAll(Wt::Dbo::Session& session, Wt::Dbo::ptr user) { Wt::Dbo::collection res = session.find().where("user_id = ?").bind(user.id()).orderBy("name"); return std::vector(res.begin(), res.end()); } PlaylistEntry::PlaylistEntry(Wt::Dbo::ptr track, Wt::Dbo::ptr playlist) : _track(track), _playlist(playlist) { } PlaylistEntry::pointer PlaylistEntry::create(Wt::Dbo::Session& session, Wt::Dbo::ptr track, Wt::Dbo::ptr playlist) { return session.add( std::make_unique( track, playlist) ); } std::vector> Playlist::getEntries(int offset, int size, bool& moreResults) const { assert(session()); moreResults = false; Wt::Dbo::collection> entries = session()->find() .where("playlist_id = ?").bind(self().id()) .orderBy("id") .limit(size != -1 ? size + 1 : -1) .offset(offset); std::vector> res; for (auto entry : entries) { if (size != -1 && res.size() == static_cast(size)) { moreResults = true; break; } res.push_back(entry); } return res; } Wt::Dbo::ptr Playlist::getEntry(std::size_t pos) const { Wt::Dbo::ptr res; bool moreResults; auto entries = getEntries(pos, 1, moreResults); if (!entries.empty()) res = entries.front(); return res; } std::size_t Playlist::getCount() const { return _entries.size(); } } // namespace Database