#ifndef MUSIC_H #define MUSIC_H #include "http_connection.h" #include #include #include namespace fs = boost::filesystem; //! Generalized abstract class for music content. class MusicListing { public: typedef boost::shared_ptr p; fs::path path; //! Render the content for HTTP transport. virtual void render(HTTP::Connection::p req) = 0; }; //! Represents a track. class MusicTrack : public MusicListing { public: MusicTrack(const fs::path path); virtual void render(HTTP::Connection::p req); }; // Forward declaration for MusicDirectory::update() class Database; //! Represents a directory. class MusicDirectory : public MusicListing { public: typedef boost::shared_ptr p; typedef std::vector PathListings; PathListings directories; PathListings tracks; MusicDirectory(const fs::path root); virtual void render(HTTP::Connection::p req); void update(Database& db); }; namespace music { extern fs::path root_directory; void init(std::string root); MusicListing::p get(const HTTP::Connection::PathList& path); MusicListing::p get(const std::string& path); MusicDirectory::p get_directory(const std::string& path); std::vector find(std::map search); std::vector find(std::string search); void begin_update(const std::string path); }; #endif