diff --git a/src/tangara/lua/file_iterator.cpp b/src/tangara/lua/file_iterator.cpp index e7fcc1fd..270c8f30 100644 --- a/src/tangara/lua/file_iterator.cpp +++ b/src/tangara/lua/file_iterator.cpp @@ -95,7 +95,7 @@ auto FileIterator::iterate(bool show_hidden) -> bool { FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden) - : files_(), offset_(-1) { + : offset_(-1) { FileIterator iter(filepath, showHidden); @@ -103,7 +103,6 @@ FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden) iter.next(); std::optional res = iter.value(); if (res) { - auto file = *res; files_.push_back(*res); } else { break; @@ -112,8 +111,19 @@ FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden) std::sort(files_.begin(), files_.end(), [](const auto& lhs, const auto& rhs) { + if (lhs.isDirectory > rhs.isDirectory) { + return true; + } else if (lhs.isDirectory < rhs.isDirectory) { + return false; + } + return lhs.name < rhs.name; }); + + // reindex the files + for(size_t i = 0; i != files_.size(); i++) { + files_[i].index = i + 1; + } } FileIteratorSorted::~FileIteratorSorted() { @@ -127,15 +137,18 @@ auto FileIteratorSorted::value() const -> const std::optional { } auto FileIteratorSorted::next() -> void { - if (offset_ < files_.size()) { + if (offset_ < (int) files_.size()) { offset_++; } } auto FileIteratorSorted::prev() -> void { - if (offset_ >= 0) { - offset_--; + if (offset_ <= 0) { + offset_ = -1; + return; } + + offset_--; }