diff --git a/src-ui/app/App.jsx b/src-ui/app/App.jsx
index 269bf824..c102af71 100644
--- a/src-ui/app/App.jsx
+++ b/src-ui/app/App.jsx
@@ -23,8 +23,6 @@ import { SnackbarController } from "./snackbar_controller/SnackbarController";
import styles from "./App.module.scss";
import { useIsBackendReady, useIsSoftwareUpdating, useIsVrctAvailable, useWindow } from "@logics_common";
-import { SubtitlesController } from "./main_page/main_section/subtitle_system_container/_controllers/subtitlesController.jsx";
-
export const App = () => {
const { currentIsVrctAvailable } = useIsVrctAvailable();
const { currentIsBackendReady } = useIsBackendReady();
@@ -59,7 +57,6 @@ const Contents = ({ fetchPluginsHasRunRef }) => {
return (
<>
-
{currentIsSoftwareUpdating.data === false
diff --git a/src-ui/app/main_page/main_section/MainSection.jsx b/src-ui/app/main_page/main_section/MainSection.jsx
index d6b1f298..0eaf272d 100644
--- a/src-ui/app/main_page/main_section/MainSection.jsx
+++ b/src-ui/app/main_page/main_section/MainSection.jsx
@@ -8,7 +8,6 @@ import { LanguageSelector } from "./language_selector/LanguageSelector";
import { useStore_IsOpenedLanguageSelector } from "@store";
import { useLanguageSettings } from "@logics_main";
import { useEffect } from "react";
-import { SubtitleSystemContainer } from "./subtitle_system_container/SubtitleSystemContainer";
import { PluginHost } from "./PluginHost";
diff --git a/src-ui/logics/configs/plugins/usePlugins.js b/src-ui/logics/configs/plugins/usePlugins.js
index 2c337f7c..9a801674 100644
--- a/src-ui/logics/configs/plugins/usePlugins.js
+++ b/src-ui/logics/configs/plugins/usePlugins.js
@@ -16,6 +16,7 @@ import JSZip from "jszip";
import { useFetch } from "@logics_common";
import { useSoftwareVersion } from "@logics_configs";
+import * as logic_configs from "@logics_configs";
// PLUGIN_LIST_URL は中央リポジトリにある、各プラグインの plugin_info.json への URL の配列を保持する JSON の URL
@@ -49,7 +50,8 @@ export const usePlugins = () => {
: [...new_value, { plugin_id: plugin_info.plugin_id, location: plugin_info.location, component, is_downloaded: true }];
});
},
- createAtomWithHook: (...args) => createAtomWithHook(...args)
+ createAtomWithHook: (...args) => createAtomWithHook(...args),
+ logic_configs: logic_configs,
};
return plugin_context;
}
diff --git a/src-ui/plugins/plugin_examples/index.jsx b/src-ui/plugins/plugin_examples/index.jsx
index 4ded2716..011c133d 100644
--- a/src-ui/plugins/plugin_examples/index.jsx
+++ b/src-ui/plugins/plugin_examples/index.jsx
@@ -1,11 +1,19 @@
-import { initStore } from "./store/store";
-import { MainContainer } from "./main_container/MainContainer";
+import { initStore, StoreContext } from "./store/store.js";
+import { SubtitleSystemContainer } from "./subtitle_system_container/SubtitleSystemContainer";
+import { SubtitlesController } from "./subtitle_system_container/_controllers/subtitlesController.jsx";
export const init = (plugin_context) => {
initStore(plugin_context.createAtomWithHook);
+ const { logic_configs } = plugin_context;
const EntryComponents = () => {
- return ;
+ return (
+
+
+
+
+
+ );
};
plugin_context.registerComponent(EntryComponents);
diff --git a/src-ui/plugins/plugin_examples/main_container/MainContainer.jsx b/src-ui/plugins/plugin_examples/main_container/MainContainer.jsx
deleted file mode 100644
index eaccc0aa..00000000
--- a/src-ui/plugins/plugin_examples/main_container/MainContainer.jsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { useStore } from "../store/store";
-import { useEffect } from "react";
-
-export const MainContainer = () => {
- const { updateCountPluginState, currentCountPluginState } = useStore("useStore_CountPluginState");
-
- const incrementCount = () => {
- updateCountPluginState((prev_value) => ({
- count: prev_value.data.count + 1,
- }));
- };
-
- useEffect(() => {
- }, [])
-
- return (
-
-
1 Zipped Dev Plugin Count: {currentCountPluginState?.data?.count}
-
-
- );
-};
\ No newline at end of file
diff --git a/src-ui/plugins/plugin_examples/plugin_info.json b/src-ui/plugins/plugin_examples/plugin_info.json
index 303f0ecb..f388a9cc 100644
--- a/src-ui/plugins/plugin_examples/plugin_info.json
+++ b/src-ui/plugins/plugin_examples/plugin_info.json
@@ -1,7 +1,7 @@
{
- "title": "VRCT Example Plugins 1",
- "plugin_id": "vrct_plugin_example_1",
- "asset_name": "vrct_plugin_example_1.zip",
+ "title": "VRCT Subtitles",
+ "plugin_id": "vrct_plugin_subtitles",
+ "asset_name": "vrct_plugin_subtitles.zip",
"location": "main_section",
"plugin_version": "0.0.1",
"min_supported_vrct_version": "3.0.4",
diff --git a/src-ui/plugins/plugin_examples/store/store.js b/src-ui/plugins/plugin_examples/store/store.js
index 9efd9dcf..40d80bb4 100644
--- a/src-ui/plugins/plugin_examples/store/store.js
+++ b/src-ui/plugins/plugin_examples/store/store.js
@@ -2,15 +2,30 @@ const store_hooks = {};
export const initStore = (createAtomWithHook) => {
Object.assign(store_hooks, {
- useStore_CountPluginState: createAtomWithHook(
- { count: 10 },
- "CountPluginState"
- ).useHook,
+ // useStore_CountPluginState: createAtomWithHook(
+ // { count: 10 },
+ // "CountPluginState"
+ // ).useHook,
- useStore_AnotherState: createAtomWithHook(
- { value: "initial" },
- "AnotherState"
- ).useHook,
+ // useStore_AnotherState: createAtomWithHook(
+ // { value: "initial" },
+ // "AnotherState"
+ // ).useHook,
+
+ useStore_IsSubtitlePlaying: createAtomWithHook(false, "IsSubtitlePlaying", { is_state_ok: true }).useHook,
+ useStore_SubtitlePlaybackMode: createAtomWithHook("relative", "SubtitlePlaybackMode", { is_state_ok: true }).useHook,
+ useStore_SubtitleAbsoluteTargetTime: createAtomWithHook({
+ hour: "23",
+ minute: "00",
+ }, "SubtitleAbsoluteTargetTime", { is_state_ok: true }).useHook,
+ useStore_IsCuesScheduled: createAtomWithHook(false, "IsCuesScheduled", { is_state_ok: true }).useHook,
+ useStore_CountdownAdjustment: createAtomWithHook(0, "CountdownAdjustment", { is_state_ok: true }).useHook,
+ useStore_EffectiveCountdown: createAtomWithHook(null, "EffectiveCountdown", { is_state_ok: true }).useHook,
+ useStore_SubtitleCues: createAtomWithHook([], "SubtitleCues", { is_state_ok: true }).useHook,
+
+ useStore_SubtitleTimers: createAtomWithHook([], "SubtitleTimers", { is_state_ok: true }).useHook,
+ useStore_SubtitleCountdownTimerId: createAtomWithHook([], "SubtitleCountdownTimerId", { is_state_ok: true }).useHook,
+ useStore_SubtitleFileName: createAtomWithHook("ファイルが選択されていません", "SubtitleFileName", { is_state_ok: true }).useHook,
});
};
@@ -19,4 +34,14 @@ export const useStore = (hook_name) => {
throw new Error(`Hook ${hook_name} is not initialized.`);
}
return store_hooks[hook_name]();
-};
\ No newline at end of file
+};
+
+
+// StoreContext.js
+import React, { createContext, useContext } from "react";
+
+export const StoreContext = createContext(null);
+
+export const useStoreContext = () => {
+ return useContext(StoreContext);
+};
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/SubtitleSystemContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/SubtitleSystemContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/SubtitleSystemContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/SubtitleSystemContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/SubtitleSystemContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/SubtitleSystemContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/SubtitleSystemContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/SubtitleSystemContainer.module.scss
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/_controllers/SubtitlesController.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/_controllers/SubtitlesController.jsx
similarity index 86%
rename from src-ui/app/main_page/main_section/subtitle_system_container/_controllers/SubtitlesController.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/_controllers/SubtitlesController.jsx
index 720c3d28..53380205 100644
--- a/src-ui/app/main_page/main_section/subtitle_system_container/_controllers/SubtitlesController.jsx
+++ b/src-ui/plugins/plugin_examples/subtitle_system_container/_controllers/SubtitlesController.jsx
@@ -1,9 +1,12 @@
-import { useSendTextToOverlay } from "@logics_configs";
+import { useStoreContext } from "../../store/store.js";
+
import { useSubtitles } from "../_logics/useSubtitles";
import { secToDayTime } from "../_subtitles_utils"
import { useEffect } from "react";
export const SubtitlesController = () => {
- const { sendTextToOverlay } = useSendTextToOverlay();
+ const logic_configs = useStoreContext();
+ const { sendTextToOverlay } = logic_configs.useSendTextToOverlay();
+
const {
currentIsSubtitlePlaying,
currentIsCuesScheduled,
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/_logics/useSubtitles.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/_logics/useSubtitles.jsx
similarity index 82%
rename from src-ui/app/main_page/main_section/subtitle_system_container/_logics/useSubtitles.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/_logics/useSubtitles.jsx
index 9ce1d626..fe0b6e3c 100644
--- a/src-ui/app/main_page/main_section/subtitle_system_container/_logics/useSubtitles.jsx
+++ b/src-ui/plugins/plugin_examples/subtitle_system_container/_logics/useSubtitles.jsx
@@ -1,35 +1,39 @@
-import { useSendTextToOverlay } from "@logics_configs";
-import {
- useStore_SubtitleFileName,
- useStore_IsSubtitlePlaying,
- useStore_SubtitlePlaybackMode,
- useStore_SubtitleAbsoluteTargetTime,
- useStore_IsCuesScheduled,
- useStore_CountdownAdjustment,
- useStore_EffectiveCountdown,
- useStore_SubtitleCues,
+import { useStore, useStoreContext } from "../../store/store.js";
- useStore_SubtitleTimers,
- useStore_SubtitleCountdownTimerId,
-} from "@store";
+// import { useSendTextToOverlay } from "@logics_configs";
+// import {
+// useStore_SubtitleFileName,
+// useStore_IsSubtitlePlaying,
+// useStore_SubtitlePlaybackMode,
+// useStore_SubtitleAbsoluteTargetTime,
+// useStore_IsCuesScheduled,
+// useStore_CountdownAdjustment,
+// useStore_EffectiveCountdown,
+// useStore_SubtitleCues,
+
+// useStore_SubtitleTimers,
+// useStore_SubtitleCountdownTimerId,
+// } from "../../store/store.js";
export const useSubtitles = () => {
- const { sendTextToOverlay } = useSendTextToOverlay();
- const { currentSubtitleFileName, updateSubtitleFileName } = useStore_SubtitleFileName();
- const { currentIsSubtitlePlaying, updateIsSubtitlePlaying } = useStore_IsSubtitlePlaying();
- const { currentSubtitlePlaybackMode, updateSubtitlePlaybackMode } = useStore_SubtitlePlaybackMode();
- const { currentSubtitleAbsoluteTargetTime, updateSubtitleAbsoluteTargetTime } = useStore_SubtitleAbsoluteTargetTime();
- const { currentIsCuesScheduled, updateIsCuesScheduled } = useStore_IsCuesScheduled();
+ const logic_configs = useStoreContext();
+ const { sendTextToOverlay } = logic_configs.useSendTextToOverlay();
- const { currentCountdownAdjustment, updateCountdownAdjustment } = useStore_CountdownAdjustment();
- const { currentEffectiveCountdown, updateEffectiveCountdown } = useStore_EffectiveCountdown();
- const { currentSubtitleCues, updateSubtitleCues } = useStore_SubtitleCues();
+ const { currentSubtitleFileName, updateSubtitleFileName } = useStore("useStore_SubtitleFileName");
+ const { currentIsSubtitlePlaying, updateIsSubtitlePlaying } = useStore("useStore_IsSubtitlePlaying");
+ const { currentSubtitlePlaybackMode, updateSubtitlePlaybackMode } = useStore("useStore_SubtitlePlaybackMode");
+ const { currentSubtitleAbsoluteTargetTime, updateSubtitleAbsoluteTargetTime } = useStore("useStore_SubtitleAbsoluteTargetTime");
+ const { currentIsCuesScheduled, updateIsCuesScheduled } = useStore("useStore_IsCuesScheduled");
+
+ const { currentCountdownAdjustment, updateCountdownAdjustment } = useStore("useStore_CountdownAdjustment");
+ const { currentEffectiveCountdown, updateEffectiveCountdown } = useStore("useStore_EffectiveCountdown");
+ const { currentSubtitleCues, updateSubtitleCues } = useStore("useStore_SubtitleCues");
// タイマー(setTimeout/setInterval)のID管理用
- const { currentSubtitleTimers, updateSubtitleTimers, addSubtitleTimers } = useStore_SubtitleTimers();
+ const { currentSubtitleTimers, updateSubtitleTimers, addSubtitleTimers } = useStore("useStore_SubtitleTimers");
// const timersRef = useRef([]);
// カウントダウンタイマー専用の ref
- const { currentSubtitleCountdownTimerId, updateSubtitleCountdownTimerId, AddSubtitleCountdownTimerId } = useStore_SubtitleCountdownTimerId();
+ const { currentSubtitleCountdownTimerId, updateSubtitleCountdownTimerId, AddSubtitleCountdownTimerId } = useStore("useStore_SubtitleCountdownTimerId");
// cues のスケジュールを行う(字幕開始時のオフセットは調整後のタイミングに合わせる)
const scheduleCues = (offset) => {
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/_subtitles_utils.js b/src-ui/plugins/plugin_examples/subtitle_system_container/_subtitles_utils.js
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/_subtitles_utils.js
rename to src-ui/plugins/plugin_examples/subtitle_system_container/_subtitles_utils.js
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/countdown_container/CountdownContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/countdown_container/CountdownContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/countdown_container/CountdownContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/countdown_container/CountdownContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/countdown_container/CountdownContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/countdown_container/CountdownContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/countdown_container/CountdownContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/countdown_container/CountdownContainer.module.scss
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/input_file_container/InputFileContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/input_file_container/InputFileContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/input_file_container/InputFileContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/input_file_container/InputFileContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/input_file_container/InputFileContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/input_file_container/InputFileContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/input_file_container/InputFileContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/input_file_container/InputFileContainer.module.scss
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/mode_selector_container/ModeSelectorContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/mode_selector_container/ModeSelectorContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/mode_selector_container/ModeSelectorContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/mode_selector_container/ModeSelectorContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/mode_selector_container/ModeSelectorContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/mode_selector_container/ModeSelectorContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/mode_selector_container/ModeSelectorContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/mode_selector_container/ModeSelectorContainer.module.scss
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/play_control_container/PlayControlContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/play_control_container/PlayControlContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/play_control_container/PlayControlContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/play_control_container/PlayControlContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/play_control_container/PlayControlContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/play_control_container/PlayControlContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/play_control_container/PlayControlContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/play_control_container/PlayControlContainer.module.scss
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.jsx b/src-ui/plugins/plugin_examples/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.jsx
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.jsx
rename to src-ui/plugins/plugin_examples/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.jsx
diff --git a/src-ui/app/main_page/main_section/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.module.scss b/src-ui/plugins/plugin_examples/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.module.scss
similarity index 100%
rename from src-ui/app/main_page/main_section/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.module.scss
rename to src-ui/plugins/plugin_examples/subtitle_system_container/subtitles_list_container/SubtitlesListContainer.module.scss
diff --git a/src-ui/store.js b/src-ui/store.js
index 410a3809..7e88792b 100644
--- a/src-ui/store.js
+++ b/src-ui/store.js
@@ -290,22 +290,4 @@ export const { atomInstance: Atom_IsOpenedTranslatorSelector, useHook: useStore_
export const { atomInstance: Atom_SupportersData, useHook: useStore_SupportersData } = createAtomWithHook(null, "SupportersData", {is_state_ok: true});
export const { atomInstance: Atom_VrctPosterIndex, useHook: useStore_VrctPosterIndex } = createAtomWithHook(0, "VrctPosterIndex");
-export const { atomInstance: Atom_PosterShowcaseWorldPageIndex, useHook: useStore_PosterShowcaseWorldPageIndex } = createAtomWithHook(0, "PosterShowcaseWorldPageIndex");
-
-// -----------------------------------------------
-// Subtitles
-// -----------------------------------------------
-export const { atomInstance: Atom_IsSubtitlePlaying, useHook: useStore_IsSubtitlePlaying } = createAtomWithHook(false, "IsSubtitlePlaying", { is_state_ok: true });
-export const { atomInstance: Atom_SubtitlePlaybackMode, useHook: useStore_SubtitlePlaybackMode } = createAtomWithHook("relative", "SubtitlePlaybackMode", { is_state_ok: true });
-export const { atomInstance: Atom_SubtitleAbsoluteTargetTime, useHook: useStore_SubtitleAbsoluteTargetTime } = createAtomWithHook({
- hour: "23",
- minute: "00",
-}, "SubtitleAbsoluteTargetTime", { is_state_ok: true });
-export const { atomInstance: Atom_IsCuesScheduled, useHook: useStore_IsCuesScheduled } = createAtomWithHook(false, "IsCuesScheduled", { is_state_ok: true });
-export const { atomInstance: Atom_CountdownAdjustment, useHook: useStore_CountdownAdjustment } = createAtomWithHook(0, "CountdownAdjustment", { is_state_ok: true });
-export const { atomInstance: Atom_EffectiveCountdown, useHook: useStore_EffectiveCountdown } = createAtomWithHook(null, "EffectiveCountdown", { is_state_ok: true });
-export const { atomInstance: Atom_SubtitleCues, useHook: useStore_SubtitleCues } = createAtomWithHook([], "SubtitleCues", { is_state_ok: true });
-
-export const { atomInstance: Atom_SubtitleTimers, useHook: useStore_SubtitleTimers } = createAtomWithHook([], "SubtitleTimers", { is_state_ok: true });
-export const { atomInstance: Atom_SubtitleCountdownTimerId, useHook: useStore_SubtitleCountdownTimerId } = createAtomWithHook([], "SubtitleCountdownTimerId", { is_state_ok: true });
-export const { atomInstance: Atom_SubtitleFileName, useHook: useStore_SubtitleFileName } = createAtomWithHook("ファイルが選択されていません", "SubtitleFileName", { is_state_ok: true });
\ No newline at end of file
+export const { atomInstance: Atom_PosterShowcaseWorldPageIndex, useHook: useStore_PosterShowcaseWorldPageIndex } = createAtomWithHook(0, "PosterShowcaseWorldPageIndex");
\ No newline at end of file