Files: fix
This commit is contained in:
parent
59a78409b4
commit
e80613e8db
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user