Loading...
Searching...
No Matches
score-plugin-lv2/LV2/Library.hpp
1#pragma once
2#include <LV2/ApplicationPlugin.hpp>
3#include <LV2/EffectModel.hpp>
4#include <Library/LibraryInterface.hpp>
5#include <Library/ProcessesItemModel.hpp>
6
7#include <score/tools/ThreadPool.hpp>
8
9#include <QCoreApplication>
10
11namespace LV2
12{
14{
15 SCORE_CONCRETE("570f0b92-a091-47ff-a5c3-a585e07df2bf")
17 override
18 {
19 score::TaskPool::instance().post([model = QPointer{&model}, &ctx] {
20 auto& plug = ctx.applicationPlugin<LV2::ApplicationPlugin>();
21 auto& world = plug.lilv;
22
23 // This part can take a few seconds so we do it in threadpool
24 auto plugs = world.get_all_plugins();
25
26 ossia::flat_map<QString, QVector<QString>> categories;
27 categories.reserve(50);
28
29 {
30 auto lck = std::unique_lock{plug.library_lock};
31 if(plug.abort_library_scan)
32 return;
33
34 auto it = plugs.begin();
35 while(!plugs.is_end(it))
36 {
37 if(plug.abort_library_scan)
38 return;
39
40 auto plug = plugs.get(it);
41 const auto class_name = plug.get_class().get_label().as_string();
42 const auto plug_name = get_lv2_plugin_name(plug);
43 categories[class_name].push_back(plug_name);
44 it = plugs.next(it);
45 }
46 }
47
48 // Back to main thread
49 QMetaObject::invokeMethod(
50 QCoreApplication::instance(), [model, categories = std::move(categories)] {
51 if(!model)
52 return;
53
54 const auto& key = LV2::ProcessFactory{}.concreteKey();
55 QModelIndex node = model->find(key);
56 if(node == QModelIndex{})
57 return;
58
59 auto& parent = *reinterpret_cast<Library::ProcessNode*>(node.internalPointer());
60
61 for(auto& category : categories)
62 {
63 // Already sorted through the map
64 auto& cat = parent.emplace_back(
65 Library::ProcessData{Process::ProcessData{{}, category.first, {}}, {}},
66 &parent);
67 for(auto& plug : category.second)
68 {
69 Library::addToLibrary(
70 cat, Library::ProcessData{Process::ProcessData{key, plug, plug}, {}});
71 }
72 }
73 });
74 });
75 }
76};
77}
Definition score-plugin-lv2/LV2/ApplicationPlugin.hpp:26
Definition score-plugin-lv2/LV2/Library.hpp:14
Definition LibraryInterface.hpp:24
Definition ProcessesItemModel.hpp:44
Definition EffectFactory.hpp:14
Definition ProcessesItemModel.hpp:33
Definition ProcessMimeSerialization.hpp:38
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15