#pragma once
/*
* Copyright (C) 2016-2017 Team KODI
* http://kodi.tv
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with KODI; see the file COPYING. If not, see
* .
*
*/
#include
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
/*
*------------------------------------------------------------------------------
* Some parts on headers are only be used for Kodi itself and internally (not
* for add-on development).
*
* For this reason also no doxygen part with "///" defined there.
* -----------------------------------------------------------------------------
*/
/*
* Versions of all add-on globals and instances are defined below.
*
* This is added here and not in related header to prevent not
* needed includes during compile. Also have it here a better
* overview.
*/
#define ADDON_GLOBAL_VERSION_MAIN "1.0.12"
#define ADDON_GLOBAL_VERSION_MAIN_MIN "1.0.12"
#define ADDON_GLOBAL_VERSION_MAIN_XML_ID "kodi.binary.global.main"
#define ADDON_GLOBAL_VERSION_MAIN_DEPENDS "AddonBase.h" \
"xbmc_addon_dll.h" \
"xbmc_addon_types.h" \
"libXBMC_addon.h" \
"addon-instance/"
#define ADDON_GLOBAL_VERSION_GENERAL "1.0.3"
#define ADDON_GLOBAL_VERSION_GENERAL_MIN "1.0.2"
#define ADDON_GLOBAL_VERSION_GENERAL_XML_ID "kodi.binary.global.general"
#define ADDON_GLOBAL_VERSION_GENERAL_DEPENDS "General.h"
#define ADDON_GLOBAL_VERSION_GUI "5.12.0"
#define ADDON_GLOBAL_VERSION_GUI_MIN "5.10.0"
#define ADDON_GLOBAL_VERSION_GUI_XML_ID "kodi.binary.global.gui"
#define ADDON_GLOBAL_VERSION_GUI_DEPENDS "libKODI_guilib.h" \
"gui/"
#define ADDON_GLOBAL_VERSION_AUDIOENGINE "1.0.1"
#define ADDON_GLOBAL_VERSION_AUDIOENGINE_MIN "1.0.1"
#define ADDON_GLOBAL_VERSION_AUDIOENGINE_XML_ID "kodi.binary.global.audioengine"
#define ADDON_GLOBAL_VERSION_AUDIOENGINE_DEPENDS "AudioEngine.h"
#define ADDON_GLOBAL_VERSION_FILESYSTEM "1.0.2"
#define ADDON_GLOBAL_VERSION_FILESYSTEM_MIN "1.0.2"
#define ADDON_GLOBAL_VERSION_FILESYSTEM_XML_ID "kodi.binary.global.filesystem"
#define ADDON_GLOBAL_VERSION_FILESYSTEM_DEPENDS "Filesystem.h"
#define ADDON_GLOBAL_VERSION_NETWORK "1.0.0"
#define ADDON_GLOBAL_VERSION_NETWORK_MIN "1.0.0"
#define ADDON_GLOBAL_VERSION_NETWORK_XML_ID "kodi.binary.global.network"
#define ADDON_GLOBAL_VERSION_NETWORK_DEPENDS "Network.h"
#define ADDON_INSTANCE_VERSION_ADSP "0.2.0"
#define ADDON_INSTANCE_VERSION_ADSP_MIN "0.2.0"
#define ADDON_INSTANCE_VERSION_ADSP_XML_ID "kodi.binary.instance.adsp"
#define ADDON_INSTANCE_VERSION_ADSP_DEPENDS "addon-instance/AudioDSP.h"
#define ADDON_INSTANCE_VERSION_AUDIODECODER "2.0.0"
#define ADDON_INSTANCE_VERSION_AUDIODECODER_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_AUDIODECODER_XML_ID "kodi.binary.instance.audiodecoder"
#define ADDON_INSTANCE_VERSION_AUDIODECODER_DEPENDS "addon-instance/AudioDecoder.h"
#define ADDON_INSTANCE_VERSION_AUDIOENCODER "2.0.0"
#define ADDON_INSTANCE_VERSION_AUDIOENCODER_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_AUDIOENCODER_XML_ID "kodi.binary.instance.audioencoder"
#define ADDON_INSTANCE_VERSION_AUDIOENCODER_DEPENDS "addon-instance/AudioEncoder.h"
#define ADDON_INSTANCE_VERSION_GAME "1.0.33"
#define ADDON_INSTANCE_VERSION_GAME_MIN "1.0.33"
#define ADDON_INSTANCE_VERSION_GAME_XML_ID "kodi.binary.instance.game"
#define ADDON_INSTANCE_VERSION_GAME_DEPENDS "kodi_game_dll.h" \
"kodi_game_types.h" \
"libKODI_game.h"
#define ADDON_INSTANCE_VERSION_IMAGEDECODER "2.0.0"
#define ADDON_INSTANCE_VERSION_IMAGEDECODER_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_IMAGEDECODER_XML_ID "kodi.binary.instance.imagedecoder"
#define ADDON_INSTANCE_VERSION_IMAGEDECODER_DEPENDS "addon-instance/ImageDecoder.h"
#define ADDON_INSTANCE_VERSION_INPUTSTREAM "2.0.6"
#define ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN "2.0.6"
#define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream"
#define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "addon-instance/Inputstream.h"
#define ADDON_INSTANCE_VERSION_PERIPHERAL "1.3.5"
#define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "1.3.4"
#define ADDON_INSTANCE_VERSION_PERIPHERAL_XML_ID "kodi.binary.instance.peripheral"
#define ADDON_INSTANCE_VERSION_PERIPHERAL_DEPENDS "addon-instance/Peripheral.h" \
"addon-instance/PeripheralUtils.h"
#define ADDON_INSTANCE_VERSION_PVR "5.8.0"
#define ADDON_INSTANCE_VERSION_PVR_MIN "5.8.0"
#define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr"
#define ADDON_INSTANCE_VERSION_PVR_DEPENDS "xbmc_pvr_dll.h" \
"xbmc_pvr_types.h" \
"xbmc_epg_types.h" \
"libXBMC_pvr.h"
#define ADDON_INSTANCE_VERSION_SCREENSAVER "2.0.0"
#define ADDON_INSTANCE_VERSION_SCREENSAVER_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_SCREENSAVER_XML_ID "kodi.binary.instance.screensaver"
#define ADDON_INSTANCE_VERSION_SCREENSAVER_DEPENDS "addon-instance/Screensaver.h"
#define ADDON_INSTANCE_VERSION_VFS "2.0.0"
#define ADDON_INSTANCE_VERSION_VFS_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_VFS_XML_ID "kodi.binary.instance.vfs"
#define ADDON_INSTANCE_VERSION_VFS_DEPENDS "addon-instance/VFS.h"
#define ADDON_INSTANCE_VERSION_VISUALIZATION "2.0.1"
#define ADDON_INSTANCE_VERSION_VISUALIZATION_MIN "2.0.0"
#define ADDON_INSTANCE_VERSION_VISUALIZATION_XML_ID "kodi.binary.instance.visualization"
#define ADDON_INSTANCE_VERSION_VISUALIZATION_DEPENDS "addon-instance/Visualization.h"
#define ADDON_INSTANCE_VERSION_VIDEOCODEC "1.0.1"
#define ADDON_INSTANCE_VERSION_VIDEOCODEC_MIN "1.0.1"
#define ADDON_INSTANCE_VERSION_VIDEOCODEC_XML_ID "kodi.binary.instance.videocodec"
#define ADDON_INSTANCE_VERSION_VIDEOCODEC_DEPENDS "addon-instance/VideoCodec.h" \
"StreamCodec.h" \
"StreamCrypto.h"
///
/// The currently available instance types for Kodi add-ons
///
/// \internal
/// @note For add of new types take a new number on end. To change
/// existing numbers can be make problems on already compiled add-ons.
/// \endinternal
///
typedef enum ADDON_TYPE
{
/* addon global parts */
ADDON_GLOBAL_MAIN = 0,
ADDON_GLOBAL_GUI = 1,
ADDON_GLOBAL_AUDIOENGINE = 2,
ADDON_GLOBAL_GENERAL = 3,
ADDON_GLOBAL_NETWORK = 4,
ADDON_GLOBAL_FILESYSTEM = 5,
ADDON_GLOBAL_MAX = 5, // Last used global id, used in loops to check versions. Need to change if new global type becomes added.
/* addon type instances */
ADDON_INSTANCE_ADSP = 101,
ADDON_INSTANCE_AUDIODECODER = 102,
ADDON_INSTANCE_AUDIOENCODER = 103,
ADDON_INSTANCE_GAME = 104,
ADDON_INSTANCE_INPUTSTREAM = 105,
ADDON_INSTANCE_PERIPHERAL = 106,
ADDON_INSTANCE_PVR = 107,
ADDON_INSTANCE_SCREENSAVER = 108,
ADDON_INSTANCE_VISUALIZATION = 109,
ADDON_INSTANCE_VFS = 110,
ADDON_INSTANCE_IMAGEDECODER = 111,
ADDON_INSTANCE_VIDEOCODEC = 112,
} ADDON_TYPE;
#ifdef __cplusplus
extern "C" {
namespace kodi {
namespace addon {
#endif
///
/// This is used from Kodi to get the active version of add-on parts.
/// It is compiled in add-on and also in Kodi itself, with this can be Kodi
/// compare the version from him with them on add-on.
///
/// @param[in] type The with 'enum ADDON_TYPE' type to ask
/// @return version The current version of asked type
///
inline const char* GetTypeVersion(int type)
{
/*
* #ifdef's below becomes set by cmake, no set by hand needed.
*/
switch (type)
{
/* addon global parts */
case ADDON_GLOBAL_MAIN:
return ADDON_GLOBAL_VERSION_MAIN;
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_GENERAL_USED)
case ADDON_GLOBAL_GENERAL:
return ADDON_GLOBAL_VERSION_GENERAL;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_GUI_USED)
case ADDON_GLOBAL_GUI:
return ADDON_GLOBAL_VERSION_GUI;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_AUDIOENGINE_USED)
case ADDON_GLOBAL_AUDIOENGINE:
return ADDON_GLOBAL_VERSION_AUDIOENGINE;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_FILESYSTEM_USED)
case ADDON_GLOBAL_FILESYSTEM:
return ADDON_GLOBAL_VERSION_FILESYSTEM;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_NETWORK_USED)
case ADDON_GLOBAL_NETWORK:
return ADDON_GLOBAL_VERSION_NETWORK;
#endif
/* addon type instances */
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_ADSP_USED)
case ADDON_INSTANCE_ADSP:
return ADDON_INSTANCE_VERSION_ADSP;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_AUDIODECODER_USED)
case ADDON_INSTANCE_AUDIODECODER:
return ADDON_INSTANCE_VERSION_AUDIODECODER;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_AUDIOENCODER_USED)
case ADDON_INSTANCE_AUDIOENCODER:
return ADDON_INSTANCE_VERSION_AUDIOENCODER;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_GAME_USED)
case ADDON_INSTANCE_GAME:
return ADDON_INSTANCE_VERSION_GAME;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_IMAGEDECODER_USED)
case ADDON_INSTANCE_IMAGEDECODER:
return ADDON_INSTANCE_VERSION_IMAGEDECODER;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_INPUTSTREAM_USED)
case ADDON_INSTANCE_INPUTSTREAM:
return ADDON_INSTANCE_VERSION_INPUTSTREAM;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_PERIPHERAL_USED)
case ADDON_INSTANCE_PERIPHERAL:
return ADDON_INSTANCE_VERSION_PERIPHERAL;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_PVR_USED)
case ADDON_INSTANCE_PVR:
return ADDON_INSTANCE_VERSION_PVR;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_SCREENSAVER_USED)
case ADDON_INSTANCE_SCREENSAVER:
return ADDON_INSTANCE_VERSION_SCREENSAVER;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VFS_USED)
case ADDON_INSTANCE_VFS:
return ADDON_INSTANCE_VERSION_VFS;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VISUALIZATION_USED)
case ADDON_INSTANCE_VISUALIZATION:
return ADDON_INSTANCE_VERSION_VISUALIZATION;
#endif
#if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VIDEOCODEC_USED)
case ADDON_INSTANCE_VIDEOCODEC:
return ADDON_INSTANCE_VERSION_VIDEOCODEC;
#endif
}
return "0.0.0";
}
///
/// This is used from Kodi to get the minimum supported version of add-on parts.
/// It is compiled in add-on and also in Kodi itself, with this can be Kodi
/// compare the version from him with them on add-on.
///
/// @param[in] type The with 'enum ADDON_TYPE' type to ask
/// @return version The minimum version of asked type
///
inline const char* GetTypeMinVersion(int type)
{
switch (type)
{
/* addon global parts */
case ADDON_GLOBAL_MAIN:
return ADDON_GLOBAL_VERSION_MAIN_MIN;
case ADDON_GLOBAL_GUI:
return ADDON_GLOBAL_VERSION_GUI_MIN;
case ADDON_GLOBAL_GENERAL:
return ADDON_GLOBAL_VERSION_GENERAL_MIN;
case ADDON_GLOBAL_AUDIOENGINE:
return ADDON_GLOBAL_VERSION_AUDIOENGINE_MIN;
case ADDON_GLOBAL_FILESYSTEM:
return ADDON_GLOBAL_VERSION_FILESYSTEM_MIN;
case ADDON_GLOBAL_NETWORK:
return ADDON_GLOBAL_VERSION_NETWORK_MIN;
/* addon type instances */
case ADDON_INSTANCE_ADSP:
return ADDON_INSTANCE_VERSION_ADSP_MIN;
case ADDON_INSTANCE_AUDIODECODER:
return ADDON_INSTANCE_VERSION_AUDIODECODER_MIN;
case ADDON_INSTANCE_AUDIOENCODER:
return ADDON_INSTANCE_VERSION_AUDIOENCODER_MIN;
case ADDON_INSTANCE_GAME:
return ADDON_INSTANCE_VERSION_GAME_MIN;
case ADDON_INSTANCE_IMAGEDECODER:
return ADDON_INSTANCE_VERSION_IMAGEDECODER_MIN;
case ADDON_INSTANCE_INPUTSTREAM:
return ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN;
case ADDON_INSTANCE_PERIPHERAL:
return ADDON_INSTANCE_VERSION_PERIPHERAL_MIN;
case ADDON_INSTANCE_PVR:
return ADDON_INSTANCE_VERSION_PVR_MIN;
case ADDON_INSTANCE_SCREENSAVER:
return ADDON_INSTANCE_VERSION_SCREENSAVER_MIN;
case ADDON_INSTANCE_VFS:
return ADDON_INSTANCE_VERSION_VFS_MIN;
case ADDON_INSTANCE_VISUALIZATION:
return ADDON_INSTANCE_VERSION_VISUALIZATION_MIN;
case ADDON_INSTANCE_VIDEOCODEC:
return ADDON_INSTANCE_VERSION_VIDEOCODEC_MIN;
}
return "0.0.0";
}
///
/// Function used internally on add-on and in Kodi itself to get name
/// about given type.
///
/// @param[in] type The with 'enum ADDON_TYPE' defined type to ask
/// @return Name of the asked instance type
///
inline const char* GetTypeName(int type)
{
switch (type)
{
/* addon global parts */
case ADDON_GLOBAL_MAIN:
return "Addon";
case ADDON_GLOBAL_GUI:
return "GUI";
case ADDON_GLOBAL_GENERAL:
return "General";
case ADDON_GLOBAL_AUDIOENGINE:
return "AudioEngine";
case ADDON_GLOBAL_FILESYSTEM:
return "Filesystem";
case ADDON_GLOBAL_NETWORK:
return "Network";
/* addon type instances */
case ADDON_INSTANCE_ADSP:
return "ADSP";
case ADDON_INSTANCE_AUDIODECODER:
return "AudioDecoder";
case ADDON_INSTANCE_AUDIOENCODER:
return "AudioEncoder";
case ADDON_INSTANCE_GAME:
return "Game";
case ADDON_INSTANCE_IMAGEDECODER:
return "ImageDecoder";
case ADDON_INSTANCE_INPUTSTREAM:
return "Inputstream";
case ADDON_INSTANCE_PERIPHERAL:
return "Peripheral";
case ADDON_INSTANCE_PVR:
return "PVR";
case ADDON_INSTANCE_SCREENSAVER:
return "ScreenSaver";
case ADDON_INSTANCE_VISUALIZATION:
return "Visualization";
case ADDON_INSTANCE_VIDEOCODEC:
return "VideoCodec";
}
return "unknown";
}
///
/// Function used internally on add-on and in Kodi itself to get id number
/// about given type name.
///
/// @param[in] name The type name string to ask
/// @return Id number of the asked instance type
///
/// @warning String must be lower case here!
///
inline int GetTypeId(const char* name)
{
if (name)
{
if (strcmp(name, "addon") == 0)
return ADDON_GLOBAL_MAIN;
else if (strcmp(name, "general") == 0)
return ADDON_GLOBAL_GENERAL;
else if (strcmp(name, "gui") == 0)
return ADDON_GLOBAL_GUI;
else if (strcmp(name, "audioengine") == 0)
return ADDON_GLOBAL_AUDIOENGINE;
else if (strcmp(name, "filesystem") == 0)
return ADDON_GLOBAL_FILESYSTEM;
else if (strcmp(name, "network") == 0)
return ADDON_GLOBAL_NETWORK;
else if (strcmp(name, "adsp") == 0)
return ADDON_INSTANCE_ADSP;
else if (strcmp(name, "audiodecoder") == 0)
return ADDON_INSTANCE_AUDIODECODER;
else if (strcmp(name, "audioencoder") == 0)
return ADDON_INSTANCE_AUDIOENCODER;
else if (strcmp(name, "game") == 0)
return ADDON_INSTANCE_GAME;
else if (strcmp(name, "imagedecoder") == 0)
return ADDON_INSTANCE_IMAGEDECODER;
else if (strcmp(name, "inputstream") == 0)
return ADDON_INSTANCE_INPUTSTREAM;
else if (strcmp(name, "peripheral") == 0)
return ADDON_INSTANCE_PERIPHERAL;
else if (strcmp(name, "pvr") == 0)
return ADDON_INSTANCE_PVR;
else if (strcmp(name, "screensaver") == 0)
return ADDON_INSTANCE_SCREENSAVER;
else if (strcmp(name, "vfs") == 0)
return ADDON_INSTANCE_VFS;
else if (strcmp(name, "visualization") == 0)
return ADDON_INSTANCE_VISUALIZATION;
else if (strcmp(name, "videocodec") == 0)
return ADDON_INSTANCE_VIDEOCODEC;
}
return -1;
}
#ifdef __cplusplus
} /* namespace addon */
} /* namespace kodi */
} /* extern "C" */
#endif