2 * Copyright (C) 2016-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 "addons/AddonBuilder.h"
11 #include "ServiceBroker.h"
12 #include "addons/ContextMenuAddon.h"
13 #include "addons/FontResource.h"
14 #include "addons/GameResource.h"
15 #include "addons/ImageResource.h"
16 #include "addons/LanguageResource.h"
17 #include "addons/PluginSource.h"
18 #include "addons/Repository.h"
19 #include "addons/Scraper.h"
20 #include "addons/Service.h"
21 #include "addons/Skin.h"
22 #include "addons/UISoundsResource.h"
23 #include "addons/Webinterface.h"
24 #include "addons/addoninfo/AddonInfo.h"
25 #include "addons/addoninfo/AddonType.h"
26 #include "games/addons/GameClient.h"
27 #include "games/controllers/Controller.h"
28 #include "pvr/addons/PVRClient.h"
29 #include "utils/StringUtils.h"
36 AddonPtr
CAddonBuilder::Generate(const AddonInfoPtr
& info
, AddonType type
)
38 if (!info
|| info
->ID().empty())
41 if (type
== AddonType::UNKNOWN
)
42 type
= info
->MainType();
43 if (type
== AddonType::UNKNOWN
)
44 return std::make_shared
<CAddon
>(info
, AddonType::UNKNOWN
);
46 // Handle screensaver special cases
47 if (type
== AddonType::SCREENSAVER
)
49 // built in screensaver or python screensaver
50 if (StringUtils::StartsWithNoCase(info
->ID(), "screensaver.xbmc.builtin.") ||
51 URIUtils::HasExtension(info
->LibName(), ".py"))
52 return std::make_shared
<CAddon
>(info
, type
);
55 // Handle audio encoder special cases
56 if (type
== AddonType::AUDIOENCODER
)
58 // built in audio encoder
59 if (StringUtils::StartsWithNoCase(info
->ID(), "audioencoder.kodi.builtin."))
60 return std::make_shared
<CAddonDll
>(info
, type
);
65 case AddonType::AUDIODECODER
:
66 case AddonType::AUDIOENCODER
:
67 case AddonType::IMAGEDECODER
:
68 case AddonType::INPUTSTREAM
:
69 case AddonType::PERIPHERALDLL
:
70 case AddonType::PVRDLL
:
72 case AddonType::VISUALIZATION
:
73 case AddonType::SCREENSAVER
:
74 return std::make_shared
<CAddonDll
>(info
, type
);
75 case AddonType::GAMEDLL
:
76 return std::make_shared
<GAME::CGameClient
>(info
);
77 case AddonType::PLUGIN
:
78 case AddonType::SCRIPT
:
79 return std::make_shared
<CPluginSource
>(info
, type
);
80 case AddonType::SCRIPT_LIBRARY
:
81 case AddonType::SCRIPT_LYRICS
:
82 case AddonType::SCRIPT_MODULE
:
83 case AddonType::SUBTITLE_MODULE
:
84 case AddonType::SCRIPT_WEATHER
:
85 return std::make_shared
<CAddon
>(info
, type
);
86 case AddonType::WEB_INTERFACE
:
87 return std::make_shared
<CWebinterface
>(info
);
88 case AddonType::SERVICE
:
89 return std::make_shared
<CService
>(info
);
90 case AddonType::SCRAPER_ALBUMS
:
91 case AddonType::SCRAPER_ARTISTS
:
92 case AddonType::SCRAPER_MOVIES
:
93 case AddonType::SCRAPER_MUSICVIDEOS
:
94 case AddonType::SCRAPER_TVSHOWS
:
95 case AddonType::SCRAPER_LIBRARY
:
96 return std::make_shared
<CScraper
>(info
, type
);
98 return std::make_shared
<CSkinInfo
>(info
);
99 case AddonType::RESOURCE_FONT
:
100 return std::make_shared
<CFontResource
>(info
);
101 case AddonType::RESOURCE_IMAGES
:
102 return std::make_shared
<CImageResource
>(info
);
103 case AddonType::RESOURCE_GAMES
:
104 return std::make_shared
<CGameResource
>(info
);
105 case AddonType::RESOURCE_LANGUAGE
:
106 return std::make_shared
<CLanguageResource
>(info
);
107 case AddonType::RESOURCE_UISOUNDS
:
108 return std::make_shared
<CUISoundsResource
>(info
);
109 case AddonType::REPOSITORY
:
110 return std::make_shared
<CRepository
>(info
);
111 case AddonType::CONTEXTMENU_ITEM
:
112 return std::make_shared
<CContextMenuAddon
>(info
);
113 case AddonType::GAME_CONTROLLER
:
114 return std::make_shared
<GAME::CController
>(info
);