From 8869782c289e652e5fbbfa0a160ca52f41d9ed57 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 21 Jul 2021 18:19:58 +0200 Subject: [PATCH] Cleanup plugin-scan API, allow to cancel individual scan --- libs/ardour/ardour/plugin_manager.h | 22 ++++++--- libs/ardour/plugin_manager.cc | 75 +++++++++++++++++------------ 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 8b1fd3fbc6..98ade047e4 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -81,9 +81,12 @@ public: const ARDOUR::PluginInfoList& vst3_plugin_info (); void refresh (bool cache_only = false); - void cancel_plugin_scan (); - void cancel_plugin_scan_timeout (); - void cancel_plugin_all_scan_timeout (); + + void cancel_scan_all (); + void cancel_scan_one (); + void cancel_scan_timeout_all (); + void cancel_scan_timeout_one (); + void clear_vst_cache (); void clear_vst_blacklist (); void clear_au_cache (); @@ -115,7 +118,7 @@ public: */ static std::string plugin_type_name (const PluginType, bool short_name = true); - bool cancelled () const { return _cancel_scan; } + bool cancelled () const { return _cancel_scan_all || _cancel_scan_one; } void reset_stats (); void stats_use_plugin (PluginInfoPtr const&); @@ -286,11 +289,14 @@ private: std::string windows_vst_path; std::string lxvst_path; - bool _cancel_scan; - bool _cancel_scan_timeout; - bool _cancel_all_scan_timeout; + bool _cancel_scan_one; + bool _cancel_scan_all; + bool _cancel_scan_timeout_one; + bool _cancel_scan_timeout_all; - bool no_timeout () const { return _cancel_scan_timeout || _cancel_all_scan_timeout; } + void reset_scan_cancel_state (bool single = false); + + bool no_timeout () const { return _cancel_scan_timeout_one || _cancel_scan_timeout_all; } void detect_name_ambiguities (ARDOUR::PluginInfoList*); void detect_type_ambiguities (ARDOUR::PluginInfoList&); diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 4cd1fa2029..31361f9a8e 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -182,9 +182,10 @@ PluginManager::PluginManager () , _lv2_plugin_info(0) , _au_plugin_info(0) , _lua_plugin_info(0) - , _cancel_scan(false) - , _cancel_scan_timeout(false) - , _cancel_all_scan_timeout(false) + , _cancel_scan_one (false) + , _cancel_scan_all (false) + , _cancel_scan_timeout_one (false) + , _cancel_scan_timeout_all (false) { char* s; string lrdf_path; @@ -463,9 +464,7 @@ PluginManager::refresh (bool cache_only) load_scanlog (); DEBUG_TRACE (DEBUG::PluginManager, "PluginManager::refresh\n"); - _cancel_scan = false; - _cancel_scan_timeout = false; - _cancel_all_scan_timeout = false; + reset_scan_cancel_state (); BootMessage (_("Scanning LADSPA Plugins")); ladspa_refresh (); @@ -601,7 +600,8 @@ PluginManager::refresh (bool cache_only) } BootMessage (_("Plugin Scan Complete...")); - _cancel_scan = false; + + reset_scan_cancel_state (); PluginScanMessage(X_("closeme"), "", false); BootMessage (_("Indexing Plugins...")); @@ -652,21 +652,39 @@ PluginManager::detect_ambiguities () } void -PluginManager::cancel_plugin_scan () +PluginManager::cancel_scan_all () { - _cancel_scan = true; + _cancel_scan_all = true; } void -PluginManager::cancel_plugin_scan_timeout () +PluginManager::cancel_scan_one () { - _cancel_scan_timeout = true; + _cancel_scan_one = true; } void -PluginManager::cancel_plugin_all_scan_timeout () +PluginManager::cancel_scan_timeout_one () { - _cancel_all_scan_timeout = true; + _cancel_scan_timeout_one = true; +} + +void +PluginManager::cancel_scan_timeout_all () +{ + _cancel_scan_timeout_all = true; +} + +void +PluginManager::reset_scan_cancel_state (bool single) +{ + _cancel_scan_one = false; + _cancel_scan_timeout_one = false; + if (single) { + return; + } + _cancel_scan_all = false; + _cancel_scan_timeout_all = false; } void @@ -1191,7 +1209,7 @@ PluginManager::run_auv2_scanner_app (CAComponentDescription const& desc, AUv2Des } ARDOUR::PluginScanTimeout (timeout); - if (timeout > -900) { + if (timeout > -864000) { --timeout; } Glib::usleep (100000); @@ -1377,7 +1395,7 @@ PluginManager::au_refresh (bool cache_only) size_t all_modules = audesc.size (); for (std::vector::const_iterator i = audesc.begin (); i != audesc.end (); ++i, ++n) { ARDOUR::PluginScanMessage (string_compose (_("AUv2 (%1 / %2)"), n, all_modules), i->to_s(), !cache_only && !cancelled()); - _cancel_scan_timeout = false; + reset_scan_cancel_state (true); auv2_discover (*i, cache_only); } @@ -1481,7 +1499,7 @@ PluginManager::run_vst2_scanner_app (std::string path, PSLEPtr psle) const } ARDOUR::PluginScanTimeout (timeout); - if (timeout > -900) { + if (timeout > -864000) { --timeout; } Glib::usleep (100000); @@ -1758,7 +1776,7 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only) size_t all_modules = plugin_objects.size (); for (x = plugin_objects.begin(); x != plugin_objects.end (); ++x, ++n) { ARDOUR::PluginScanMessage (string_compose (_("VST2 (%1 / %2)"), n, all_modules), *x, !cache_only && !cancelled()); - _cancel_scan_timeout = false; + reset_scan_cancel_state (true); vst2_discover (*x, Windows_VST, cache_only || cancelled()); } @@ -1845,7 +1863,7 @@ PluginManager::mac_vst_discover_from_path (string path, bool cache_only) size_t all_modules = plugin_objects.size (); for (x = plugin_objects.begin(); x != plugin_objects.end (); ++x, ++n) { ARDOUR::PluginScanMessage (string_compose (_("VST2 (%1 / %2)"), n, all_modules), *x, !cache_only && !cancelled()); - _cancel_scan_timeout = false; + reset_scan_cancel_state (true); vst2_discover (*x, MacVST, cache_only || cancelled()); } @@ -1905,7 +1923,7 @@ PluginManager::lxvst_discover_from_path (string path, bool cache_only) size_t all_modules = plugin_objects.size (); for (x = plugin_objects.begin(); x != plugin_objects.end (); ++x, ++n) { ARDOUR::PluginScanMessage (string_compose (_("VST2 (%1 / %2)"), n, all_modules), *x, !cache_only && !cancelled()); - _cancel_scan_timeout = false; + reset_scan_cancel_state (true); vst2_discover (*x, LXVST, cache_only || cancelled()); } @@ -2051,7 +2069,7 @@ PluginManager::vst3_discover_from_path (string const& path, bool cache_only) size_t all_modules = plugin_objects.size (); for (vector::iterator i = plugin_objects.begin(); i != plugin_objects.end (); ++i, ++n) { ARDOUR::PluginScanMessage (string_compose (_("VST3 (%1 / %2)"), n, all_modules), *i, !cache_only && !cancelled()); - _cancel_scan_timeout = false; + reset_scan_cancel_state (true); vst3_discover (*i, cache_only || cancelled ()); } @@ -2239,7 +2257,7 @@ PluginManager::run_vst3_scanner_app (std::string bundle_path, PSLEPtr psle) cons } ARDOUR::PluginScanTimeout (timeout); - if (timeout > -900) { + if (timeout > -864000) { --timeout; } Glib::usleep (100000); @@ -3189,13 +3207,9 @@ PluginManager::rescan_plugin (ARDOUR::PluginType type, std::string const& path_u _plugin_scan_log.erase (i); } - if (den < 2) { - _cancel_scan = false; - _cancel_all_scan_timeout = false; - } + reset_scan_cancel_state (den < 2 ? false : true); whitelist (type, path_uid, true); - _cancel_scan_timeout = false; /* force re-scan, remove cache file */ std::string fn = cache_file (type, path_uid); @@ -3256,7 +3270,8 @@ PluginManager::rescan_plugin (ARDOUR::PluginType type, std::string const& path_u return (rv >= 0 || erased); } - _cancel_scan = false; + reset_scan_cancel_state (); + if (rv < 0) { save_scanlog (); if (erased) { @@ -3285,8 +3300,7 @@ PluginManager::rescan_faulty () } } - _cancel_scan = false; - _cancel_all_scan_timeout = false; + reset_scan_cancel_state (); size_t n = 1; size_t all_modules = psl.size (); @@ -3296,7 +3310,8 @@ PluginManager::rescan_faulty () break; } } - _cancel_scan = false; + + reset_scan_cancel_state (); PluginScanMessage(X_("closeme"), "", false); if (changed) {