36 if (!
types.isEmpty())
60 if (
d.pluginFormatName ==
format.getName())
70 for (
auto& desc :
types)
71 if (desc.fileOrIdentifier == fileOrIdentifier)
72 return std::make_unique<PluginDescription> (desc);
81 for (
auto& desc :
types)
82 if (desc.matchesIdentifierString (identifierString))
83 return std::make_unique<PluginDescription> (desc);
93 for (
auto& desc :
types)
95 if (desc.isDuplicateOf (
type))
118 for (
int i =
types.size(); --
i >= 0;)
119 if (
types.getUnchecked (
i).isDuplicateOf (
type))
144 scanner = std::move (newScanner);
148 const bool dontRescanIfAlreadyInList,
154 if (dontRescanIfAlreadyInList
157 bool needsRescanning =
false;
163 if (
d.fileOrIdentifier == fileOrIdentifier &&
d.pluginFormatName ==
format.getName())
165 if (
format.pluginNeedsRescanning (
d))
166 needsRescanning =
true;
172 if (! needsRescanning)
176 if (
blacklist.contains (fileOrIdentifier))
186 if (!
scanner->findPluginTypesFor (
format, found, fileOrIdentifier))
191 format.findAllTypesForFile (found, fileOrIdentifier);
195 for (
auto* desc : found)
214 for (
const auto& filenameOrID :
files)
220 if (
format->fileMightContainThisPluginType (filenameOrID)
230 File f (filenameOrID);
237 s.add (subFile.getFullPathName());
269 const int index =
blacklist.indexOf (pluginID);
310 diff = first.name.compareNatural (second.name,
false);
323 if (
a <
b)
return -1;
347 auto hasOrderChanged = [&]
349 for (
int i = 0;
i < oldOrder.
size(); ++
i)
350 if (! oldOrder[
i].isDuplicateOf (newOrder[
i]))
364 auto e = std::make_unique<XmlElement> (
"KNOWNPLUGINS");
369 for (
int i =
types.size(); --
i >= 0;)
370 e->prependChildElement (
types.getUnchecked (
i).createXml().release());
374 e->createNewChildElement (
"BLACKLISTED")->setAttribute (
"id",
b);
390 if (
e->hasTagName (
"BLACKLISTED"))
392 else if (
info.loadFromXml (*
e))
405 for (
auto& pd : allPlugins)
407 auto path = pd.fileOrIdentifier.replaceCharacter (
'\\',
'/')
408 .upToLastOccurrenceOf (
"/",
false,
false);
410 if (path.substring (1, 2) ==
":")
411 path = path.substring (2);
421 for (
int i =
tree.subFolders.size(); --
i >= 0;)
423 auto& sub = *
tree.subFolders.getUnchecked(
i);
426 if (sub.plugins.isEmpty())
428 for (
auto*
s : sub.subFolders)
431 s->folder = sub.folder +
"/" +
s->folder;
433 tree.subFolders.add (
s);
436 sub.subFolders.clear (
false);
437 tree.subFolders.remove (
i);
447 auto current = std::make_unique<KnownPluginList::PluginTree>();
449 for (
auto& pd : sorted)
452 : pd.manufacturerName);
454 if (! thisType.containsNonWhitespaceChars())
457 if (! thisType.equalsIgnoreCase (lastType))
459 if (current->plugins.size() + current->subFolders.size() > 0)
461 current->folder = lastType;
462 tree.subFolders.add (std::move (current));
463 current = std::make_unique<KnownPluginList::PluginTree>();
469 current->plugins.add (pd);
472 if (current->plugins.size() + current->subFolders.size() > 0)
474 current->folder = lastType;
475 tree.subFolders.add (std::move (current));
488 tree.plugins.add (pd);
495 for (
int i =
tree.subFolders.size(); --
i >= 0;)
497 auto& subFolder = *
tree.subFolders.getUnchecked (
i);
499 if (subFolder.folder.equalsIgnoreCase (firstSubFolder))
501 addPlugin (subFolder, pd, remainingPath);
507 newFolder->folder = firstSubFolder;
508 tree.subFolders.add (newFolder);
509 addPlugin (*newFolder, pd, remainingPath);
517 for (
auto&
p : plugins)
518 if (
p.name ==
name && ++matches > 1)
526 const String& currentlyTickedPluginID)
528 bool isTicked =
false;
530 for (
auto* sub :
tree.subFolders)
533 auto isItemTicked =
addToMenu (*sub, subMenu, allPlugins, currentlyTickedPluginID);
534 isTicked = isTicked || isItemTicked;
536 m.addSubMenu (sub->folder, subMenu,
true,
nullptr, isItemTicked, 0);
543 for (
auto&
p : allPlugins)
545 if (
p.isDuplicateOf (
d))
554 for (
auto& plugin :
tree.plugins)
556 auto name = plugin.name;
559 name <<
" (" << plugin.pluginFormatName <<
')';
561 auto isItemTicked = plugin.matchesIdentifierString (currentlyTickedPluginID);
562 isTicked = isTicked || isItemTicked;
564 m.addItem (getPluginMenuIndex (plugin),
name,
true, isItemTicked);
578 auto tree = std::make_unique<PluginTree>();
590 for (
auto&
p : sorted)
591 tree->plugins.add (
p);
599 const String& currentlyTickedPluginID)
620 return job->shouldExit();
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Array.h:56
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Definition juce_Array.h:583
int size() const noexcept
Definition juce_Array.h:215
ElementType * begin() noexcept
Definition juce_Array.h:328
ElementType * end() noexcept
Definition juce_Array.h:344
void sendChangeMessage()
Definition juce_ChangeBroadcaster.cpp:65
Definition juce_File.h:45
@ findFilesAndDirectories
Definition juce_File.h:561
bool shouldExit() const noexcept
Definition juce_KnownPluginList.cpp:617
CustomScanner()
Definition juce_KnownPluginList.cpp:612
virtual void scanFinished()
Definition juce_KnownPluginList.cpp:615
virtual ~CustomScanner()
Definition juce_KnownPluginList.cpp:613
bool isListingUpToDate(const String &possiblePluginFileOrIdentifier, AudioPluginFormat &formatToUse) const
Definition juce_KnownPluginList.cpp:126
void clearBlacklistedFiles()
Definition juce_KnownPluginList.cpp:278
std::unique_ptr< PluginDescription > getTypeForIdentifierString(const String &identifierString) const
Definition juce_KnownPluginList.cpp:77
void recreateFromXml(const XmlElement &xml)
Definition juce_KnownPluginList.cpp:379
SortMethod
Definition juce_KnownPluginList.h:129
@ sortByFormat
Definition juce_KnownPluginList.h:134
@ defaultOrder
Definition juce_KnownPluginList.h:130
@ sortAlphabetically
Definition juce_KnownPluginList.h:131
@ sortByFileSystemLocation
Definition juce_KnownPluginList.h:135
@ sortByManufacturer
Definition juce_KnownPluginList.h:133
@ sortByCategory
Definition juce_KnownPluginList.h:132
@ sortByInfoUpdateTime
Definition juce_KnownPluginList.h:136
void sort(SortMethod method, bool forwards)
Definition juce_KnownPluginList.cpp:333
CriticalSection scanLock
Definition juce_KnownPluginList.h:235
void clear()
Definition juce_KnownPluginList.cpp:32
int getNumTypes() const noexcept
Definition juce_KnownPluginList.cpp:43
bool scanAndAddFile(const String &possiblePluginFileOrIdentifier, bool dontRescanIfAlreadyInList, OwnedArray< PluginDescription > &typesFound, AudioPluginFormat &formatToUse)
Definition juce_KnownPluginList.cpp:147
std::unique_ptr< PluginDescription > getTypeForFile(const String &fileOrIdentifier) const
Definition juce_KnownPluginList.cpp:66
std::unique_ptr< XmlElement > createXml() const
Definition juce_KnownPluginList.cpp:362
void removeType(const PluginDescription &type)
Definition juce_KnownPluginList.cpp:113
const StringArray & getBlacklistedFiles() const
Definition juce_KnownPluginList.cpp:253
void removeFromBlacklist(const String &pluginID)
Definition juce_KnownPluginList.cpp:267
std::unique_ptr< CustomScanner > scanner
Definition juce_KnownPluginList.h:234
CriticalSection typesArrayLock
Definition juce_KnownPluginList.h:235
void scanAndAddDragAndDroppedFiles(AudioPluginFormatManager &formatManager, const StringArray &filenames, OwnedArray< PluginDescription > &typesFound)
Definition juce_KnownPluginList.cpp:210
Array< PluginDescription > getTypesForFormat(AudioPluginFormat &) const
Definition juce_KnownPluginList.cpp:55
void scanFinished()
Definition juce_KnownPluginList.cpp:247
static int getIndexChosenByMenu(const Array< PluginDescription > &types, int menuResultCode)
Definition juce_KnownPluginList.cpp:605
static void addToMenu(PopupMenu &menu, const Array< PluginDescription > &types, SortMethod sortMethod, const String ¤tlyTickedPluginID={})
Definition juce_KnownPluginList.cpp:598
void addToBlacklist(const String &pluginID)
Definition juce_KnownPluginList.cpp:258
KnownPluginList()
Definition juce_KnownPluginList.cpp:29
static std::unique_ptr< PluginTree > createTree(const Array< PluginDescription > &types, SortMethod sortMethod)
Definition juce_KnownPluginList.cpp:571
bool addType(const PluginDescription &type)
Definition juce_KnownPluginList.cpp:88
Array< PluginDescription > getTypes() const
Definition juce_KnownPluginList.cpp:49
Array< PluginDescription > types
Definition juce_KnownPluginList.h:232
StringArray blacklist
Definition juce_KnownPluginList.h:233
void setCustomScanner(std::unique_ptr< CustomScanner > newScanner)
Definition juce_KnownPluginList.cpp:141
~KnownPluginList() override
Definition juce_KnownPluginList.cpp:30
Definition juce_OwnedArray.h:51
bool isEmpty() const noexcept
Definition juce_OwnedArray.h:136
ObjectClass * add(ObjectClass *newObject)
Definition juce_OwnedArray.h:294
Definition juce_PluginDescription.h:43
Definition juce_StringArray.h:35
Definition juce_String.h:53
String upToFirstOccurrenceOf(StringRef substringToEndWith, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1585
bool isEmpty() const noexcept
Definition juce_String.h:310
bool containsChar(juce_wchar character) const noexcept
Definition juce_String.cpp:1040
String upToLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1595
String replaceCharacter(juce_wchar characterToReplace, juce_wchar characterToInsertInstead) const
Definition juce_String.cpp:1344
String fromFirstOccurrenceOf(StringRef substringToStartFrom, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1565
static ThreadPoolJob * getCurrentThreadPoolJob()
Definition juce_ThreadPool.cpp:84
Definition juce_Time.h:37
Definition juce_XmlElement.h:83
bool hasTagName(StringRef possibleTagName) const noexcept
Definition juce_XmlElement.cpp:470
Iterator< GetNextElement > getChildIterator() const
Definition juce_XmlElement.h:715
* e
Definition inflate.c:1404
unsigned * m
Definition inflate.c:1559
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static const char * name
Definition pugl.h:1582
struct backing_store_struct * info
Definition jmemsys.h:183
static char ** files
Definition misc.c:28
Definition carla_juce.cpp:31
CriticalSection::ScopedLockType ScopedLock
Definition juce_CriticalSection.h:186
CriticalSection::ScopedUnlockType ScopedUnlock
Definition juce_CriticalSection.h:226
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
@ tree
Definition juce_AccessibilityRole.h:58
static bool diff(const std::string fn1, const std::string fn2)
Definition playertest.cpp:161
Definition juce_KnownPluginList.h:172
Definition juce_KnownPluginList.cpp:289
static String lastPathPart(const String &path)
Definition juce_KnownPluginList.cpp:316
int direction
Definition juce_KnownPluginList.cpp:330
PluginSorter(KnownPluginList::SortMethod sortMethod, bool forwards) noexcept
Definition juce_KnownPluginList.cpp:290
static int compare(Time a, Time b) noexcept
Definition juce_KnownPluginList.cpp:321
KnownPluginList::SortMethod method
Definition juce_KnownPluginList.cpp:329
Definition juce_KnownPluginList.cpp:400
@ menuIdBase
Definition juce_KnownPluginList.cpp:401
static bool containsDuplicateNames(const Array< PluginDescription > &plugins, const String &name)
Definition juce_KnownPluginList.cpp:513
static void buildTreeByCategory(KnownPluginList::PluginTree &tree, const Array< PluginDescription > &sorted, const KnownPluginList::SortMethod sortMethod)
Definition juce_KnownPluginList.cpp:442
static void buildTreeByFolder(KnownPluginList::PluginTree &tree, const Array< PluginDescription > &allPlugins)
Definition juce_KnownPluginList.cpp:403
static bool addToMenu(const KnownPluginList::PluginTree &tree, PopupMenu &m, const Array< PluginDescription > &allPlugins, const String ¤tlyTickedPluginID)
Definition juce_KnownPluginList.cpp:524
static void optimiseFolders(KnownPluginList::PluginTree &tree, bool concatenateName)
Definition juce_KnownPluginList.cpp:419
static void addPlugin(KnownPluginList::PluginTree &tree, PluginDescription pd, String path)
Definition juce_KnownPluginList.cpp:479
uch * p
Definition crypt.c:594
int result
Definition process.c:1455
static ZCONST char Far * method[NUM_METHODS]
Definition zipinfo.c:1008
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
#define const
Definition zconf.h:137