Files: EntryManager: optimized getting folder content
This commit is contained in:
parent
4535d8d7ac
commit
2db64a47e9
@ -394,6 +394,11 @@ public class EntryManager
|
||||
var entries = new List<FileEntry>();
|
||||
|
||||
searchInContent = searchInContent && filterType != FilterType.ByExtension && !Equals(parent.Id, _globalFolderHelper.FolderTrash);
|
||||
|
||||
if (parent.FolderType == FolderType.TRASH || string.IsNullOrEmpty(searchText))
|
||||
{
|
||||
withSubfolders = false;
|
||||
}
|
||||
|
||||
if (parent.FolderType == FolderType.Projects && parent.Id.Equals(await _globalFolderHelper.FolderProjectsAsync))
|
||||
{
|
||||
@ -459,13 +464,39 @@ public class EntryManager
|
||||
|
||||
CalculateTotal();
|
||||
}
|
||||
else if (!parent.ProviderEntry)
|
||||
{
|
||||
var folderDao = _daoFactory.GetFolderDao<T>();
|
||||
var fileDao = _daoFactory.GetFileDao<T>();
|
||||
|
||||
var allFoldersCountTask = folderDao.GetFoldersCountAsync(parent.Id, filterType, subjectGroup, subjectId, searchText, withSubfolders, excludeSubject);
|
||||
var allFilesCountTask = fileDao.GetFilesCountAsync(parent.Id, filterType, subjectGroup, subjectId, searchText, withSubfolders, excludeSubject);
|
||||
|
||||
var folders = await folderDao.GetFoldersAsync(parent.Id, orderBy, filterType, subjectGroup, subjectId, searchText, withSubfolders, excludeSubject, from, count)
|
||||
.ToListAsync();
|
||||
|
||||
var filesCount = count - folders.Count;
|
||||
var filesOffset = folders.Count > 0 ? 0 : from - await allFoldersCountTask;
|
||||
|
||||
var files = await fileDao.GetFilesAsync(parent.Id, orderBy, filterType, subjectGroup, subjectId, searchText, searchInContent, withSubfolders, excludeSubject, filesOffset, filesCount)
|
||||
.ToListAsync();
|
||||
|
||||
entries = new List<FileEntry>(count);
|
||||
entries.AddRange(folders);
|
||||
entries.AddRange(files);
|
||||
|
||||
var fileStatusTask = _entryStatusManager.SetFileStatusAsync(files);
|
||||
var tagsNewTask = _fileMarker.SetTagsNewAsync(parent, entries);
|
||||
var originsTask = SetOriginsAsync(parent, entries);
|
||||
|
||||
await Task.WhenAll(fileStatusTask, tagsNewTask, originsTask);
|
||||
|
||||
total = await allFoldersCountTask + await allFilesCountTask;
|
||||
|
||||
return (entries, total);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (parent.FolderType == FolderType.TRASH)
|
||||
{
|
||||
withSubfolders = false;
|
||||
}
|
||||
|
||||
var folders = _daoFactory.GetFolderDao<T>().GetFoldersAsync(parent.Id, orderBy, filterType, subjectGroup, subjectId, searchText, withSubfolders, excludeSubject);
|
||||
var files = _daoFactory.GetFileDao<T>().GetFilesAsync(parent.Id, orderBy, filterType, subjectGroup, subjectId, searchText, searchInContent, withSubfolders, excludeSubject);
|
||||
|
||||
@ -493,11 +524,6 @@ public class EntryManager
|
||||
entries.AddRange(items);
|
||||
}
|
||||
}
|
||||
|
||||
if (parent.FolderType == FolderType.TRASH)
|
||||
{
|
||||
entries = await GetWithOriginAsync(entries, roomId is int id ? id : default);
|
||||
}
|
||||
}
|
||||
|
||||
total = entries.Count;
|
||||
@ -1863,10 +1889,13 @@ public class EntryManager
|
||||
await tagDao.SaveTags(tag);
|
||||
}
|
||||
|
||||
private async Task<List<FileEntry>> GetWithOriginAsync(List<FileEntry> entries, int filterRoomId)
|
||||
private async Task SetOriginsAsync(IFolder parent, IEnumerable<FileEntry> entries)
|
||||
{
|
||||
var result = new List<FileEntry>(entries.Count);
|
||||
var needFiltering = filterRoomId != default;
|
||||
if (parent.FolderType != FolderType.TRASH || !entries.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var folderDao = _daoFactory.GetFolderDao<int>();
|
||||
|
||||
var originsData = await folderDao.GetOriginsDataAsync(entries.Cast<FileEntry<int>>().Select(e => e.Id)).ToListAsync();
|
||||
@ -1881,22 +1910,15 @@ public class EntryManager
|
||||
fileEntry.OriginRoomId = data.OriginRoom.Id;
|
||||
fileEntry.OriginRoomTitle = data.OriginRoom.Title;
|
||||
}
|
||||
|
||||
if (needFiltering && fileEntry.OriginRoomId != filterRoomId)
|
||||
|
||||
if (data?.OriginFolder == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (data?.OriginFolder != null)
|
||||
{
|
||||
fileEntry.OriginId = data.OriginFolder.Id;
|
||||
fileEntry.OriginTitle = data.OriginFolder.FolderType == FolderType.USER ? FilesUCResource.MyFiles : data.OriginFolder.Title;
|
||||
}
|
||||
|
||||
result.Add(entry);
|
||||
fileEntry.OriginId = data.OriginFolder.Id;
|
||||
fileEntry.OriginTitle = data.OriginFolder.FolderType == FolderType.USER ? FilesUCResource.MyFiles : data.OriginFolder.Title;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//Long operation
|
||||
|
Loading…
Reference in New Issue
Block a user