3#include "DatabaseIdentifiers.hpp"
9#include <boost/asio.hpp>
10#include <boost/asio/ip/address.hpp>
11#include <boost/asio/read_until.hpp>
12#include <boost/system/system_error.hpp>
17#include <unordered_map>
22namespace fs = std::filesystem;
24#define PARENT_DIR_NAME ".."
26const std::string TYPE_LOCAL =
"LOCAL";
27const std::string TYPE_YANDEX =
"YANDEX";
28const std::string TYPE_APPLICATION =
"APPLICATION";
29const std::string TYPE_UNKNOWN =
"UNKNOWN";
32using File_Ptr = std::shared_ptr<File>;
35using Client_Ptr = std::shared_ptr<Client>;
37bool IsFileHasMusicExtension(
const std::string& filename);
60 File(
Client& client,
const std::string& name, fs::path path,
61 const std::string& location_id, File::Type type,
int playlistId = -1);
63 virtual void NewFile(File_Ptr newFile);
66 bool noDirs =
false,
bool onlyMusicExtensions =
false,
bool recursively =
false);
67 virtual std::pair<std::string, std::string> GetSongData();
68 virtual std::string GetFromType()
const;
82class FsFile :
public File
85 FsFile(
Client& client,
const std::string& name, fs::path path,
86 const std::string& location_id, File::Type type);
88 static File_Ptr InitFile(
Client& client);
89 virtual std::string GetFromType()
const override;
92class YaFile :
public File
95 YaFile(
Client& client,
const std::string& name, fs::path path,
96 const std::string& location_id, File::Type type);
98 static File_Ptr InitFile(
Client& client);
99 virtual std::string GetFromType()
const override;
102class AppFile :
public File
112 AppFile(
Client& client,
const std::string& name, fs::path path,
113 const std::string& location_id, File::Type type,
int playlistID = -1);
115 static File_Ptr InitFile(
Client& client);
116 virtual std::string GetFromType()
const override;
118 static File_Ptr ConvertFromDBTrack(
DBTrack track);
119 static File_Ptr ConvertFromDBPlaylist(
DBPlaylist playlist);
136 virtual void NewFile(
File* oldFile, File_Ptr newFile) = 0;
148 virtual std::vector<File_Ptr> GetDirFiles(
File* file,
bool noDirs =
false,
149 bool onlyMusicExtensions =
false,
150 bool recursively =
false) = 0;
151 virtual std::pair<std::string, std::string> GetSongData(
File* file) = 0;
161 FSClient() =
default;
164 FSClient(
const FSClient&) =
delete;
165 void operator=(
const FSClient&) =
delete;
167 static FSClient& Instance();
170 virtual void NewFile(
File* oldFile, File_Ptr newFile)
override;
172 virtual std::vector<File_Ptr> GetDirFiles(
File* file,
bool noDirs =
false,
173 bool onlyMusicExtensions =
false,
174 bool recursively =
false)
override;
175 virtual std::pair<std::string, std::string> GetSongData(
176 File* file)
override;
182 static std::unordered_map<std::string, std::string> folderCache;
188 YandexClient(
const YandexClient&) =
delete;
189 void operator=(
const YandexClient&) =
delete;
191 static YandexClient& Instance();
194 virtual void NewFile(
File* oldFile, File_Ptr newFile)
override;
196 virtual std::vector<File_Ptr> GetDirFiles(
File* file,
bool noDirs =
false,
197 bool onlyMusicExtensions =
false,
198 bool recursively =
false)
override;
199 virtual std::pair<std::string, std::string> GetSongData(
200 File* file)
override;
206 bool mIsConnectionEstablished;
208 asio::ip::tcp::endpoint ep;
209 asio::io_service ios;
210 asio::ip::tcp::socket sock;
219 AppClient(
const FSClient&) =
delete;
220 void operator=(
const AppClient&) =
delete;
222 static AppClient& Instance();
225 virtual void NewFile(
File* oldFile, File_Ptr newFile)
override;
227 virtual std::vector<File_Ptr> GetDirFiles(
File* file,
bool noDirs =
false,
228 bool onlyMusicExtensions =
false,
229 bool recursively =
false)
override;
230 virtual std::pair<std::string, std::string> GetSongData(
231 File* file)
override;
The Client class - abstract class for FSClient, YandexClient, AppClient. Designed to work with File d...
Definition FileManager.hpp:133
Definition FileManager.hpp:159
The File class - Abstract class for FsFile, YaFile and AppFile.
Definition FileManager.hpp:50
virtual std::vector< File_Ptr > GetDirFiles(bool noDirs=false, bool onlyMusicExtensions=false, bool recursively=false)
File::GetDirFiles - get files in current directory/folder. Will be processed by it's specific client.
Definition FileManager.cpp:67
virtual void NewFile(File_Ptr newFile)
File::NewFile - substitute current file with a new file. Used to navigate between directories/folders...
Definition FileManager.cpp:54
Definition FileManager.hpp:180
DataBasePlaylist - playlist representation in database.
Definition PlaylistDao.hpp:11
The DataBaseTrack - track representation in Database.
Definition TrackDao.hpp:11