[DEV] add factore to file to permit to have virtual file
This commit is contained in:
parent
a02d121421
commit
be0d3a6d23
@ -28,6 +28,20 @@ ememory::SharedPtr<zeus::File> zeus::File::create(etk::String _fileNameReal, etk
|
|||||||
return ememory::makeShared<zeus::FileImpl>(_fileNameReal, _fileNameShow, _mineType, _sha512);
|
return ememory::makeShared<zeus::FileImpl>(_fileNameReal, _fileNameShow, _mineType, _sha512);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ememory::SharedPtr<zeus::File> zeus::File::create(etk::Vector<uint8_t> _fileNameReal, etk::String _virtualName, etk::String _mineType) {
|
||||||
|
return ememory::makeShared<zeus::FileImpl>(_fileNameReal, _virtualName, _mineType);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
zeus::FileImpl::FileImpl(const etk::Vector<uint8_t>& _value, etk::String _virtualName, etk::String _mineType) :
|
||||||
|
m_filename(_virtualName),
|
||||||
|
m_gettedData(0),
|
||||||
|
m_mineType(_mineType),
|
||||||
|
m_sha512("") {
|
||||||
|
m_dataRaw = true;
|
||||||
|
m_data = _value;
|
||||||
|
m_size = m_data.size();
|
||||||
|
}
|
||||||
zeus::FileImpl::FileImpl(etk::String _fileNameReal, etk::String _sha512) :
|
zeus::FileImpl::FileImpl(etk::String _fileNameReal, etk::String _sha512) :
|
||||||
m_filename(_fileNameReal),
|
m_filename(_fileNameReal),
|
||||||
m_node(_fileNameReal),
|
m_node(_fileNameReal),
|
||||||
@ -80,7 +94,11 @@ etk::String zeus::FileImpl::getName() {
|
|||||||
etk::String zeus::FileImpl::getSha512() {
|
etk::String zeus::FileImpl::getSha512() {
|
||||||
if (m_sha512 == "") {
|
if (m_sha512 == "") {
|
||||||
ZEUS_INFO("calculation of sha 512 (start)");
|
ZEUS_INFO("calculation of sha 512 (start)");
|
||||||
m_sha512 = algue::stringConvert(algue::sha512::encodeFromFile(m_node.getFileSystemName()));
|
if (m_dataRaw == false) {
|
||||||
|
m_sha512 = algue::stringConvert(algue::sha512::encodeFromFile(m_node.getFileSystemName()));
|
||||||
|
} else {
|
||||||
|
m_sha512 = algue::stringConvert(algue::sha512::encode(m_data));
|
||||||
|
}
|
||||||
ZEUS_INFO("calculation of sha 512 (stop)");
|
ZEUS_INFO("calculation of sha 512 (stop)");
|
||||||
}
|
}
|
||||||
return m_sha512;
|
return m_sha512;
|
||||||
@ -99,24 +117,33 @@ zeus::Raw zeus::FileImpl::getPart(uint64_t _start, uint64_t _stop) {
|
|||||||
if (_start >= m_size) {
|
if (_start >= m_size) {
|
||||||
throw etk::exception::InvalidArgument("REQUEST start position out of file size" + etk::toString(_start) + " > " + etk::toString(m_size));
|
throw etk::exception::InvalidArgument("REQUEST start position out of file size" + etk::toString(_start) + " > " + etk::toString(m_size));
|
||||||
}
|
}
|
||||||
if (m_node.fileIsOpen() == false) {
|
if (m_dataRaw == false) {
|
||||||
m_node.fileOpenRead();
|
if (m_node.fileIsOpen() == false) {
|
||||||
|
m_node.fileOpenRead();
|
||||||
|
}
|
||||||
|
m_gettedData += (_stop - _start);
|
||||||
|
//ZEUS_PRINT("Reading file : " << m_gettedData << "/" << m_size << " ==> " << float(m_gettedData)/float(m_size)*100.0f << "%");
|
||||||
|
printf("Reading file : %d/%d ==> %f \r", int(m_gettedData), int(m_size), float(m_gettedData)/float(m_size)*100.0f);
|
||||||
|
zeus::Raw tmp(_stop - _start);
|
||||||
|
if (m_node.fileSeek(_start, etk::seekNode_start) == false) {
|
||||||
|
ZEUS_ERROR("REQUEST seek error ...");
|
||||||
|
throw etk::exception::RuntimeError("Seek in the file error");
|
||||||
|
return zeus::Raw();
|
||||||
|
}
|
||||||
|
int64_t sizeCopy = m_node.fileRead(tmp.writeData(), 1, _stop-_start);
|
||||||
|
if (m_size <= _stop) {
|
||||||
|
m_node.fileClose();
|
||||||
|
}
|
||||||
|
// TODO : Check if copy is correct ...
|
||||||
|
return etk::move(tmp);
|
||||||
|
} else {
|
||||||
|
m_gettedData += (_stop - _start);
|
||||||
|
//ZEUS_PRINT("Reading file : " << m_gettedData << "/" << m_size << " ==> " << float(m_gettedData)/float(m_size)*100.0f << "%");
|
||||||
|
printf("Reading file : %d/%d ==> %f \r", int(m_gettedData), int(m_size), float(m_gettedData)/float(m_size)*100.0f);
|
||||||
|
zeus::Raw tmp(_stop - _start);
|
||||||
|
memcpy(tmp.writeData(), &m_data[_start], _stop-_start);
|
||||||
|
return etk::move(tmp);
|
||||||
}
|
}
|
||||||
m_gettedData += (_stop - _start);
|
|
||||||
//ZEUS_PRINT("Reading file : " << m_gettedData << "/" << m_size << " ==> " << float(m_gettedData)/float(m_size)*100.0f << "%");
|
|
||||||
printf("Reading file : %d/%d ==> %f \r", int(m_gettedData), int(m_size), float(m_gettedData)/float(m_size)*100.0f);
|
|
||||||
zeus::Raw tmp(_stop - _start);
|
|
||||||
if (m_node.fileSeek(_start, etk::seekNode_start) == false) {
|
|
||||||
ZEUS_ERROR("REQUEST seek error ...");
|
|
||||||
throw etk::exception::RuntimeError("Seek in the file error");
|
|
||||||
return zeus::Raw();
|
|
||||||
}
|
|
||||||
int64_t sizeCopy = m_node.fileRead(tmp.writeData(), 1, _stop-_start);
|
|
||||||
if (m_size <= _stop) {
|
|
||||||
m_node.fileClose();
|
|
||||||
}
|
|
||||||
// TODO : Check if copy is correct ...
|
|
||||||
return etk::move(tmp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
etk::String zeus::storeInFile(zeus::ProxyFile _file, etk::String _filename) {
|
etk::String zeus::storeInFile(zeus::ProxyFile _file, etk::String _filename) {
|
||||||
|
@ -13,6 +13,8 @@ namespace zeus {
|
|||||||
private:
|
private:
|
||||||
etk::String m_filename; //!< Name of the file
|
etk::String m_filename; //!< Name of the file
|
||||||
etk::FSNode m_node; //!< File node access
|
etk::FSNode m_node; //!< File node access
|
||||||
|
etk::Vector<uint8_t> m_data; //!< data of the file to transfer;
|
||||||
|
bool m_dataRaw = false;
|
||||||
size_t m_size; //!< Size of the file
|
size_t m_size; //!< Size of the file
|
||||||
size_t m_gettedData; //!< Number of byte loaded by the remote client
|
size_t m_gettedData; //!< Number of byte loaded by the remote client
|
||||||
etk::String m_mineType; //!< Mine Type of the file
|
etk::String m_mineType; //!< Mine Type of the file
|
||||||
@ -20,6 +22,7 @@ namespace zeus {
|
|||||||
public:
|
public:
|
||||||
FileImpl(etk::String _fileNameReal, etk::String _fileNameShow, etk::String _mineType, etk::String _sha512="");
|
FileImpl(etk::String _fileNameReal, etk::String _fileNameShow, etk::String _mineType, etk::String _sha512="");
|
||||||
FileImpl(etk::String _fileNameReal, etk::String _sha512="");
|
FileImpl(etk::String _fileNameReal, etk::String _sha512="");
|
||||||
|
FileImpl(const etk::Vector<uint8_t>& _value, etk::String _virtualName, etk::String _mineType);
|
||||||
~FileImpl();
|
~FileImpl();
|
||||||
uint64_t getSize() override;
|
uint64_t getSize() override;
|
||||||
etk::String getName() override;
|
etk::String getName() override;
|
||||||
|
@ -25,6 +25,11 @@
|
|||||||
#param:mineType:Mine-type of the file.
|
#param:mineType:Mine-type of the file.
|
||||||
#param:sha512: Sha-512 string if the file
|
#param:sha512: Sha-512 string if the file
|
||||||
[factory] create(string, string, string, string)
|
[factory] create(string, string, string, string)
|
||||||
|
#brief:Factory to create a local object with a buffer with data like a file.
|
||||||
|
#param:buffer:Data bueffer of the data.
|
||||||
|
#param:virtualName:Virtual name of the file.
|
||||||
|
#param:mineType:Mine-type of the file.
|
||||||
|
[factory] create(vector:uint8, string, string)
|
||||||
|
|
||||||
// --------------------------
|
// --------------------------
|
||||||
// -- Members --
|
// -- Members --
|
||||||
|
Loading…
x
Reference in New Issue
Block a user