Files: fix

This commit is contained in:
pavelbannov 2022-08-11 16:55:35 +03:00
parent 2936cb4ca2
commit 44bd9f1d6d

View File

@ -747,141 +747,6 @@ public class FileMarker
return entryTags;
}
public async IAsyncEnumerable<FileEntry> SetTagsNewAsyncEnumerable<T>(Folder<T> parent, IAsyncEnumerable<FileEntry> entries)
{
var tagDao = _daoFactory.GetTagDao<T>();
var folderDao = _daoFactory.GetFolderDao<T>();
var totalTags = await tagDao.GetNewTagsAsync(_authContext.CurrentAccount.ID, parent, false).ToListAsync();
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)
{
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)
{
tagDao.SaveTags(parentFolderTag);
}
else
{
tagDao.UpdateNewTags(parentFolderTag);
}
var cacheFolderId = parent.Id;
var parentsList = await _daoFactory.GetFolderDao<T>().GetParentFoldersAsync(parent.Id).Reverse().ToListAsync();
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));
}
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);
}
}
else
{
await RemoveMarkAsNewAsync(parent);
}
}
await foreach (var e in entries)
{
if (e is FileEntry<int>)
{
var entry = (FileEntry<int>)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;
}
}
if (e is FileEntry<string>)
{
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;
}
}
yield return e;
}
yield break;
}
await foreach (var e in entries)
{
yield return e;
}
}
public async Task SetTagsNewAsync<T>(Folder<T> parent, IEnumerable<FileEntry> entries)
{
var tagDao = _daoFactory.GetTagDao<T>();