filesystem support works in c++11, but needs another lib linked. Add some namespacing to make easier to transition to official filesystem lib release. Move static var in wrong place. Add first method ot handle scanning.

This commit is contained in:
Kevin Whitaker
2017-01-30 00:22:03 -05:00
parent f291b65a47
commit 50f30d494f
3 changed files with 33 additions and 4 deletions

View File

@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.1)
project(arbitrateor) project(arbitrateor)
set(CMAKE_CXX_STANDARD 11) #Change to 17 when possible for filesystem support set(CMAKE_CXX_STANDARD 11) #Change to 17 when possible for filesystem support
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++1z") #Until then, force c++17 where we can.
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
@@ -10,6 +9,6 @@ find_package(Wt REQUIRED)
find_package(Groove REQUIRED) find_package(Groove REQUIRED)
add_executable(arbitrateor src/main.cpp src/WebInterface.cpp src/GroovePlayer.cpp src/ui/LoginInterface.cpp src/ui/PlayerInterface.cpp) add_executable(arbitrateor src/main.cpp src/WebInterface.cpp src/GroovePlayer.cpp src/ui/LoginInterface.cpp src/ui/PlayerInterface.cpp)
target_link_libraries(arbitrateor ${Wt_LIBRARIES} ${GROOVE_LIBRARY} pthread) #TODO get threading links based on platform. target_link_libraries(arbitrateor ${Wt_LIBRARIES} ${GROOVE_LIBRARY} pthread stdc++fs) #TODO get threading links based on platform. Remove gcc experimental fs when official c++17 exists.
install(TARGETS arbitrateor RUNTIME DESTINATION bin) install(TARGETS arbitrateor RUNTIME DESTINATION bin)

View File

@@ -23,7 +23,10 @@
#include <Wt/WServer> #include <Wt/WServer>
#include <Wt/WApplication> #include <Wt/WApplication>
#include "WebInterface.h" #include "WebInterface.h"
#include <experimental/filesystem> //TODO:Change to non-gcc way when officially using c++17 #include <locale>
#include <Wt/WLogger>
std::filesystem::path GroovePlayer::musicScanDir = "";
GroovePlayer::GroovePlayer(std::string dbFile) : sqliteConnection(dbFile) GroovePlayer::GroovePlayer(std::string dbFile) : sqliteConnection(dbFile)
{ {
@@ -53,9 +56,29 @@ void GroovePlayer::grooveEventLoop()
//TODO //TODO
} }
bool GroovePlayer::addFileToTrackDBIfTagged(std::filesystem::path file)
{
//Now check if tags exist and put into DB.
}
void GroovePlayer::grooveAudioScannerLoop() void GroovePlayer::grooveAudioScannerLoop()
{ {
//TODO for(std::filesystem::directory_entry p: std::filesystem::directory_iterator(musicScanDir))
{
std::string extensionLowered;
for(auto elem : p.path().extension().string())
{
extensionLowered.push_back(std::tolower(elem));
}
if(extensionLowered == "mp3") //TODO:think about supporting more than mp3s.
{
if(addFileToTrackDBIfTagged(p.path()))
{
Wt::log("info") << p.path().string() << " was added to DB";
}
}
}
} }

View File

@@ -26,12 +26,18 @@
#include <thread> #include <thread>
#include "db/User.h" #include "db/User.h"
#include "db/AudioTrack.h" #include "db/AudioTrack.h"
#include <experimental/filesystem> //TODO:Change to non-gcc way when officially using c++17
namespace std {
namespace filesystem = experimental::filesystem;
}
class GroovePlayer class GroovePlayer
{ {
public: public:
static std::filesystem::path musicScanDir;
static GroovePlayer* getInstance() { static GroovePlayer* getInstance() {
static GroovePlayer instance("music.db"); static GroovePlayer instance("music.db");
musicScanDir = std::filesystem::current_path().string()+"/music";
return &instance; return &instance;
}; };
GroovePlayer(GroovePlayer const&) = delete; GroovePlayer(GroovePlayer const&) = delete;
@@ -47,6 +53,7 @@ private:
std::vector<AudioTrack*> getNextVoteBatch(); std::vector<AudioTrack*> getNextVoteBatch();
std::thread* grooveAudioScanner; std::thread* grooveAudioScanner;
static void grooveAudioScannerLoop(); static void grooveAudioScannerLoop();
static bool addFileToTrackDBIfTagged(std::filesystem::path file);
}; };