feat: complete legacy parity and modernize operator UI
This commit is contained in:
@@ -33,9 +33,6 @@ internal static class LegacySceneRuntimeFactory
|
||||
var imageQuoteLoader = new S6001SceneDataLoader(executor);
|
||||
var worldMapLoader = new S8067SceneDataLoader(executor);
|
||||
var candleLoader = new S8010SceneDataLoader(executor);
|
||||
var fiveRowLoader = new S5074SceneDataLoader(executor);
|
||||
var sixRowLoader = new S5077SceneDataLoader(executor);
|
||||
var twelveRowLoader = new S5088SceneDataLoader(executor);
|
||||
var parameterizedRequestResolver = new LegacyParameterizedSceneRequestResolver(executor);
|
||||
var oneColumnLoader = new S5001SceneDataLoader(executor);
|
||||
var futuresPairLoader = new S5032SceneDataLoader(executor);
|
||||
@@ -359,6 +356,46 @@ internal static class LegacySceneRuntimeFactory
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
return new LegacySceneDataPage("s8010", data, 1);
|
||||
}),
|
||||
.. CreatePagedQuoteRoutes(executor, trustedViSource)
|
||||
]);
|
||||
|
||||
LegacySceneRuntimeCoverage.Validate(dataSource);
|
||||
if (compositionOptions is not null && compositionOptionsSource is not null)
|
||||
{
|
||||
throw new ArgumentException(
|
||||
"Specify either fixed or mutable scene composition options, not both.");
|
||||
}
|
||||
|
||||
var cueProvider = compositionOptionsSource is null
|
||||
? new RegisteredLegacySceneCueProvider(dataSource, options: compositionOptions)
|
||||
: new RegisteredLegacySceneCueProvider(dataSource, compositionOptionsSource);
|
||||
return new LegacyPlayoutWorkflow(engine, cueProvider);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the read-only PageN boundary used when a fixed 5-, 6-, or 12-row
|
||||
/// action is first added to the operator playlist. This path does not create a
|
||||
/// cue, dispatch an engine command, or touch COM/vendor objects.
|
||||
/// </summary>
|
||||
public static ILegacyScenePagePlanProvider CreatePagePlanProvider(
|
||||
IDataQueryExecutor executor,
|
||||
ITrustedViStockNameSnapshotSource? trustedViSource = null)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(executor);
|
||||
var dataSource = new LegacySceneDataSourceRouter(
|
||||
CreatePagedQuoteRoutes(executor, trustedViSource));
|
||||
return new RegisteredLegacySceneCueProvider(dataSource);
|
||||
}
|
||||
|
||||
private static IReadOnlyList<LegacySceneDataSourceRoute> CreatePagedQuoteRoutes(
|
||||
IDataQueryExecutor executor,
|
||||
ITrustedViStockNameSnapshotSource? trustedViSource)
|
||||
{
|
||||
var fiveRowLoader = new S5074SceneDataLoader(executor);
|
||||
var sixRowLoader = new S5077SceneDataLoader(executor);
|
||||
var twelveRowLoader = new S5088SceneDataLoader(executor);
|
||||
return
|
||||
[
|
||||
new LegacySceneDataSourceRoute(["5074"], async (entry, page, cancellationToken) =>
|
||||
{
|
||||
var selection = RequireSelection(entry);
|
||||
@@ -412,19 +449,7 @@ internal static class LegacySceneRuntimeFactory
|
||||
.ConfigureAwait(false);
|
||||
return new LegacySceneDataPage("s5088", data, data.Rows.Count);
|
||||
})
|
||||
]);
|
||||
|
||||
LegacySceneRuntimeCoverage.Validate(dataSource);
|
||||
if (compositionOptions is not null && compositionOptionsSource is not null)
|
||||
{
|
||||
throw new ArgumentException(
|
||||
"Specify either fixed or mutable scene composition options, not both.");
|
||||
}
|
||||
|
||||
var cueProvider = compositionOptionsSource is null
|
||||
? new RegisteredLegacySceneCueProvider(dataSource, options: compositionOptions)
|
||||
: new RegisteredLegacySceneCueProvider(dataSource, compositionOptionsSource);
|
||||
return new LegacyPlayoutWorkflow(engine, cueProvider);
|
||||
];
|
||||
}
|
||||
|
||||
private static LegacySceneSelection RequireSelection(LegacyPlaylistEntry entry) =>
|
||||
@@ -532,6 +557,9 @@ internal static class LegacySceneRuntimeFactory
|
||||
return value;
|
||||
}
|
||||
|
||||
private static string ResolveNxtThemeLoaderTitle(LegacySceneSelection selection)
|
||||
=> RequireLookupValue(selection.Subject, "NXT theme");
|
||||
|
||||
private static bool HasClosedFlag(string value, string flag) =>
|
||||
value.Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
|
||||
.Contains(flag, StringComparer.Ordinal);
|
||||
@@ -565,16 +593,17 @@ internal static class LegacySceneRuntimeFactory
|
||||
page),
|
||||
"PAGED_THEME" => new ThemePagedQuoteLoadRequest(
|
||||
RequireLookupValue(selection.DataCode, "theme code"),
|
||||
RequireLookupValue(selection.Subject, "theme"),
|
||||
RequireLookupValue(selection.ExactSubject ?? selection.Subject, "theme"),
|
||||
ParseThemeSort(selection.GraphicType),
|
||||
ParseThemeValueKind(selection.Subtype),
|
||||
page),
|
||||
"PAGED_NXT_THEME" => new NxtThemePagedQuoteLoadRequest(
|
||||
RequireLookupValue(selection.DataCode, "NXT theme code"),
|
||||
RequireLookupValue(selection.Subject, "NXT theme"),
|
||||
ResolveNxtThemeLoaderTitle(selection),
|
||||
ParseThemeSort(selection.Subtype),
|
||||
ParseNxtSession(selection.GraphicType),
|
||||
page),
|
||||
page,
|
||||
selection.ExactSubject),
|
||||
"PAGED_EXPERT" => new ExpertPagedQuoteLoadRequest(
|
||||
RequireLookupValue(selection.DataCode, "expert code"),
|
||||
RequireLookupValue(selection.Subject, "expert"),
|
||||
|
||||
Reference in New Issue
Block a user