diff options
-rw-r--r-- | commands.cpp | 7 | ||||
-rw-r--r-- | music.cpp | 11 | ||||
-rw-r--r-- | music.h | 2 |
3 files changed, 16 insertions, 4 deletions
diff --git a/commands.cpp b/commands.cpp index 2401690..f37f78c 100644 --- a/commands.cpp +++ b/commands.cpp @@ -1,7 +1,6 @@ #include "commands.h" #include "music.h" -#include <boost/cast.hpp> #include <boost/format.hpp> #include <boost/algorithm/string/join.hpp> @@ -12,12 +11,12 @@ static std::vector<std::string> ls(const std::vector<std::string>& args) { throw commands::CommandException("usage: ls DIR"); } - MusicListing::p ml = music::get(args[1]); - if(!ml || !fs::is_directory(ml->path)) { + MusicDirectory::p dir = music::get_directory(args[1]); + if(!dir) { throw commands::CommandException("no such directory"); } + std::cout << dir->path << std::endl; std::vector<std::string> result; - MusicDirectory *dir = boost::polymorphic_downcast<MusicDirectory*>(&(*ml)); for(MusicDirectory::PathListings::iterator it = dir->directories.begin(); it != dir->directories.end(); it++) { std::string rel_path = it->string().substr(music::root_directory.string().size()); result.push_back(rel_path); @@ -9,6 +9,7 @@ #include <boost/algorithm/string/predicate.hpp> #include <boost/algorithm/string/classification.hpp> #include <boost/algorithm/string/split.hpp> +#include <boost/cast.hpp> #include <boost/filesystem/fstream.hpp> #include <soci/soci.h> @@ -51,6 +52,16 @@ MusicListing::p music::get(const std::string& path) { return get(path_vector); } +MusicDirectory::p music::get_directory(const std::string& path) { + MusicListing::p ml = get(path); + if(!ml || !fs::is_directory(ml->path)) { + return MusicDirectory::p(); + } + MusicDirectory::p dir(boost::dynamic_pointer_cast<MusicDirectory>(ml)); + + return dir; +} + std::vector<MusicListing::p> music::find_artist(const std::string artist) { soci::session sql(config::vm["audist.database"].as<std::string>()); @@ -25,6 +25,7 @@ class MusicTrack : public MusicListing { class MusicDirectory : public MusicListing { public: + typedef boost::shared_ptr<MusicDirectory> p; typedef std::vector<fs::path> PathListings; PathListings directories; PathListings tracks; @@ -38,6 +39,7 @@ namespace music { void init(std::string root); MusicListing::p get(const std::vector<std::string>& path); MusicListing::p get(const std::string& path); + MusicDirectory::p get_directory(const std::string& path); std::vector<MusicListing::p> find_artist(const std::string artist); }; |