RAM2118 commited on
Commit
f6caa77
·
verified ·
1 Parent(s): 47e9eca

Fix crash: Move plugin scan into Processor (survives editor close), use safe async callback

Browse files
Files changed (1) hide show
  1. Source/PluginBridgeProcessor.h +13 -2
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 for Editor and McpServer
41
  bool isMcpServerRunning() const;
42
  int getMcpServerPort() const;
43
  HostedPluginManager& getHostedPluginManager() { return hostManager; }
44
 
45
- // Load plugin from GUI (called on message thread)
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
  };