Adds source to the each item in the export concordances file.
This commit is contained in:
+32
-3
@@ -1,8 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Rsdo.Concordancer.Core.Constants;
|
||||
using Rsdo.Concordancer.Core.Interfaces;
|
||||
using Rsdo.Concordancer.Core.Model;
|
||||
@@ -11,6 +14,7 @@ using Rsdo.Concordancer.Core.Search.Queries.Concordances;
|
||||
using Rsdo.Concordancer.ServiceModel.Requests.Concordances;
|
||||
using Rsdo.Concordancer.ServiceModel.Shared;
|
||||
using Rsdo.Concordancer.ServiceModel.Types;
|
||||
using Rsdo.Concordancer.Services.Framework.DbContext;
|
||||
using Rsdo.Concordancer.Services.Search.QueryFactories;
|
||||
using Rsdo.Concordancer.Services.Services.ParagraphService;
|
||||
|
||||
@@ -18,15 +22,18 @@ namespace Rsdo.Concordancer.Services.RequestHandlers.Concordances;
|
||||
|
||||
public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequestHandler<ExportConcordances, ExportConcordancesResponse>
|
||||
{
|
||||
private readonly CorpusDbContext dbContext;
|
||||
private readonly IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory;
|
||||
private readonly ISearchEngine searchEngine;
|
||||
|
||||
public ExportConcordancesHandler(
|
||||
CorpusDbContext dbContext,
|
||||
IParagraphService paragraphService,
|
||||
IQueryFactory<ExportConcordances, ConcordancesQuery> queryFactory,
|
||||
ISearchEngine searchEngine)
|
||||
: base(paragraphService)
|
||||
{
|
||||
this.dbContext = dbContext;
|
||||
this.queryFactory = queryFactory;
|
||||
this.searchEngine = searchEngine;
|
||||
}
|
||||
@@ -42,6 +49,9 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
||||
// Get search items
|
||||
var items = await GetItems(query, result.EntityIds);
|
||||
|
||||
// Get sources
|
||||
var sources = await GetSources(items);
|
||||
|
||||
// Export
|
||||
var stream = new MemoryStream();
|
||||
await using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
|
||||
@@ -52,7 +62,7 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
||||
// Write items
|
||||
foreach (var item in items)
|
||||
{
|
||||
await WriteItem(writer, item);
|
||||
await WriteItem(writer, item, sources[item.ParagraphId]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +75,21 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
||||
};
|
||||
}
|
||||
|
||||
private async Task<Dictionary<Guid, string>> GetSources(List<SearchConcordancesResponseItem> items)
|
||||
{
|
||||
var paragraphIds = items.Select(i => i.ParagraphId).ToList();
|
||||
var sources = await dbContext.Paragraph.Include(p => p.Text)
|
||||
.Where(p => paragraphIds.Contains(p.Id))
|
||||
.Select(
|
||||
p => new
|
||||
{
|
||||
p.Id,
|
||||
p.Text.SourceFile,
|
||||
})
|
||||
.ToListAsync();
|
||||
return sources.ToDictionary(x => x.Id, x => Path.GetFileNameWithoutExtension(x.SourceFile));
|
||||
}
|
||||
|
||||
private static async Task WriteContext(StreamWriter writer, List<ConcordanceToken> tokens)
|
||||
{
|
||||
if (tokens != null)
|
||||
@@ -91,16 +116,20 @@ public class ExportConcordancesHandler : BaseSearchConcordancesHandler, IRequest
|
||||
await writer.WriteAsync("Iskani niz");
|
||||
await writer.WriteAsync("\t");
|
||||
await writer.WriteAsync("Desno besedilo");
|
||||
await writer.WriteAsync("\t");
|
||||
await writer.WriteAsync("Vir");
|
||||
await writer.WriteLineAsync();
|
||||
}
|
||||
|
||||
private static async Task WriteItem(StreamWriter writer, SearchConcordancesResponseItem item)
|
||||
private static async Task WriteItem(StreamWriter writer, SearchConcordancesResponseItem item, string source)
|
||||
{
|
||||
await WriteContext(writer, item.LeftContext);
|
||||
await writer.WriteAsync("\t");
|
||||
await writer.WriteAsync(item.CenterContext.Form);
|
||||
await writer.WriteAsync("\t");
|
||||
await WriteContext(writer, item.RightContext);
|
||||
await writer.WriteAsync("\t");
|
||||
await writer.WriteAsync(source);
|
||||
await writer.WriteLineAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user