Add Git overlay, operation tools, and virtualized preview so large folders stay responsive.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -88,6 +88,48 @@ public sealed class AnalysisService
|
||||
public Task<IReadOnlyList<Source>> GetKnownSourcesAsync(CancellationToken cancellationToken = default)
|
||||
=> RunOffUiAsync(ct => _store.Sources.GetAllAsync(ct), cancellationToken);
|
||||
|
||||
public Task<IReadOnlyList<ClassifiedDuplicateGroup>> GetClassifiedDuplicatesAsync(
|
||||
int take = 200,
|
||||
CancellationToken cancellationToken = default)
|
||||
=> RunOffUiAsync(async ct =>
|
||||
{
|
||||
var raw = await _store.Hashes.GetDuplicateGroupsAsync(null, null, Math.Max(take * 8, 400), ct)
|
||||
.ConfigureAwait(false);
|
||||
var ids = raw.SelectMany(g => g.Entries.Select(e => e.Id)).Distinct().ToList();
|
||||
var relations = await _store.Relations.GetAmongAsync(ids, ct).ConfigureAwait(false);
|
||||
return (IReadOnlyList<ClassifiedDuplicateGroup>)raw
|
||||
.Select(g => DuplicateClassifier.ClassifyGroup(g, DuplicateClassifier.RelationsFor(g.Entries, relations)))
|
||||
.ToList();
|
||||
}, cancellationToken);
|
||||
|
||||
public Task MarkDuplicateGroupAsync(
|
||||
IReadOnlyList<IndexEntry> entries,
|
||||
FileRelationKind kind,
|
||||
CancellationToken cancellationToken = default)
|
||||
=> RunOffUiAsync(async ct =>
|
||||
{
|
||||
var ids = entries.Select(e => e.Id).Distinct().ToList();
|
||||
await _store.Relations.DeleteAmongAsync(
|
||||
ids,
|
||||
[FileRelationKind.AccidentalDuplicate, FileRelationKind.IntentionalDuplicate],
|
||||
ct)
|
||||
.ConfigureAwait(false);
|
||||
var utc = DateTimeOffset.UtcNow;
|
||||
foreach (var (left, right) in DuplicateClassifier.Pairs(entries))
|
||||
{
|
||||
await _store.Relations.UpsertAsync(new FileRelation
|
||||
{
|
||||
LeftEntryId = left,
|
||||
RightEntryId = right,
|
||||
Kind = kind,
|
||||
Origin = FileRelationOrigin.User,
|
||||
CreatedUtc = utc
|
||||
}, ct).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}, cancellationToken);
|
||||
|
||||
private async Task<T> CachedAsync<T>(string key, Func<CancellationToken, Task<T>> query, CancellationToken cancellationToken)
|
||||
{
|
||||
await EnsureReadyAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
Reference in New Issue
Block a user