bool copySourceFile(const FilePath& sourceDir, const FilePath& destDir, int level, const FilePath& sourceFilePath) { // compute the target path std::string relativePath = sourceFilePath.relativePath(sourceDir); FilePath targetPath = destDir.complete(relativePath); // if the copy item is a directory just create it if (sourceFilePath.isDirectory()) { Error error = targetPath.ensureDirectory(); if (error) LOG_ERROR(error); } // otherwise copy it else { Error error = sourceFilePath.copy(targetPath); if (error) LOG_ERROR(error); } return true; }
// IN: String sourcePath, String targetPath Error copyFile(const ::core::json::JsonRpcRequest& request, json::JsonRpcResponse* pResponse) { // read params std::string sourcePath, targetPath; bool overwrite; Error error = json::readParams(request.params, &sourcePath, &targetPath, &overwrite); if (error) return error; FilePath targetFilePath = module_context::resolveAliasedPath(targetPath); // make sure the target path doesn't exist if (targetFilePath.exists()) { if (overwrite) { Error error = targetFilePath.remove(); if (error) { LOG_ERROR(error); return fileExistsError(ERROR_LOCATION); } } else { return fileExistsError(ERROR_LOCATION); } } // compute the source file path FilePath sourceFilePath = module_context::resolveAliasedPath(sourcePath); // copy directories recursively Error copyError ; if (sourceFilePath.isDirectory()) { // create the target directory Error error = targetFilePath.ensureDirectory(); if (error) return error ; // iterate over the source copyError = sourceFilePath.childrenRecursive( boost::bind(copySourceFile, sourceFilePath, targetFilePath, _1, _2)); } else { copyError = sourceFilePath.copy(targetFilePath); } // check quota after copies quotas::checkQuotaStatus(); // return error status return copyError; }
std::string provision(const std::string& title, const FilePath& filePath) { // calculate content path std::string contentFile = core::system::generateUuid(false) + filePath.extension(); FilePath contentPath = contentUrlPath().complete(contentFile); // copy the file Error error = filePath.copy(contentPath); if (error) LOG_ERROR(error); // calculate and return content url return buildContentUrl(title, contentFile); }
Error HunspellCustomDictionaries::add(const FilePath& dicPath) const { // validate .dic extension if (!dicPath.hasExtensionLowerCase(".dic")) { return systemError(boost::system::errc::invalid_argument, ERROR_LOCATION); } // remove existing with same name std::string name = dicPath.stem(); Error error = remove(name); if (error) LOG_ERROR(error); // add it return dicPath.copy(dictionaryPath(name)); }