fix sorted file iterator

Ondřej Hruška 5 days ago
parent 43b354ee1c
commit a6c51e4c2f
  1. 23
      src/tangara/lua/file_iterator.cpp

@ -95,7 +95,7 @@ auto FileIterator::iterate(bool show_hidden) -> bool {
FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden) FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden)
: files_(), offset_(-1) { : offset_(-1) {
FileIterator iter(filepath, showHidden); FileIterator iter(filepath, showHidden);
@ -103,7 +103,6 @@ FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden)
iter.next(); iter.next();
std::optional<FileEntry> res = iter.value(); std::optional<FileEntry> res = iter.value();
if (res) { if (res) {
auto file = *res;
files_.push_back(*res); files_.push_back(*res);
} else { } else {
break; break;
@ -112,8 +111,19 @@ FileIteratorSorted::FileIteratorSorted(std::string filepath, bool showHidden)
std::sort(files_.begin(), files_.end(), std::sort(files_.begin(), files_.end(),
[](const auto& lhs, const auto& rhs) { [](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; return lhs.name < rhs.name;
}); });
// reindex the files
for(size_t i = 0; i != files_.size(); i++) {
files_[i].index = i + 1;
}
} }
FileIteratorSorted::~FileIteratorSorted() { FileIteratorSorted::~FileIteratorSorted() {
@ -127,15 +137,18 @@ auto FileIteratorSorted::value() const -> const std::optional<FileEntry> {
} }
auto FileIteratorSorted::next() -> void { auto FileIteratorSorted::next() -> void {
if (offset_ < files_.size()) { if (offset_ < (int) files_.size()) {
offset_++; offset_++;
} }
} }
auto FileIteratorSorted::prev() -> void { auto FileIteratorSorted::prev() -> void {
if (offset_ >= 0) { if (offset_ <= 0) {
offset_--; offset_ = -1;
return;
} }
offset_--;
} }

Loading…
Cancel
Save