#pragma once #include "curlfuncs.h" #include "mdatetime.h" #include #include #include #include #include using michlib::Error; using michlib::MDateTime; using michlib::RetVal; class DIRRAIIDT { public: // TODO: make static void operator()(DIR* d) { closedir(d); } }; class DIRRAII: public std::unique_ptr { public: operator DIR*() const { return get(); } }; struct FileInfo { MString url; MString name; MDateTime mtime; size_t size; }; // Remove last element from path inline MString DirName(const MString& name) { auto p = name.GetPos('/', false); if(p == 0) return name; return name.SubStr(1, p - 1); } // Get last element from path inline MString FileName(const MString& name) { auto p = name.GetPos('/', false); if(p == 0) return name; return name.SubStr(p + 1, name.Len() - p); } // Check and, if necessary, create the path to the file bool MakePath(const MString& dname); // Get local file list RetVal> ReadLocalFileList(const MString& dir, const bool nofollow = true, const MString& path = ""); // Download file to the local mirror Error DownloadFile(const CURLRAII& chandle, const struct FileInfo& rinfo, const MString& root); // Remove file from the local mirror Error RemoveFile(const struct FileInfo& linfo); // Updare file in the local mirror Error UpdateFile(const CURLRAII& chandle, const struct FileInfo& rinfo, const struct FileInfo& linfo, const MString& root);