feat: implemented chord guide customization feature
This commit is contained in:
+29
-4
@@ -13,6 +13,8 @@ import LoadingOverlay from './components/common/LoadingOverlay';
|
||||
import { useEffect as useEffectReact, useState, useRef } from 'react';
|
||||
import { KGToneBuffersPool } from './core/audio-interface/KGToneBuffersPool';
|
||||
import { KGCore } from './core/KGCore';
|
||||
import { ConfigManager } from './core/config/ConfigManager';
|
||||
import { validateFunctionalChordsJSON } from './util/scaleUtil';
|
||||
|
||||
function App() {
|
||||
// Enable global keyboard handler for copy/paste and undo/redo
|
||||
@@ -40,6 +42,9 @@ function App() {
|
||||
// Load the current project from KGCore
|
||||
loadProject(null);
|
||||
|
||||
// Initialize ConfigManager first to load config.json and user settings
|
||||
await ConfigManager.instance().initialize();
|
||||
|
||||
// Initialize store from config after ConfigManager is ready
|
||||
await initializeFromConfig();
|
||||
|
||||
@@ -53,13 +58,31 @@ function App() {
|
||||
functionalChordsResponse.json()
|
||||
]);
|
||||
|
||||
// Store functional chords data (includes name, steps, T/S/D groups, and chord notes for each mode)
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = functionalChordsData;
|
||||
console.log(`Loaded functional chords for ${Object.keys(functionalChordsData).length} modes`);
|
||||
// Store original functional chords data
|
||||
KGCore.ORIGINAL_FUNCTIONAL_CHORDS_DATA = functionalChordsData;
|
||||
console.log(`Loaded original functional chords for ${Object.keys(functionalChordsData).length} modes`);
|
||||
|
||||
// Check if custom chord definition exists and is valid
|
||||
const configManager = ConfigManager.instance();
|
||||
const customDefinition = configManager.get('chord_guide.chord_definition') as string;
|
||||
|
||||
if (customDefinition && customDefinition.trim()) {
|
||||
const validationResult = validateFunctionalChordsJSON(customDefinition);
|
||||
if (validationResult.valid) {
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = JSON.parse(customDefinition);
|
||||
console.log('Using custom chord definition from settings');
|
||||
} else {
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = functionalChordsData;
|
||||
console.log('Custom chord definition invalid, using original');
|
||||
}
|
||||
} else {
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = functionalChordsData;
|
||||
console.log('No custom chord definition, using original');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to load mode/chord data:', error);
|
||||
// Fallback to defaults
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = {
|
||||
const fallbackData = {
|
||||
ionian: {
|
||||
name: 'Ionian',
|
||||
steps: [2, 2, 1, 2, 2, 2, 1],
|
||||
@@ -69,6 +92,8 @@ function App() {
|
||||
chords: {}
|
||||
}
|
||||
};
|
||||
KGCore.ORIGINAL_FUNCTIONAL_CHORDS_DATA = fallbackData;
|
||||
KGCore.FUNCTIONAL_CHORDS_DATA = fallbackData;
|
||||
}
|
||||
|
||||
// Log maxBars after initialization completes
|
||||
|
||||
Reference in New Issue
Block a user