diff options
| -rw-r--r-- | src/datatab.cpp | 1 | ||||
| -rw-r--r-- | src/shared/directoryentry.cpp | 26 | ||||
| -rw-r--r-- | src/shared/directoryentry.h | 2 |
3 files changed, 20 insertions, 9 deletions
diff --git a/src/datatab.cpp b/src/datatab.cpp index 4c42339f..212d6754 100644 --- a/src/datatab.cpp +++ b/src/datatab.cpp @@ -28,6 +28,7 @@ DataTab::DataTab( m_filter.setEdit(mwui->dataTabFilter); m_filter.setList(mwui->dataTree); m_filter.setUseSourceSort(true); + m_filter.setFilterColumn(FileTreeModel::FileName); if (auto* m=m_filter.proxyModel()) { m->setDynamicSortFilter(false); diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp index 92b6c2bf..6e44cc91 100644 --- a/src/shared/directoryentry.cpp +++ b/src/shared/directoryentry.cpp @@ -512,9 +512,11 @@ bool FileRegister::indexValid(FileEntry::Index index) const FileEntry::Ptr FileRegister::createFile(const std::wstring &name, DirectoryEntry *parent)
{
FileEntry::Index index = generateIndex();
- m_Files[index] = FileEntry::Ptr(new FileEntry(index, name, parent));
- return m_Files[index];
+ auto r = m_Files.insert_or_assign(
+ index, FileEntry::Ptr(new FileEntry(index, name, parent)));
+
+ return r.first->second;
}
FileEntry::Ptr FileRegister::getFile(FileEntry::Index index) const
@@ -1026,14 +1028,18 @@ FileEntry::Ptr DirectoryEntry::insert( const std::wstring &fileName, FilesOrigin &origin, FILETIME fileTime,
const std::wstring &archive, int order)
{
- auto iter = m_Files.find(ToLowerCopy(fileName));
+ std::wstring fileNameLower = ToLowerCopy(fileName);
+
+ auto iter = m_Files.find(fileNameLower);
FileEntry::Ptr file;
if (iter != m_Files.end()) {
file = m_FileRegister->getFile(iter->second);
} else {
file = m_FileRegister->createFile(fileName, this);
- addFileToList(*file);
+ addFileToList(std::move(fileNameLower), file->getIndex());
+
+ // fileNameLower has moved from this point
}
file->addOrigin(origin.getID(), fileTime, archive, order);
@@ -1067,8 +1073,10 @@ void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOf if ((wcscmp(findData.cFileName, L".") != 0) &&
(wcscmp(findData.cFileName, L"..") != 0)) {
int offset = _snwprintf(buffer + bufferOffset, MAXPATH_UNICODE, L"\\%ls", findData.cFileName);
+
// recurse into subdirectories
- getSubDirectory(findData.cFileName, true, origin.getID())->addFiles(origin, buffer, bufferOffset + offset);
+ DirectoryEntry* sd = getSubDirectory(findData.cFileName, true, origin.getID());
+ sd->addFiles(origin, buffer, bufferOffset + offset);
}
} else {
insert(findData.cFileName, origin, findData.ftLastWriteTime, L"", -1);
@@ -1245,10 +1253,12 @@ void DirectoryEntry::removeFilesFromList(const std::set<FileEntry::Index>& indic }
}
-void DirectoryEntry::addFileToList(const FileEntry& f)
+void DirectoryEntry::addFileToList(
+ std::wstring fileNameLower, FileEntry::Index index)
{
- m_Files.emplace(ToLowerCopy(f.getName()), f.getIndex());
- m_FilesLookup.emplace(ToLowerCopy(f.getName()), f.getIndex());
+ m_FilesLookup.emplace(fileNameLower, index);
+ m_Files.emplace(std::move(fileNameLower), index);
+ // fileNameLower has been moved from this point
}
} // namespace MOShared
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h index 7e45493d..e26011d7 100644 --- a/src/shared/directoryentry.h +++ b/src/shared/directoryentry.h @@ -522,7 +522,7 @@ private: void addDirectoryToList(DirectoryEntry* e);
void removeDirectoryFromList(SubDirectories::iterator itor);
- void addFileToList(const FileEntry& f);
+ void addFileToList(std::wstring fileNameLower, FileEntry::Index index);
void removeFileFromList(FileEntry::Index index);
void removeFilesFromList(const std::set<FileEntry::Index>& indices);
};
|
