2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "BinaryAddonManager.h"
11 #include "addons/addoninfo/AddonInfo.h"
12 #include "addons/binary-addons/AddonDll.h"
13 #include "addons/binary-addons/BinaryAddonBase.h"
14 #include "utils/log.h"
18 using namespace ADDON
;
20 BinaryAddonBasePtr
CBinaryAddonManager::GetAddonBase(const AddonInfoPtr
& addonInfo
,
21 IAddonInstanceHandler
* handler
,
24 std::unique_lock
<CCriticalSection
> lock(m_critSection
);
26 BinaryAddonBasePtr addonBase
;
28 const auto& addonInstances
= m_runningAddons
.find(addonInfo
->ID());
29 if (addonInstances
!= m_runningAddons
.end())
31 addonBase
= addonInstances
->second
;
35 addonBase
= std::make_shared
<CBinaryAddonBase
>(addonInfo
);
37 m_runningAddons
.emplace(addonInfo
->ID(), addonBase
);
42 addon
= addonBase
->GetAddon(handler
);
46 CLog::Log(LOGFATAL
, "CBinaryAddonManager::{}: Tried to get add-on '{}' who not available!",
47 __func__
, addonInfo
->ID());
53 void CBinaryAddonManager::ReleaseAddonBase(const BinaryAddonBasePtr
& addonBase
,
54 IAddonInstanceHandler
* handler
)
56 const auto& addon
= m_runningAddons
.find(addonBase
->ID());
57 if (addon
== m_runningAddons
.end())
60 addonBase
->ReleaseAddon(handler
);
62 if (addonBase
->UsedInstanceCount() > 0)
65 m_runningAddons
.erase(addon
);
68 BinaryAddonBasePtr
CBinaryAddonManager::GetRunningAddonBase(const std::string
& addonId
) const
70 std::unique_lock
<CCriticalSection
> lock(m_critSection
);
72 const auto& addonInstances
= m_runningAddons
.find(addonId
);
73 if (addonInstances
!= m_runningAddons
.end())
74 return addonInstances
->second
;
79 AddonPtr
CBinaryAddonManager::GetRunningAddon(const std::string
& addonId
) const
81 std::unique_lock
<CCriticalSection
> lock(m_critSection
);
83 const BinaryAddonBasePtr base
= GetRunningAddonBase(addonId
);
85 return base
->GetActiveAddon();