Fix crash: Move plugin scan into Processor (survives editor close), use safe async callback
Browse files
Source/PluginBridgeProcessor.h
CHANGED
|
@@ -37,18 +37,29 @@ public:
|
|
| 37 |
void getStateInformation(juce::MemoryBlock& destData) override;
|
| 38 |
void setStateInformation(const void* data, int sizeInBytes) override;
|
| 39 |
|
| 40 |
-
// Public access
|
| 41 |
bool isMcpServerRunning() const;
|
| 42 |
int getMcpServerPort() const;
|
| 43 |
HostedPluginManager& getHostedPluginManager() { return hostManager; }
|
| 44 |
|
| 45 |
-
// Load plugin
|
| 46 |
void loadPluginFromFile(const juce::File& file);
|
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
private:
|
| 49 |
HostedPluginManager hostManager;
|
| 50 |
McpServer mcpServer;
|
| 51 |
static constexpr int kDefaultMcpPort = 16620;
|
| 52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginBridgeProcessor)
|
| 54 |
};
|
|
|
|
| 37 |
void getStateInformation(juce::MemoryBlock& destData) override;
|
| 38 |
void setStateInformation(const void* data, int sizeInBytes) override;
|
| 39 |
|
| 40 |
+
// Public access
|
| 41 |
bool isMcpServerRunning() const;
|
| 42 |
int getMcpServerPort() const;
|
| 43 |
HostedPluginManager& getHostedPluginManager() { return hostManager; }
|
| 44 |
|
| 45 |
+
// Load plugin (called on message thread)
|
| 46 |
void loadPluginFromFile(const juce::File& file);
|
| 47 |
|
| 48 |
+
// Plugin scanning (owned by Processor — safe lifetime)
|
| 49 |
+
void startPluginScan();
|
| 50 |
+
bool isScanComplete() const { return scanComplete; }
|
| 51 |
+
bool isScanning() const { return scanning; }
|
| 52 |
+
const juce::Array<juce::PluginDescription>& getScannedPlugins() const { return scannedPlugins; }
|
| 53 |
+
|
| 54 |
private:
|
| 55 |
HostedPluginManager hostManager;
|
| 56 |
McpServer mcpServer;
|
| 57 |
static constexpr int kDefaultMcpPort = 16620;
|
| 58 |
|
| 59 |
+
// Plugin scan state (lives in Processor — safe)
|
| 60 |
+
juce::Array<juce::PluginDescription> scannedPlugins;
|
| 61 |
+
std::atomic<bool> scanComplete{false};
|
| 62 |
+
std::atomic<bool> scanning{false};
|
| 63 |
+
|
| 64 |
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginBridgeProcessor)
|
| 65 |
};
|