[DEV] add capacity on the File system node to get all file with subFolders
This commit is contained in:
parent
381dad6f1a
commit
c35e883279
@ -525,7 +525,7 @@ etk::Vector<uniChar_t> etk::UString::GetVector(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool etk::UString::StartWith(const etk::UString& data)
|
bool etk::UString::StartWith(const etk::UString& data, bool caseSensitive) const
|
||||||
{
|
{
|
||||||
if (data.Size() == 0) {
|
if (data.Size() == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -533,16 +533,34 @@ bool etk::UString::StartWith(const etk::UString& data)
|
|||||||
if (data.Size() > Size()) {
|
if (data.Size() > Size()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (int32_t iii=0; iii<data.Size(); iii++) {
|
if (true == caseSensitive) {
|
||||||
if (data[iii] != m_data[iii]) {
|
for (int32_t iii=0; iii<data.Size(); iii++) {
|
||||||
return false;
|
if (data[iii] != m_data[iii]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int32_t iii=0; iii<data.Size(); iii++) {
|
||||||
|
if (data[iii] != m_data[iii]) {
|
||||||
|
uniChar_t in1 = data[iii];
|
||||||
|
uniChar_t in2 = m_data[iii];
|
||||||
|
if (in1 <= (uniChar_t)'Z' && in1 >= (uniChar_t)'A') {
|
||||||
|
in1 = in1 + (uniChar_t)'a' - (uniChar_t)'A';
|
||||||
|
}
|
||||||
|
if (in2 <= 'Z' && in2 >= 'A') {
|
||||||
|
in2 = in2 + (uniChar_t)'a' - (uniChar_t)'A';
|
||||||
|
}
|
||||||
|
if (in1 != in2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool etk::UString::EndWith(const etk::UString& data)
|
bool etk::UString::EndWith(const etk::UString& data, bool caseSensitive) const
|
||||||
{
|
{
|
||||||
if (data.Size() == 0) {
|
if (data.Size() == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -550,11 +568,31 @@ bool etk::UString::EndWith(const etk::UString& data)
|
|||||||
if (data.Size() > Size()) {
|
if (data.Size() > Size()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for( int32_t iii=Size()-1, jjj=data.Size()-1;
|
if (true == caseSensitive) {
|
||||||
iii>=0 && jjj>=0;
|
for( int32_t iii=Size()-1, jjj=data.Size()-1;
|
||||||
iii--, jjj--) {
|
iii>=0 && jjj>=0;
|
||||||
if (data[jjj] != m_data[iii]) {
|
iii--, jjj--) {
|
||||||
return false;
|
if (data[jjj] != m_data[iii]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for( int32_t iii=Size()-1, jjj=data.Size()-1;
|
||||||
|
iii>=0 && jjj>=0;
|
||||||
|
iii--, jjj--) {
|
||||||
|
if (data[jjj] != m_data[iii]) {
|
||||||
|
uniChar_t in1 = data[jjj];
|
||||||
|
uniChar_t in2 = m_data[iii];
|
||||||
|
if (in1 <= (uniChar_t)'Z' && in1 >= (uniChar_t)'A') {
|
||||||
|
in1 = in1 + (uniChar_t)'a' - (uniChar_t)'A';
|
||||||
|
}
|
||||||
|
if (in2 <= 'Z' && in2 >= 'A') {
|
||||||
|
in2 = in2 + (uniChar_t)'a' - (uniChar_t)'A';
|
||||||
|
}
|
||||||
|
if (in1 != in2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -95,9 +95,9 @@ namespace etk
|
|||||||
* toolbox
|
* toolbox
|
||||||
*****************************************************/
|
*****************************************************/
|
||||||
// Start With ...
|
// Start With ...
|
||||||
bool StartWith(const etk::UString& data);
|
bool StartWith(const etk::UString& data, bool caseSensitive=true) const ;
|
||||||
// End With ...
|
// End With ...
|
||||||
bool EndWith(const etk::UString& data);
|
bool EndWith(const etk::UString& data, bool caseSensitive=true) const ;
|
||||||
// Find element
|
// Find element
|
||||||
int32_t FindForward(const char data, int32_t startPos=0) const;
|
int32_t FindForward(const char data, int32_t startPos=0) const;
|
||||||
int32_t FindForward(const uniChar_t data, int32_t startPos=0) const;
|
int32_t FindForward(const uniChar_t data, int32_t startPos=0) const;
|
||||||
|
@ -585,8 +585,9 @@ void etk::FSNode::GenerateFileSystemPath(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
m_systemFileName += m_userFileName;
|
m_systemFileName += m_userFileName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// now we get all the right if the file existed:
|
// now we get all the right if the file existed:
|
||||||
void etk::FSNode::UpdateFileSystemProperty(void)
|
void etk::FSNode::UpdateFileSystemProperty(void)
|
||||||
{
|
{
|
||||||
@ -740,6 +741,27 @@ etk::UString etk::FSNode::GetNameFile(void) const
|
|||||||
etk::UString etk::FSNode::GetRelativeFolder(void) const
|
etk::UString etk::FSNode::GetRelativeFolder(void) const
|
||||||
{
|
{
|
||||||
etk::UString tmppp = GetName();
|
etk::UString tmppp = GetName();
|
||||||
|
switch (m_typeNode)
|
||||||
|
{
|
||||||
|
case etk::FSN_UNKNOW:
|
||||||
|
case etk::FSN_FOLDER:
|
||||||
|
case etk::FSN_LINK:
|
||||||
|
if (tmppp.EndWith("/") == true) {
|
||||||
|
return tmppp;
|
||||||
|
} else {
|
||||||
|
etk::UString tmpVal = tmppp;
|
||||||
|
tmpVal += "/";
|
||||||
|
return tmpVal;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case etk::FSN_BLOCK:
|
||||||
|
case etk::FSN_CHARACTER:
|
||||||
|
case etk::FSN_FIFO:
|
||||||
|
case etk::FSN_FILE:
|
||||||
|
case etk::FSN_SOCKET:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
int32_t lastPos = tmppp.FindBack('/');
|
int32_t lastPos = tmppp.FindBack('/');
|
||||||
if (-1 != lastPos) {
|
if (-1 != lastPos) {
|
||||||
return tmppp.Extract(0, lastPos+1);
|
return tmppp.Extract(0, lastPos+1);
|
||||||
@ -986,6 +1008,67 @@ etk::FSNode etk::FSNode::FolderGetParent(void)
|
|||||||
return tmpp;
|
return tmpp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void etk::FSNode::FolderGetRecursiveFiles(etk::Vector<etk::UString>& output)
|
||||||
|
{
|
||||||
|
#ifdef __TARGET_OS__Android
|
||||||
|
if( m_type == etk::FSN_TYPE_DATA
|
||||||
|
|| m_type == etk::FSN_TYPE_THEME_DATA) {
|
||||||
|
etk::UString FolderName = GetNameFolder();
|
||||||
|
for (int iii=0; iii<s_APKnbFiles; iii++) {
|
||||||
|
etk::UString filename = zip_get_name(s_APKArchive, iii, 0);
|
||||||
|
if (filename.StartWith(FolderName) == true) {
|
||||||
|
etk::UString tmpString;
|
||||||
|
if(m_type == etk::FSN_TYPE_DATA) {
|
||||||
|
tmpString = "DATA:";
|
||||||
|
} else {
|
||||||
|
tmpString = "THEME:";
|
||||||
|
}
|
||||||
|
tmpString += filename;
|
||||||
|
output.PushBack(tmpString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// regenerate the next list :
|
||||||
|
etk::FSNode * tmpEmement;
|
||||||
|
DIR *dir = NULL;
|
||||||
|
struct dirent *ent = NULL;
|
||||||
|
dir = opendir(m_systemFileName.c_str());
|
||||||
|
//TK_DEBUG(" ** open Folder : " << m_systemFileName );
|
||||||
|
if (dir != NULL) {
|
||||||
|
// for each element in the drectory...
|
||||||
|
while ((ent = readdir(dir)) != NULL) {
|
||||||
|
etk::UString tmpName(ent->d_name);
|
||||||
|
if( tmpName=="."
|
||||||
|
|| tmpName==".." ) {
|
||||||
|
// do nothing ...
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//TK_DEBUG(" find : " << ent->d_name << " ==> " << (GetRelativeFolder()+tmpName));
|
||||||
|
tmpEmement = new etk::FSNode(GetRelativeFolder()+tmpName);
|
||||||
|
if (NULL != tmpEmement) {
|
||||||
|
if(tmpEmement->GetNodeType() == etk::FSN_FILE) {
|
||||||
|
etk::UString tmpVal = tmpEmement->GetName();
|
||||||
|
output.PushBack(tmpVal);
|
||||||
|
}
|
||||||
|
if(tmpEmement->GetNodeType() == etk::FSN_FOLDER) {
|
||||||
|
tmpEmement->FolderGetRecursiveFiles(output);
|
||||||
|
}
|
||||||
|
delete(tmpEmement);
|
||||||
|
tmpEmement = NULL;
|
||||||
|
} else {
|
||||||
|
TK_ERROR("allocation error ... of ewol::FSNode");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(dir);
|
||||||
|
} else {
|
||||||
|
TK_ERROR("could not open directory : \"" << *this << "\"");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
File Specific :
|
File Specific :
|
||||||
*/
|
*/
|
||||||
@ -1019,7 +1102,7 @@ etk::UString etk::FSNode::FileGetExtention(void)
|
|||||||
uint64_t etk::FSNode::FileSize(void)
|
uint64_t etk::FSNode::FileSize(void)
|
||||||
{
|
{
|
||||||
if (etk::FSN_FILE != m_typeNode) {
|
if (etk::FSN_FILE != m_typeNode) {
|
||||||
TK_ERROR("pppppppppppppppppppppp" << m_typeNode);
|
TK_ERROR("Request size of a non file node : " << m_typeNode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef __TARGET_OS__Android
|
#ifdef __TARGET_OS__Android
|
||||||
|
@ -188,6 +188,7 @@ namespace etk
|
|||||||
bool temporaryFile=true);
|
bool temporaryFile=true);
|
||||||
etk::FSNode FolderGetParent(void); // ordered by name ...
|
etk::FSNode FolderGetParent(void); // ordered by name ...
|
||||||
|
|
||||||
|
void FolderGetRecursiveFiles(etk::Vector<etk::UString>& output);
|
||||||
/*
|
/*
|
||||||
File Specific :
|
File Specific :
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user