mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-13 12:13:48 +00:00
Lock data sources with an unreadable index in the selection
This commit is contained in:
9 files changed
+158
-28
No files matched your search
@@ -51,6 +51,8 @@ public partial class DataSourceSelection : MSGComponentBase
|
||||
private IReadOnlyList<IDataSource> availableDataSources = [];
|
||||
private IReadOnlyList<IDataSource> dataSourcesAwaitingReindex = [];
|
||||
private HashSet<string> dataSourceIdsAwaitingReindex = new(StringComparer.Ordinal);
|
||||
private IReadOnlyList<IDataSource> dataSourcesNeedingRepair = [];
|
||||
private HashSet<string> dataSourceIdsNeedingRepair = new(StringComparer.Ordinal);
|
||||
private IReadOnlyCollection<IDataSource> selectedDataSources = [];
|
||||
private bool aiBasedSourceSelection;
|
||||
private bool aiBasedValidation;
|
||||
@@ -230,15 +232,33 @@ public partial class DataSourceSelection : MSGComponentBase
|
||||
this.availableDataSources = sources.AllowedDataSources;
|
||||
this.dataSourcesAwaitingReindex = sources.DataSourcesAwaitingReindex;
|
||||
this.dataSourceIdsAwaitingReindex = sources.DataSourcesAwaitingReindex.Select(source => source.Id).ToHashSet(StringComparer.Ordinal);
|
||||
this.dataSourcesNeedingRepair = sources.DataSourcesNeedingRepair;
|
||||
this.dataSourceIdsNeedingRepair = sources.DataSourcesNeedingRepair.Select(source => source.Id).ToHashSet(StringComparer.Ordinal);
|
||||
this.selectedDataSources = sources.SelectedDataSources;
|
||||
this.waitingForDataSources = false;
|
||||
this.StateHasChanged();
|
||||
}
|
||||
|
||||
private bool IsAwaitingReindex(IDataSource dataSource) => this.dataSourceIdsAwaitingReindex.Contains(dataSource.Id);
|
||||
/// <summary>
|
||||
/// Why a data source is listed but cannot be picked, if it cannot.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The repair is asked about first. The service hands a data source to one of the two lists
|
||||
/// only, but should that ever change, the reason the user can act on is the one worth showing.
|
||||
/// </remarks>
|
||||
private DataSourceBlockReason GetBlockReason(IDataSource dataSource)
|
||||
{
|
||||
if (this.dataSourceIdsNeedingRepair.Contains(dataSource.Id))
|
||||
return DataSourceBlockReason.NEEDS_REPAIR;
|
||||
|
||||
if (this.dataSourceIdsAwaitingReindex.Contains(dataSource.Id))
|
||||
return DataSourceBlockReason.AWAITING_REINDEX;
|
||||
|
||||
return DataSourceBlockReason.NONE;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The data sources the list shows: the usable ones, plus the ones waiting for their index.
|
||||
/// The data sources the list shows: the usable ones, plus the ones which cannot be searched.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Kept in the order the data sources were configured in, rather than usable ones first. A row
|
||||
@@ -247,11 +267,12 @@ public partial class DataSourceSelection : MSGComponentBase
|
||||
/// </remarks>
|
||||
private IReadOnlyList<IDataSource> GetListedDataSources()
|
||||
{
|
||||
if (this.dataSourcesAwaitingReindex.Count == 0)
|
||||
if (this.dataSourcesAwaitingReindex.Count == 0 && this.dataSourcesNeedingRepair.Count == 0)
|
||||
return this.availableDataSources;
|
||||
|
||||
var listedIds = this.availableDataSources.Select(source => source.Id).ToHashSet(StringComparer.Ordinal);
|
||||
listedIds.UnionWith(this.dataSourceIdsAwaitingReindex);
|
||||
listedIds.UnionWith(this.dataSourceIdsNeedingRepair);
|
||||
return this.GetConfiguredDataSourcesSnapshot().Where(source => listedIds.Contains(source.Id)).ToList();
|
||||
}
|
||||
|
||||
@@ -259,11 +280,11 @@ public partial class DataSourceSelection : MSGComponentBase
|
||||
/// The preselected but unusable data sources the warning box lists.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The ones waiting for their index are left out: they have a row of their own in the list
|
||||
/// The ones which are only blocked are left out: they have a row of their own in the list
|
||||
/// above, which says the same thing in the place the user is already looking.
|
||||
/// </remarks>
|
||||
private IReadOnlyList<IDataSource> GetUnavailablePreselectedDataSourcesToList() =>
|
||||
this.GetUnavailablePreselectedDataSources().Where(source => !this.IsAwaitingReindex(source)).ToList();
|
||||
this.GetUnavailablePreselectedDataSources().Where(source => this.GetBlockReason(source) is DataSourceBlockReason.NONE).ToList();
|
||||
|
||||
private async Task EnabledChanged(bool state)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user