Files: fix

This commit is contained in:
pavelbannov 2022-07-08 13:28:27 +03:00
parent 59a78409b4
commit e80613e8db
2 changed files with 131 additions and 137 deletions

View File

@ -469,7 +469,7 @@ public class EntryManager
}
var fileSecurity = _fileSecurity;
var entries = Enumerable.Empty<FileEntry>();
var entries = new List<FileEntry>();
searchInContent = searchInContent && !filterTypes.Contains(FilterType.ByExtension) && !Equals(parent.Id, _globalFolderHelper.FolderTrash);
@ -578,14 +578,14 @@ public class EntryManager
//share
var shared = await fileSecurity.GetSharesForMeAsync(filterTypes.FirstOrDefault(), subjectGroup, subjectId, searchText, searchInContent, withSubfolders);
entries = entries.Concat(shared);
entries.AddRange(shared);
CalculateTotal();
}
else if (parent.FolderType == FolderType.Recent)
{
var files = await GetRecentAsyncEnumerable(filterTypes.FirstOrDefault(), subjectGroup, subjectId, searchText, searchInContent);
entries = entries.Concat(files);
entries.AddRange(files);
CalculateTotal();
}
@ -593,8 +593,8 @@ public class EntryManager
{
var (files, folders) = await GetFavoritesAsync(filterTypes.FirstOrDefault(), subjectGroup, subjectId, searchText, searchInContent);
entries = entries.Concat(folders);
entries = entries.Concat(files);
entries.AddRange(folders);
entries.AddRange(files);
CalculateTotal();
}
@ -603,7 +603,7 @@ public class EntryManager
var folderDao = _daoFactory.GetFolderDao<T>();
var fileDao = _daoFactory.GetFileDao<T>();
var files = await GetTemplatesAsyncEnumerable(folderDao, fileDao, filterTypes.FirstOrDefault(), subjectGroup, subjectId, searchText, searchInContent).ToListAsync();
entries = entries.Concat(files);
entries.AddRange(files);
CalculateTotal();
}
@ -621,10 +621,9 @@ public class EntryManager
var task2 = fileSecurity.FilterReadAsync(files).ToListAsync();
var task3 = shared.ToListAsync();
entries = entries.Concat(await task1);
entries = entries.Concat(await task2);
entries = entries.Concat(await task3);
entries.AddRange(await task1);
entries.AddRange(await task2);
entries.AddRange(await task3);
CalculateTotal();
}
@ -654,23 +653,23 @@ public class EntryManager
var task3 = thirdPartyFolder.ToListAsync();
entries = entries.Concat(await task1);
entries = entries.Concat(await task2);
entries = entries.Concat(await task3);
entries.AddRange(await task1);
entries.AddRange(await task2);
entries.AddRange(await task3);
}
else
{
entries = entries.Concat(await task1);
entries = entries.Concat(await task2);
entries.AddRange(await task1);
entries.AddRange(await task2);
}
}
total = entries.Count;
IEnumerable<FileEntry> data = entries.ToList();
IEnumerable<FileEntry> data = entries;
if (orderBy.SortedBy != SortedByType.New)
{
total = data.Count();
if (parent.FolderType != FolderType.Recent)
{
data = SortEntries<T>(data, orderBy);
@ -694,8 +693,6 @@ public class EntryManager
//sorting after marking
if (orderBy.SortedBy == SortedByType.New)
{
total = data.Count();
data = SortEntries<T>(data, orderBy);
if (0 < from)
@ -1239,9 +1236,12 @@ public class EntryManager
,
_ => (x, y) => c * x.Title.EnumerableComparer(y.Title),
};
var comparer = Comparer<FileEntry>.Create(sorter);
if (orderBy.SortedBy != SortedByType.New)
{
var pinnedRooms = new List<FileEntry>();
IEnumerable<FileEntry> pinnedRooms = new List<FileEntry>();
if (!_coreBaseSettings.DisableDocSpace)
{
@ -1264,20 +1264,16 @@ public class EntryManager
}
// folders on top
var folders = entries.Where(r => r.FileEntryType == FileEntryType.Folder).Except(pinnedRooms).ToList();
var files = entries.Where(r => r.FileEntryType == FileEntryType.File).ToList();
pinnedRooms.Sort(sorter);
folders.Sort(sorter);
files.Sort(sorter);
var folders = entries.Where(r => r.FileEntryType == FileEntryType.Folder).Except(pinnedRooms);
var files = entries.Where(r => r.FileEntryType == FileEntryType.File);
pinnedRooms = pinnedRooms.OrderBy(r => r, comparer);
folders = folders.OrderBy(r => r, comparer);
files = files.OrderBy(r => r, comparer);
return pinnedRooms.Concat(folders).Concat(files);
}
var result = entries.ToList();
result.Sort(sorter);
return result;
return entries.OrderBy(r => r, comparer);
}
public IAsyncEnumerable<FileEntry> SortEntriesAsync<T>(IAsyncEnumerable<FileEntry> entries, OrderBy orderBy)

View File

@ -890,124 +890,122 @@ public class FileMarker
var folderDao = _daoFactory.GetFolderDao<T>();
var totalTags = await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, parent, false).ToListAsync();
if (totalTags.Count() > 0)
if (totalTags.Count <= 0)
{
var parentFolderTag = Equals(await _globalFolder.GetFolderShareAsync<T>(_daoFactory), parent.Id)
? await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, await folderDao.GetFolderAsync(await _globalFolder.GetFolderShareAsync<T>(_daoFactory))).FirstOrDefaultAsync()
: totalTags.FirstOrDefault(tag => tag.EntryType == FileEntryType.Folder && Equals(tag.EntryId, parent.Id));
totalTags = totalTags.Where(e => e != parentFolderTag).ToList();
var countSubNew = 0;
totalTags.ForEach(tag => countSubNew += tag.Count);
if (parentFolderTag == null)
return;
}
var parentFolderTag = Equals(await _globalFolder.GetFolderShareAsync<T>(_daoFactory), parent.Id)
? await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, await folderDao.GetFolderAsync(await _globalFolder.GetFolderShareAsync<T>(_daoFactory))).FirstOrDefaultAsync()
: totalTags.FirstOrDefault(tag => tag.EntryType == FileEntryType.Folder && Equals(tag.EntryId, parent.Id));
totalTags = totalTags.Where(e => e != parentFolderTag).ToList();
var countSubNew = 0;
totalTags.ForEach(tag => countSubNew += tag.Count);
if (parentFolderTag == null)
{
parentFolderTag = Tag.New(_authContext.CurrentAccount.ID, parent, 0);
parentFolderTag.Id = -1;
}
if (parentFolderTag.Count != countSubNew)
{
if (countSubNew > 0)
{
parentFolderTag = Tag.New(_authContext.CurrentAccount.ID, parent, 0);
parentFolderTag.Id = -1;
}
if (parentFolderTag.Count != countSubNew)
{
if (countSubNew > 0)
var diff = parentFolderTag.Count - countSubNew;
parentFolderTag.Count -= diff;
if (parentFolderTag.Id == -1)
{
var diff = parentFolderTag.Count - countSubNew;
parentFolderTag.Count -= diff;
if (parentFolderTag.Id == -1)
{
tagDao.SaveTags(parentFolderTag);
}
else
{
tagDao.UpdateNewTags(parentFolderTag);
}
var cacheFolderId = parent.Id;
var parentsList = await _daoFactory.GetFolderDao<T>().GetParentFoldersAsync(parent.Id);
parentsList.Reverse();
parentsList.Remove(parent);
if (parentsList.Count > 0)
{
var rootFolder = parentsList.Last();
T rootFolderId = default;
cacheFolderId = rootFolder.Id;
if (rootFolder.RootFolderType == FolderType.BUNCH)
{
cacheFolderId = rootFolderId = await _globalFolder.GetFolderProjectsAsync<T>(_daoFactory);
}
else if (rootFolder.RootFolderType == FolderType.USER && !Equals(rootFolder.RootId, _globalFolder.GetFolderMy(this, _daoFactory)))
{
cacheFolderId = rootFolderId = await _globalFolder.GetFolderShareAsync<T>(_daoFactory);
}
if (rootFolderId != null)
{
parentsList.Add(await _daoFactory.GetFolderDao<T>().GetFolderAsync(rootFolderId));
}
var fileSecurity = _fileSecurity;
foreach (var folderFromList in parentsList)
{
var parentTreeTag = await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, folderFromList).FirstOrDefaultAsync();
if (parentTreeTag == null)
{
if (await fileSecurity.CanReadAsync(folderFromList))
{
tagDao.SaveTags(Tag.New(_authContext.CurrentAccount.ID, folderFromList, -diff));
}
}
else
{
parentTreeTag.Count -= diff;
tagDao.UpdateNewTags(parentTreeTag);
}
}
}
if (cacheFolderId != null)
{
RemoveFromCahce(cacheFolderId);
}
tagDao.SaveTags(parentFolderTag);
}
else
{
await RemoveMarkAsNewAsync(parent);
tagDao.UpdateNewTags(parentFolderTag);
}
var cacheFolderId = parent.Id;
var parentsList = await _daoFactory.GetFolderDao<T>().GetParentFoldersAsync(parent.Id);
parentsList.Reverse();
parentsList.Remove(parent);
if (parentsList.Count > 0)
{
var rootFolder = parentsList.Last();
T rootFolderId = default;
cacheFolderId = rootFolder.Id;
if (rootFolder.RootFolderType == FolderType.BUNCH)
{
cacheFolderId = rootFolderId = await _globalFolder.GetFolderProjectsAsync<T>(_daoFactory);
}
else if (rootFolder.RootFolderType == FolderType.USER && !Equals(rootFolder.RootId, _globalFolder.GetFolderMy(this, _daoFactory)))
{
cacheFolderId = rootFolderId = await _globalFolder.GetFolderShareAsync<T>(_daoFactory);
}
if (rootFolderId != null)
{
parentsList.Add(await _daoFactory.GetFolderDao<T>().GetFolderAsync(rootFolderId));
}
var fileSecurity = _fileSecurity;
foreach (var folderFromList in parentsList)
{
var parentTreeTag = await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, folderFromList).FirstOrDefaultAsync();
if (parentTreeTag == null)
{
if (await fileSecurity.CanReadAsync(folderFromList))
{
tagDao.SaveTags(Tag.New(_authContext.CurrentAccount.ID, folderFromList, -diff));
}
}
else
{
parentTreeTag.Count -= diff;
tagDao.UpdateNewTags(parentTreeTag);
}
}
}
if (cacheFolderId != null)
{
RemoveFromCahce(cacheFolderId);
}
}
foreach (var e in entries)
else
{
if (e is FileEntry<int>)
{
var entry = (FileEntry<int>)e;
var curTag = totalTags.FirstOrDefault(tag => tag.EntryType == entry.FileEntryType && tag.EntryId.Equals(entry.Id));
await RemoveMarkAsNewAsync(parent);
}
}
if (entry.FileEntryType == FileEntryType.Folder)
{
((IFolder)entry).NewForMe = curTag != null ? curTag.Count : 0;
}
else if (curTag != null)
{
entry.IsNew = true;
}
foreach (var e in entries)
{
if (e is FileEntry<int> entry)
{
SatTagNewForEntry(entry);
}
else if (e is FileEntry<string> thirdPartyEntry)
{
SatTagNewForEntry(thirdPartyEntry);
}
}
void SatTagNewForEntry<TEntry>(FileEntry<TEntry> entry)
{
var curTag = totalTags.FirstOrDefault(tag => tag.EntryType == entry.FileEntryType && tag.EntryId.Equals(entry.Id));
if (curTag != null)
{
if (entry.FileEntryType == FileEntryType.Folder)
{
((IFolder)entry).NewForMe = curTag.Count;
}
if (e is FileEntry<string>)
else
{
var entry = (FileEntry<string>)e;
var curTag = totalTags.FirstOrDefault(tag => tag.EntryType == entry.FileEntryType && tag.EntryId.Equals(entry.Id));
if (entry.FileEntryType == FileEntryType.Folder)
{
((IFolder)entry).NewForMe = curTag != null ? curTag.Count : 0;
}
else if (curTag != null)
{
entry.IsNew = true;
}
entry.IsNew = true;
}
}
}