Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2024 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 : #include "extapi.h"
23 :
24 : #include "log.h"
25 :
26 : using namespace muse::extensions::api;
27 :
28 0 : ExtApi::ExtApi(muse::api::IApiEngine* engine, QObject* parent)
29 0 : : QObject(parent), Contextable(engine->iocContext()), m_engine(engine)
30 : {
31 0 : }
32 :
33 0 : ExtApi::~ExtApi()
34 : {
35 0 : for (auto& a : m_apis) {
36 0 : if (a.isNeedDelete) {
37 0 : delete a.obj;
38 : }
39 : }
40 0 : }
41 :
42 0 : QJSValue ExtApi::api(const std::string& name) const
43 : {
44 0 : Api a = m_apis.value(name);
45 0 : if (!a.jsval.isUndefined()) {
46 0 : return a.jsval;
47 : }
48 :
49 0 : if (apiRegister()) {
50 0 : auto api = apiRegister()->createApi(name, m_engine);
51 0 : a.obj = api.first;
52 0 : a.isNeedDelete = api.second;
53 : }
54 :
55 0 : if (!a.obj) {
56 0 : LOGW() << "Not allowed api: " << name;
57 0 : return QJSValue();
58 : }
59 :
60 0 : a.jsval = m_engine->newQObject(a.obj);
61 :
62 0 : m_apis[name] = a;
63 :
64 0 : return a.jsval;
65 0 : }
|