mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 01:18:34 +00:00
removed unused code/state used by the old TTS and other pages
This commit is contained in:
1 parent
889db40215
commit
2cacb14970
5 files changed
+172
-419
No files matched your search
@@ -8,7 +8,6 @@ import {
|
||||
DetectLocale,
|
||||
DetectLocaleIsOk,
|
||||
} from "@storyteller/components/src/api/locale/DetectLocale";
|
||||
import { Language } from "@storyteller/components/src/i18n/Language";
|
||||
import { BrowserRouter, Route, Switch } from "react-router-dom";
|
||||
import PageContainer from "./v2/view/PageContainer";
|
||||
import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper";
|
||||
@@ -16,13 +15,10 @@ import { PosthogClient } from "@storyteller/components/src/analytics/PosthogClie
|
||||
import { SessionSubscriptionsWrapper } from "@storyteller/components/src/session/SessionSubscriptionsWrapper";
|
||||
import { TtsInferenceJob } from "@storyteller/components/src/jobs/TtsInferenceJobs";
|
||||
import { W2lInferenceJob } from "@storyteller/components/src/jobs/W2lInferenceJobs";
|
||||
import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels";
|
||||
import { TtsCategoryType } from "./AppWrapper";
|
||||
import { FAKEYOU_MERGED_TRANSLATIONS } from "./_i18n/FakeYouTranslations";
|
||||
import i18n from "i18next";
|
||||
import { initReactI18next } from "react-i18next";
|
||||
import deepEqual from "deep-equal";
|
||||
import { GetComputedTtsCategoryAssignmentsSuccessResponse } from "@storyteller/components/src/api/category/GetComputedTtsCategoryAssignments";
|
||||
import {
|
||||
AvailableLanguageKey,
|
||||
AVAILABLE_LANGUAGE_MAP,
|
||||
@@ -78,125 +74,52 @@ enum MigrationMode {
|
||||
OLD_VOCODES,
|
||||
}
|
||||
|
||||
interface Props {
|
||||
enableSpectrograms: boolean;
|
||||
|
||||
flashVocodesNotice: boolean;
|
||||
|
||||
allTtsCategories: TtsCategoryType[];
|
||||
setAllTtsCategories: (allTtsCategories: TtsCategoryType[]) => void;
|
||||
|
||||
allTtsModels: TtsModelListItem[];
|
||||
setAllTtsModels: (allTtsModels: TtsModelListItem[]) => void;
|
||||
|
||||
computedTtsCategoryAssignments?: GetComputedTtsCategoryAssignmentsSuccessResponse;
|
||||
setComputedTtsCategoryAssignments: (
|
||||
categoryAssignments: GetComputedTtsCategoryAssignmentsSuccessResponse
|
||||
) => void;
|
||||
|
||||
allTtsCategoriesByTokenMap: Map<string, TtsCategoryType>;
|
||||
allTtsModelsByTokenMap: Map<string, TtsModelListItem>;
|
||||
ttsModelsByCategoryToken: Map<string, Set<TtsModelListItem>>;
|
||||
|
||||
dropdownCategories: TtsCategoryType[][];
|
||||
setDropdownCategories: (dropdownCategories: TtsCategoryType[][]) => void;
|
||||
selectedCategories: TtsCategoryType[];
|
||||
setSelectedCategories: (selectedCategories: TtsCategoryType[]) => void;
|
||||
|
||||
maybeSelectedTtsModel?: TtsModelListItem;
|
||||
setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void;
|
||||
|
||||
selectedTtsLanguageScope: string;
|
||||
setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void;
|
||||
}
|
||||
interface Props {}
|
||||
|
||||
interface State {
|
||||
// Migration Mode
|
||||
migrationMode: MigrationMode;
|
||||
// migrationMode: MigrationMode;
|
||||
|
||||
// Rollout of vocodes 2.0
|
||||
enableAlpha: boolean;
|
||||
// enableAlpha: boolean;
|
||||
|
||||
sessionFetched: boolean;
|
||||
sessionWrapper: SessionWrapper;
|
||||
sessionSubscriptionsWrapper: SessionSubscriptionsWrapper;
|
||||
|
||||
// Show flash notice of vocodes name change
|
||||
isShowingVocodesNotice: boolean;
|
||||
|
||||
// Locale + show flash notice to Spanish speakers
|
||||
//localeLanguageCodes: string[],
|
||||
//localeFullLanguageTags: string[],
|
||||
isShowingLanguageNotice: boolean;
|
||||
displayLanguage: Language;
|
||||
primaryLanguageCode: string;
|
||||
// isShowingLanguageNotice: boolean;
|
||||
// displayLanguage: Language;
|
||||
// primaryLanguageCode: string;
|
||||
|
||||
isShowingTwitchTtsNotice: boolean;
|
||||
isShowingPleaseFollowNotice: boolean;
|
||||
// isShowingTwitchTtsNotice: boolean;
|
||||
// isShowingPleaseFollowNotice: boolean;
|
||||
|
||||
// An improved notice for "new" languages asking users to help.
|
||||
isShowingBootstrapLanguageNotice: boolean;
|
||||
// isShowingBootstrapLanguageNotice: boolean;
|
||||
|
||||
// Current text entered
|
||||
textBuffer: string;
|
||||
|
||||
voiceConversionModels: VoiceConversionModelListItem[];
|
||||
// voiceConversionModels: VoiceConversionModelListItem[];
|
||||
maybeSelectedVoiceConversionModel?: VoiceConversionModelListItem;
|
||||
}
|
||||
|
||||
function newVocodes() {
|
||||
const discord = /discord/i.test(navigator.userAgent || "");
|
||||
const twitter = /twitter/i.test(navigator.userAgent || "");
|
||||
const alphaCookie = document.cookie.includes("enable-alpha");
|
||||
return discord || twitter || alphaCookie;
|
||||
}
|
||||
|
||||
function isMacOs() {
|
||||
// Not on macs yet
|
||||
// https://stackoverflow.com/a/38241481
|
||||
const platform = window.navigator.platform;
|
||||
const macPlatforms = ["Macintosh", "MacIntel", "MacPPC", "Mac68K", "darwin"];
|
||||
return macPlatforms.indexOf(platform) !== -1;
|
||||
}
|
||||
|
||||
// TODO: Port to functional component
|
||||
class App extends React.Component<Props, State> {
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
const enableAlpha = newVocodes() || true;
|
||||
|
||||
const migrationMode = enableAlpha
|
||||
? MigrationMode.NEW_VOCODES
|
||||
: MigrationMode.OLD_VOCODES;
|
||||
|
||||
let showTwitchNotice = !isMacOs();
|
||||
showTwitchNotice = false; // TODO: Temporarily disabled.
|
||||
|
||||
let showPleaseFollowNotice = false;
|
||||
|
||||
this.state = {
|
||||
enableAlpha: enableAlpha,
|
||||
migrationMode: migrationMode,
|
||||
|
||||
sessionFetched: false,
|
||||
sessionWrapper: SessionWrapper.emptySession(),
|
||||
sessionSubscriptionsWrapper:
|
||||
SessionSubscriptionsWrapper.emptySubscriptions(),
|
||||
|
||||
isShowingVocodesNotice: props.flashVocodesNotice,
|
||||
|
||||
isShowingLanguageNotice: false,
|
||||
displayLanguage: Language.English,
|
||||
primaryLanguageCode: "en",
|
||||
|
||||
isShowingTwitchTtsNotice: showTwitchNotice,
|
||||
isShowingPleaseFollowNotice: showPleaseFollowNotice,
|
||||
isShowingBootstrapLanguageNotice: false,
|
||||
|
||||
textBuffer: "",
|
||||
|
||||
voiceConversionModels: [],
|
||||
maybeSelectedVoiceConversionModel: undefined,
|
||||
};
|
||||
}
|
||||
@@ -319,15 +242,6 @@ class App extends React.Component<Props, State> {
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
isShowingLanguageNotice: false, // TODO: Remove/consolidate
|
||||
displayLanguage: preferredLanguage.language,
|
||||
primaryLanguageCode: preferredLanguage.languageCode,
|
||||
isShowingPleaseFollowNotice: preferredLanguage.showPleaseFollowNotice,
|
||||
isShowingBootstrapLanguageNotice:
|
||||
preferredLanguage.showBootstrapLanguageNotice,
|
||||
});
|
||||
|
||||
i18n.changeLanguage(preferredLanguage.languageCode);
|
||||
i18n2.changeLanguage(preferredLanguage.languageCode);
|
||||
}
|
||||
@@ -353,40 +267,6 @@ class App extends React.Component<Props, State> {
|
||||
});
|
||||
};
|
||||
|
||||
clearVocodesNotice = () => {
|
||||
this.setState({ isShowingVocodesNotice: false });
|
||||
};
|
||||
|
||||
clearLanguageNotice = () => {
|
||||
this.setState({ isShowingLanguageNotice: false });
|
||||
};
|
||||
|
||||
clearTwitchTtsNotice = () => {
|
||||
this.setState({ isShowingTwitchTtsNotice: false });
|
||||
};
|
||||
|
||||
clearPleaseFollowNotice = () => {
|
||||
this.setState({ isShowingPleaseFollowNotice: false });
|
||||
};
|
||||
|
||||
clearBootstrapLanguageNotice = () => {
|
||||
this.setState({ isShowingBootstrapLanguageNotice: false });
|
||||
};
|
||||
|
||||
setAllVoiceConversionModels = (models: VoiceConversionModelListItem[]) => {
|
||||
this.setState({ voiceConversionModels: models });
|
||||
};
|
||||
|
||||
setMaybeSelectedVoiceConversionModel = (
|
||||
model?: VoiceConversionModelListItem
|
||||
) => {
|
||||
this.setState({ maybeSelectedVoiceConversionModel: model });
|
||||
};
|
||||
|
||||
setMigrationMode = (mode: MigrationMode) => {
|
||||
this.setState({ migrationMode: mode });
|
||||
};
|
||||
|
||||
setTextBuffer = (textBuffer: string) => {
|
||||
this.setState({ textBuffer: textBuffer });
|
||||
};
|
||||
@@ -427,72 +307,12 @@ class App extends React.Component<Props, State> {
|
||||
querySessionSubscriptionsAction={
|
||||
this.querySessionSubscriptions
|
||||
}
|
||||
isShowingVocodesNotice={this.state.isShowingVocodesNotice}
|
||||
clearVocodesNotice={this.clearVocodesNotice}
|
||||
isShowingLangaugeNotice={
|
||||
this.state.isShowingLanguageNotice
|
||||
}
|
||||
clearLanguageNotice={this.clearLanguageNotice}
|
||||
displayLanguage={this.state.displayLanguage}
|
||||
primaryLanguageCode={this.state.primaryLanguageCode}
|
||||
isShowingTwitchTtsNotice={
|
||||
this.state.isShowingTwitchTtsNotice
|
||||
}
|
||||
clearTwitchTtsNotice={this.clearTwitchTtsNotice}
|
||||
isShowingPleaseFollowNotice={
|
||||
this.state.isShowingPleaseFollowNotice
|
||||
}
|
||||
clearPleaseFollowNotice={this.clearPleaseFollowNotice}
|
||||
isShowingBootstrapLanguageNotice={
|
||||
this.state.isShowingBootstrapLanguageNotice
|
||||
}
|
||||
clearBootstrapLanguageNotice={
|
||||
this.clearBootstrapLanguageNotice
|
||||
}
|
||||
textBuffer={this.state.textBuffer}
|
||||
setTextBuffer={this.setTextBuffer}
|
||||
clearTextBuffer={this.clearTextBuffer}
|
||||
ttsModels={this.props.allTtsModels}
|
||||
setTtsModels={this.props.setAllTtsModels}
|
||||
allTtsCategories={this.props.allTtsCategories}
|
||||
setAllTtsCategories={this.props.setAllTtsCategories}
|
||||
computedTtsCategoryAssignments={
|
||||
this.props.computedTtsCategoryAssignments
|
||||
}
|
||||
setComputedTtsCategoryAssignments={
|
||||
this.props.setComputedTtsCategoryAssignments
|
||||
}
|
||||
allTtsCategoriesByTokenMap={
|
||||
this.props.allTtsCategoriesByTokenMap
|
||||
}
|
||||
allTtsModelsByTokenMap={this.props.allTtsModelsByTokenMap}
|
||||
ttsModelsByCategoryToken={
|
||||
this.props.ttsModelsByCategoryToken
|
||||
}
|
||||
dropdownCategories={this.props.dropdownCategories}
|
||||
setDropdownCategories={this.props.setDropdownCategories}
|
||||
selectedCategories={this.props.selectedCategories}
|
||||
setSelectedCategories={this.props.setSelectedCategories}
|
||||
maybeSelectedTtsModel={this.props.maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={
|
||||
this.props.setMaybeSelectedTtsModel
|
||||
}
|
||||
selectedTtsLanguageScope={
|
||||
this.props.selectedTtsLanguageScope
|
||||
}
|
||||
setSelectedTtsLanguageScope={
|
||||
this.props.setSelectedTtsLanguageScope
|
||||
}
|
||||
voiceConversionModels={this.state.voiceConversionModels}
|
||||
setVoiceConversionModels={
|
||||
this.setAllVoiceConversionModels
|
||||
}
|
||||
maybeSelectedVoiceConversionModel={
|
||||
this.state.maybeSelectedVoiceConversionModel
|
||||
}
|
||||
setMaybeSelectedVoiceConversionModel={
|
||||
this.setMaybeSelectedVoiceConversionModel
|
||||
}
|
||||
/>
|
||||
</Route>
|
||||
</Switch>
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
import React from 'react';
|
||||
import { withTranslation } from 'react-i18next';
|
||||
import { AppWrapper } from './AppWrapper';
|
||||
import React from "react";
|
||||
import { withTranslation } from "react-i18next";
|
||||
import { AppWrapper } from "./AppWrapper";
|
||||
|
||||
interface Props {
|
||||
// Certan browsers (iPhone) have pitiful support for drawing APIs. Worse yet,
|
||||
// they seem to lose the "touch event sandboxing" that allows for audio to be
|
||||
// played after user interaction if the XHRs delivering the audio don't do so
|
||||
// as actual audio mimetypes. (Decoding from base64 and trying to play fails.)
|
||||
enableSpectrograms: boolean,
|
||||
// interface Props {
|
||||
// // Certan browsers (iPhone) have pitiful support for drawing APIs. Worse yet,
|
||||
// // they seem to lose the "touch event sandboxing" that allows for audio to be
|
||||
// // played after user interaction if the XHRs delivering the audio don't do so
|
||||
// // as actual audio mimetypes. (Decoding from base64 and trying to play fails.)
|
||||
// enableSpectrograms: boolean,
|
||||
|
||||
// Whether or not to inform users that the name of the website has changed.
|
||||
flashVocodesNotice: boolean,
|
||||
}
|
||||
// // Whether or not to inform users that the name of the website has changed.
|
||||
// flashVocodesNotice: boolean,
|
||||
// }
|
||||
|
||||
function AppTranslated(props: Props) {
|
||||
function AppTranslated() {
|
||||
// props: Props
|
||||
return (
|
||||
<AppWrapper
|
||||
enableSpectrograms={props.enableSpectrograms}
|
||||
flashVocodesNotice={props.flashVocodesNotice}
|
||||
/>
|
||||
)
|
||||
<AppWrapper
|
||||
// enableSpectrograms={props.enableSpectrograms}
|
||||
// flashVocodesNotice={props.flashVocodesNotice}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
// NB: This is a Higher Order Component (HOC) that will pass `t` and `i18n`
|
||||
|
||||
@@ -1,178 +1,188 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import React from // useEffect, useState
|
||||
"react";
|
||||
import { TtsCategory } from "@storyteller/components/src/api/category/ListTtsCategories";
|
||||
import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels";
|
||||
// import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels";
|
||||
import { App } from "./App";
|
||||
import { GetComputedTtsCategoryAssignmentsSuccessResponse } from "@storyteller/components/src/api/category/GetComputedTtsCategoryAssignments";
|
||||
// import { GetComputedTtsCategoryAssignmentsSuccessResponse } from "@storyteller/components/src/api/category/GetComputedTtsCategoryAssignments";
|
||||
import { SyntheticCategory } from "./model/categories/SyntheticCategory";
|
||||
|
||||
interface Props {
|
||||
// Certan browsers (iPhone) have pitiful support for drawing APIs. Worse yet,
|
||||
// they seem to lose the "touch event sandboxing" that allows for audio to be
|
||||
// played after user interaction if the XHRs delivering the audio don't do so
|
||||
// as actual audio mimetypes. (Decoding from base64 and trying to play fails.)
|
||||
enableSpectrograms: boolean;
|
||||
// interface Props {
|
||||
// // Certan browsers (iPhone) have pitiful support for drawing APIs. Worse yet,
|
||||
// // they seem to lose the "touch event sandboxing" that allows for audio to be
|
||||
// // played after user interaction if the XHRs delivering the audio don't do so
|
||||
// // as actual audio mimetypes. (Decoding from base64 and trying to play fails.)
|
||||
// enableSpectrograms: boolean;
|
||||
|
||||
// Whether or not to inform users that the name of the website has changed.
|
||||
flashVocodesNotice: boolean;
|
||||
}
|
||||
// // Whether or not to inform users that the name of the website has changed.
|
||||
// flashVocodesNotice: boolean;
|
||||
// }
|
||||
|
||||
export type TtsCategoryType = TtsCategory | SyntheticCategory;
|
||||
|
||||
export function AppWrapper(props: Props) {
|
||||
export function AppWrapper() {
|
||||
// props: Props
|
||||
// Caches of all objects queried
|
||||
// These may be triggered by a different page than the user initially lands on.
|
||||
const [allTtsCategories, setAllTtsCategories] =
|
||||
useState<TtsCategoryType[]>([]);
|
||||
const [allTtsModels, setAllTtsModels] =
|
||||
useState<TtsModelListItem[]>([]);
|
||||
const [computedTtsCategoryAssignments, setComputedTtsCategoryAssignments] =
|
||||
useState<GetComputedTtsCategoryAssignmentsSuccessResponse | undefined>(undefined);
|
||||
// const [allTtsCategories, setAllTtsCategories] = useState<TtsCategoryType[]>(
|
||||
// []
|
||||
// );
|
||||
// const [allTtsModels, setAllTtsModels] = useState<TtsModelListItem[]>([]);
|
||||
// const [computedTtsCategoryAssignments, setComputedTtsCategoryAssignments] =
|
||||
// useState<GetComputedTtsCategoryAssignmentsSuccessResponse | undefined>(
|
||||
// undefined
|
||||
// );
|
||||
|
||||
// Precalculated maps for lookup by primary key
|
||||
const [allCategoriesByTokenMap, setAllCategoriesByTokenMap] =
|
||||
useState<Map<string, TtsCategoryType>>(new Map());
|
||||
const [allTtsModelsByTokenMap, setAllTtsModelsByTokenMap] =
|
||||
useState<Map<string, TtsModelListItem>>(new Map());
|
||||
// const [allCategoriesByTokenMap, setAllCategoriesByTokenMap] = useState<
|
||||
// Map<string, TtsCategoryType>
|
||||
// >(new Map());
|
||||
// const [allTtsModelsByTokenMap, setAllTtsModelsByTokenMap] = useState<
|
||||
// Map<string, TtsModelListItem>
|
||||
// >(new Map());
|
||||
|
||||
// Precalculated map for lookup by foreign key
|
||||
// A TTS voice is attached to every category up the tree from the leaf.
|
||||
// We recursively build this, 1) to ensure we can access a voice at all levels
|
||||
// of specificity, and 2) to prune empty categories.
|
||||
const [ttsModelsByCategoryToken, setTtsModelsByCategoryToken] =
|
||||
useState<Map<string, Set<TtsModelListItem>>>(new Map());
|
||||
// const [ttsModelsByCategoryToken, setTtsModelsByCategoryToken] = useState<
|
||||
// Map<string, Set<TtsModelListItem>>
|
||||
// >(new Map());
|
||||
|
||||
// Calculated dropdown options for every level of categories.
|
||||
// Outer array has length of at least one, one element per <select>
|
||||
// Inner array contains the categories in each level.
|
||||
// Structure: [dropdownLevel][categories]
|
||||
const [dropdownCategories, setDropdownCategories] =
|
||||
useState<TtsCategoryType[][]>([]);
|
||||
// const [dropdownCategories, setDropdownCategories] = useState<
|
||||
// TtsCategoryType[][]
|
||||
// >([]);
|
||||
|
||||
// User selections.
|
||||
// Every category in the heirarchy that has been selected by the user.
|
||||
// Empty list if none are selected.
|
||||
// Structure: [firstSelected, secondSelected...]
|
||||
const [selectedCategories, setSelectedCategories] =
|
||||
useState<TtsCategoryType[]>([]);
|
||||
// const [selectedCategories, setSelectedCategories] = useState<
|
||||
// TtsCategoryType[]
|
||||
// >([]);
|
||||
|
||||
// User selections.
|
||||
const [maybeSelectedTtsModel, setMaybeSelectedTtsModel] =
|
||||
useState<TtsModelListItem | undefined>(undefined);
|
||||
// const [maybeSelectedTtsModel, setMaybeSelectedTtsModel] = useState<
|
||||
// TtsModelListItem | undefined
|
||||
// >(undefined);
|
||||
|
||||
// User selections.
|
||||
// This allows the user to filter out voices that don't match their
|
||||
// preferred language.
|
||||
// This allows the user to filter out voices that don't match their
|
||||
// preferred language.
|
||||
// Values are IETF 2-letter language codes. Other locale information is stripped.
|
||||
// The value "*" serves as a sentinel for all voices / no filter.
|
||||
const [selectedTtsLanguageScope, setSelectedTtsLanguageScope] =
|
||||
useState<string>("*");
|
||||
// const [selectedTtsLanguageScope, setSelectedTtsLanguageScope] =
|
||||
// useState<string>("*");
|
||||
|
||||
// TODO: Handle empty category list
|
||||
useEffect(() => {
|
||||
// Category lookup by token
|
||||
let categoriesByTokenMap = new Map();
|
||||
allTtsCategories.forEach((category) => {
|
||||
categoriesByTokenMap.set(category.category_token, category);
|
||||
});
|
||||
setAllCategoriesByTokenMap(categoriesByTokenMap);
|
||||
// useEffect(() => {
|
||||
// // Category lookup by token
|
||||
// let categoriesByTokenMap = new Map();
|
||||
// allTtsCategories.forEach(category => {
|
||||
// categoriesByTokenMap.set(category.category_token, category);
|
||||
// });
|
||||
// setAllCategoriesByTokenMap(categoriesByTokenMap);
|
||||
|
||||
// TTS model lookup by token
|
||||
let ttsModelsByTokenMap = new Map();
|
||||
allTtsModels.forEach((model) => {
|
||||
ttsModelsByTokenMap.set(model.model_token, model);
|
||||
});
|
||||
setAllTtsModelsByTokenMap(ttsModelsByTokenMap);
|
||||
// // TTS model lookup by token
|
||||
// let ttsModelsByTokenMap = new Map();
|
||||
// allTtsModels.forEach(model => {
|
||||
// ttsModelsByTokenMap.set(model.model_token, model);
|
||||
// });
|
||||
// setAllTtsModelsByTokenMap(ttsModelsByTokenMap);
|
||||
|
||||
// Initial dropdown state
|
||||
const rootCategories = allTtsCategories.filter((category) => {
|
||||
return !category.maybe_super_category_token;
|
||||
});
|
||||
const rootLevel = [rootCategories];
|
||||
setDropdownCategories(rootLevel);
|
||||
// Initial dropdown state
|
||||
// const rootCategories = allTtsCategories.filter(category => {
|
||||
// return !category.maybe_super_category_token;
|
||||
// });
|
||||
// const rootLevel = [rootCategories];
|
||||
// setDropdownCategories(rootLevel);
|
||||
|
||||
/// NB: This was the really expensive cubic time++ aglorithm to recursively calculate nested category assignments.
|
||||
/// This has since been ported to the server and will no longer be computed here. We're preserving this for posterity.
|
||||
///
|
||||
/// // Voice lookup table
|
||||
/// let categoriesToTtsModelTokens = new Map();
|
||||
/// // Category ancestry memoization
|
||||
/// let categoryTokenToAllAncestorTokens : Map<string, Set<string>> = new Map();
|
||||
///
|
||||
/// // N * M with memoization should't be too bad here.
|
||||
/// // Also note that the models should be lexographically sorted by name.
|
||||
/// allTtsModels.forEach(ttsModel => {
|
||||
/// if (ttsModel.category_tokens.length === 0) {
|
||||
/// // TODO: Attach to "uncategorized" special category
|
||||
/// return;
|
||||
/// }
|
||||
/// ttsModel.category_tokens.forEach(categoryToken => {
|
||||
/// let ancestors = categoryTokenToAllAncestorTokens.get(categoryToken);
|
||||
/// if (ancestors === undefined) {
|
||||
/// ancestors = findAllAncestorTokens(categoryToken, categoriesByTokenMap);
|
||||
/// categoryTokenToAllAncestorTokens.set(categoryToken, ancestors);
|
||||
/// }
|
||||
/// ancestors.forEach(categoryToken => {
|
||||
/// let models : Set<TtsModelListItem> = categoriesToTtsModelTokens.get(categoryToken);
|
||||
/// if (models === undefined) {
|
||||
/// models = new Set();
|
||||
/// categoriesToTtsModelTokens.set(categoryToken, models);
|
||||
/// }
|
||||
/// models.add(ttsModel);
|
||||
/// })
|
||||
/// });
|
||||
/// });
|
||||
/// setTtsModelsByCategoryToken(categoriesToTtsModelTokens);
|
||||
/// NB: This was the really expensive cubic time++ aglorithm to recursively calculate nested category assignments.
|
||||
/// This has since been ported to the server and will no longer be computed here. We're preserving this for posterity.
|
||||
///
|
||||
/// // Voice lookup table
|
||||
/// let categoriesToTtsModelTokens = new Map();
|
||||
/// // Category ancestry memoization
|
||||
/// let categoryTokenToAllAncestorTokens : Map<string, Set<string>> = new Map();
|
||||
///
|
||||
/// // N * M with memoization should't be too bad here.
|
||||
/// // Also note that the models should be lexographically sorted by name.
|
||||
/// allTtsModels.forEach(ttsModel => {
|
||||
/// if (ttsModel.category_tokens.length === 0) {
|
||||
/// // TODO: Attach to "uncategorized" special category
|
||||
/// return;
|
||||
/// }
|
||||
/// ttsModel.category_tokens.forEach(categoryToken => {
|
||||
/// let ancestors = categoryTokenToAllAncestorTokens.get(categoryToken);
|
||||
/// if (ancestors === undefined) {
|
||||
/// ancestors = findAllAncestorTokens(categoryToken, categoriesByTokenMap);
|
||||
/// categoryTokenToAllAncestorTokens.set(categoryToken, ancestors);
|
||||
/// }
|
||||
/// ancestors.forEach(categoryToken => {
|
||||
/// let models : Set<TtsModelListItem> = categoriesToTtsModelTokens.get(categoryToken);
|
||||
/// if (models === undefined) {
|
||||
/// models = new Set();
|
||||
/// categoriesToTtsModelTokens.set(categoryToken, models);
|
||||
/// }
|
||||
/// models.add(ttsModel);
|
||||
/// })
|
||||
/// });
|
||||
/// });
|
||||
/// setTtsModelsByCategoryToken(categoriesToTtsModelTokens);
|
||||
|
||||
const nestedCategoryTokenToModelTokensMap: Map<
|
||||
string,
|
||||
Set<string>
|
||||
> = computedTtsCategoryAssignments?.category_token_to_tts_model_tokens
|
||||
.recursive || new Map();
|
||||
// const nestedCategoryTokenToModelTokensMap: Map<
|
||||
// string,
|
||||
// Set<string>
|
||||
// > = computedTtsCategoryAssignments?.category_token_to_tts_model_tokens
|
||||
// .recursive || new Map();
|
||||
|
||||
let categoriesToTtsModelTokens = new Map();
|
||||
// let categoriesToTtsModelTokens = new Map();
|
||||
|
||||
nestedCategoryTokenToModelTokensMap.forEach(
|
||||
(ttsModelTokens, categoryToken) => {
|
||||
ttsModelTokens.forEach((ttsModelToken) => {
|
||||
let ttsModel = ttsModelsByTokenMap.get(ttsModelToken);
|
||||
if (ttsModel === undefined) {
|
||||
return;
|
||||
}
|
||||
let models: Set<TtsModelListItem> =
|
||||
categoriesToTtsModelTokens.get(categoryToken);
|
||||
if (models === undefined) {
|
||||
models = new Set();
|
||||
categoriesToTtsModelTokens.set(categoryToken, models);
|
||||
}
|
||||
models.add(ttsModel);
|
||||
});
|
||||
}
|
||||
);
|
||||
// nestedCategoryTokenToModelTokensMap.forEach(
|
||||
// (ttsModelTokens, categoryToken) => {
|
||||
// ttsModelTokens.forEach(ttsModelToken => {
|
||||
// let ttsModel = ttsModelsByTokenMap.get(ttsModelToken);
|
||||
// if (ttsModel === undefined) {
|
||||
// return;
|
||||
// }
|
||||
// let models: Set<TtsModelListItem> =
|
||||
// categoriesToTtsModelTokens.get(categoryToken);
|
||||
// if (models === undefined) {
|
||||
// models = new Set();
|
||||
// categoriesToTtsModelTokens.set(categoryToken, models);
|
||||
// }
|
||||
// models.add(ttsModel);
|
||||
// });
|
||||
// }
|
||||
// );
|
||||
|
||||
setTtsModelsByCategoryToken(categoriesToTtsModelTokens);
|
||||
}, [allTtsCategories, allTtsModels, computedTtsCategoryAssignments]);
|
||||
// setTtsModelsByCategoryToken(categoriesToTtsModelTokens);
|
||||
// }, [allTtsCategories, allTtsModels, computedTtsCategoryAssignments]);
|
||||
|
||||
return (
|
||||
<App
|
||||
enableSpectrograms={props.enableSpectrograms}
|
||||
flashVocodesNotice={props.flashVocodesNotice}
|
||||
allTtsCategories={allTtsCategories}
|
||||
setAllTtsCategories={setAllTtsCategories}
|
||||
allTtsModels={allTtsModels}
|
||||
setAllTtsModels={setAllTtsModels}
|
||||
computedTtsCategoryAssignments={computedTtsCategoryAssignments}
|
||||
setComputedTtsCategoryAssignments={setComputedTtsCategoryAssignments}
|
||||
allTtsCategoriesByTokenMap={allCategoriesByTokenMap}
|
||||
allTtsModelsByTokenMap={allTtsModelsByTokenMap}
|
||||
ttsModelsByCategoryToken={ttsModelsByCategoryToken}
|
||||
dropdownCategories={dropdownCategories}
|
||||
setDropdownCategories={setDropdownCategories}
|
||||
selectedCategories={selectedCategories}
|
||||
setSelectedCategories={setSelectedCategories}
|
||||
maybeSelectedTtsModel={maybeSelectedTtsModel}
|
||||
setMaybeSelectedTtsModel={setMaybeSelectedTtsModel}
|
||||
selectedTtsLanguageScope={selectedTtsLanguageScope}
|
||||
setSelectedTtsLanguageScope={setSelectedTtsLanguageScope}
|
||||
// enableSpectrograms={props.enableSpectrograms}
|
||||
// flashVocodesNotice={props.flashVocodesNotice}
|
||||
// allTtsCategories={allTtsCategories}
|
||||
// setAllTtsCategories={setAllTtsCategories}
|
||||
// allTtsModels={allTtsModels}
|
||||
// setAllTtsModels={setAllTtsModels}
|
||||
// computedTtsCategoryAssignments={computedTtsCategoryAssignments}
|
||||
// setComputedTtsCategoryAssignments={setComputedTtsCategoryAssignments}
|
||||
// allTtsCategoriesByTokenMap={allCategoriesByTokenMap}
|
||||
// allTtsModelsByTokenMap={allTtsModelsByTokenMap}
|
||||
// ttsModelsByCategoryToken={ttsModelsByCategoryToken}
|
||||
// dropdownCategories={dropdownCategories}
|
||||
// setDropdownCategories={setDropdownCategories}
|
||||
// selectedCategories={selectedCategories}
|
||||
// setSelectedCategories={setSelectedCategories}
|
||||
// maybeSelectedTtsModel={maybeSelectedTtsModel}
|
||||
// setMaybeSelectedTtsModel={setMaybeSelectedTtsModel}
|
||||
// selectedTtsLanguageScope={selectedTtsLanguageScope}
|
||||
// setSelectedTtsLanguageScope={setSelectedTtsLanguageScope}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,15 +1,8 @@
|
||||
import React from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
import * as serviceWorker from "./serviceWorker";
|
||||
import AppTranslated from "./AppTranslated";
|
||||
|
||||
const IS_IOS: boolean = /iPad|iPhone|iPod/.test(navigator.platform || "");
|
||||
|
||||
const enableSpectrograms = !IS_IOS;
|
||||
|
||||
const flashVocodesNotice = new URLSearchParams(window.location.search).has(
|
||||
"vocodes"
|
||||
);
|
||||
// import AppTranslated from "./AppTranslated";
|
||||
import { App } from "./App";
|
||||
|
||||
const designSystemClass = "fakeyou-refresh";
|
||||
|
||||
@@ -44,10 +37,7 @@ document.getElementsByTagName("body")[0].appendChild(bootstrapJs);
|
||||
|
||||
ReactDOM.render(
|
||||
<React.StrictMode>
|
||||
<AppTranslated
|
||||
enableSpectrograms={enableSpectrograms}
|
||||
flashVocodesNotice={flashVocodesNotice}
|
||||
/>
|
||||
<App />
|
||||
</React.StrictMode>,
|
||||
document.getElementById("root")
|
||||
);
|
||||
|
||||
@@ -40,8 +40,6 @@ import { W2lTemplateDeletePage } from "./pages/w2l/w2l_template_delete/W2lTempla
|
||||
import { W2lTemplateEditPage } from "./pages/w2l/w2l_template_edit/W2lTemplateEditPage";
|
||||
import { W2lResultDeletePage } from "./pages/w2l/w2l_result_delete/W2lResultDeletePage";
|
||||
import { W2lTemplateApprovePage } from "./pages/w2l/w2l_template_approve/W2lTemplateApprovePage";
|
||||
// import { TtsModelListPage } from "./pages/tts/tts_model_list/TtsModelListPage";
|
||||
import { TtsModelListItem } from "@storyteller/components/src/api/tts/ListTtsModels";
|
||||
import { ProfileBanFc } from "./pages/profile/profile_ban/ProfileBanFc";
|
||||
import { ModerationUserListFc } from "./pages/moderation/moderation_user_list/ModerationUserList";
|
||||
import { LeaderboardPage } from "./pages/leaderboard/LeaderboardPage";
|
||||
@@ -54,25 +52,18 @@ import { TtsEditCategoriesPage } from "./pages/tts/tts_edit_categories/TtsEditCa
|
||||
import { ModerationTtsCategoryListPage } from "./pages/moderation/categories/ModerationTtsCategoryListPage";
|
||||
import { ModerationTtsCategoryEditPage } from "./pages/moderation/categories/ModerationTtsCategoryEditPage";
|
||||
import { ModerationCategoryDeletePage } from "./pages/moderation/categories/ModerationCategoryDeletePage";
|
||||
import { TtsCategoryType } from "../../AppWrapper";
|
||||
import { PatronPage } from "./pages/patrons/PatronPage";
|
||||
import { Language } from "@storyteller/components/src/i18n/Language";
|
||||
import { VoiceCloneRequestPage } from "./pages/clone_voice_requests/VoiceCloneRequestPage";
|
||||
import { VocodesPage } from "./pages/vocodes/VocodesPage";
|
||||
|
||||
import { PricingPage } from "./pages/premium/PricingPage";
|
||||
import { WelcomePage } from "./pages/welcome/WelcomePage";
|
||||
import { CheckoutSuccessPage } from "./pages/premium/CheckoutSuccessPage";
|
||||
import { CheckoutCancelPage } from "./pages/premium/CheckoutCancelPage";
|
||||
import { PortalSuccessPage } from "./pages/premium/PortalSuccessPage";
|
||||
import { PrivacyPage } from "./pages/about/privacy_page/PrivacyPage";
|
||||
import { GetComputedTtsCategoryAssignmentsSuccessResponse } from "@storyteller/components/src/api/category/GetComputedTtsCategoryAssignments";
|
||||
import { NewsPage } from "./pages/news/NewsPage";
|
||||
import { LandingPage } from "./pages/landing/LandingPage";
|
||||
import { ChannelsPage } from "./pages/channels/Channels";
|
||||
//import { LandingPage } from "./pages/landing/LandingPage";
|
||||
// import { VcModelListPage } from "./pages/vc/vc_model_list/VcModelListPage";
|
||||
|
||||
import { VoiceConversionModelListItem } from "@storyteller/components/src/api/voice_conversion/ListVoiceConversionModels";
|
||||
import { CommunityCommissionsPage } from "./pages/contest/CommunityCommissionsPage";
|
||||
import { ProductUsageInfoPage } from "./pages/product_usage_info/ProductUsageInfoPage";
|
||||
@@ -80,11 +71,8 @@ import { GenerateSpeechPage } from "./pages/generate_speech/GenerateSpeechPage";
|
||||
import VcModelViewPage from "./pages/vc/vc_model_view/VcModelViewPage";
|
||||
import VcModelEditPage from "./pages/vc/vc_model_edit/VcModelEditPage";
|
||||
import VcModelDeletePage from "./pages/vc/vc_model_delete/VcModelDeletePage";
|
||||
// import { StorytellerStudioListPage } from "./pages/storyteller_studio/StorytellerStudioPage";
|
||||
import TopNav from "components/layout/TopNav/TopNav";
|
||||
// import MediaPage from "./pages/media/MediaPage";
|
||||
import MediaPageSwitch from "./pages/media/MediaPageSwitch";
|
||||
// import DevMediaPage from "./pages/media/DevMediaPage";
|
||||
import EditCoverImage from "./pages/media/EditCoverImage";
|
||||
import MediaRenamePage from "./pages/media/MediaRenamePage";
|
||||
import { VoiceDesignerFormPage } from "./pages/voice_designer/VoiceDesignerFormPage";
|
||||
@@ -93,18 +81,14 @@ import { VoiceDesignerVoiceEditPage } from "./pages/voice_designer/VoiceDesigner
|
||||
import VoiceDesignerUseVoicePage from "./pages/voice_designer/VoiceDesignerUseVoicePage";
|
||||
import { PasswordResetEmailPage } from "./pages/password_reset/PasswordResetEmailPage";
|
||||
import { PasswordResetVerificationPage } from "./pages/password_reset/PasswordResetVerificationPage";
|
||||
// import EngineCompositor from "./pages/EngineCompositor/EngineCompositor";
|
||||
import InferenceJobsPage from "./pages/inference_jobs_page/InferenceJobsPage";
|
||||
// import { NewProfilePage } from "./pages/profile/profile_view/NewProfilePage";
|
||||
import { ModerationJobControlPage } from "./pages/moderation/job_control/ModerationJobControlPage";
|
||||
import WeightPage from "./pages/weight/WeightPage";
|
||||
import ExplorePage from "./pages/explore/ExplorePage";
|
||||
import SearchPage from "./pages/search/SearchPage";
|
||||
import { SearchProvider } from "context/SearchContext";
|
||||
import WeightEditPage from "./pages/weight/WeightEditPage";
|
||||
|
||||
import FbxToGltfPage from "./pages/fbx_to_gltf/FbxToGltfPage";
|
||||
|
||||
import VideoWorkflowPage from "./pages/video_workflow/VideoWorkflow";
|
||||
import ScrollToTop from "./_common/ScrollToTop";
|
||||
import TextToImagePage from "./pages/text_to_image/TextToImagePage";
|
||||
@@ -118,7 +102,6 @@ import DashboardPage from "./pages/dashboard/DashboardPage";
|
||||
import DevUploadAlt from "./pages/dev_upload/DevUploadAlt";
|
||||
import { ModerationTokenInfoPage } from "./pages/moderation/ModerationTokenInfoPage";
|
||||
import StyleVideo from "./pages/style-video";
|
||||
// import AIFaceMirror from "./pages/ai_face_mirror";
|
||||
import CreateBetaKeyPage from "./pages/beta_key/CreateBetaKeyPage";
|
||||
import RedeemBetaKeyPage from "./pages/beta_key/RedeemBetaKeyPage";
|
||||
import RedeemSuccessPage from "./pages/beta_key/RedeemSuccessPage";
|
||||
@@ -151,62 +134,11 @@ interface Props {
|
||||
sessionSubscriptionsWrapper: SessionSubscriptionsWrapper;
|
||||
querySessionSubscriptionsAction: () => void;
|
||||
|
||||
isShowingVocodesNotice: boolean;
|
||||
clearVocodesNotice: () => void;
|
||||
|
||||
isShowingLangaugeNotice: boolean;
|
||||
clearLanguageNotice: () => void;
|
||||
displayLanguage: Language;
|
||||
primaryLanguageCode: string;
|
||||
|
||||
isShowingTwitchTtsNotice: boolean;
|
||||
clearTwitchTtsNotice: () => void;
|
||||
|
||||
isShowingPleaseFollowNotice: boolean;
|
||||
clearPleaseFollowNotice: () => void;
|
||||
|
||||
isShowingBootstrapLanguageNotice: boolean;
|
||||
clearBootstrapLanguageNotice: () => void;
|
||||
|
||||
textBuffer: string;
|
||||
setTextBuffer: (textBuffer: string) => void;
|
||||
clearTextBuffer: () => void;
|
||||
|
||||
ttsModels: Array<TtsModelListItem>;
|
||||
setTtsModels: (ttsVoices: Array<TtsModelListItem>) => void;
|
||||
|
||||
allTtsCategories: TtsCategoryType[];
|
||||
setAllTtsCategories: (allTtsCategories: TtsCategoryType[]) => void;
|
||||
|
||||
computedTtsCategoryAssignments?: GetComputedTtsCategoryAssignmentsSuccessResponse;
|
||||
setComputedTtsCategoryAssignments: (
|
||||
categoryAssignments: GetComputedTtsCategoryAssignmentsSuccessResponse
|
||||
) => void;
|
||||
|
||||
allTtsCategoriesByTokenMap: Map<string, TtsCategoryType>;
|
||||
allTtsModelsByTokenMap: Map<string, TtsModelListItem>;
|
||||
ttsModelsByCategoryToken: Map<string, Set<TtsModelListItem>>;
|
||||
|
||||
dropdownCategories: TtsCategoryType[][];
|
||||
setDropdownCategories: (dropdownCategories: TtsCategoryType[][]) => void;
|
||||
selectedCategories: TtsCategoryType[];
|
||||
setSelectedCategories: (selectedCategories: TtsCategoryType[]) => void;
|
||||
|
||||
maybeSelectedTtsModel?: TtsModelListItem;
|
||||
setMaybeSelectedTtsModel: (maybeSelectedTtsModel: TtsModelListItem) => void;
|
||||
|
||||
selectedTtsLanguageScope: string;
|
||||
setSelectedTtsLanguageScope: (selectedTtsLanguageScope: string) => void;
|
||||
|
||||
voiceConversionModels: Array<VoiceConversionModelListItem>;
|
||||
setVoiceConversionModels: (
|
||||
ttsVoices: Array<VoiceConversionModelListItem>
|
||||
) => void;
|
||||
|
||||
maybeSelectedVoiceConversionModel?: VoiceConversionModelListItem;
|
||||
setMaybeSelectedVoiceConversionModel: (
|
||||
maybeSelectedVoiceConversionModel: VoiceConversionModelListItem
|
||||
) => void;
|
||||
}
|
||||
|
||||
interface State {}
|
||||
|
||||
Reference in new issue
Block a user