diff --git a/main.cpp b/main.cpp index 9e9e27e..df12cbe 100644 --- a/main.cpp +++ b/main.cpp @@ -63,6 +63,28 @@ typedef struct { //TODO UNICORDEO /* FILE PICKER MOMENTO */ +/* PROPOSITO GENERAL */ + +bool compareLastChar(std::vector *lastCharCandidates, char* string){ + bool matchingExtension = false; + for (int i = 0; i < lastCharCandidates->size(); i++){ + log_debugcpp(lastCharCandidates->at(i) + " <- FILTERING EXTENSION"); + + if(strlen(string) < lastCharCandidates->at(i).length()) continue; + char* potentialExtension = &string[strlen(string) - lastCharCandidates->at(i).length()]; + + log_debugcpp(potentialExtension); + log_debugcpp(" LEN " + std::to_string(strlen(potentialExtension)) + " <- VS -> " + lastCharCandidates->at(i) + " LEN " + std::to_string(lastCharCandidates->at(i).length())); + //+ strlen(potentialExtension) + std::to_string(lastCharCandidates->at(i).length()) + if(!strcmp(potentialExtension, lastCharCandidates->at(i).c_str())) { + log_debugcpp("VALID EXTENSION"); + matchingExtension = true; + } + } + return matchingExtension; +} + + /* DIRECTORIES */ @@ -77,11 +99,10 @@ bool moveDirectory(char** currentPath){ return false; } -int listDirectory(std::string path, std::vector *directoryContents, std::vector *desiredExtensions = nullptr){ +int listDirectory(std::string path, std::vector *directoryContents){ HANDLE hFind = INVALID_HANDLE_VALUE; WIN32_FIND_DATA ffd; LARGE_INTEGER filesize; - bool skipDueToExtension = false; int numFiles = 0; if (path.length() > (MAX_LISTDIR_PATH_LENGTH)) return -1; @@ -91,23 +112,6 @@ int listDirectory(std::string path, std::vector *directoryCont do { if(!strcmp(ffd.cFileName, ".") || !strcmp(ffd.cFileName, "..")) continue; log_debugcpp("BUCLE listDirectory iteracion " + std::to_string(numFiles)); - //Codigo pa saltarse arxibus k no estiendan - /*if(desiredExtensions != nullptr){ - TCHAR* fileExtension = strrchr(ffd.cFileName, '.'); - if (debug && fileExtension != NULL) { std::cout << fileExtension; std::cout << " <- FILTERING EXTENSION" << std::endl; } - std::cout << ffd.cFileName << std::endl; - - //TODO tabien no??? - if (fileExtension == NULL) continue; - - for (int i = 0; i < desiredExtensions->size(); i++) { - if (debug) { std::cout << std::to_string(strcmp(desiredExtensions->at(i).c_str(), fileExtension)) << std::endl; } - if (strcmp(desiredExtensions->at(i).c_str(), fileExtension)){ - skipDueToExtension = true; - } - } - } - if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && skipDueToExtension) continue;*/ directoriesInfo* itemInfo; if (directoryContents->size() <= numFiles){ @@ -116,7 +120,7 @@ int listDirectory(std::string path, std::vector *directoryCont } else { itemInfo = directoryContents->at(numFiles); } - log_debugcpp("MEMORIA ASIGNADA iteracion " + std::to_string(numFiles)); + log_debugcpp("MEMORY ASSIGNES iteration " + std::to_string(numFiles)); //A registrar info, fiera itemInfo->isFile = (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? true : false; @@ -168,11 +172,10 @@ int explodePaths(TCHAR* volumePaths, int volumePathsBufferSize, char separator, } itemPath[pathLengthIdx + 1] = '\0'; dest->push_back(itemPath); + //TODO concat de puto C + log_debugcpp(dest->at(dest->size() - 1)); + log_debugcpp( " EXPLODEPATH"); - if (debug) { - std::cout << dest->at(dest->size() - 1); - std::cout << " EXPLODEPATH" << std::endl; - } if (nextOcurrence[0] == nextOcurrence[1]) return depth; depth++; @@ -202,7 +205,7 @@ int listVolumes(std::vector *onPresentPaths){ if(GetVolumePathNamesForVolumeName(volumeName, volumePaths, volumePathsBufferSize, &volumePathLength)){ if (volumePathLength == 1) { if (debug) std::cout << "Skill Issue" << std::endl; continue; } - if (debug) std::cout << volumeName; + log_debugcpp(volumeName); //pathSchecker // if (debug && volumePaths[0] == 'E') { @@ -395,8 +398,8 @@ int main(int, char**) } // //TODO ELIMINAR RESTRICCION EXE; PRUEBITA DEL SIGNIORE - //static std::vector restrictToExe{"exe", "DSDFD"}; - numFiles = (listDirectory(std::string(currentPath), &directoryContents));//, &restrictToExe)); + + numFiles = listDirectory(std::string(currentPath), &directoryContents); //std::cout << numFiles; if (numFiles < 0) { log_debugcpp("FALLO LA FUNCION, VALOR NEGATIVO " + std::to_string(numFiles)); @@ -406,6 +409,8 @@ int main(int, char**) //It's renderin' time static bool showHidden = false; + static bool filterByExtension = false; + static std::vector extensions; ImGui::Text("Select a file:"); //Permanentes e increiblemente utilitarios botones en Cuatro K: MOVE UP @@ -472,6 +477,12 @@ int main(int, char**) int idx = 0; for (; idx < numFiles; idx++) { if(directoryContents.at(idx)->isHidden && !showHidden) continue; + if(filterByExtension && !directoryContents.at(idx)->isFile) { + //TODO XAPUSITA + extensions.clear(); + extensions.push_back("exe"); + if (!compareLastChar(&extensions, directoryContents.at(idx)->name)) continue; + } ImGui::TableNextRow(); ImGui::TableNextColumn(); @@ -516,6 +527,8 @@ int main(int, char**) ImGui::Checkbox("Show hidden", &showHidden); ImGui::SameLine(); + ImGui::Checkbox("Filter by .exe", &filterByExtension); + ImGui::SameLine(); ImGui::Button("Select"); filepickerFailure: