diff --git a/CMakeLists.txt b/CMakeLists.txt index d0b08b8551546..8c66f6aa09c75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,7 @@ set(INCLUDES ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/xbmc ${CMAKE_SOURCE_DIR}/xbmc/${PLATFORM_DIR} + ${CMAKE_SOURCE_DIR}/xbmc/addons/kodi-dev-kit ${CMAKE_SOURCE_DIR}/xbmc/cores/VideoPlayer ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR} ${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}/include) @@ -219,6 +220,9 @@ if(ENABLE_AIRTUNES) endif() endif() +list(APPEND DEP_DEFINES -DDEVKIT_LIBRARY="${DEVKIT_LIBRARY}") +list(APPEND DEP_DEFINES -DDEVKIT_LAUNCH_EXE="${DEVKIT_LAUNCH_EXE}") + # find all folders containing addon.xml.in # used to define ADDON_XML_OUTPUTS, ADDON_XML_DEPENDS and ADDON_INSTALL_DATA # Function defined in ./cmake/scripts/common/Macros.cmake @@ -317,9 +321,9 @@ if(CMAKE_GENERATOR STREQUAL Xcode) ) add_library(lib${APP_NAME_LC} STATIC) add_dependencies(lib${APP_NAME_LC} compileinfo) - target_link_libraries(lib${APP_NAME_LC} PUBLIC compileinfo_obj) + target_link_libraries(lib${APP_NAME_LC} PUBLIC compileinfo_obj $) else() - add_library(lib${APP_NAME_LC} STATIC $) + add_library(lib${APP_NAME_LC} STATIC $ $) endif() add_dependencies(lib${APP_NAME_LC} ${GLOBAL_TARGET_DEPS}) set_target_properties(lib${APP_NAME_LC} PROPERTIES PREFIX "") diff --git a/addons/kodi.binary.devkit/addon.xml.in b/addons/kodi.binary.devkit/addon.xml.in new file mode 100644 index 0000000000000..0fabe408f8023 --- /dev/null +++ b/addons/kodi.binary.devkit/addon.xml.in @@ -0,0 +1,8 @@ + + + + @__KDK_CANARY_XML__@ + + + + diff --git a/addons/kodi.binary.global.audioengine/addon.xml.in b/addons/kodi.binary.global.audioengine/addon.xml.in deleted file mode 100644 index 64301a63fecc4..0000000000000 --- a/addons/kodi.binary.global.audioengine/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.filesystem/addon.xml.in b/addons/kodi.binary.global.filesystem/addon.xml.in deleted file mode 100644 index 71955fb741b95..0000000000000 --- a/addons/kodi.binary.global.filesystem/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.general/addon.xml.in b/addons/kodi.binary.global.general/addon.xml.in deleted file mode 100644 index 119c803363168..0000000000000 --- a/addons/kodi.binary.global.general/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.gui/addon.xml.in b/addons/kodi.binary.global.gui/addon.xml.in deleted file mode 100644 index d3f453f744379..0000000000000 --- a/addons/kodi.binary.global.gui/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.main/addon.xml.in b/addons/kodi.binary.global.main/addon.xml.in deleted file mode 100644 index f60bbb5562063..0000000000000 --- a/addons/kodi.binary.global.main/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.network/addon.xml.in b/addons/kodi.binary.global.network/addon.xml.in deleted file mode 100644 index dd56be41aa36a..0000000000000 --- a/addons/kodi.binary.global.network/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.global.tools/addon.xml.in b/addons/kodi.binary.global.tools/addon.xml.in deleted file mode 100644 index f96576aff28d9..0000000000000 --- a/addons/kodi.binary.global.tools/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.audiodecoder/addon.xml.in b/addons/kodi.binary.instance.audiodecoder/addon.xml.in deleted file mode 100644 index 50ce7e4264e24..0000000000000 --- a/addons/kodi.binary.instance.audiodecoder/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.audioencoder/addon.xml.in b/addons/kodi.binary.instance.audioencoder/addon.xml.in deleted file mode 100644 index 31d5cf61d6e94..0000000000000 --- a/addons/kodi.binary.instance.audioencoder/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.game/addon.xml.in b/addons/kodi.binary.instance.game/addon.xml.in deleted file mode 100644 index b8b379d2defa6..0000000000000 --- a/addons/kodi.binary.instance.game/addon.xml.in +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/addons/kodi.binary.instance.game/controller.xsd b/addons/kodi.binary.instance.game/controller.xsd deleted file mode 100644 index 13e9e0cf26e67..0000000000000 --- a/addons/kodi.binary.instance.game/controller.xsd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/addons/kodi.binary.instance.imagedecoder/addon.xml.in b/addons/kodi.binary.instance.imagedecoder/addon.xml.in deleted file mode 100644 index b6eae4e900c2f..0000000000000 --- a/addons/kodi.binary.instance.imagedecoder/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.inputstream/addon.xml.in b/addons/kodi.binary.instance.inputstream/addon.xml.in deleted file mode 100644 index 21f604212dc99..0000000000000 --- a/addons/kodi.binary.instance.inputstream/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.peripheral/addon.xml.in b/addons/kodi.binary.instance.peripheral/addon.xml.in deleted file mode 100644 index 99165f1830666..0000000000000 --- a/addons/kodi.binary.instance.peripheral/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.pvr/addon.xml.in b/addons/kodi.binary.instance.pvr/addon.xml.in deleted file mode 100644 index fce51e6ce8092..0000000000000 --- a/addons/kodi.binary.instance.pvr/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.pvr/icon.png b/addons/kodi.binary.instance.pvr/icon.png deleted file mode 100644 index 154968fc6c741..0000000000000 Binary files a/addons/kodi.binary.instance.pvr/icon.png and /dev/null differ diff --git a/addons/kodi.binary.instance.screensaver/addon.xml.in b/addons/kodi.binary.instance.screensaver/addon.xml.in deleted file mode 100644 index b11831d2526f1..0000000000000 --- a/addons/kodi.binary.instance.screensaver/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.vfs/addon.xml.in b/addons/kodi.binary.instance.vfs/addon.xml.in deleted file mode 100644 index 248bcccd36fe1..0000000000000 --- a/addons/kodi.binary.instance.vfs/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.videocodec/addon.xml.in b/addons/kodi.binary.instance.videocodec/addon.xml.in deleted file mode 100644 index c3b035cc16397..0000000000000 --- a/addons/kodi.binary.instance.videocodec/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/kodi.binary.instance.visualization/addon.xml.in b/addons/kodi.binary.instance.visualization/addon.xml.in deleted file mode 100644 index ab828695725cf..0000000000000 --- a/addons/kodi.binary.instance.visualization/addon.xml.in +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po index 40c0773c280bd..9b638fb73cb05 100644 --- a/addons/resource.language.en_gb/resources/strings.po +++ b/addons/resource.language.en_gb/resources/strings.po @@ -6536,7 +6536,37 @@ msgctxt "#13253" msgid "Cancel move" msgstr "" -#empty strings from id 13254 to 13269 +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13254" +msgid "CPU usage:" +msgstr "" + +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13255" +msgid "Physical memory usage:" +msgstr "" + +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13256" +msgid "Virtual memory usage:" +msgstr "" + +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13257" +msgid "Shared memory usage:" +msgstr "" + +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13258" +msgid "Threads:" +msgstr "" + +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13259" +msgid "Process ID:" +msgstr "" + +#empty strings from id 13260 to 13269 msgctxt "#13270" msgid "Hardware:" @@ -6585,7 +6615,10 @@ msgctxt "#13281" msgid "Hardware" msgstr "" -#empty string with id 13282 +#: addons/skin.estuary/xml/SettingsSystemInfo.xml +msgctxt "#13282" +msgid "Addons" +msgstr "" #: xbmc/windows/GUIWindowSystemInfo.cpp msgctxt "#13283" diff --git a/addons/skin.estuary/xml/DialogAddonCrashReporter.xml b/addons/skin.estuary/xml/DialogAddonCrashReporter.xml new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/addons/skin.estuary/xml/SettingsSystemInfo.xml b/addons/skin.estuary/xml/SettingsSystemInfo.xml index a0bec86593e57..d8e91f37e8f58 100644 --- a/addons/skin.estuary/xml/SettingsSystemInfo.xml +++ b/addons/skin.estuary/xml/SettingsSystemInfo.xml @@ -80,29 +80,271 @@ Mono26 - - 420 - 50 - 30 - 347 - 60 - !Control.HasFocus(60) + + + 420 + 50 + 30 + 347 + 60 + !Control.HasFocus(60) + + + 0 + 0 + 12 + 340 + vertical + + conditional + 30 + 9000 + Control.IsVisible(30) + Visible + Hidden + WindowOpen + WindowClose + - - 0 - 0 - 12 - 340 - vertical - - conditional - 9000 - 9000 - Control.IsVisible(30) - Visible - Hidden - WindowOpen - WindowClose + + + 420 + 40 + 30 + 347 + 9000 + 61 + 61 + vertical + + + 10 + 10 + 100 + 100 + $INFO[ListItem.Art(icon)] + + + 130 + 10 + 20 + 35 + center + white + green + ListItem.Label + + + CPU Text + 130 + 50 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Threads Text + 110 + 50 + 610 + 35 + + center + right + black + font12 + System.SupportsCPUUsage + + + CPU BAR + 120 + 85 + 610 + 16 + ListItem.Property(cpuusage) + System.SupportsCPUUsage + + + Physical Memory Text + 800 + 10 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Virtual Memory Text + 800 + 45 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Shared Memory Text + 800 + 80 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Addon Process Id + 230 + 10 + auto + 35 + + center + right + black + font12 + System.SupportsCPUUsage + + + + + 0 + 0 + 0 + 0 + lists/focus.png + Control.HasFocus(29) + + + 10 + 10 + 100 + 100 + $INFO[ListItem.Art(icon)] + + + 130 + 10 + 20 + 35 + center + white + green + ListItem.Label + + + CPU Text + 130 + 50 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Threads Text + 110 + 50 + 610 + 35 + + center + right + black + font12 + System.SupportsCPUUsage + + + CPU BAR + 120 + 85 + 610 + 16 + ListItem.Property(cpuusage) + System.SupportsCPUUsage + + + Physical Memory Text + 800 + 10 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Virtual Memory Text + 800 + 45 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Shared Memory Text + 800 + 80 + auto + 35 + + center + black + font12 + System.SupportsCPUUsage + + + Addon Process Id + 230 + 10 + auto + 35 + + center + right + black + font12 + System.SupportsCPUUsage + + + + + 0 + 0 + 12 + 340 + vertical + + conditional + 29 + 9000 + Control.IsVisible(29) + Visible + Hidden + WindowOpen + WindowClose + 380 @@ -168,6 +410,15 @@ 420 + + Button Addons + 29 + + + + 420 + + Button PVR diff --git a/cmake/scripts/common/AddonHelpers.cmake b/cmake/scripts/common/AddonHelpers.cmake index c541ad702e77c..1cb9dfd6daf18 100644 --- a/cmake/scripts/common/AddonHelpers.cmake +++ b/cmake/scripts/common/AddonHelpers.cmake @@ -92,66 +92,60 @@ macro (build_addon target prefix libs) endforeach() endif() - message(STATUS "Addon dependency check ...") - # Set defines used in addon.xml.in and read from versions.h to set add-on + message(STATUS "Addon API check ...") + # Set defines used in addon.xml.in and read from version.h to set add-on # version parts automatically - file(STRINGS ${KODI_INCLUDE_DIR}/versions.h BIN_ADDON_PARTS) + file(STRINGS ${KODI_INCLUDE_DIR}/c-api/version.h BIN_ADDON_PARTS) + set(__KDK_API_OLDEST__ 10000) foreach(loop_var ${BIN_ADDON_PARTS}) - # Only pass strings with "#define ADDON_" from versions.h - if(loop_var MATCHES "#define ADDON_") - string(REGEX REPLACE "\\\n" " " loop_var ${loop_var}) # remove header line breaks - string(REGEX REPLACE "#define " "" loop_var ${loop_var}) # remove the #define name from string - string(REGEX MATCHALL "[//a-zA-Z0-9._-]+" loop_var "${loop_var}") # separate the define values to a list - - # Get the definition name + string(FIND "${loop_var}" "#define __KDK_MAJOR__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") list(GET loop_var 0 include_name) - # Check definition are depends who is a bigger list - if("${include_name}" MATCHES "_DEPENDS") - # Use start definition name as base for other value type - list(GET loop_var 0 list_name) - string(REPLACE "_DEPENDS" "_MIN" depends_minver ${list_name}) - string(REPLACE "_DEPENDS" "" depends_ver ${list_name}) - string(REPLACE "_DEPENDS" "_XML_ID" xml_entry_name ${list_name}) - string(REPLACE "_DEPENDS" "_USED" used_type_name ${list_name}) - - # remove the first value, not needed and wrong on "for" loop - list(REMOVE_AT loop_var 0) - - foreach(depend_header ${loop_var}) - string(STRIP ${depend_header} depend_header) - foreach(src_file ${USED_SOURCES}) - file(STRINGS ${src_file} BIN_ADDON_SRC_PARTS) - foreach(loop_var ${BIN_ADDON_SRC_PARTS}) - string(REGEX MATCH "^[ \t]*#[ \t]*(include|import)[ \t]*[<\"](kodi\/)?(.+)[\">]" include_name "${loop_var}") - if(include_name AND CMAKE_MATCH_3 MATCHES ^${depend_header}) - get_directory_property(CURRENT_DEFS COMPILE_DEFINITIONS) - if(NOT used_type_name IN_LIST CURRENT_DEFS) - set(ADDON_DEPENDS "${ADDON_DEPENDS}\n") - # Inform with them the addon header about used type, if not present before - add_definitions(-D${used_type_name}) - message(STATUS " - Added API usage definition: ${used_type_name} (Version: \"${${depends_ver}}\", Min. Version: \"${${depends_minver}}\")") - set(FOUND_HEADER_USAGE 1) - endif() - endif() - endforeach() - if(FOUND_HEADER_USAGE EQUAL 1) # break this loop if found but not unset, needed in parts where includes muddled up on addon - break() - endif() - endforeach() - # type is found and round becomes broken for next round with other type - if(FOUND_HEADER_USAGE EQUAL 1) - unset(FOUND_HEADER_USAGE) - break() - endif() - endforeach() + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_MINOR__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_BETA__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_CANARY__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + if(__KDK_CANARY__ EQUAL 1) + set(__KDK_CANARY_XML__ "true") else() - # read the definition values and make it by the on version.h defined names public - list(GET loop_var 1 include_variable) - string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_variable}) - set(${include_name} ${${include_name}}) + set(__KDK_CANARY_XML__ "false") endif() endif() - endforeach() + string(FIND "${loop_var}" "#define __KODI_API_" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + if(include_value LESS ${__KDK_API_OLDEST__}) + set(__KDK_API_OLDEST__ ${include_value}) + endif() + endif() + endforeach(loop_var) + add_definitions(-D__KDK_MAJOR__=${__KDK_MAJOR__}) + add_definitions(-D__KDK_MINOR__=${__KDK_MINOR__}) + add_definitions(-D__KDK_BETA__=${__KDK_BETA__}) + add_definitions(-D__KDK_CANARY__=${__KDK_CANARY__}) + add_definitions(-D__KDK_API_OLDEST__=${__KDK_API_OLDEST__}) add_library(${target} ${${prefix}_SOURCES} ${${prefix}_HEADERS}) target_link_libraries(${target} ${${libs}}) diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake index 4bbb03bf95661..e850a62785d32 100644 --- a/cmake/scripts/common/Macros.cmake +++ b/cmake/scripts/common/Macros.cmake @@ -717,15 +717,51 @@ macro(core_find_versions) # Set defines used in addon.xml.in and read from versions.h to set add-on # version parts automatically - # This part is nearly identical to "AddonHelpers.cmake", except location of versions.h - file(STRINGS ${CORE_SOURCE_DIR}/xbmc/addons/kodi-dev-kit/include/kodi/versions.h BIN_ADDON_PARTS) + # This part is nearly identical to "AddonHelpers.cmake", except location of version.h + file(STRINGS ${CORE_SOURCE_DIR}/xbmc/addons/kodi-dev-kit/include/kodi/c-api/version.h BIN_ADDON_PARTS) + set(__KDK_API_OLDEST__ 10000) foreach(loop_var ${BIN_ADDON_PARTS}) - string(FIND "${loop_var}" "#define ADDON_" matchres) + string(FIND "${loop_var}" "#define __KDK_MAJOR__" matchres) if("${matchres}" EQUAL 0) string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") list(GET loop_var 0 include_name) - list(GET loop_var 1 include_version) - string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_version}) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_MINOR__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_BETA__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + endif() + string(FIND "${loop_var}" "#define __KDK_CANARY__" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + string(REGEX REPLACE ".*\"(.*)\"" "\\1" ${include_name} ${include_value}) + if(__KDK_CANARY__ EQUAL 1) + set(__KDK_CANARY_XML__ "true") + else() + set(__KDK_CANARY_XML__ "false") + endif() + endif() + string(FIND "${loop_var}" "#define __KODI_API_" matchres) + if("${matchres}" EQUAL 0) + string(REGEX MATCHALL "[A-Z0-9._]+|[A-Z0-9._]+$" loop_var "${loop_var}") + list(GET loop_var 0 include_name) + list(GET loop_var 1 include_value) + if(include_value LESS ${__KDK_API_OLDEST__}) + set(__KDK_API_OLDEST__ ${include_value}) + endif() endif() endforeach(loop_var) @@ -785,5 +821,5 @@ macro(find_addon_xml_in_files) endforeach() # Append also versions.h to depends - list(APPEND ADDON_XML_DEPENDS "${CORE_SOURCE_DIR}/xbmc/addons/kodi-dev-kit/include/kodi/versions.h") + list(APPEND ADDON_XML_DEPENDS "${CORE_SOURCE_DIR}/xbmc/addons/kodi-dev-kit/include/kodi/c-api/version.h") endmacro() diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake index 0a88e8ff11e74..4041601f7e622 100644 --- a/cmake/scripts/linux/ArchSetup.cmake +++ b/cmake/scripts/linux/ArchSetup.cmake @@ -180,3 +180,6 @@ if(ARCH_IS_BIGENDIAN) else() message(STATUS "Host architecture is little-endian") endif() + +# Additional libraries +list(APPEND DEPLIBS rt) # Shared dev kit interface diff --git a/cmake/treedata/common/addon_dev_kit.txt b/cmake/treedata/common/addon_dev_kit.txt index ba39702d99038..ff679a584fef6 100644 --- a/cmake/treedata/common/addon_dev_kit.txt +++ b/cmake/treedata/common/addon_dev_kit.txt @@ -3,6 +3,7 @@ xbmc/addons/kodi-dev-kit/include/kodi addons_kodi-dev-kit_include_kodi xbmc/addons/kodi-dev-kit/include/kodi/c-api addons_kodi-dev-kit_include_kodi_c-api +xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl addons_kodi-dev-kit_include_kodi_c-api_dl xbmc/addons/kodi-dev-kit/include/kodi/c-api/platform addons_kodi-dev-kit_include_kodi_c-api_platform xbmc/addons/kodi-dev-kit/include/kodi/c-api/platform/android addons_kodi-dev-kit_include_kodi_c-api_platform_android xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance addons_kodi-dev-kit_include_kodi_c-api_addon-instance @@ -24,3 +25,6 @@ xbmc/addons/kodi-dev-kit/include/kodi/gui/controls addons_kodi-dev-kit_include_k xbmc/addons/kodi-dev-kit/include/kodi/gui/input addons_kodi-dev-kit_include_kodi_gui_input xbmc/addons/kodi-dev-kit/include/kodi/gui/gl addons_kodi-dev-kit_include_kodi_gui_gl xbmc/addons/kodi-dev-kit/include/kodi/tools addons_kodi-dev-kit_include_kodi_tools +xbmc/addons/kodi-dev-kit/src/shared devkit_shared # Hardcoded entry, edit script for change! +xbmc/addons/kodi-dev-kit/src/addon kodidevkit # Hardcoded entry, edit script for change! +xbmc/addons/kodi-dev-kit/src/addon_run_exe addon_run_exe # Hardcoded entry, edit script for change! diff --git a/cmake/treedata/common/addon_interface.txt b/cmake/treedata/common/addon_interface.txt new file mode 100644 index 0000000000000..5c169f831ed6a --- /dev/null +++ b/cmake/treedata/common/addon_interface.txt @@ -0,0 +1,12 @@ +# Auto generated cmake/treedata/common/addon_interface.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +xbmc/addons/interface addons_interface +xbmc/addons/interface/tools addons_interface_tools +xbmc/addons/interface/api addons_interface_api +xbmc/addons/interface/api/addon-instance addons_interface_api_addon-instance +xbmc/addons/interface/api/gui addons_interface_api_gui +xbmc/addons/interface/api/gui/dialogs addons_interface_api_gui_dialogs +xbmc/addons/interface/api/gui/controls addons_interface_api_gui_controls +xbmc/addons/interface/launcher addons_interface_launcher +xbmc/addons/interface/processinfo addons_interface_processinfo diff --git a/cmake/treedata/common/subdirs.txt b/cmake/treedata/common/subdirs.txt index 1a80456037202..06f46404e2771 100644 --- a/cmake/treedata/common/subdirs.txt +++ b/cmake/treedata/common/subdirs.txt @@ -1,12 +1,7 @@ xbmc xbmc xbmc/addons addons xbmc/addons/addoninfo addons_addoninfo -xbmc/addons/binary-addons addons_binary-addons xbmc/addons/gui addons_gui -xbmc/addons/interfaces addons_interfaces -xbmc/addons/interfaces/gui addons_interfaces_gui -xbmc/addons/interfaces/gui/controls addons_interfaces_gui_controls -xbmc/addons/interfaces/gui/dialogs addons_interfaces_gui_dialogs xbmc/addons/settings addons_settings xbmc/commons commons xbmc/dbwrappers dbwrappers diff --git a/system/addon-manifest.xml b/system/addon-manifest.xml index e6de83fb0261f..62a37cd47c235 100644 --- a/system/addon-manifest.xml +++ b/system/addon-manifest.xml @@ -3,24 +3,7 @@ audioencoder.kodi.builtin.wma game.controller.default game.controller.snes - kodi.binary.global.audioengine - kodi.binary.global.main - kodi.binary.global.general - kodi.binary.global.network - kodi.binary.global.gui - kodi.binary.global.filesystem - kodi.binary.global.tools - kodi.binary.instance.audiodecoder - kodi.binary.instance.audioencoder - kodi.binary.instance.game - kodi.binary.instance.imagedecoder - kodi.binary.instance.inputstream - kodi.binary.instance.peripheral - kodi.binary.instance.pvr - kodi.binary.instance.screensaver - kodi.binary.instance.vfs - kodi.binary.instance.videocodec - kodi.binary.instance.visualization + kodi.binary.devkit kodi.resource metadata.album.universal metadata.artists.universal diff --git a/xbmc/ServiceBroker.cpp b/xbmc/ServiceBroker.cpp index e5c16263f6fbe..684b097609337 100644 --- a/xbmc/ServiceBroker.cpp +++ b/xbmc/ServiceBroker.cpp @@ -62,9 +62,9 @@ ADDON::CAddonMgr &CServiceBroker::GetAddonMgr() return g_application.m_ServiceManager->GetAddonMgr(); } -ADDON::CBinaryAddonManager &CServiceBroker::GetBinaryAddonManager() +KODI::ADDONS::INTERFACE::CController& CServiceBroker::GetAddonIfcCtrl() { - return g_application.m_ServiceManager->GetBinaryAddonManager(); + return g_application.m_ServiceManager->GetAddonIfcCtrl(); } ADDON::CBinaryAddonCache &CServiceBroker::GetBinaryAddonCache() diff --git a/xbmc/ServiceBroker.h b/xbmc/ServiceBroker.h index bc471f4b077a6..3c9c61b232788 100644 --- a/xbmc/ServiceBroker.h +++ b/xbmc/ServiceBroker.h @@ -14,7 +14,6 @@ namespace ADDON { class CAddonMgr; -class CBinaryAddonManager; class CBinaryAddonCache; class CVFSAddonCache; class CServiceAddonManager; @@ -72,10 +71,19 @@ class IWSDiscovery; namespace KODI { + namespace ADDONS { + class CExtsMimeSupportList; -} + +namespace INTERFACE +{ +class CController; +} /* namespace INTERFACE */ + +} /* namespace ADDONS */ + namespace GAME { @@ -108,10 +116,10 @@ class CServiceBroker static void UnregisterAnnouncementManager(); static ADDON::CAddonMgr &GetAddonMgr(); - static ADDON::CBinaryAddonManager &GetBinaryAddonManager(); static ADDON::CBinaryAddonCache &GetBinaryAddonCache(); static KODI::ADDONS::CExtsMimeSupportList& GetExtsMimeSupportList(); static ADDON::CVFSAddonCache &GetVFSAddonCache(); + static KODI::ADDONS::INTERFACE::CController& GetAddonIfcCtrl(); static XBPython &GetXBPython(); static WSDiscovery::IWSDiscovery& GetWSDiscovery(); static MEDIA_DETECT::CDetectDVDMedia& GetDetectDVDMedia(); diff --git a/xbmc/ServiceManager.cpp b/xbmc/ServiceManager.cpp index 0457a5416af3e..a668ee988e3d0 100644 --- a/xbmc/ServiceManager.cpp +++ b/xbmc/ServiceManager.cpp @@ -16,7 +16,7 @@ #include "addons/ExtsMimeSupportList.h" #include "addons/RepositoryUpdater.h" #include "addons/VFSEntry.h" -#include "addons/binary-addons/BinaryAddonManager.h" +#include "addons/interface/Controller.h" #include "cores/DataCacheCore.h" #include "cores/RetroPlayer/guibridge/GUIGameRenderManager.h" #include "cores/playercorefactory/PlayerCoreFactory.h" @@ -67,13 +67,19 @@ bool CServiceManager::InitForTesting() m_databaseManager.reset(new CDatabaseManager); - m_binaryAddonManager.reset(new ADDON::CBinaryAddonManager()); m_addonMgr.reset(new ADDON::CAddonMgr()); if (!m_addonMgr->Init()) { CLog::Log(LOGFATAL, "CServiceManager::{}: Unable to start CAddonMgr", __FUNCTION__); return false; } + m_addonIfcCtrl.reset(new KODI::ADDONS::INTERFACE::CController(*m_addonMgr)); + if (!m_addonIfcCtrl->Init()) + { + CLog::Log(LOGFATAL, "CServiceManager::{}: Unable to start KODI::ADDONS::INTERFACE::CController", + __func__); + return false; + } m_extsMimeSupportList.reset(new ADDONS::CExtsMimeSupportList(*m_addonMgr)); m_fileExtensionProvider.reset(new CFileExtensionProvider(*m_addonMgr)); @@ -87,7 +93,6 @@ void CServiceManager::DeinitTesting() init_level = 0; m_fileExtensionProvider.reset(); m_extsMimeSupportList.reset(); - m_binaryAddonManager.reset(); m_addonMgr.reset(); m_databaseManager.reset(); m_network.reset(); @@ -117,7 +122,6 @@ bool CServiceManager::InitStageTwo(const CAppParamParser ¶ms, const std::str // Initialize the addon database (must be before the addon manager is init'd) m_databaseManager.reset(new CDatabaseManager); - m_binaryAddonManager.reset(new ADDON::CBinaryAddonManager()); /* Need to constructed before, GetRunningInstance() of binary CAddonDll need to call them */ m_addonMgr.reset(new ADDON::CAddonMgr()); if (!m_addonMgr->Init()) { @@ -125,6 +129,14 @@ bool CServiceManager::InitStageTwo(const CAppParamParser ¶ms, const std::str return false; } + m_addonIfcCtrl.reset(new KODI::ADDONS::INTERFACE::CController(*m_addonMgr)); + if (!m_addonIfcCtrl->Init()) + { + CLog::Log(LOGFATAL, "CServiceManager::{}: Unable to start KODI::ADDONS::INTERFACE::CController", + __func__); + return false; + } + m_repositoryUpdater.reset(new ADDON::CRepositoryUpdater(*m_addonMgr)); m_extsMimeSupportList.reset(new ADDONS::CExtsMimeSupportList(*m_addonMgr)); @@ -247,7 +259,7 @@ void CServiceManager::DeinitStageTwo() m_extsMimeSupportList.reset(); m_vfsAddonCache.reset(); m_repositoryUpdater.reset(); - m_binaryAddonManager.reset(); + m_addonIfcCtrl.reset(); m_addonMgr.reset(); m_Platform.reset(); m_databaseManager.reset(); @@ -290,11 +302,6 @@ ADDON::CBinaryAddonCache &CServiceManager::GetBinaryAddonCache() return *m_binaryAddonCache; } -ADDON::CBinaryAddonManager &CServiceManager::GetBinaryAddonManager() -{ - return *m_binaryAddonManager; -} - ADDON::CVFSAddonCache &CServiceManager::GetVFSAddonCache() { return *m_vfsAddonCache; @@ -310,6 +317,11 @@ ADDON::CRepositoryUpdater &CServiceManager::GetRepositoryUpdater() return *m_repositoryUpdater; } +KODI::ADDONS::INTERFACE::CController& CServiceManager::GetAddonIfcCtrl() +{ + return *m_addonIfcCtrl; +} + #ifdef HAS_PYTHON XBPython& CServiceManager::GetXBPython() { diff --git a/xbmc/ServiceManager.h b/xbmc/ServiceManager.h index 730d8c0c0e89d..18d8d5f384c19 100644 --- a/xbmc/ServiceManager.h +++ b/xbmc/ServiceManager.h @@ -17,7 +17,6 @@ class CAppParamParser; namespace ADDON { class CAddonMgr; - class CBinaryAddonManager; class CBinaryAddonCache; class CVFSAddonCache; class CServiceAddonManager; @@ -53,10 +52,18 @@ class CWeatherManager; namespace KODI { + namespace ADDONS { + class CExtsMimeSupportList; -} + +namespace INTERFACE +{ +class CController; +} /* namespace INTERFACE */ + +} /* namespace ADDONS */ namespace GAME { @@ -104,12 +111,12 @@ class CServiceManager void DeinitStageOne(); ADDON::CAddonMgr& GetAddonMgr(); - ADDON::CBinaryAddonManager& GetBinaryAddonManager(); ADDON::CBinaryAddonCache& GetBinaryAddonCache(); KODI::ADDONS::CExtsMimeSupportList& GetExtsMimeSupportList(); ADDON::CVFSAddonCache& GetVFSAddonCache(); ADDON::CServiceAddonManager& GetServiceAddons(); ADDON::CRepositoryUpdater& GetRepositoryUpdater(); + KODI::ADDONS::INTERFACE::CController& GetAddonIfcCtrl(); CNetworkBase& GetNetwork(); #ifdef HAS_PYTHON XBPython& GetXBPython(); @@ -166,12 +173,12 @@ class CServiceManager }; std::unique_ptr m_addonMgr; - std::unique_ptr m_binaryAddonManager; std::unique_ptr m_binaryAddonCache; std::unique_ptr m_extsMimeSupportList; std::unique_ptr m_vfsAddonCache; std::unique_ptr m_serviceAddons; std::unique_ptr m_repositoryUpdater; + std::unique_ptr m_addonIfcCtrl; #if defined(HAS_FILESYSTEM_SMB) std::unique_ptr m_WSDiscovery; #endif diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp index fa57981fa2297..76e88619ed1f9 100644 --- a/xbmc/addons/Addon.cpp +++ b/xbmc/addons/Addon.cpp @@ -41,11 +41,10 @@ CAddon::CAddon(const AddonInfoPtr& addonInfo, TYPE addonType) m_userSettingsPath(), m_loadSettingsFailed(false), m_hasUserSettings(false), - m_profilePath(StringUtils::Format("special://profile/addon_data/{}/", m_addonInfo->ID())), m_settings(nullptr), m_type(addonType == ADDON_UNKNOWN ? addonInfo->MainType() : addonType) { - m_userSettingsPath = URIUtils::AddFileToFolder(m_profilePath, "settings.xml"); + m_userSettingsPath = URIUtils::AddFileToFolder(m_addonInfo->Profile(), "settings.xml"); } /** diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h index 1627d675558dc..74a7f8914cd63 100644 --- a/xbmc/addons/Addon.h +++ b/xbmc/addons/Addon.h @@ -89,7 +89,7 @@ class CAddon : public IAddon * ~~~~~~~~~~~~~ * */ - const CAddonType* Type(TYPE type) const { return m_addonInfo->Type(type); } + const CAddonType* Type(TYPE type) const override { return m_addonInfo->Type(type); } std::string ID() const override{ return m_addonInfo->ID(); } std::string Name() const override { return m_addonInfo->Name(); } @@ -100,7 +100,7 @@ class CAddon : public IAddon std::string Summary() const override { return m_addonInfo->Summary(); } std::string Description() const override { return m_addonInfo->Description(); } std::string Path() const override { return m_addonInfo->Path(); } - std::string Profile() const override { return m_profilePath; } + std::string Profile() const override { return m_addonInfo->Profile(); } std::string LibPath() const override; std::string Author() const override { return m_addonInfo->Author(); } std::string ChangeLog() const override { return m_addonInfo->ChangeLog(); } @@ -301,7 +301,6 @@ class CAddon : public IAddon bool m_loadSettingsFailed; bool m_hasUserSettings; - std::string m_profilePath; mutable std::shared_ptr m_settings; const TYPE m_type; }; diff --git a/xbmc/addons/AddonBuilder.cpp b/xbmc/addons/AddonBuilder.cpp index 39dd3c9eed8e2..c4b04f798573f 100644 --- a/xbmc/addons/AddonBuilder.cpp +++ b/xbmc/addons/AddonBuilder.cpp @@ -55,7 +55,7 @@ AddonPtr CAddonBuilder::Generate(const AddonInfoPtr& info, TYPE type) { // built in audio encoder if (StringUtils::StartsWithNoCase(info->ID(), "audioencoder.kodi.builtin.")) - return std::make_shared(info, type); + return std::make_shared(info, type); } switch (type) @@ -69,7 +69,7 @@ AddonPtr CAddonBuilder::Generate(const AddonInfoPtr& info, TYPE type) case ADDON_VFS: case ADDON_VIZ: case ADDON_SCREENSAVER: - return std::make_shared(info, type); + return std::make_shared(info, type); case ADDON_GAMEDLL: return std::make_shared(info); case ADDON_PLUGIN: diff --git a/xbmc/addons/AddonDatabase.cpp b/xbmc/addons/AddonDatabase.cpp index cf304ccb6e2f2..44e44eeda0e0d 100644 --- a/xbmc/addons/AddonDatabase.cpp +++ b/xbmc/addons/AddonDatabase.cpp @@ -46,6 +46,8 @@ std::string CAddonDatabaseSerializer::SerializeMetadata(const CAddonInfo& addon) for (const auto& item : addon.Screenshots()) variant["screenshots"].push_back(item); + variant["language"] = addon.Type(addon.MainType())->LanguageName(); + variant["extensions"] = CVariant(CVariant::VariantTypeArray); variant["extensions"].push_back(SerializeExtensions(*addon.Type(addon.MainType()))); @@ -135,9 +137,10 @@ void CAddonDatabaseSerializer::DeserializeMetadata(const std::string& document, screenshots.push_back(it->asString()); builder.SetScreenshots(std::move(screenshots)); - CAddonType addonType; + CAddonType addonType(ADDON_UNKNOWN, AddonLanguage::Unknown); DeserializeExtensions(variant["extensions"][0], addonType); - addonType.m_type = CAddonInfo::TranslateType(addonType.m_point); + addonType.SetType(CAddonInfo::TranslateType(addonType.m_point)); + addonType.SetLanguage(variant["language"].asString()); builder.SetExtensions(std::move(addonType)); { diff --git a/xbmc/addons/AddonProvider.h b/xbmc/addons/AddonProvider.h index 2a1e7af3fb79e..08130f94b9039 100644 --- a/xbmc/addons/AddonProvider.h +++ b/xbmc/addons/AddonProvider.h @@ -8,7 +8,7 @@ #pragma once -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h" #include diff --git a/xbmc/addons/AddonStatusHandler.h b/xbmc/addons/AddonStatusHandler.h index 77751ad96f27f..f0a1b232aac67 100644 --- a/xbmc/addons/AddonStatusHandler.h +++ b/xbmc/addons/AddonStatusHandler.h @@ -9,7 +9,7 @@ #pragma once #include "IAddon.h" -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h" #include "threads/CriticalSection.h" #include "threads/Thread.h" diff --git a/xbmc/addons/AudioDecoder.cpp b/xbmc/addons/AudioDecoder.cpp index c0b2b516872c3..09e3814fb5f1a 100644 --- a/xbmc/addons/AudioDecoder.cpp +++ b/xbmc/addons/AudioDecoder.cpp @@ -7,7 +7,13 @@ #include "AudioDecoder.h" -#include "addons/interfaces/AudioEngine.h" +// Devkit API interface +#include "interface/api/audio_engine.h" + +// Kodi +#include "FileItem.h" +#include "ServiceBroker.h" +#include "addons/AddonManager.h" #include "cores/AudioEngine/Utils/AEUtil.h" #include "filesystem/File.h" #include "music/tags/MusicInfoTag.h" @@ -18,53 +24,38 @@ using namespace ADDON; using namespace KODI::ADDONS; +using namespace KODI::ADDONS::INTERFACE; CAudioDecoder::CAudioDecoder(const AddonInfoPtr& addonInfo) - : IAddonInstanceHandler(ADDON_INSTANCE_AUDIODECODER, addonInfo) + : IInstanceHandler(ADDON_INSTANCE_AUDIODECODER, addonInfo) { m_CodecName = addonInfo->Type(ADDON_AUDIODECODER)->GetValue("@name").asString(); m_strExt = m_CodecName + KODI_ADDON_AUDIODECODER_TRACK_EXT; m_hasTags = addonInfo->Type(ADDON_AUDIODECODER)->GetValue("@tags").asBoolean(); - - // Create all interface parts independent to make API changes easier if - // something is added - m_ifc.audiodecoder = new AddonInstance_AudioDecoder; - m_ifc.audiodecoder->toAddon = new KodiToAddonFuncTable_AudioDecoder(); - m_ifc.audiodecoder->toKodi = new AddonToKodiFuncTable_AudioDecoder(); - m_ifc.audiodecoder->toKodi->kodiInstance = this; } CAudioDecoder::~CAudioDecoder() { DestroyInstance(); - - delete m_ifc.audiodecoder->toKodi; - delete m_ifc.audiodecoder->toAddon; - delete m_ifc.audiodecoder; } bool CAudioDecoder::CreateDecoder() { - if (CreateInstance() != ADDON_STATUS_OK) - return false; - - return true; + return CreateInstance() == ADDON_STATUS_OK; } bool CAudioDecoder::SupportsFile(const std::string& filename) { // Create in case not available, possible as this done by IAddonSupportCheck - if ((!m_ifc.hdl && !CreateDecoder()) || !m_ifc.audiodecoder->toAddon->supports_file) + if ((!m_instance && !CreateDecoder())) return false; - return m_ifc.audiodecoder->toAddon->supports_file(m_ifc.hdl, filename.c_str()); + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + return ifc->kodi_addon_audiodecoder_supports_file_v1(m_instance, filename.c_str()); } bool CAudioDecoder::Init(const CFileItem& file, unsigned int filecache) { - if (!m_ifc.audiodecoder->toAddon->init) - return false; - /// for replaygain /// @todo About audio decoder in most cases Kodi's one not work, add fallback /// to use addon if this fails. Need API change about addons music info tag! @@ -76,9 +67,10 @@ bool CAudioDecoder::Init(const CFileItem& file, unsigned int filecache) AudioEngineDataFormat addonFormat = AUDIOENGINE_FMT_INVALID; AudioEngineChannel channelList[AUDIOENGINE_CH_MAX] = {AUDIOENGINE_CH_NULL}; - bool ret = m_ifc.audiodecoder->toAddon->init(m_ifc.hdl, file.GetDynPath().c_str(), filecache, - &channels, &sampleRate, &m_bitsPerSample, - &m_TotalTime, &m_bitRate, &addonFormat, channelList); + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + bool ret = ifc->kodi_addon_audiodecoder_init_v1( + m_instance, file.GetDynPath().c_str(), filecache, &channels, &sampleRate, &m_bitsPerSample, + &m_TotalTime, &m_bitRate, &addonFormat, channelList); if (ret) { if (channels <= 0 || sampleRate <= 0 || addonFormat == AUDIOENGINE_FMT_INVALID) @@ -89,7 +81,7 @@ bool CAudioDecoder::Init(const CFileItem& file, unsigned int filecache) return false; } - m_format.m_dataFormat = Interface_AudioEngine::TranslateAEFormatToKodi(addonFormat); + m_format.m_dataFormat = TranslateAEFormatToKodi(addonFormat); m_format.m_sampleRate = sampleRate; if (channelList[0] != AUDIOENGINE_CH_NULL) { @@ -98,7 +90,7 @@ bool CAudioDecoder::Init(const CFileItem& file, unsigned int filecache) { if (channel == AUDIOENGINE_CH_NULL) break; - layout += Interface_AudioEngine::TranslateAEChannelToKodi(channel); + layout += TranslateAEChannelToKodi(channel); } m_format.m_channelLayout = layout; @@ -112,18 +104,14 @@ bool CAudioDecoder::Init(const CFileItem& file, unsigned int filecache) int CAudioDecoder::ReadPCM(uint8_t* buffer, size_t size, size_t* actualsize) { - if (!m_ifc.audiodecoder->toAddon->read_pcm) - return 0; - - return m_ifc.audiodecoder->toAddon->read_pcm(m_ifc.hdl, buffer, size, actualsize); + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + return ifc->kodi_addon_audiodecoder_read_pcm_v1(m_instance, buffer, size, actualsize); } bool CAudioDecoder::Seek(int64_t time) { - if (!m_ifc.audiodecoder->toAddon->seek) - return false; - - m_ifc.audiodecoder->toAddon->seek(m_ifc.hdl, time); + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + ifc->kodi_addon_audiodecoder_seek_v1(m_instance, time); return true; } @@ -131,11 +119,9 @@ bool CAudioDecoder::Load(const std::string& fileName, MUSIC_INFO::CMusicInfoTag& tag, EmbeddedArt* art) { - if (!m_ifc.audiodecoder->toAddon->read_tag) - return false; - KODI_ADDON_AUDIODECODER_INFO_TAG ifcTag = {}; - bool ret = m_ifc.audiodecoder->toAddon->read_tag(m_ifc.hdl, fileName.c_str(), &ifcTag); + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + bool ret = ifc->kodi_addon_audiodecoder_read_tag_v1(m_instance, fileName.c_str(), &ifcTag); if (ret) { if (ifcTag.title) @@ -234,11 +220,8 @@ bool CAudioDecoder::Load(const std::string& fileName, int CAudioDecoder::GetTrackCount(const std::string& strPath) { - if (!m_ifc.audiodecoder->toAddon->track_count) - return 0; - - int result = m_ifc.audiodecoder->toAddon->track_count(m_ifc.hdl, strPath.c_str()); - + const auto ifc = m_ifc->kodi_addoninstance_audiodecoder_h; + int result = ifc->kodi_addon_audiodecoder_track_count_v1(m_instance, strPath.c_str()); if (result > 1) { if (m_hasTags) diff --git a/xbmc/addons/AudioDecoder.h b/xbmc/addons/AudioDecoder.h index 7e2424e0d6d74..ab04e9105cc73 100644 --- a/xbmc/addons/AudioDecoder.h +++ b/xbmc/addons/AudioDecoder.h @@ -7,12 +7,14 @@ #pragma once +// Devkit API interface +#include "addons/AddonEvents.h" #include "addons/IAddonSupportCheck.h" #include "addons/IAddonSupportList.h" -#include "addons/binary-addons/AddonInstanceHandler.h" -#include "addons/kodi-dev-kit/include/kodi/addon-instance/AudioDecoder.h" +#include "addons/interface/InstanceHandler.h" #include "cores/paplayer/ICodec.h" #include "filesystem/MusicFileDirectory.h" +#include "interface/api/addon-instance/audiodecoder.h" #include "music/tags/ImusicInfoTagLoader.h" namespace KODI @@ -20,8 +22,8 @@ namespace KODI namespace ADDONS { -class CAudioDecoder : public ADDON::IAddonInstanceHandler, - public IAddonSupportCheck, +class CAudioDecoder : public KODI::ADDONS::INTERFACE::IInstanceHandler, + public KODI::ADDONS::IAddonSupportCheck, public ICodec, public MUSIC_INFO::IMusicInfoTagLoader, public XFILE::CMusicFileDirectory diff --git a/xbmc/addons/IAddon.h b/xbmc/addons/IAddon.h index ee54f7a07d922..f0a9d5a9f4018 100644 --- a/xbmc/addons/IAddon.h +++ b/xbmc/addons/IAddon.h @@ -37,6 +37,7 @@ namespace ADDON virtual TYPE Type() const =0; virtual bool HasType(TYPE type) const = 0; virtual bool HasMainType(TYPE type) const = 0; + virtual const CAddonType* Type(TYPE type) const = 0; virtual std::string ID() const =0; virtual std::string Name() const =0; virtual bool IsInUse() const =0; diff --git a/xbmc/addons/ImageDecoder.cpp b/xbmc/addons/ImageDecoder.cpp index 2db12d66944a4..9efafa92a54a4 100644 --- a/xbmc/addons/ImageDecoder.cpp +++ b/xbmc/addons/ImageDecoder.cpp @@ -7,6 +7,10 @@ #include "ImageDecoder.h" +// Devkit API interface +#include "interface/api/addon-instance/imagedecoder.h" + +// Kodi #include "guilib/TextureFormats.h" #include "pictures/PictureInfoTag.h" @@ -25,14 +29,8 @@ constexpr std::array, 4> KodiToA } /* namespace */ CImageDecoder::CImageDecoder(const AddonInfoPtr& addonInfo, const std::string& mimetype) - : IAddonInstanceHandler(ADDON_INSTANCE_IMAGEDECODER, addonInfo), m_mimetype(mimetype) + : IInstanceHandler(ADDON_INSTANCE_IMAGEDECODER, addonInfo), m_mimetype(mimetype) { - // Create all interface parts independent to make API changes easier if - // something is added - m_ifc.imagedecoder = new AddonInstance_ImageDecoder; - m_ifc.imagedecoder->toAddon = new KodiToAddonFuncTable_ImageDecoder(); - m_ifc.imagedecoder->toKodi = new AddonToKodiFuncTable_ImageDecoder(); - if (CreateInstance() != ADDON_STATUS_OK) return; @@ -42,28 +40,26 @@ CImageDecoder::CImageDecoder(const AddonInfoPtr& addonInfo, const std::string& m CImageDecoder::~CImageDecoder() { DestroyInstance(); - - delete m_ifc.imagedecoder->toKodi; - delete m_ifc.imagedecoder->toAddon; - delete m_ifc.imagedecoder; } bool CImageDecoder::SupportsFile(const std::string& filename) { // Create in case not available, possible as this done by IAddonSupportCheck - if (!m_created || !m_ifc.imagedecoder->toAddon->supports_file) + if (!m_created) return false; - return m_ifc.imagedecoder->toAddon->supports_file(m_ifc.hdl, filename.c_str()); + return m_ifc->kodi_addoninstance_imagedecoder_h->kodi_addon_imagedecoder_supports_file_v1( + m_instance, filename.c_str()); } bool CImageDecoder::LoadInfoTag(const std::string& fileName, CPictureInfoTag* tag) { - if (!m_created || !m_ifc.imagedecoder->toAddon->read_tag || !tag) + if (!m_created || !tag) return false; KODI_ADDON_IMAGEDECODER_INFO_TAG ifcTag = {}; - bool ret = m_ifc.imagedecoder->toAddon->read_tag(m_ifc.hdl, fileName.c_str(), &ifcTag); + bool ret = m_ifc->kodi_addoninstance_imagedecoder_h->kodi_addon_imagedecoder_read_tag_v1( + m_instance, fileName.c_str(), &ifcTag); if (ret) { /*! @@ -178,13 +174,14 @@ bool CImageDecoder::LoadImageFromMemory(unsigned char* buffer, unsigned int width, unsigned int height) { - if (!m_created || !m_ifc.imagedecoder->toAddon->load_image_from_memory) + if (!m_created) return false; m_width = width; m_height = height; - return m_ifc.imagedecoder->toAddon->load_image_from_memory(m_ifc.hdl, m_mimetype.c_str(), buffer, - bufSize, &m_width, &m_height); + return m_ifc->kodi_addoninstance_imagedecoder_h + ->kodi_addon_imagedecoder_load_image_from_memory_v1(m_instance, m_mimetype.c_str(), buffer, + bufSize, &m_width, &m_height); } bool CImageDecoder::Decode(unsigned char* const pixels, @@ -193,7 +190,7 @@ bool CImageDecoder::Decode(unsigned char* const pixels, unsigned int pitch, unsigned int format) { - if (!m_created || !m_ifc.imagedecoder->toAddon->decode) + if (!m_created) return false; const auto it = std::find_if(KodiToAddonFormat.begin(), KodiToAddonFormat.end(), @@ -203,8 +200,8 @@ bool CImageDecoder::Decode(unsigned char* const pixels, const ADDON_IMG_FMT addonFmt = std::get<1>(*it); const size_t size = width * height * std::get<2>(*it); - const bool result = - m_ifc.imagedecoder->toAddon->decode(m_ifc.hdl, pixels, size, width, height, pitch, addonFmt); + const bool result = m_ifc->kodi_addoninstance_imagedecoder_h->kodi_addon_imagedecoder_decode_v1( + m_instance, pixels, size, width, height, pitch, addonFmt); m_width = width; m_height = height; diff --git a/xbmc/addons/ImageDecoder.h b/xbmc/addons/ImageDecoder.h index 038c601e62838..adc05cd358aa4 100644 --- a/xbmc/addons/ImageDecoder.h +++ b/xbmc/addons/ImageDecoder.h @@ -8,9 +8,8 @@ #pragma once #include "addons/IAddonSupportCheck.h" -#include "addons/binary-addons/AddonInstanceHandler.h" -#include "addons/kodi-dev-kit/include/kodi/addon-instance/ImageDecoder.h" #include "guilib/iimage.h" +#include "interface/InstanceHandler.h" class CPictureInfoTag; @@ -19,7 +18,7 @@ namespace KODI namespace ADDONS { -class CImageDecoder : public ADDON::IAddonInstanceHandler, +class CImageDecoder : public KODI::ADDONS::INTERFACE::IInstanceHandler, public KODI::ADDONS::IAddonSupportCheck, public IImage { diff --git a/xbmc/addons/ScreenSaver.cpp b/xbmc/addons/ScreenSaver.cpp index 06e1afdd233f0..c90451c0388c5 100644 --- a/xbmc/addons/ScreenSaver.cpp +++ b/xbmc/addons/ScreenSaver.cpp @@ -8,6 +8,7 @@ #include "ScreenSaver.h" +#include "addons/interface/api/addon-instance/screensaver.h" #include "filesystem/SpecialProtocol.h" #include "utils/log.h" #include "windowing/GraphicContext.h" @@ -16,24 +17,9 @@ using namespace ADDON; using namespace KODI::ADDONS; -namespace -{ -void get_properties(const KODI_HANDLE hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props) -{ - if (hdl) - static_cast(hdl)->GetProperties(props); -} -} // namespace - CScreenSaver::CScreenSaver(const AddonInfoPtr& addonInfo) - : IAddonInstanceHandler(ADDON_INSTANCE_SCREENSAVER, addonInfo) + : IInstanceHandler(ADDON_INSTANCE_SCREENSAVER, addonInfo) { - m_ifc.screensaver = new AddonInstance_Screensaver; - m_ifc.screensaver->toAddon = new KodiToAddonFuncTable_Screensaver(); - m_ifc.screensaver->toKodi = new AddonToKodiFuncTable_Screensaver(); - m_ifc.screensaver->toKodi->get_properties = get_properties; - - /* Open the class "kodi::addon::CInstanceScreensaver" on add-on side */ if (CreateInstance() != ADDON_STATUS_OK) CLog::Log(LOGFATAL, "Screensaver: failed to create instance for '{}' and not usable!", ID()); } @@ -42,29 +28,21 @@ CScreenSaver::~CScreenSaver() { /* Destroy the class "kodi::addon::CInstanceScreensaver" on add-on side */ DestroyInstance(); - - delete m_ifc.screensaver->toAddon; - delete m_ifc.screensaver->toKodi; - delete m_ifc.screensaver; } bool CScreenSaver::Start() { - if (m_ifc.screensaver->toAddon->start) - return m_ifc.screensaver->toAddon->start(m_ifc.hdl); - return false; + return m_ifc->kodi_addoninstance_screensaver_h->kodi_addon_screensaver_start_v1(m_instance); } void CScreenSaver::Stop() { - if (m_ifc.screensaver->toAddon->stop) - m_ifc.screensaver->toAddon->stop(m_ifc.hdl); + return m_ifc->kodi_addoninstance_screensaver_h->kodi_addon_screensaver_stop_v1(m_instance); } void CScreenSaver::Render() { - if (m_ifc.screensaver->toAddon->render) - m_ifc.screensaver->toAddon->render(m_ifc.hdl); + return m_ifc->kodi_addoninstance_screensaver_h->kodi_addon_screensaver_render_v1(m_instance); } void CScreenSaver::GetProperties(struct KODI_ADDON_SCREENSAVER_PROPS* props) diff --git a/xbmc/addons/ScreenSaver.h b/xbmc/addons/ScreenSaver.h index 616d3e82c714a..f1073a8016450 100644 --- a/xbmc/addons/ScreenSaver.h +++ b/xbmc/addons/ScreenSaver.h @@ -8,15 +8,15 @@ #pragma once -#include "addons/binary-addons/AddonInstanceHandler.h" -#include "addons/kodi-dev-kit/include/kodi/addon-instance/Screensaver.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h" +#include "interface/InstanceHandler.h" namespace KODI { namespace ADDONS { -class CScreenSaver : public ADDON::IAddonInstanceHandler +class CScreenSaver : public KODI::ADDONS::INTERFACE::IInstanceHandler { public: explicit CScreenSaver(const ADDON::AddonInfoPtr& addonInfo); @@ -28,6 +28,7 @@ class CScreenSaver : public ADDON::IAddonInstanceHandler // Addon callback functions void GetProperties(struct KODI_ADDON_SCREENSAVER_PROPS* props); + /*---AUTO_GEN_PARSE---*/ }; } /* namespace ADDONS */ diff --git a/xbmc/addons/Service.cpp b/xbmc/addons/Service.cpp index 285e76ba2fcb2..d0d4e13e5a3ed 100644 --- a/xbmc/addons/Service.cpp +++ b/xbmc/addons/Service.cpp @@ -8,10 +8,14 @@ #include "Service.h" #include "AddonManager.h" +#include "ServiceBroker.h" +#include "interface/Controller.h" +#include "interface/RunningProcess.h" #include "interfaces/generic/ScriptInvocationManager.h" #include "utils/StringUtils.h" #include "utils/log.h" +using namespace KODI::ADDONS::INTERFACE; namespace ADDON { @@ -71,12 +75,36 @@ void CServiceAddonManager::Start(const std::string& addonId) void CServiceAddonManager::Start(const AddonPtr& addon) { CSingleLock lock(m_criticalSection); + if (m_services.find(addon->ID()) != m_services.end()) { CLog::Log(LOGDEBUG, "CServiceAddonManager: {} already started.", addon->ID()); return; } + if (CServiceBroker::GetAddonIfcCtrl().AddonLanguageSupported(addon)) + { + std::vector argv; + std::shared_ptr process; + bool ret = CServiceBroker::GetAddonIfcCtrl().LaunchAddon(addon, argv, false, process); + if (!ret) + { + CLog::Log(LOGERROR, "CServiceAddonManager: {} failed to start", addon->ID()); + return; + } + + m_services[addon->ID()] = process; + } + + //! @brief Old way. Still supported until new is main + //! @todo Remove after new is final and support whole python interface + /*!@{*/ + if (m_servicesPythonOld.find(addon->ID()) != m_servicesPythonOld.end()) + { + CLog::Log(LOGDEBUG, "CServiceAddonManager: {} already started.", addon->ID()); + return; + } + if (StringUtils::EndsWith(addon->LibPath(), ".py")) { CLog::Log(LOGDEBUG, "CServiceAddonManager: starting {}", addon->ID()); @@ -86,8 +114,9 @@ void CServiceAddonManager::Start(const AddonPtr& addon) CLog::Log(LOGERROR, "CServiceAddonManager: {} failed to start", addon->ID()); return; } - m_services[addon->ID()] = handle; + m_servicesPythonOld[addon->ID()] = handle; } + /*!@}*/ } void CServiceAddonManager::Stop() @@ -95,24 +124,61 @@ void CServiceAddonManager::Stop() m_addonMgr.Events().Unsubscribe(this); m_addonMgr.UnloadEvents().Unsubscribe(this); CSingleLock lock(m_criticalSection); + for (const auto& service : m_services) { - Stop(service); + Stop(service.second); } m_services.clear(); + + //! @brief Old way. Still supported until new is main + //! @todo Remove after new is final and support whole python interface + /*!@{*/ + for (const auto& service : m_servicesPythonOld) + { + Stop(service); + } + m_servicesPythonOld.clear(); + /*!@}*/ } void CServiceAddonManager::Stop(const std::string& addonId) { CSingleLock lock(m_criticalSection); + auto it = m_services.find(addonId); if (it != m_services.end()) { - Stop(*it); + Stop(it->second); m_services.erase(it); } + + //! @brief Old way. Still supported until new is main + //! @todo Remove after new is final and support whole python interface + /*!@{*/ + auto itOld = m_servicesPythonOld.find(addonId); + if (itOld != m_servicesPythonOld.end()) + { + Stop(*itOld); + m_servicesPythonOld.erase(itOld); + } + /*!@}*/ +} + +void CServiceAddonManager::Stop( + const std::shared_ptr& service) +{ + CLog::Log(LOGDEBUG, "CServiceAddonManager: stopping {}.", service->GetAddon()->ID()); + if (!service->Kill()) + { + CLog::Log(LOGINFO, "CServiceAddonManager: failed to stop {} (may have ended)", + service->GetAddon()->ID()); + } } +//! @brief Old way. Still supported until new is main +//! @todo Remove after new is final and support whole python interface +/*!@{*/ void CServiceAddonManager::Stop(const std::map::value_type& service) { CLog::Log(LOGDEBUG, "CServiceAddonManager: stopping {}.", service.first); @@ -121,4 +187,5 @@ void CServiceAddonManager::Stop(const std::map::value_type& se CLog::Log(LOGINFO, "CServiceAddonManager: failed to stop {} (may have ended)", service.first); } } +/*!@}*/ } diff --git a/xbmc/addons/Service.h b/xbmc/addons/Service.h index c997ef01b3b37..02bfecd36abdf 100644 --- a/xbmc/addons/Service.h +++ b/xbmc/addons/Service.h @@ -12,6 +12,19 @@ #include "AddonEvents.h" #include "threads/CriticalSection.h" +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CRunningProcess; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + namespace ADDON { class CService: public CAddon @@ -50,11 +63,13 @@ namespace ADDON private: void OnEvent(const AddonEvent& event); + void Stop(const std::shared_ptr& service); void Stop(const std::map::value_type& service); CAddonMgr& m_addonMgr; CCriticalSection m_criticalSection; + std::map> m_services; /** add-on id -> script id */ - std::map m_services; + std::map m_servicesPythonOld; }; } diff --git a/xbmc/addons/VFSEntry.cpp b/xbmc/addons/VFSEntry.cpp index ed18bf2e8dab9..35bb24e115dcb 100644 --- a/xbmc/addons/VFSEntry.cpp +++ b/xbmc/addons/VFSEntry.cpp @@ -10,7 +10,7 @@ #include "ServiceBroker.h" #include "URL.h" #include "addons/AddonManager.h" -#include "addons/interfaces/Filesystem.h" +#include "addons/interface/api/addon-instance/vfs.h" #include "network/ZeroconfBrowser.h" #include "utils/StringUtils.h" #include "utils/log.h" @@ -41,6 +41,8 @@ #endif #endif +using namespace KODI::ADDONS::INTERFACE; + namespace ADDON { @@ -61,7 +63,7 @@ void CVFSAddonCache::Init() for (const auto& addonInfo : addonInfos) { VFSEntryPtr vfs = std::make_shared(addonInfo); - vfs->Addon()->RegisterInformer(this); + // vfs->Addon()->RegisterInformer(this); m_addonsInstances.emplace_back(vfs); @@ -148,7 +150,7 @@ void CVFSAddonCache::Update(const std::string& id) if (itAddon != m_addonsInstances.end()) { - (*itAddon)->Addon()->RegisterInformer(nullptr); + // (*itAddon)->Addon()->RegisterInformer(nullptr); m_addonsInstances.erase(itAddon); } } @@ -196,7 +198,8 @@ class CVFSURLWrapper url.protocol = m_strings[9].c_str(); } - VFSURL url; + KODI_ADDON_VFS_URL url; + protected: std::vector m_strings; }; @@ -215,7 +218,7 @@ CVFSEntry::ProtocolInfo::ProtocolInfo(const AddonInfoPtr& addonInfo) } CVFSEntry::CVFSEntry(const AddonInfoPtr& addonInfo) - : IAddonInstanceHandler(ADDON_INSTANCE_VFS, addonInfo), + : IInstanceHandler(ADDON_INSTANCE_VFS, addonInfo), m_protocols(addonInfo->Type(ADDON_VFS)->GetValue("@protocols").asString()), m_extensions(addonInfo->Type(ADDON_VFS)->GetValue("@extensions").asString()), m_zeroconf(addonInfo->Type(ADDON_VFS)->GetValue("@zeroconf").asString()), @@ -227,13 +230,6 @@ CVFSEntry::CVFSEntry(const AddonInfoPtr& addonInfo) if (!addonInfo->Type(ADDON_VFS)->GetValue("@supportDialog").asBoolean()) m_protocolInfo.type.clear(); - // Create "C" interface structures, used as own parts to prevent API problems on update - m_ifc.vfs = new AddonInstance_VFSEntry; - m_ifc.vfs->props = new AddonProps_VFSEntry(); - m_ifc.vfs->toAddon = new KodiToAddonFuncTable_VFSEntry(); - m_ifc.vfs->toKodi = new AddonToKodiFuncTable_VFSEntry(); - - m_ifc.vfs->toKodi->kodiInstance = this; if (CreateInstance() != ADDON_STATUS_OK) CLog::Log(LOGFATAL, "CVFSEntry - Couldn't create instance on add-on '{}'", addonInfo->Name()); } @@ -241,50 +237,33 @@ CVFSEntry::CVFSEntry(const AddonInfoPtr& addonInfo) CVFSEntry::~CVFSEntry() { DestroyInstance(); - - // Delete "C" interface structures - delete m_ifc.vfs->toAddon; - delete m_ifc.vfs->toKodi; - delete m_ifc.vfs->props; - delete m_ifc.vfs; } void* CVFSEntry::Open(const CURL& url) { - if (!m_ifc.vfs->toAddon->open) - return nullptr; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->open(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_open_v1(m_instance, &url2.url); } void* CVFSEntry::OpenForWrite(const CURL& url, bool bOverWrite) { - if (!m_ifc.vfs->toAddon->open_for_write) - return nullptr; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->open_for_write(m_ifc.vfs, &url2.url, bOverWrite); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_open_for_write_v1( + m_instance, &url2.url, bOverWrite); } bool CVFSEntry::Exists(const CURL& url) { - if (!m_ifc.vfs->toAddon->exists) - return false; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->exists(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_exists_v1(m_instance, &url2.url); } int CVFSEntry::Stat(const CURL& url, struct __stat64* buffer) { - int ret = -1; - if (!m_ifc.vfs->toAddon->stat) - return ret; - CVFSURLWrapper url2(url); - STAT_STRUCTURE statBuffer = {}; - ret = m_ifc.vfs->toAddon->stat(m_ifc.vfs, &url2.url, &statBuffer); + VFS_STAT_STRUCTURE statBuffer = {}; + int ret = + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_stat_v1(m_instance, &url2.url, &statBuffer); buffer->st_dev = statBuffer.deviceId; buffer->st_ino = statBuffer.fileSerialNumber; @@ -313,64 +292,45 @@ int CVFSEntry::Stat(const CURL& url, struct __stat64* buffer) ssize_t CVFSEntry::Read(void* ctx, void* lpBuf, size_t uiBufSize) { - if (!m_ifc.vfs->toAddon->read) - return 0; - - return m_ifc.vfs->toAddon->read(m_ifc.vfs, ctx, static_cast(lpBuf), uiBufSize); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_read_v1( + m_instance, ctx, static_cast(lpBuf), uiBufSize); } ssize_t CVFSEntry::Write(void* ctx, const void* lpBuf, size_t uiBufSize) { - if (!m_ifc.vfs->toAddon->write) - return 0; - - return m_ifc.vfs->toAddon->write(m_ifc.vfs, ctx, static_cast(lpBuf), uiBufSize); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_write_v1( + m_instance, ctx, static_cast(lpBuf), uiBufSize); } int64_t CVFSEntry::Seek(void* ctx, int64_t position, int whence) { - if (!m_ifc.vfs->toAddon->seek) - return 0; - - return m_ifc.vfs->toAddon->seek(m_ifc.vfs, ctx, position, whence); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_seek_v1(m_instance, ctx, position, + whence); } int CVFSEntry::Truncate(void* ctx, int64_t size) { - if (!m_ifc.vfs->toAddon->truncate) - return 0; - - return m_ifc.vfs->toAddon->truncate(m_ifc.vfs, ctx, size); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_truncate_v1(m_instance, ctx, size); } void CVFSEntry::Close(void* ctx) { - if (m_ifc.vfs->toAddon->close) - m_ifc.vfs->toAddon->close(m_ifc.vfs, ctx); + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_close_v1(m_instance, ctx); } int64_t CVFSEntry::GetPosition(void* ctx) { - if (!m_ifc.vfs->toAddon->get_position) - return 0; - - return m_ifc.vfs->toAddon->get_position(m_ifc.vfs, ctx); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_get_position_v1(m_instance, ctx); } int CVFSEntry::GetChunkSize(void* ctx) { - if (!m_ifc.vfs->toAddon->get_chunk_size) - return 0; - - return m_ifc.vfs->toAddon->get_chunk_size(m_ifc.vfs, ctx); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_get_chunk_size_v1(m_instance, ctx); } int64_t CVFSEntry::GetLength(void* ctx) { - if (!m_ifc.vfs->toAddon->get_length) - return 0; - - return m_ifc.vfs->toAddon->get_length(m_ifc.vfs, ctx); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_get_length_v1(m_instance, ctx); } int CVFSEntry::IoControl(void* ctx, XFILE::EIoControl request, void* param) @@ -379,21 +339,22 @@ int CVFSEntry::IoControl(void* ctx, XFILE::EIoControl request, void* param) { case XFILE::EIoControl::IOCTRL_SEEK_POSSIBLE: { - if (!m_ifc.vfs->toAddon->io_control_get_seek_possible) - return -1; - return m_ifc.vfs->toAddon->io_control_get_seek_possible(m_ifc.vfs, ctx) ? 1 : 0; + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_io_control_get_seek_possible_v1( + m_instance, ctx) + ? 1 + : 0; } case XFILE::EIoControl::IOCTRL_CACHE_STATUS: { - if (!m_ifc.vfs->toAddon->io_control_get_cache_status) - return -1; - XFILE::SCacheStatus* kodiData = static_cast(param); if (!kodiData) return -1; - VFS_CACHE_STATUS_DATA status; - int ret = m_ifc.vfs->toAddon->io_control_get_cache_status(m_ifc.vfs, ctx, &status) ? 0 : -1; + VFS_CACHE_STATUS status; + int ret = m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_io_control_get_cache_status_v1( + m_instance, ctx, &status) + ? 0 + : -1; if (ret >= 0) { kodiData->forward = status.forward; @@ -405,19 +366,19 @@ int CVFSEntry::IoControl(void* ctx, XFILE::EIoControl request, void* param) } case XFILE::EIoControl::IOCTRL_CACHE_SETRATE: { - if (!m_ifc.vfs->toAddon->io_control_set_cache_rate) - return -1; - uint32_t& iParam = *static_cast(param); - return m_ifc.vfs->toAddon->io_control_set_cache_rate(m_ifc.vfs, ctx, iParam) ? 1 : 0; + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_io_control_set_cache_rate_v1( + m_instance, ctx, iParam) + ? 1 + : 0; } case XFILE::EIoControl::IOCTRL_SET_RETRY: { - if (!m_ifc.vfs->toAddon->io_control_set_retry) - return -1; - bool& bParam = *static_cast(param); - return m_ifc.vfs->toAddon->io_control_set_retry(m_ifc.vfs, ctx, bParam) ? 0 : -1; + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_file_io_control_set_retry_v1( + m_instance, ctx, bParam) + ? 0 + : -1; } // Not by addon supported io's @@ -432,64 +393,48 @@ int CVFSEntry::IoControl(void* ctx, XFILE::EIoControl request, void* param) bool CVFSEntry::Delete(const CURL& url) { - if (!m_ifc.vfs->toAddon->delete_it) - return false; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->delete_it(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_delete_it_v1(m_instance, &url2.url); } bool CVFSEntry::Rename(const CURL& url, const CURL& url2) { - if (!m_ifc.vfs->toAddon->rename) - return false; - CVFSURLWrapper url3(url); CVFSURLWrapper url4(url2); - return m_ifc.vfs->toAddon->rename(m_ifc.vfs, &url3.url, &url4.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_rename_v1(m_instance, &url3.url, + &url4.url); } void CVFSEntry::ClearOutIdle() { - if (m_ifc.vfs->toAddon->clear_out_idle) - m_ifc.vfs->toAddon->clear_out_idle(m_ifc.vfs); + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_clear_out_idle_v1(m_instance); } void CVFSEntry::DisconnectAll() { - if (m_ifc.vfs->toAddon->disconnect_all) - m_ifc.vfs->toAddon->disconnect_all(m_ifc.vfs); + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_disconnect_all_v1(m_instance); } bool CVFSEntry::DirectoryExists(const CURL& url) { - if (!m_ifc.vfs->toAddon->directory_exists) - return false; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->directory_exists(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_exists_v1(m_instance, &url2.url); } bool CVFSEntry::RemoveDirectory(const CURL& url) { - if (!m_ifc.vfs->toAddon->remove_directory) - return false; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->remove_directory(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_remove_v1(m_instance, &url2.url); } bool CVFSEntry::CreateDirectory(const CURL& url) { - if (!m_ifc.vfs->toAddon->create_directory) - return false; - CVFSURLWrapper url2(url); - return m_ifc.vfs->toAddon->create_directory(m_ifc.vfs, &url2.url); + return m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_create_v1(m_instance, &url2.url); } static void VFSDirEntriesToCFileItemList(int num_entries, - VFSDirEntry* entries, + VFS_DIR_ENTRY* entries, CFileItemList& items) { for (int i=0;itoAddon->get_directory || !m_ifc.vfs->toAddon->free_directory) - return false; - - VFSGetDirectoryCallbacks callbacks; - callbacks.ctx = ctx; - callbacks.get_keyboard_input = CVFSEntryIDirectoryWrapper::DoGetKeyboardInput; - callbacks.set_error_dialog = CVFSEntryIDirectoryWrapper::DoSetErrorDialog; - callbacks.require_authentication = CVFSEntryIDirectoryWrapper::DoRequireAuthentication; - - VFSDirEntry* entries = nullptr; - int num_entries = 0; + VFS_DIR_ENTRY* entries = nullptr; + size_t num_entries = 0; CVFSURLWrapper url2(url); - bool ret = - m_ifc.vfs->toAddon->get_directory(m_ifc.vfs, &url2.url, &entries, &num_entries, &callbacks); + bool ret = m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_get_v1( + m_instance, &url2.url, &entries, &num_entries, ctx); if (ret) { VFSDirEntriesToCFileItemList(num_entries, entries, items); - m_ifc.vfs->toAddon->free_directory(m_ifc.vfs, entries, num_entries); + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_free_v1(entries, num_entries); } return ret; @@ -546,24 +481,24 @@ bool CVFSEntry::GetDirectory(const CURL& url, CFileItemList& items, bool CVFSEntry::ContainsFiles(const CURL& url, CFileItemList& items) { - if (!m_ifc.vfs->toAddon->contains_files || !m_ifc.vfs->toAddon->free_directory) - return false; - - VFSDirEntry* entries = nullptr; - int num_entries = 0; + VFS_DIR_ENTRY* entries = nullptr; + size_t num_entries = 0; CVFSURLWrapper url2(url); - char rootpath[ADDON_STANDARD_STRING_LENGTH]; + char* rootpath = nullptr; rootpath[0] = 0; - bool ret = - m_ifc.vfs->toAddon->contains_files(m_ifc.vfs, &url2.url, &entries, &num_entries, rootpath); + bool ret = m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_contains_files_v1( + m_instance, &url2.url, &entries, &num_entries, &rootpath); if (!ret) return false; VFSDirEntriesToCFileItemList(num_entries, entries, items); - m_ifc.vfs->toAddon->free_directory(m_ifc.vfs, entries, num_entries); - if (strlen(rootpath)) + m_ifc->kodi_addoninstance_vfs_h->kodi_addon_vfs_directory_free_v1(entries, num_entries); + if (rootpath) + { items.SetPath(rootpath); + free(rootpath); + } return true; } @@ -705,10 +640,10 @@ bool CVFSEntryIDirectoryWrapper::GetDirectory(const CURL& url, return m_addon->GetDirectory(url, items, this); } -bool CVFSEntryIDirectoryWrapper::DoGetKeyboardInput(void* ctx, - const char* heading, - char** input, - bool hidden_input) +bool CVFSEntry::DoGetKeyboardInput(KODI_CTX_CB_HDL ctx, + const char* heading, + char** input, + bool hidden_input) { return static_cast(ctx)->GetKeyboardInput2(heading, input, hidden_input); } @@ -725,10 +660,11 @@ bool CVFSEntryIDirectoryWrapper::GetKeyboardInput2(const char* heading, return result; } -void CVFSEntryIDirectoryWrapper::DoSetErrorDialog(void* ctx, const char* heading, - const char* line1, - const char* line2, - const char* line3) +void CVFSEntry::DoSetErrorDialog(KODI_CTX_CB_HDL ctx, + const char* heading, + const char* line1, + const char* line2, + const char* line3) { static_cast(ctx)->SetErrorDialog2(heading, line1, line2, line3); @@ -749,8 +685,7 @@ void CVFSEntryIDirectoryWrapper::SetErrorDialog2(const char* heading, CVariant(std::string(line1)), l2, l3); } -void CVFSEntryIDirectoryWrapper::DoRequireAuthentication(void* ctx, - const char* url) +void CVFSEntry::DoRequireAuthentication(KODI_CTX_CB_HDL ctx, const char* url) { static_cast(ctx)->RequireAuthentication2(CURL(url)); } diff --git a/xbmc/addons/VFSEntry.h b/xbmc/addons/VFSEntry.h index e7ec899315256..c83e70161ed26 100644 --- a/xbmc/addons/VFSEntry.h +++ b/xbmc/addons/VFSEntry.h @@ -7,11 +7,13 @@ #pragma once -#include "addons/binary-addons/AddonInstanceHandler.h" -#include "addons/kodi-dev-kit/include/kodi/addon-instance/VFS.h" +#include "FileItem.h" +#include "addons/AddonEvents.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h" #include "filesystem/IDirectory.h" #include "filesystem/IFile.h" #include "filesystem/IFileDirectory.h" +#include "interface/InstanceHandler.h" #include @@ -21,7 +23,7 @@ namespace ADDON class CVFSEntry; typedef std::shared_ptr VFSEntryPtr; - class CVFSAddonCache : public CAddonDllInformer + class CVFSAddonCache //: public CAddonDllInformer { public: virtual ~CVFSAddonCache(); @@ -33,14 +35,14 @@ namespace ADDON protected: void Update(const std::string& id); void OnEvent(const AddonEvent& event); - bool IsInUse(const std::string& id) override; + bool IsInUse(const std::string& id); // override; CCriticalSection m_critSection; std::vector m_addonsInstances; }; //! \brief A virtual filesystem entry add-on. - class CVFSEntry : public IAddonInstanceHandler + class CVFSEntry : public KODI::ADDONS::INTERFACE::IInstanceHandler { public: //! \brief A structure encapsulating properties of supplied protocol. @@ -82,7 +84,7 @@ namespace ADDON bool Delete(const CURL& url); bool Rename(const CURL& url, const CURL& url2); - bool GetDirectory(const CURL& url, CFileItemList& items, void* ctx); + bool GetDirectory(const CURL& url, CFileItemList& items, KODI_CTX_CB_HDL ctx); bool DirectoryExists(const CURL& url); bool RemoveDirectory(const CURL& url); bool CreateDirectory(const CURL& url); @@ -98,6 +100,26 @@ namespace ADDON bool HasFileDirectories() const { return m_filedirectories; } const std::string& GetZeroconfType() const { return m_zeroconf; } const ProtocolInfo& GetProtocolInfo() const { return m_protocolInfo; } + + //! \brief Helper for CVFSEntryIDirectoryWrapper doing a keyboard callback. + bool DoGetKeyboardInput(KODI_CTX_CB_HDL context, + const char* heading, + char** input, + bool hidden_input); + /*---AUTO_GEN_PARSE---*/ + + //! \brief Static helper for displaying an error dialog. + void DoSetErrorDialog(KODI_CTX_CB_HDL ctx, + const char* heading, + const char* line1, + const char* line2, + const char* line3); + /*---AUTO_GEN_PARSE---*/ + + //! \brief Static helper for requiring authentication. + void DoRequireAuthentication(KODI_CTX_CB_HDL ctx, const char* url); + /*---AUTO_GEN_PARSE---*/ + protected: std::string m_protocols; //!< Protocols for VFS entry. std::string m_extensions; //!< Extensions for VFS entry. @@ -223,25 +245,14 @@ namespace ADDON //! \param[in] url URL to delete. bool Create(const CURL& url) override; - //! \brief Static helper for doing a keyboard callback. - static bool DoGetKeyboardInput(void* context, const char* heading, - char** input, bool hidden_input); //! \brief Get keyboard input. bool GetKeyboardInput2(const char* heading, char** input, bool hidden_input); - //! \brief Static helper for displaying an error dialog. - static void DoSetErrorDialog(void* ctx, const char* heading, - const char* line1, const char* line2, - const char* line3); - //! \brief Show an error dialog. void SetErrorDialog2(const char* heading, const char* line1, const char* line2, const char* line3); - //! \brief Static helper for requiring authentication. - static void DoRequireAuthentication(void* ctx, const char* url); - //! \brief Require authentication. void RequireAuthentication2(const CURL& url); protected: diff --git a/xbmc/addons/Visualization.cpp b/xbmc/addons/Visualization.cpp index be9967314b220..a51767f647f6d 100644 --- a/xbmc/addons/Visualization.cpp +++ b/xbmc/addons/Visualization.cpp @@ -8,6 +8,7 @@ #include "Visualization.h" +#include "addons/interface/api/addon-instance/visualization.h" #include "filesystem/SpecialProtocol.h" #include "guilib/GUIWindowManager.h" #include "utils/log.h" @@ -16,34 +17,8 @@ namespace ADDON { CVisualization::CVisualization(const AddonInfoPtr& addonInfo, float x, float y, float w, float h) - : IAddonInstanceHandler(ADDON_INSTANCE_VISUALIZATION, addonInfo) -{ - // Setup new Visualization instance - m_name = Name(); - m_presetsPath = CSpecialProtocol::TranslatePath(Path()); - m_profilePath = CSpecialProtocol::TranslatePath(Profile()); - - m_ifc.visualization = new AddonInstance_Visualization; - - m_ifc.visualization->props = new AddonProps_Visualization(); - m_ifc.visualization->props->x = static_cast(x); - m_ifc.visualization->props->y = static_cast(y); - m_ifc.visualization->props->width = static_cast(w); - m_ifc.visualization->props->height = static_cast(h); - m_ifc.visualization->props->device = CServiceBroker::GetWinSystem()->GetHWContext(); - m_ifc.visualization->props->pixelRatio = - CServiceBroker::GetWinSystem()->GetGfxContext().GetResInfo().fPixelRatio; - m_ifc.visualization->props->name = m_name.c_str(); - m_ifc.visualization->props->presets = m_presetsPath.c_str(); - m_ifc.visualization->props->profile = m_profilePath.c_str(); - - m_ifc.visualization->toKodi = new AddonToKodiFuncTable_Visualization(); - m_ifc.visualization->toKodi->kodiInstance = this; - m_ifc.visualization->toKodi->transfer_preset = transfer_preset; - m_ifc.visualization->toKodi->clear_presets = clear_presets; - - m_ifc.visualization->toAddon = new KodiToAddonFuncTable_Visualization(); - + : IInstanceHandler(ADDON_INSTANCE_VISUALIZATION, addonInfo) +{ /* Open the class "kodi::addon::CInstanceVisualization" on add-on side */ if (CreateInstance() != ADDON_STATUS_OK) { @@ -52,115 +27,94 @@ CVisualization::CVisualization(const AddonInfoPtr& addonInfo, float x, float y, } /* presets becomes send with "transfer_preset" during call of function below */ - if (m_ifc.visualization->toAddon->get_presets) - m_ifc.visualization->toAddon->get_presets(m_ifc.visualization); + m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_get_presets_v1(m_instance); } CVisualization::~CVisualization() { /* Destroy the class "kodi::addon::CInstanceVisualization" on add-on side */ DestroyInstance(); - - delete m_ifc.visualization->toAddon; - delete m_ifc.visualization->toKodi; - delete m_ifc.visualization->props; - delete m_ifc.visualization; } bool CVisualization::Start(int channels, int samplesPerSec, int bitsPerSample, const std::string& songName) { - if (m_ifc.visualization->toAddon->start) - return m_ifc.visualization->toAddon->start(m_ifc.visualization, channels, samplesPerSec, - bitsPerSample, songName.c_str()); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_start_v1( + m_instance, channels, samplesPerSec, bitsPerSample, songName.c_str()); } void CVisualization::Stop() { - if (m_ifc.visualization->toAddon->stop) - m_ifc.visualization->toAddon->stop(m_ifc.visualization); + m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_stop_v1(m_instance); } void CVisualization::AudioData(const float* audioData, int audioDataLength, float *freqData, int freqDataLength) { - if (m_ifc.visualization->toAddon->audio_data) - m_ifc.visualization->toAddon->audio_data(m_ifc.visualization, audioData, audioDataLength, - freqData, freqDataLength); + m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_audio_data_v1( + m_instance, audioData, audioDataLength, freqData, freqDataLength); } bool CVisualization::IsDirty() { - if (m_ifc.visualization->toAddon->is_dirty) - return m_ifc.visualization->toAddon->is_dirty(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_is_dirty_v1( + m_instance); } void CVisualization::Render() { - if (m_ifc.visualization->toAddon->render) - m_ifc.visualization->toAddon->render(m_ifc.visualization); + m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_render_v1(m_instance); } void CVisualization::GetInfo(VIS_INFO *info) { - if (m_ifc.visualization->toAddon->get_info) - m_ifc.visualization->toAddon->get_info(m_ifc.visualization, info); + m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_get_info_v1(m_instance, info); } bool CVisualization::NextPreset() { - if (m_ifc.visualization->toAddon->next_preset) - return m_ifc.visualization->toAddon->next_preset(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_next_preset_v1( + m_instance); } bool CVisualization::PrevPreset() { - if (m_ifc.visualization->toAddon->prev_preset) - return m_ifc.visualization->toAddon->prev_preset(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_prev_preset_v1( + m_instance); } bool CVisualization::LoadPreset(int select) { - if (m_ifc.visualization->toAddon->load_preset) - return m_ifc.visualization->toAddon->load_preset(m_ifc.visualization, select); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_load_preset_v1( + m_instance, select); } bool CVisualization::RandomPreset() { - if (m_ifc.visualization->toAddon->random_preset) - return m_ifc.visualization->toAddon->random_preset(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_random_preset_v1( + m_instance); } bool CVisualization::LockPreset() { - if (m_ifc.visualization->toAddon->lock_preset) - return m_ifc.visualization->toAddon->lock_preset(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_lock_preset_v1( + m_instance); } bool CVisualization::RatePreset(bool plus_minus) { - if (m_ifc.visualization->toAddon->rate_preset) - return m_ifc.visualization->toAddon->rate_preset(m_ifc.visualization, plus_minus); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_rate_preset_v1( + m_instance, plus_minus); } bool CVisualization::UpdateAlbumart(const char* albumart) { - if (m_ifc.visualization->toAddon->update_albumart) - return m_ifc.visualization->toAddon->update_albumart(m_ifc.visualization, albumart); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_update_albumart_v1( + m_instance, albumart); } bool CVisualization::UpdateTrack(const VIS_TRACK* track) { - if (m_ifc.visualization->toAddon->update_track) - return m_ifc.visualization->toAddon->update_track(m_ifc.visualization, track); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_update_track_v1( + m_instance, track); } bool CVisualization::HasPresets() @@ -176,9 +130,8 @@ bool CVisualization::GetPresetList(std::vector &vecpresets) int CVisualization::GetActivePreset() { - if (m_ifc.visualization->toAddon->get_active_preset) - return m_ifc.visualization->toAddon->get_active_preset(m_ifc.visualization); - return -1; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_get_active_preset_v1( + m_instance); } std::string CVisualization::GetActivePresetName() @@ -190,33 +143,34 @@ std::string CVisualization::GetActivePresetName() bool CVisualization::IsLocked() { - if (m_ifc.visualization->toAddon->is_locked) - return m_ifc.visualization->toAddon->is_locked(m_ifc.visualization); - return false; + return m_ifc->kodi_addoninstance_visualization_h->kodi_addon_visualization_is_locked_v1( + m_instance); } -void CVisualization::transfer_preset(void* kodiInstance, const char* preset) +void CVisualization::get_properties(struct VIS_PROPS* props) { - CVisualization *addon = static_cast(kodiInstance); - if (!addon || !preset) - { - CLog::Log(LOGERROR, "CVisualization::{} - invalid handler data", __FUNCTION__); + if (!props) return; - } - addon->m_presets.emplace_back(preset); + props->x = 0; + props->y = 0; + props->device = CServiceBroker::GetWinSystem()->GetHWContext(); + props->width = CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth(); + props->height = CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight(); + props->pixelRatio = CServiceBroker::GetWinSystem()->GetGfxContext().GetResInfo().fPixelRatio; + props->name = strdup(Name().c_str()); + props->presets = strdup(CSpecialProtocol::TranslatePath(Path()).c_str()); + props->profile = strdup(CSpecialProtocol::TranslatePath(Profile()).c_str()); } -void CVisualization::clear_presets(void* kodiInstance) +void CVisualization::transfer_preset(const char* preset) { - CVisualization* addon = static_cast(kodiInstance); - if (!addon) - { - CLog::Log(LOGERROR, "CVisualization::{} - invalid handler data", __FUNCTION__); - return; - } + m_presets.emplace_back(preset); +} - addon->m_presets.clear(); +void CVisualization::clear_presets() +{ + m_presets.clear(); } } /* namespace ADDON */ diff --git a/xbmc/addons/Visualization.h b/xbmc/addons/Visualization.h index 43af24f006db4..7234561f8b904 100644 --- a/xbmc/addons/Visualization.h +++ b/xbmc/addons/Visualization.h @@ -8,13 +8,13 @@ #pragma once -#include "addons/binary-addons/AddonInstanceHandler.h" -#include "addons/kodi-dev-kit/include/kodi/addon-instance/Visualization.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h" +#include "interface/InstanceHandler.h" namespace ADDON { -class CVisualization : public IAddonInstanceHandler +class CVisualization : public KODI::ADDONS::INTERFACE::IInstanceHandler { public: CVisualization(const AddonInfoPtr& addonInfo, float x, float y, float w, float h); @@ -40,15 +40,15 @@ class CVisualization : public IAddonInstanceHandler std::string GetActivePresetName(); bool IsLocked(); + void get_properties(struct VIS_PROPS* props); + /*---AUTO_GEN_PARSE---*/ + void transfer_preset(const char* preset); + /*---AUTO_GEN_PARSE---*/ + void clear_presets(); + /*---AUTO_GEN_PARSE---*/ + private: - std::string m_name; /*!< To add-on sended name */ - std::string m_presetsPath; /*!< To add-on sended preset path */ - std::string m_profilePath; /*!< To add-on sended profile path */ std::vector m_presets; /*!< cached preset list */ - - // Static function to transfer data from add-on to kodi - static void transfer_preset(void* kodiInstance, const char* preset); - static void clear_presets(void* kodiInstance); }; } /* namespace ADDON */ diff --git a/xbmc/addons/addoninfo/AddonInfo.cpp b/xbmc/addons/addoninfo/AddonInfo.cpp index fa9762bf6bc4b..8de3ea789de71 100644 --- a/xbmc/addons/addoninfo/AddonInfo.cpp +++ b/xbmc/addons/addoninfo/AddonInfo.cpp @@ -153,7 +153,7 @@ CAddonInfo::CAddonInfo(std::string id, TYPE type) const CAddonType* CAddonInfo::Type(TYPE type) const { - static CAddonType dummy; + static CAddonType dummy(ADDON_UNKNOWN, AddonLanguage::Unknown); if (!m_types.empty()) { diff --git a/xbmc/addons/addoninfo/AddonInfo.h b/xbmc/addons/addoninfo/AddonInfo.h index 4ac4b700a8157..b3351c7dc1c48 100644 --- a/xbmc/addons/addoninfo/AddonInfo.h +++ b/xbmc/addons/addoninfo/AddonInfo.h @@ -195,6 +195,7 @@ class CAddonInfo const std::string& Forum() const { return m_forum; } const std::string& EMail() const { return m_email; } const std::string& Path() const { return m_path; } + const std::string& Profile() const { return m_profilePath; } const std::string& ChangeLog() const { return GetTranslatedText(m_changelog); } const std::string& Icon() const { return m_icon; } const ArtMap& Art() const { return m_art; } @@ -264,6 +265,7 @@ class CAddonInfo std::string m_libname; InfoMap m_extrainfo; std::vector m_platforms; + std::string m_profilePath; const std::string& GetTranslatedText(const std::unordered_map& locales) const; }; diff --git a/xbmc/addons/addoninfo/AddonInfoBuilder.cpp b/xbmc/addons/addoninfo/AddonInfoBuilder.cpp index 09bdf193a2a6a..fd75288fdfefc 100644 --- a/xbmc/addons/addoninfo/AddonInfoBuilder.cpp +++ b/xbmc/addons/addoninfo/AddonInfoBuilder.cpp @@ -146,6 +146,8 @@ bool CAddonInfoBuilder::ParseXML(const AddonInfoPtr& addon, const TiXmlElement* return false; } + addon->m_profilePath = StringUtils::Format("special://profile/addon_data/{}/", addon->m_id); + // Check addon identifier for forbidden characters // The identifier is used e.g. in URLs so we shouldn't allow just // any character to go through. @@ -397,7 +399,7 @@ bool CAddonInfoBuilder::ParseXML(const AddonInfoPtr& addon, const TiXmlElement* return false; } - CAddonType addonType(type); + CAddonType addonType(type, AddonLanguage::Unknown); if (ParseXMLTypes(addonType, addon, child)) addon->m_types.emplace_back(std::move(addonType)); } @@ -409,7 +411,7 @@ bool CAddonInfoBuilder::ParseXML(const AddonInfoPtr& addon, const TiXmlElement* */ if (addon->m_types.empty()) { - CAddonType addonType(ADDON_UNKNOWN); + CAddonType addonType(ADDON_UNKNOWN, AddonLanguage::Unknown); addon->m_types.emplace_back(std::move(addonType)); } @@ -460,6 +462,10 @@ bool CAddonInfoBuilder::ParseXMLTypes(CAddonType& addonType, { addonType.m_libname = library; + const char* language = child->Attribute("language"); + if (language) + addonType.SetLanguage(language); + try { // linux is different and has the version number after the suffix diff --git a/xbmc/addons/addoninfo/AddonType.cpp b/xbmc/addons/addoninfo/AddonType.cpp index 0df7dda4f0a09..943c84c0d80e7 100644 --- a/xbmc/addons/addoninfo/AddonType.cpp +++ b/xbmc/addons/addoninfo/AddonType.cpp @@ -18,6 +18,22 @@ static const std::set dependencyTypes = { ADDON_SCRIPT_LIBRARY, ADDON_SCRIPT_MODULE, }; + +typedef struct +{ + AddonLanguage language; + std::string name; +} LanguageMapping; + +// clang-format off +static const LanguageMapping languages[] = + {{ AddonLanguage::Unknown, "unknown" }, + { AddonLanguage::C, "C" }, + { AddonLanguage::CPP, "C++" }, + { AddonLanguage::Python3, "Python3" } + }; +// clang-format on + } /* namespace ADDON */ using namespace ADDON; @@ -29,6 +45,21 @@ std::string CAddonType::LibPath() const return URIUtils::AddFileToFolder(m_path, m_libname); } +const std::string& CAddonType::LanguageName() const +{ + for (const LanguageMapping& map : languages) + { + if (map.language == m_language) + return map.name; + } + return languages[0].name; +} + +void CAddonType::SetType(TYPE type) +{ + m_type = type; +} + void CAddonType::SetProvides(const std::string& content) { if (!content.empty()) @@ -52,6 +83,19 @@ void CAddonType::SetProvides(const std::string& content) } } +void CAddonType::SetLanguage(const std::string& name) +{ + for (const LanguageMapping& map : languages) + { + if (map.name == name) + { + m_language = map.language; + return; + } + } + m_language = AddonLanguage::Unknown; +} + bool CAddonType::IsDependencyType(TYPE type) { return dependencyTypes.find(type) != dependencyTypes.end(); diff --git a/xbmc/addons/addoninfo/AddonType.h b/xbmc/addons/addoninfo/AddonType.h index 36b43a8cf687a..9d0ff1041874f 100644 --- a/xbmc/addons/addoninfo/AddonType.h +++ b/xbmc/addons/addoninfo/AddonType.h @@ -18,6 +18,14 @@ class TiXmlElement; namespace ADDON { +enum class AddonLanguage +{ + Unknown, + C, + CPP, + Python3 +}; + typedef enum { ADDON_UNKNOWN, @@ -77,11 +85,13 @@ class CAddonDatabaseSerializer; class CAddonType : public CAddonExtensions { public: - CAddonType(TYPE type = ADDON_UNKNOWN) : m_type(type) {} + CAddonType(TYPE type, AddonLanguage lang) : m_type(type), m_language(lang) {} TYPE Type() const { return m_type; } std::string LibPath() const; const std::string& LibName() const { return m_libname; } + AddonLanguage Language() const { return m_language; } + const std::string& LanguageName() const; bool ProvidesSubContent(const TYPE& content) const { @@ -111,9 +121,12 @@ class CAddonType : public CAddonExtensions friend class CAddonInfoBuilder; friend class CAddonDatabaseSerializer; + void SetType(TYPE type); void SetProvides(const std::string& content); + void SetLanguage(const std::string& name); TYPE m_type; + AddonLanguage m_language; std::string m_path; std::string m_libname; std::set m_providedSubContent; diff --git a/xbmc/addons/binary-addons/AddonDll.cpp b/xbmc/addons/binary-addons/AddonDll.cpp deleted file mode 100644 index b0d8e94b446c4..0000000000000 --- a/xbmc/addons/binary-addons/AddonDll.cpp +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "AddonDll.h" - -#include "ServiceBroker.h" -#include "addons/AddonStatusHandler.h" -#include "addons/binary-addons/BinaryAddonBase.h" -#include "addons/binary-addons/BinaryAddonManager.h" -#include "addons/settings/AddonSettings.h" -#include "events/EventLog.h" -#include "events/NotificationEvent.h" -#include "filesystem/File.h" -#include "filesystem/SpecialProtocol.h" -#include "messaging/helpers/DialogOKHelper.h" -#include "utils/URIUtils.h" -#include "utils/Variant.h" -#include "utils/log.h" - -#include - -using namespace KODI::MESSAGING; - -namespace ADDON -{ - -CAddonDll::CAddonDll(const AddonInfoPtr& addonInfo, BinaryAddonBasePtr addonBase) - : CAddon(addonInfo, addonInfo->MainType()), m_binaryAddonBase(std::move(addonBase)) -{ -} - -CAddonDll::CAddonDll(const AddonInfoPtr& addonInfo, TYPE addonType) - : CAddon(addonInfo, addonType), - m_binaryAddonBase(CServiceBroker::GetBinaryAddonManager().GetRunningAddonBase(addonInfo->ID())) -{ -} - -CAddonDll::~CAddonDll() -{ - if (m_initialized) - Destroy(); -} - -std::string CAddonDll::GetDllPath(const std::string &libPath) -{ - std::string strFileName = libPath; - std::string strLibName = URIUtils::GetFileName(strFileName); - - if (strLibName.empty()) - return ""; - - /* Check if lib being loaded exists, else check in XBMC binary location */ -#if defined(TARGET_ANDROID) - if (XFILE::CFile::Exists(strFileName)) - { - bool doCopy = true; - std::string dstfile = URIUtils::AddFileToFolder(CSpecialProtocol::TranslatePath("special://xbmcaltbinaddons/"), strLibName); - - struct __stat64 dstFileStat; - if (XFILE::CFile::Stat(dstfile, &dstFileStat) == 0) - { - struct __stat64 srcFileStat; - if (XFILE::CFile::Stat(strFileName, &srcFileStat) == 0) - { - if (dstFileStat.st_size == srcFileStat.st_size && dstFileStat.st_mtime > srcFileStat.st_mtime) - doCopy = false; - } - } - - if (doCopy) - { - CLog::Log(LOGDEBUG, "ADDON: caching {} to {}", strFileName, dstfile); - XFILE::CFile::Copy(strFileName, dstfile); - } - - strFileName = dstfile; - } - if (!XFILE::CFile::Exists(strFileName)) - { - std::string tempbin = getenv("KODI_ANDROID_LIBS"); - strFileName = tempbin + "/" + strLibName; - } -#endif - - if (!XFILE::CFile::Exists(strFileName)) - { - std::string strAltFileName; - - std::string altbin = CSpecialProtocol::TranslatePath("special://xbmcaltbinaddons/"); - if (!altbin.empty()) - { - strAltFileName = altbin + strLibName; - if (!XFILE::CFile::Exists(strAltFileName)) - { - std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/addons/"); - strAltFileName = strFileName; - strAltFileName.erase(0, temp.size()); - strAltFileName = altbin + strAltFileName; - } - CLog::Log(LOGDEBUG, "ADDON: Trying to load {}", strAltFileName); - } - - if (XFILE::CFile::Exists(strAltFileName)) - strFileName = strAltFileName; - else - { - std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/"); - std::string tempbin = CSpecialProtocol::TranslatePath("special://xbmcbin/"); - strFileName.erase(0, temp.size()); - strFileName = tempbin + strFileName; - if (!XFILE::CFile::Exists(strFileName)) - { - CLog::Log(LOGERROR, "ADDON: Could not locate {}", strLibName); - strFileName.clear(); - } - } - } - - return strFileName; -} - -std::string CAddonDll::LibPath() const -{ - return GetDllPath(CAddon::LibPath()); -} - -bool CAddonDll::LoadDll() -{ - if (m_pDll) - return true; - - std::string strFileName = LibPath(); - if (strFileName.empty()) - return false; - - /* Load the Dll */ - m_pDll = new DllAddon; - m_pDll->SetFile(strFileName); - m_pDll->EnableDelayedUnload(false); - if (!m_pDll->Load()) - { - delete m_pDll; - m_pDll = nullptr; - - std::string heading = - StringUtils::Format("{}: {}", CAddonInfo::TranslateType(Type(), true), Name()); - HELPERS::ShowOKDialogLines(CVariant{heading}, CVariant{24070}, CVariant{24071}); - - return false; - } - - return true; -} - -ADDON_STATUS CAddonDll::Create(KODI_ADDON_INSTANCE_STRUCT* firstKodiInstance) -{ - CLog::Log(LOGDEBUG, "ADDON: Dll Initializing - {}", Name()); - m_initialized = false; - - if (!LoadDll()) - { - return ADDON_STATUS_PERMANENT_FAILURE; - } - - /* Check versions about global parts on add-on (parts used on all types) */ - for (unsigned int id = ADDON_GLOBAL_MAIN; id <= ADDON_GLOBAL_MAX; ++id) - { - if (!CheckAPIVersion(id)) - return ADDON_STATUS_PERMANENT_FAILURE; - } - - /* Allocate the helper function class to allow crosstalk over - helper add-on headers */ - if (!Interface_Base::InitInterface(this, m_interface, firstKodiInstance)) - return ADDON_STATUS_PERMANENT_FAILURE; - - /* Call Create to make connections, initializing data or whatever is - needed to become the AddOn running */ - ADDON_STATUS status = m_pDll->Create(&m_interface); - - // "C" ABI related call, if on add-on used. - if (status == ADDON_STATUS_OK && m_interface.toAddon->create) - status = m_interface.toAddon->create(m_interface.firstKodiInstance, &m_interface.addonBase); - - if (status == ADDON_STATUS_OK) - { - m_initialized = true; - } - else if (status == ADDON_STATUS_NEED_SETTINGS) - { - if ((status = TransferSettings()) == ADDON_STATUS_OK) - m_initialized = true; - else - new CAddonStatusHandler(ID(), status, "", false); - } - else - { // Addon failed initialization - CLog::Log(LOGERROR, - "ADDON: Dll {} - Client returned bad status ({}) from Create and is not usable", - Name(), status); - - // @todo currently a copy and paste from other function and becomes improved. - std::string heading = - StringUtils::Format("{}: {}", CAddonInfo::TranslateType(Type(), true), Name()); - HELPERS::ShowOKDialogLines(CVariant{ heading }, CVariant{ 24070 }, CVariant{ 24071 }); - } - - return status; -} - -void CAddonDll::Destroy() -{ - /* Unload library file */ - if (m_pDll) - { - if (m_interface.toAddon->destroy) - m_interface.toAddon->destroy(m_interface.addonBase); - m_pDll->Unload(); - } - - Interface_Base::DeInitInterface(m_interface); - - if (m_pDll) - { - delete m_pDll; - m_pDll = nullptr; - CLog::Log(LOGINFO, "ADDON: Dll Destroyed - {}", Name()); - } - - ResetSettings(); - - m_initialized = false; -} - -ADDON_STATUS CAddonDll::CreateInstance(KODI_ADDON_INSTANCE_STRUCT* instance) -{ - assert(instance != nullptr); - assert(instance->functions != nullptr); - assert(instance->info != nullptr); - assert(instance->info->functions != nullptr); - - ADDON_STATUS status = ADDON_STATUS_OK; - - if (!m_initialized) - status = Create(instance); - if (status != ADDON_STATUS_OK) - return status; - - /* Check version of requested instance type */ - if (!CheckAPIVersion(instance->info->type)) - return ADDON_STATUS_PERMANENT_FAILURE; - - status = m_interface.toAddon->create_instance(m_interface.addonBase, instance); - - if (instance->info) - { - m_usedInstances[instance->info->kodi] = instance; - } - - return status; -} - -void CAddonDll::DestroyInstance(KODI_ADDON_INSTANCE_STRUCT* instance) -{ - if (m_usedInstances.empty()) - return; - - auto it = m_usedInstances.find(instance->info->kodi); - if (it != m_usedInstances.end()) - { - m_interface.toAddon->destroy_instance(m_interface.addonBase, it->second); - m_usedInstances.erase(it); - } - - if (m_usedInstances.empty()) - Destroy(); -} - -bool CAddonDll::IsInUse() const -{ - if (m_informer) - return m_informer->IsInUse(ID()); - return false; -} - -void CAddonDll::RegisterInformer(CAddonDllInformer* informer) -{ - m_informer = informer; -} - -AddonPtr CAddonDll::GetRunningInstance() const -{ - if (CServiceBroker::IsBinaryAddonCacheUp()) - return CServiceBroker::GetBinaryAddonManager().GetRunningAddon(ID()); - - return AddonPtr(); -} - -void CAddonDll::OnPreInstall() -{ - if (m_binaryAddonBase) - m_binaryAddonBase->OnPreInstall(); -} - -void CAddonDll::OnPostInstall(bool update, bool modal) -{ - if (m_binaryAddonBase) - m_binaryAddonBase->OnPostInstall(update, modal); -} - -void CAddonDll::OnPreUnInstall() -{ - if (m_binaryAddonBase) - m_binaryAddonBase->OnPreUnInstall(); -} - -void CAddonDll::OnPostUnInstall() -{ - if (m_binaryAddonBase) - m_binaryAddonBase->OnPostUnInstall(); -} - -bool CAddonDll::DllLoaded(void) const -{ - return m_pDll != nullptr; -} - -AddonVersion CAddonDll::GetTypeVersionDll(int type) const -{ - return AddonVersion(m_pDll ? m_pDll->GetAddonTypeVersion(type) : nullptr); -} - -AddonVersion CAddonDll::GetTypeMinVersionDll(int type) const -{ - return AddonVersion(m_pDll ? m_pDll->GetAddonTypeMinVersion(type) : nullptr); -} - -void CAddonDll::SaveSettings() -{ - // must save first, as TransferSettings() reloads saved settings! - CAddon::SaveSettings(); - if (m_initialized) - TransferSettings(); -} - -ADDON_STATUS CAddonDll::TransferSettings() -{ - bool restart = false; - ADDON_STATUS reportStatus = ADDON_STATUS_OK; - - CLog::Log(LOGDEBUG, "Calling TransferSettings for: {}", Name()); - - LoadSettings(false); - - auto settings = GetSettings(); - if (settings != nullptr) - { - for (const auto& section : settings->GetSections()) - { - for (const auto& category : section->GetCategories()) - { - for (const auto& group : category->GetGroups()) - { - for (const auto& setting : group->GetSettings()) - { - ADDON_STATUS status = ADDON_STATUS_OK; - const char* id = setting->GetId().c_str(); - switch (setting->GetType()) - { - case SettingType::Boolean: - { - bool tmp = std::static_pointer_cast(setting)->GetValue(); - if (m_interface.toAddon->setting_change_boolean) - status = - m_interface.toAddon->setting_change_boolean(m_interface.addonBase, id, tmp); - break; - } - - case SettingType::Integer: - { - int tmp = std::static_pointer_cast(setting)->GetValue(); - if (m_interface.toAddon->setting_change_integer) - status = - m_interface.toAddon->setting_change_integer(m_interface.addonBase, id, tmp); - break; - } - - case SettingType::Number: - { - float tmpf = static_cast(std::static_pointer_cast(setting)->GetValue()); - if (m_interface.toAddon->setting_change_float) - status = - m_interface.toAddon->setting_change_float(m_interface.addonBase, id, tmpf); - break; - } - - case SettingType::String: - if (m_interface.toAddon->setting_change_string) - status = m_interface.toAddon->setting_change_string( - m_interface.addonBase, id, - std::static_pointer_cast(setting)->GetValue().c_str()); - break; - - default: - // log unknowns as an error, but go ahead and transfer the string - CLog::Log(LOGERROR, "Unknown setting type of '{}' for {}", id, Name()); - if (m_interface.toAddon->setting_change_string) - status = m_interface.toAddon->setting_change_string(m_interface.addonBase, id, - setting->ToString().c_str()); - break; - } - - if (status == ADDON_STATUS_NEED_RESTART) - restart = true; - else if (status != ADDON_STATUS_OK) - reportStatus = status; - } - } - } - } - } - - if (restart || reportStatus != ADDON_STATUS_OK) - { - new CAddonStatusHandler(ID(), restart ? ADDON_STATUS_NEED_RESTART : reportStatus, "", true); - } - - return ADDON_STATUS_OK; -} - -bool CAddonDll::CheckAPIVersion(int type) -{ - /* check the API version */ - AddonVersion kodiMinVersion(kodi::addon::GetTypeMinVersion(type)); - AddonVersion addonVersion(m_pDll->GetAddonTypeVersion(type)); - AddonVersion addonMinVersion = m_pDll->GetAddonTypeMinVersion_available() - ? AddonVersion(m_pDll->GetAddonTypeMinVersion(type)) - : addonVersion; - - /* Check the global usage from addon - * if not used from addon, empty version is returned - */ - if (type <= ADDON_GLOBAL_MAX && addonVersion.empty()) - return true; - - /* If a instance (not global) version becomes checked must be the version - * present. - */ - if (kodiMinVersion > addonVersion || - addonMinVersion > AddonVersion(kodi::addon::GetTypeVersion(type))) - { - CLog::Log(LOGERROR, "Add-on '{}' is using an incompatible API version for type '{}'. Kodi API min version = '{}/{}', add-on API version '{}/{}'", - Name(), - kodi::addon::GetTypeName(type), - kodi::addon::GetTypeVersion(type), - kodiMinVersion.asString(), - addonMinVersion.asString(), - addonVersion.asString()); - - if (CServiceBroker::GetGUI()) - { - CEventLog* eventLog = CServiceBroker::GetEventLog(); - if (eventLog) - eventLog->AddWithNotification( - EventPtr(new CNotificationEvent(Name(), 24152, EventLevel::Error))); - } - - return false; - } - - return true; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/AddonDll.h b/xbmc/addons/binary-addons/AddonDll.h deleted file mode 100644 index 7985ea9329152..0000000000000 --- a/xbmc/addons/binary-addons/AddonDll.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "BinaryAddonManager.h" -#include "DllAddon.h" -#include "addons/Addon.h" -#include "utils/XMLUtils.h" - -// Global addon callback handle classes -#include "addons/interfaces/AddonBase.h" - -namespace ADDON -{ - -/*! - * Addon instance handler, used as identify for std::map to find related - * addon instance. This class itself not accessed here. - * - * @todo As long game addon system use CAddonDll itself and not - * IAddonInstanceHandler as parent, is the set of this as "void*" needed. - * After game system is changed should by this also changed to - * "const IAddonInstanceHandler*" or direct in map below. - */ -using ADDON_INSTANCE_HANDLER = void*; - -/*! - * @brief Information class for use on addon type managers. - * - * This to query via @ref CAddonDll the manager so that work can be performed. - * If there are multiple instances it be harder to be informed about any changes. - */ -class CAddonDllInformer -{ -public: - virtual ~CAddonDllInformer() = default; - - virtual bool IsInUse(const std::string& id) = 0; -}; - -class CAddonDll : public CAddon -{ -public: - CAddonDll(const AddonInfoPtr& addonInfo, BinaryAddonBasePtr addonBase); - CAddonDll(const AddonInfoPtr& addonInfo, TYPE addonType); - ~CAddonDll() override; - - // Implementation of IAddon via CAddon - std::string LibPath() const override; - - // addon settings - void SaveSettings() override; - - bool DllLoaded(void) const; - - /*! - * @brief Get api version of moduleType type - * - * @return The version of requested type, if dll is loaded and supported by addon. - * If one of both do not match, an empty version is returned. - * - * @note This should only be called if the associated dll is loaded. - * Otherwise use @ref CAddonInfo::DependencyVersion(...) - */ - AddonVersion GetTypeVersionDll(int type) const; - - /*! - * @brief Get api min version of moduleType type - * - * @return The version of requested type, if dll is loaded and supported by addon. - * If one of both do not match, an empty version is returned. - * - * @note This should only be called if the associated dll is loaded. - * Otherwise use @ref CAddonInfo::DependencyMinVersion(...) - */ - AddonVersion GetTypeMinVersionDll(int type) const; - - /*! - * @brief Function to create a addon instance class - * - * @param[in,out] instance The for addon used data structure for active instance - * @return The status of addon after the creation. - */ - ADDON_STATUS CreateInstance(KODI_ADDON_INSTANCE_STRUCT* instance); - - /*! - * @brief Function to destroy a on addon created instance class - * - * @param[in] instance The for addon used data structure for active instance - */ - void DestroyInstance(KODI_ADDON_INSTANCE_STRUCT* instance); - - bool IsInUse() const override; - void RegisterInformer(CAddonDllInformer* informer); - AddonPtr GetRunningInstance() const override; - - void OnPreInstall() override; - void OnPostInstall(bool update, bool modal) override; - void OnPreUnInstall() override; - void OnPostUnInstall() override; - - bool Initialized() const { return m_initialized; } - -protected: - static std::string GetDllPath(const std::string& strFileName); - - std::string m_parentLib; - -private: - /*! - * @brief Main addon creation call function - * - * This becomes called only one time before a addon instance becomes created. - * If another instance becomes requested is this Create no more used. To see - * like a "int main()" on exe. - * - * @param[in] firstKodiInstance The first instance who becomes used. - * In case addon supports only one instance - * and not multiple together can addon use - * only one complete class for everything. - * This is used then to interact on interface. - * @return The status of addon after the creation. - */ - ADDON_STATUS Create(KODI_ADDON_INSTANCE_STRUCT* firstKodiInstance); - - /*! - * @brief Main addon destroying call function - * - * This becomes called only one time after the last addon instance becomes destroyed. - */ - void Destroy(); - - bool CheckAPIVersion(int type); - - BinaryAddonBasePtr m_binaryAddonBase = nullptr; - DllAddon* m_pDll = nullptr; - bool m_initialized = false; - bool LoadDll(); - std::map m_usedInstances; - CAddonDllInformer* m_informer = nullptr; - - virtual ADDON_STATUS TransferSettings(); - - /*! - * This structure, which is fixed to the addon headers, makes use of the at - * least supposed parts for the interface. - * This structure is defined in: - * /xbmc/addons/kodi-dev-kit/include/kodi/AddonBase.h - */ - AddonGlobalInterface m_interface = {}; -}; - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/AddonInstanceHandler.cpp b/xbmc/addons/binary-addons/AddonInstanceHandler.cpp deleted file mode 100644 index b527a098621fd..0000000000000 --- a/xbmc/addons/binary-addons/AddonInstanceHandler.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "AddonInstanceHandler.h" - -#include "ServiceBroker.h" -#include "addons/settings/AddonSettings.h" -#include "filesystem/Directory.h" -#include "filesystem/SpecialProtocol.h" -#include "utils/StringUtils.h" -#include "utils/log.h" - -namespace ADDON -{ - -CCriticalSection IAddonInstanceHandler::m_cdSec; - -IAddonInstanceHandler::IAddonInstanceHandler(ADDON_TYPE type, - const AddonInfoPtr& addonInfo, - KODI_HANDLE parentInstance /* = nullptr*/, - const std::string& instanceID /* = ""*/) - : m_type(type), m_parentInstance(parentInstance), m_addonInfo(addonInfo) -{ - // if no special instance ID is given generate one from class pointer (is - // faster as unique id and also safe enough for them). - m_instanceId = !instanceID.empty() ? instanceID : StringUtils::Format("{}", fmt::ptr(this)); - m_addonBase = CServiceBroker::GetBinaryAddonManager().GetAddonBase(addonInfo, this, m_addon); - - KODI_ADDON_INSTANCE_INFO* info = new KODI_ADDON_INSTANCE_INFO(); - info->number = 0; - info->id = m_instanceId.c_str(); - info->version = kodi::addon::GetTypeVersion(m_type); - info->type = m_type; - info->kodi = this; - info->parent = m_parentInstance; - info->first_instance = m_addon && !m_addon->Initialized(); - info->functions = new KODI_ADDON_INSTANCE_FUNC_CB(); - info->functions->get_instance_user_path = get_instance_user_path; - info->functions->is_instance_setting_using_default = is_instance_setting_using_default; - info->functions->get_instance_setting_bool = get_instance_setting_bool; - info->functions->get_instance_setting_int = get_instance_setting_int; - info->functions->get_instance_setting_float = get_instance_setting_float; - info->functions->get_instance_setting_string = get_instance_setting_string; - info->functions->set_instance_setting_bool = set_instance_setting_bool; - info->functions->set_instance_setting_int = set_instance_setting_int; - info->functions->set_instance_setting_float = set_instance_setting_float; - info->functions->set_instance_setting_string = set_instance_setting_string; - m_ifc.info = info; - m_ifc.functions = new KODI_ADDON_INSTANCE_FUNC(); -} - -IAddonInstanceHandler::~IAddonInstanceHandler() -{ - CServiceBroker::GetBinaryAddonManager().ReleaseAddonBase(m_addonBase, this); - - delete m_ifc.functions; - if (m_ifc.info) - delete m_ifc.info->functions; - delete m_ifc.info; -} - -std::string IAddonInstanceHandler::ID() const -{ - return m_addon ? m_addon->ID() : ""; -} - -std::string IAddonInstanceHandler::Name() const -{ - return m_addon ? m_addon->Name() : ""; -} - -std::string IAddonInstanceHandler::Author() const -{ - return m_addon ? m_addon->Author() : ""; -} - -std::string IAddonInstanceHandler::Icon() const -{ - return m_addon ? m_addon->Icon() : ""; -} - -std::string IAddonInstanceHandler::Path() const -{ - return m_addon ? m_addon->Path() : ""; -} - -std::string IAddonInstanceHandler::Profile() const -{ - return m_addon ? m_addon->Profile() : ""; -} - -AddonVersion IAddonInstanceHandler::Version() const -{ - return m_addon ? m_addon->Version() : AddonVersion(); -} - -ADDON_STATUS IAddonInstanceHandler::CreateInstance() -{ - if (!m_addon) - return ADDON_STATUS_UNKNOWN; - - CSingleLock lock(m_cdSec); - - ADDON_STATUS status = m_addon->CreateInstance(&m_ifc); - if (status != ADDON_STATUS_OK) - { - CLog::Log(LOGERROR, - "IAddonInstanceHandler::{}: {} returned bad status \"{}\" during instance creation", - __func__, m_addon->ID(), kodi::addon::TranslateAddonStatus(status)); - } - return status; -} - -void IAddonInstanceHandler::DestroyInstance() -{ - CSingleLock lock(m_cdSec); - if (m_addon) - m_addon->DestroyInstance(&m_ifc); -} - -std::shared_ptr IAddonInstanceHandler::GetSetting(const std::string& setting) -{ - if (!m_addon->HasSettings()) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - couldn't get settings for add-on '{}'", - __func__, Name()); - return nullptr; - } - - auto value = m_addon->GetSettings()->GetSetting(setting); - if (value == nullptr) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - can't find setting '{}' in '{}'", __func__, - setting, Name()); - return nullptr; - } - - return value; -} - -char* IAddonInstanceHandler::get_instance_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance) - return nullptr; - - const std::string path = CSpecialProtocol::TranslatePath(instance->m_addon->Profile()); - - XFILE::CDirectory::Create(path); - return strdup(path.c_str()); -} - -bool IAddonInstanceHandler::is_instance_setting_using_default( - const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id) - return false; - - auto setting = instance->GetSetting(id); - if (setting == nullptr) - return false; - - return setting->IsDefault(); -} - -bool IAddonInstanceHandler::get_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool* value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id || !value) - return false; - - auto setting = instance->GetSetting(id); - if (setting == nullptr) - return false; - - if (setting->GetType() != SettingType::Boolean) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - setting '{}' is not a boolean in '{}'", - __func__, id, instance->Name()); - return false; - } - - *value = std::static_pointer_cast(setting)->GetValue(); - return true; -} - -bool IAddonInstanceHandler::get_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int* value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id || !value) - return false; - - auto setting = instance->GetSetting(id); - if (setting == nullptr) - return false; - - if (setting->GetType() != SettingType::Integer && setting->GetType() != SettingType::Number) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - setting '{}' is not a integer in '{}'", - __func__, id, instance->Name()); - return false; - } - - if (setting->GetType() == SettingType::Integer) - *value = std::static_pointer_cast(setting)->GetValue(); - else - *value = static_cast(std::static_pointer_cast(setting)->GetValue()); - return true; -} - -bool IAddonInstanceHandler::get_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float* value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id || !value) - return false; - - auto setting = instance->GetSetting(id); - if (setting == nullptr) - return false; - - if (setting->GetType() != SettingType::Number) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - setting '{}' is not a number in '{}'", - __func__, id, instance->Name()); - return false; - } - - *value = static_cast(std::static_pointer_cast(setting)->GetValue()); - return true; -} - -bool IAddonInstanceHandler::get_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - char** value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id || !value) - return false; - - auto setting = instance->GetSetting(id); - if (setting == nullptr) - return false; - - if (setting->GetType() != SettingType::String) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - setting '{}' is not a string in '{}'", - __func__, id, instance->Name()); - return false; - } - - *value = strdup(std::static_pointer_cast(setting)->GetValue().c_str()); - return true; -} - -bool IAddonInstanceHandler::set_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id) - return false; - - if (Interface_Base::UpdateSettingInActiveDialog(instance->m_addon.get(), id, - value ? "true" : "false")) - return true; - - if (!instance->m_addon->UpdateSettingBool(id, value)) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid setting type", __func__); - return false; - } - - instance->m_addon->SaveSettings(); - - return true; -} - -bool IAddonInstanceHandler::set_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid data (instance='{}', id='{}')", - __func__, hdl, static_cast(id)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(instance->m_addon.get(), id, - std::to_string(value))) - return true; - - if (!instance->m_addon->UpdateSettingInt(id, value)) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid setting type", __func__); - return false; - } - - instance->m_addon->SaveSettings(); - - return true; -} - -bool IAddonInstanceHandler::set_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid data (instance='{}', id='{}')", - __func__, hdl, static_cast(id)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(instance->m_addon.get(), id, - StringUtils::Format("{:f}", value))) - return true; - - if (!instance->m_addon->UpdateSettingNumber(id, static_cast(value))) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid setting type", __func__); - return false; - } - - instance->m_addon->SaveSettings(); - - return true; -} - -bool IAddonInstanceHandler::set_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - const char* value) -{ - IAddonInstanceHandler* instance = static_cast(hdl); - if (!instance || !id || !value) - { - CLog::Log(LOGERROR, - "IAddonInstanceHandler::{} - invalid data (instance='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(instance->m_addon.get(), id, value)) - return true; - - if (!instance->m_addon->UpdateSettingString(id, value)) - { - CLog::Log(LOGERROR, "IAddonInstanceHandler::{} - invalid setting type", __func__); - return false; - } - - instance->m_addon->SaveSettings(); - - return true; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/AddonInstanceHandler.h b/xbmc/addons/binary-addons/AddonInstanceHandler.h deleted file mode 100644 index 9058d2d011313..0000000000000 --- a/xbmc/addons/binary-addons/AddonInstanceHandler.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "AddonDll.h" -#include "addons/AddonVersion.h" -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" - -#include - -class CSetting; - -namespace ADDON -{ - -class IAddonInstanceHandler -{ -public: - IAddonInstanceHandler(ADDON_TYPE type, - const AddonInfoPtr& addonInfo, - KODI_HANDLE parentInstance = nullptr, - const std::string& instanceID = ""); - virtual ~IAddonInstanceHandler(); - - ADDON_TYPE UsedType() const { return m_type; } - const std::string& InstanceID() { return m_instanceId; } - - std::string ID() const; - std::string Name() const; - std::string Author() const; - std::string Icon() const; - std::string Path() const; - std::string Profile() const; - AddonVersion Version() const; - - ADDON_STATUS CreateInstance(); - void DestroyInstance(); - const AddonDllPtr& Addon() const { return m_addon; } - AddonInfoPtr GetAddonInfo() const { return m_addonInfo; } - - virtual void OnPreInstall() {} - virtual void OnPostInstall(bool update, bool modal) {} - virtual void OnPreUnInstall() {} - virtual void OnPostUnInstall() {} - -protected: - KODI_ADDON_INSTANCE_INFO m_info{}; - KODI_ADDON_INSTANCE_STRUCT m_ifc{}; - -private: - std::shared_ptr GetSetting(const std::string& setting); - - static char* get_instance_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl); - static bool is_instance_setting_using_default(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id); - static bool get_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool* value); - static bool get_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int* value); - static bool get_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float* value); - static bool get_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - char** value); - static bool set_instance_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool value); - static bool set_instance_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int value); - static bool set_instance_setting_float(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float value); - static bool set_instance_setting_string(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - const char* value); - - ADDON_TYPE m_type; - std::string m_instanceId; - KODI_HANDLE m_parentInstance; - AddonInfoPtr m_addonInfo; - BinaryAddonBasePtr m_addonBase; - AddonDllPtr m_addon; - static CCriticalSection m_cdSec; -}; - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/BinaryAddonBase.cpp b/xbmc/addons/binary-addons/BinaryAddonBase.cpp deleted file mode 100644 index 5dc238673db08..0000000000000 --- a/xbmc/addons/binary-addons/BinaryAddonBase.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "BinaryAddonBase.h" - -#include "threads/SingleLock.h" -#include "utils/log.h" - -using namespace ADDON; - -const std::string& CBinaryAddonBase::ID() const -{ - return m_addonInfo->ID(); -} - -AddonDllPtr CBinaryAddonBase::GetAddon(IAddonInstanceHandler* handler) -{ - if (handler == nullptr) - { - CLog::Log(LOGERROR, "CBinaryAddonBase::{}: for Id '{}' called with empty instance handler", - __FUNCTION__, ID()); - return nullptr; - } - - CSingleLock lock(m_critSection); - - // If no 'm_activeAddon' is defined create it new. - if (m_activeAddon == nullptr) - m_activeAddon = std::make_shared(m_addonInfo, shared_from_this()); - - // add the instance handler to the info to know used amount on addon - m_activeAddonHandlers.insert(handler); - - return m_activeAddon; -} - -void CBinaryAddonBase::ReleaseAddon(IAddonInstanceHandler* handler) -{ - if (handler == nullptr) - { - CLog::Log(LOGERROR, "CBinaryAddonBase::{}: for Id '{}' called with empty instance handler", - __FUNCTION__, ID()); - return; - } - - CSingleLock lock(m_critSection); - - auto presentHandler = m_activeAddonHandlers.find(handler); - if (presentHandler == m_activeAddonHandlers.end()) - return; - - m_activeAddonHandlers.erase(presentHandler); - - // if no handler is present anymore reset and delete the add-on class on information - if (m_activeAddonHandlers.empty()) - { - m_activeAddon.reset(); - } -} - -size_t CBinaryAddonBase::UsedInstanceCount() const -{ - CSingleLock lock(m_critSection); - return m_activeAddonHandlers.size(); -} - -AddonDllPtr CBinaryAddonBase::GetActiveAddon() -{ - CSingleLock lock(m_critSection); - return m_activeAddon; -} - -void CBinaryAddonBase::OnPreInstall() -{ - const std::unordered_set activeAddonHandlers = m_activeAddonHandlers; - for (const auto& instance : activeAddonHandlers) - instance->OnPreInstall(); -} - -void CBinaryAddonBase::OnPostInstall(bool update, bool modal) -{ - const std::unordered_set activeAddonHandlers = m_activeAddonHandlers; - for (const auto& instance : activeAddonHandlers) - instance->OnPostInstall(update, modal); -} - -void CBinaryAddonBase::OnPreUnInstall() -{ - const std::unordered_set activeAddonHandlers = m_activeAddonHandlers; - for (const auto& instance : activeAddonHandlers) - instance->OnPreUnInstall(); -} - -void CBinaryAddonBase::OnPostUnInstall() -{ - const std::unordered_set activeAddonHandlers = m_activeAddonHandlers; - for (const auto& instance : activeAddonHandlers) - instance->OnPostUnInstall(); -} diff --git a/xbmc/addons/binary-addons/BinaryAddonBase.h b/xbmc/addons/binary-addons/BinaryAddonBase.h deleted file mode 100644 index 4027f9d71d152..0000000000000 --- a/xbmc/addons/binary-addons/BinaryAddonBase.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "AddonInstanceHandler.h" -#include "addons/addoninfo/AddonInfo.h" -#include "threads/CriticalSection.h" - -#include -#include -#include - -namespace ADDON -{ - - class IAddonInstanceHandler; - - class CAddonDll; - typedef std::shared_ptr AddonDllPtr; - - class CBinaryAddonBase : public std::enable_shared_from_this - { - public: - explicit CBinaryAddonBase(const AddonInfoPtr& addonInfo) : m_addonInfo(addonInfo) { } - - const std::string& ID() const; - - AddonDllPtr GetAddon(IAddonInstanceHandler* handler); - void ReleaseAddon(IAddonInstanceHandler* handler); - size_t UsedInstanceCount() const; - - AddonDllPtr GetActiveAddon(); - - void OnPreInstall(); - void OnPostInstall(bool update, bool modal); - void OnPreUnInstall(); - void OnPostUnInstall(); - - private: - AddonInfoPtr m_addonInfo; - - mutable CCriticalSection m_critSection; - AddonDllPtr m_activeAddon; - std::unordered_set m_activeAddonHandlers; - }; - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/BinaryAddonManager.cpp b/xbmc/addons/binary-addons/BinaryAddonManager.cpp deleted file mode 100644 index ee927acda5acd..0000000000000 --- a/xbmc/addons/binary-addons/BinaryAddonManager.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "BinaryAddonManager.h" - -#include "BinaryAddonBase.h" -#include "threads/SingleLock.h" -#include "utils/log.h" - -using namespace ADDON; - -BinaryAddonBasePtr CBinaryAddonManager::GetAddonBase(const AddonInfoPtr& addonInfo, - IAddonInstanceHandler* handler, - AddonDllPtr& addon) -{ - CSingleLock lock(m_critSection); - - BinaryAddonBasePtr addonBase; - - const auto& addonInstances = m_runningAddons.find(addonInfo->ID()); - if (addonInstances != m_runningAddons.end()) - { - addonBase = addonInstances->second; - } - else - { - addonBase = std::make_shared(addonInfo); - - m_runningAddons.emplace(addonInfo->ID(), addonBase); - } - - if (addonBase) - { - addon = addonBase->GetAddon(handler); - } - if (!addon) - { - CLog::Log(LOGFATAL, "CBinaryAddonManager::{}: Tried to get add-on '{}' who not available!", - __func__, addonInfo->ID()); - } - - return addonBase; -} - -void CBinaryAddonManager::ReleaseAddonBase(const BinaryAddonBasePtr& addonBase, - IAddonInstanceHandler* handler) -{ - const auto& addon = m_runningAddons.find(addonBase->ID()); - if (addon == m_runningAddons.end()) - return; - - addonBase->ReleaseAddon(handler); - - if (addonBase->UsedInstanceCount() > 0) - return; - - m_runningAddons.erase(addon); -} - -BinaryAddonBasePtr CBinaryAddonManager::GetRunningAddonBase(const std::string& addonId) const -{ - CSingleLock lock(m_critSection); - - const auto& addonInstances = m_runningAddons.find(addonId); - if (addonInstances != m_runningAddons.end()) - return addonInstances->second; - - return nullptr; -} - -AddonPtr CBinaryAddonManager::GetRunningAddon(const std::string& addonId) const -{ - CSingleLock lock(m_critSection); - - const BinaryAddonBasePtr base = GetRunningAddonBase(addonId); - if (base) - return base->GetActiveAddon(); - - return nullptr; -} diff --git a/xbmc/addons/binary-addons/BinaryAddonManager.h b/xbmc/addons/binary-addons/BinaryAddonManager.h deleted file mode 100644 index a6328e175808d..0000000000000 --- a/xbmc/addons/binary-addons/BinaryAddonManager.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/AddonManager.h" -#include "threads/CriticalSection.h" - -#include - -namespace ADDON -{ - - class IAddonInstanceHandler; - - class CAddonDll; - typedef std::shared_ptr AddonDllPtr; - - class CBinaryAddonBase; - typedef std::shared_ptr BinaryAddonBasePtr; - - class CBinaryAddonManager - { - public: - CBinaryAddonManager() = default; - CBinaryAddonManager(const CBinaryAddonManager&) = delete; - ~CBinaryAddonManager() = default; - - /*! - * @brief Create or get available addon instance handle base. - * - * On first call the binary addon base class becomes created, on every next - * call of addon id, this becomes given again and a counter about in - * @ref CBinaryAddonBase increased. - * - * @param[in] addonBase related addon base to release - * @param[in] handler related instance handle class - * - * @warning This and @ref ReleaseAddonBase are only be called from - * @ref IAddonInstanceHandler, use nowhere else allowed! - * - */ - BinaryAddonBasePtr GetAddonBase(const AddonInfoPtr& addonInfo, - IAddonInstanceHandler* handler, - AddonDllPtr& addon); - - /*! - * @brief Release a running addon instance handle base. - * - * On last release call the here on map stored entry becomes - * removed and the dll unloaded. - * - * @param[in] addonBase related addon base to release - * @param[in] handler related instance handle class - * - */ - void ReleaseAddonBase(const BinaryAddonBasePtr& addonBase, IAddonInstanceHandler* handler); - - /*! - * @brief Get running addon base class for a given addon id. - * - * @param[in] addonId the addon id - * @return running addon base class if found, nullptr otherwise. - * - */ - BinaryAddonBasePtr GetRunningAddonBase(const std::string& addonId) const; - - /*! - * @brief Used from other addon manager to get active addon over a from him - * created CAddonDll. - * - * @param[in] addonId related addon id string - * @return if present the pointer to active one or nullptr if not present - * - */ - AddonPtr GetRunningAddon(const std::string& addonId) const; - - private: - mutable CCriticalSection m_critSection; - - std::map m_runningAddons; - }; - -} /* namespace ADDON */ diff --git a/xbmc/addons/binary-addons/CMakeLists.txt b/xbmc/addons/binary-addons/CMakeLists.txt deleted file mode 100644 index 33a72ce6b6a18..0000000000000 --- a/xbmc/addons/binary-addons/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -set(SOURCES BinaryAddonManager.cpp - AddonDll.cpp - AddonInstanceHandler.cpp - BinaryAddonBase.cpp) - -set(HEADERS BinaryAddonManager.h - AddonDll.h - AddonInstanceHandler.h - BinaryAddonBase.h - DllAddon.h) - -core_add_library(addons_binary-addons) diff --git a/xbmc/addons/binary-addons/DllAddon.h b/xbmc/addons/binary-addons/DllAddon.h deleted file mode 100644 index dbcf89301e3f6..0000000000000 --- a/xbmc/addons/binary-addons/DllAddon.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "DynamicDll.h" -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" - -class DllAddonInterface -{ -public: - virtual ~DllAddonInterface() = default; - virtual ADDON_STATUS Create(void* cb) = 0; - virtual const char* GetAddonTypeVersion(int type)=0; - virtual const char* GetAddonTypeMinVersion(int type) = 0; -}; - -class DllAddon : public DllDynamic, public DllAddonInterface -{ -public: - DECLARE_DLL_WRAPPER_TEMPLATE(DllAddon) - DEFINE_METHOD1(ADDON_STATUS, Create, (void* p1)) - DEFINE_METHOD1(const char*, GetAddonTypeVersion, (int p1)) - DEFINE_METHOD1(const char*, GetAddonTypeMinVersion, (int p1)) - bool GetAddonTypeMinVersion_available() { return m_GetAddonTypeMinVersion != nullptr; } - BEGIN_METHOD_RESOLVE() - RESOLVE_METHOD_RENAME(ADDON_Create, Create) - RESOLVE_METHOD_RENAME(ADDON_GetTypeVersion, GetAddonTypeVersion) - RESOLVE_METHOD_RENAME_OPTIONAL(ADDON_GetTypeMinVersion, GetAddonTypeMinVersion) - END_METHOD_RESOLVE() -}; - diff --git a/xbmc/addons/interface/CMakeLists.txt b/xbmc/addons/interface/CMakeLists.txt new file mode 100644 index 0000000000000..0c5e1725857a5 --- /dev/null +++ b/xbmc/addons/interface/CMakeLists.txt @@ -0,0 +1,26 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + Controller.cpp + GUICrashReporter.cpp + IMsgHdl.cpp + InstanceHandler.cpp + Interface.cpp + RunningProcess.cpp + RunningThread.cpp +) + +set(HEADERS + Controller.h + GUICrashReporter.h + IMsgHdl.h + InstanceHandler.h + Interface.h + RunningProcess.h + RunningThread.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface) +endif() diff --git a/xbmc/addons/interface/Controller.cpp b/xbmc/addons/interface/Controller.cpp new file mode 100644 index 0000000000000..f1fd17b4796c3 --- /dev/null +++ b/xbmc/addons/interface/Controller.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "Controller.h" + +#include "CompileInfo.h" +#include "GUICrashReporter.h" +#include "RunningProcess.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "utils/StringUtils.h" +#include "utils/log.h" + +#include + +using namespace std::chrono_literals; + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CController::CController(ADDON::CAddonMgr& addonMgr) + : CThread("KODI::ADDONS::INTERFACE::CController"), + m_addonMgr(addonMgr), + m_devkitLib(CSpecialProtocol::TranslatePath( + "special://xbmcbinaddons/kodi.binary.devkit/" DEVKIT_LIBRARY)), + m_devkitLaunchExe(CSpecialProtocol::TranslatePath( + "special://xbmcbinaddons/kodi.binary.devkit/" DEVKIT_LAUNCH_EXE)) +{ +} + +CController::~CController() +{ + Deinit(); + +} + +bool CController::Init() +{ + using namespace XFILE; + + if (!CFile::Exists(m_devkitLib, false)) + { + CLog::Log(LOGFATAL, "Needed DevKit library {} not present!", m_devkitLib); + return false; + } + if (!CFile::Exists(m_devkitLaunchExe, false)) + { + CLog::Log(LOGFATAL, "Needed DevKit help launch executable {} not present!", m_devkitLaunchExe); + return false; + } + + CThread::Create(); + m_running = true; + return true; +} + +void CController::Deinit() +{ + if (m_running) + { + m_running = false; + CThread::StopThread(); + } +} + +bool CController::AddonLanguageSupported(const std::shared_ptr& addon) const +{ + if (addon->Type(addon->Type())->Language() != ADDON::AddonLanguage::Unknown) + return true; + return false; +} + +bool CController::LaunchAddon(const std::shared_ptr& addon, + std::vector& argv, + bool waitForExit, + std::shared_ptr& process) +{ + std::shared_ptr newProcess; + { + std::unique_lock lock(m_lock); + newProcess = std::make_shared( + addon, + "kodi-subproc-" + StringUtils::CreateUUID(), + CheckNeedDirectDll(addon), + SimulateExeViaSharedLib(addon), + nullptr); + m_runningProcesses.emplace(addon->ID(), newProcess); + } + + if (!newProcess->Launch(argv, waitForExit)) + { + return false; + } + + if (waitForExit) + { + std::unique_lock lock(m_lock); + m_runningProcesses.erase(newProcess->GetAddonID()); + } + + process = newProcess; + return true; +} + +std::shared_ptr CController::GetAddonProcess( + const std::shared_ptr& addonInfo, + IInstanceHandler* handler, + const KODI_ADDON_INSTANCE_INFO* firstInstance, + std::shared_ptr& addon) +{ + std::unique_lock lock(m_lock); + + std::shared_ptr newProcess; + + const auto& addonInstances = m_runningProcesses.find(addonInfo->ID()); + if (addonInstances != m_runningProcesses.end()) + { + newProcess = addonInstances->second; + addon = newProcess->GetAddon(); + } + else + { + addon = std::make_shared(addonInfo, addonInfo->MainType()); + newProcess = + std::make_shared(addon, + "kodi-subproc-" + StringUtils::CreateUUID(), + CheckNeedDirectDll(addon), + SimulateExeViaSharedLib(addon), + firstInstance); + std::vector argv; + if (!newProcess->Launch(argv, false)) + { + return nullptr; + } + + m_runningProcesses.emplace(addonInfo->ID(), newProcess); + } + + newProcess->SetEndtime(30000); + newProcess->AddAddonInstance(handler); + + if (!addon) + { + CLog::Log(LOGFATAL, "CController:{}: Tried to get add-on '{}' who not available!", __func__, + addonInfo->ID()); + } + + return newProcess; +} + +void CController::ReleaseAddonProcess(const std::shared_ptr& process, + IInstanceHandler* handler) +{ + std::unique_lock lock(m_lock); + + const auto& addon = m_runningProcesses.find(process->GetAddonID()); + if (addon == m_runningProcesses.end()) + return; + + process->ReleaseAddonInstance(handler); + + if (process->UsedInstanceCount() > 0) + return; + + if (!process->UseEndTime()) + { + process->Kill(); + + m_runningProcesses.erase(addon); + } +} + +std::shared_ptr CController::GetRunningAddonProcess( + const std::string& addonId) const +{ + std::unique_lock lock(m_lock); + + const auto& addonInstances = m_runningProcesses.find(addonId); + if (addonInstances != m_runningProcesses.end()) + return addonInstances->second; + + return nullptr; +} + +std::shared_ptr CController::GetRunningAddon(const std::string& addonId) const +{ + const std::shared_ptr process = GetRunningAddonProcess(addonId); + if (process) + return process->GetAddon(); + + return nullptr; +} + +std::vector CController::GetProcessInfoData() +{ + std::vector data; + + std::unique_lock lock(m_lock); + + for (const auto& process : m_runningProcesses) + { + data.emplace_back(process.second->GetProcessInfoData()); + } + + return data; +} + +void CController::Process() +{ + while (!m_bStop) + { + CThread::Sleep(500ms); + + std::unique_lock lock(m_lock); + + for (auto it = m_runningProcesses.cbegin(); it != m_runningProcesses.cend();) + { + /* + * Check the addon stopped itself, e.g. by normal way or with a crash. + */ + ChildStatus status = it->second->ProcessActive(); + if (it->second->ProcessActive() != ChildStatus::Running) + { + fprintf(stderr, "Stopped!!!!!!!!!!!!! %i\n", status); + CLog::Log(LOGFATAL, "CController::{}: Addon '{}' process was uncontrolled stopped!", + __func__, it->second->GetAddonID()); + it->second->InformStopReport(status); + it->second->Kill(); + m_runningProcesses.erase(it++); + continue; + } + + /* + * Check run of addon, if it is ununsed a amount of time do a stop of it. + * This mainly relates to addons where processed by Kodi, e.g. PVR, audiodecoder + * and so on related addons. + */ + if (it->second->UseEndTime() && !it->second->IsInUse()) + { + if (it->second->EndTimeLeft() == 0ms) + { + fprintf(stderr, "-------------- %i\n", it->second->EndTimeLeft()); + CLog::Log(LOGDEBUG, + "CController::{}: Addon '{}' process was inactive and becomes stopped", + __func__, it->second->GetAddonID()); + it->second->Kill(); + m_runningProcesses.erase(it++); + continue; + } + } + + it++; + } + } +} + +bool CController::CheckNeedDirectDll(const std::shared_ptr& addon) +{ + try + { + // linux is different and has the version number after the suffix + static const std::regex libRegex("^.*" + CCompileInfo::CCompileInfo::GetSharedLibrarySuffix() + + "\\.?[0-9]*\\.?[0-9]*\\.?[0-9]*$"); + if (std::regex_match(addon->Type(addon->MainType())->LibPath(), libRegex)) + { + return !SimulateExeViaSharedLib(addon); + } + } + catch (const std::regex_error& e) + { + CLog::Log(LOGERROR, "CAddonInfoBuilder::{}: Regex error caught: {}", __func__, e.what()); + } + + return false; +} + +bool CController::SimulateExeViaSharedLib(const std::shared_ptr& addon) +{ + return true; +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/Controller.h b/xbmc/addons/interface/Controller.h new file mode 100644 index 0000000000000..7e0cb5a0c62c5 --- /dev/null +++ b/xbmc/addons/interface/Controller.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "Interface.h" +#include "processinfo/ProcessInfo.h" +#include "threads/Thread.h" + +#include +#include +#include +#include +#include + +namespace ADDON +{ +class CAddonInfo; +class CAddonMgr; +class IAddon; +} /* namespace ADDON */ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CRunningProcess; +class IInstanceHandler; + +class CController : private CThread +{ +public: + CController(ADDON::CAddonMgr& addonMgr); + ~CController(); + + bool Init(); + void Deinit(); + + bool AddonLanguageSupported(const std::shared_ptr& addon) const; + bool LaunchAddon(const std::shared_ptr& addon, + std::vector& argv, + bool waitForExit, + std::shared_ptr& process); + std::shared_ptr GetAddonProcess( + const std::shared_ptr& addonInfo, + IInstanceHandler* handler, + const KODI_ADDON_INSTANCE_INFO* firstInstance, + std::shared_ptr& addon); + void ReleaseAddonProcess(const std::shared_ptr& process, + IInstanceHandler* handler); + std::shared_ptr GetRunningAddonProcess(const std::string& addonId) const; + std::shared_ptr GetRunningAddon(const std::string& addonId) const; + + std::vector GetProcessInfoData(); + const std::string& GetDevkitLibPath() const { return m_devkitLib; } + const std::string& GetDevkitLaunchExe() const { return m_devkitLaunchExe; } + +private: + void Process() override; + + bool CheckNeedDirectDll(const std::shared_ptr& addon); + bool SimulateExeViaSharedLib(const std::shared_ptr& addon); + + ADDON::CAddonMgr& m_addonMgr; + const std::string m_devkitLib; + const std::string m_devkitLaunchExe; + std::atomic_bool m_running{false}; + mutable std::mutex m_lock; + std::map> m_runningProcesses; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/GUICrashReporter.cpp b/xbmc/addons/interface/GUICrashReporter.cpp new file mode 100644 index 0000000000000..a06c4fb565a47 --- /dev/null +++ b/xbmc/addons/interface/GUICrashReporter.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "GUICrashReporter.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CGUICrashReporter::CGUICrashReporter() + : CGUIDialog(WINDOW_DIALOG_ADDON_CRASH_REPORTER, "DialogAddonCrashReporter.xml") +{ +} + +CGUICrashReporter::~CGUICrashReporter() +{ +} + +void CGUICrashReporter::OnInitWindow() +{ + CGUIDialog::OnInitWindow(); +} + +bool CGUICrashReporter::OnAction(const CAction& action) +{ + + return CGUIDialog::OnAction(action); +} + +bool CGUICrashReporter::OnMessage(CGUIMessage& message) +{ + return CGUIDialog::OnMessage(message); +} + +void CGUICrashReporter::ReportCrash(const std::shared_ptr& addon) +{ +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/GUICrashReporter.h b/xbmc/addons/interface/GUICrashReporter.h new file mode 100644 index 0000000000000..4217c93189ed3 --- /dev/null +++ b/xbmc/addons/interface/GUICrashReporter.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "addons/IAddon.h" +#include "guilib/GUIDialog.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CGUICrashReporter : public CGUIDialog +{ +public: + CGUICrashReporter(void); + ~CGUICrashReporter(void) override; + + bool OnMessage(CGUIMessage& message) override; + bool OnAction(const CAction& action) override; + + static void ReportCrash(const std::shared_ptr& addon); + +private: + void OnInitWindow() override; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/IMsgHdl.cpp b/xbmc/addons/interface/IMsgHdl.cpp new file mode 100644 index 0000000000000..98b8f6f301a60 --- /dev/null +++ b/xbmc/addons/interface/IMsgHdl.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2020 Team Kodi (https://kodi.tv) + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSE.md for more information. + */ + +#include "IMsgHdl.h" + +#include "RunningProcess.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +IMsgHdl::IMsgHdl(CInterface& interface) : m_interface(interface), m_process(interface.m_process) +{ +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/IMsgHdl.h b/xbmc/addons/interface/IMsgHdl.h new file mode 100644 index 0000000000000..55d5874a61f79 --- /dev/null +++ b/xbmc/addons/interface/IMsgHdl.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2020 Team Kodi (https://kodi.tv) + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSE.md for more information. + */ + +#pragma once + +#include "../../addons/addoninfo/AddonInfo.h" + +#include + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CInterface; +class CRunningProcess; + +class IMsgHdl +{ +public: + IMsgHdl(CInterface& interface); + virtual ~IMsgHdl() = default; + + virtual bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) = 0; + +protected: + CInterface& m_interface; + CRunningProcess* const m_process; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/InstanceHandler.cpp b/xbmc/addons/interface/InstanceHandler.cpp new file mode 100644 index 0000000000000..e8565ee5ff712 --- /dev/null +++ b/xbmc/addons/interface/InstanceHandler.cpp @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "InstanceHandler.h" + +#include "ServiceBroker.h" +#include "addons/interface/Controller.h" +#include "addons/interface/api/addon_base.h" +#include "addons/settings/AddonSettings.h" +#include "filesystem/Directory.h" +#include "filesystem/SpecialProtocol.h" +#include "utils/StringUtils.h" +#include "utils/log.h" + +using namespace ADDON; +using namespace KODI::ADDONS::INTERFACE; + +std::mutex IInstanceHandler::m_cdSec; + +IInstanceHandler::IInstanceHandler(KODI_ADDON_INSTANCE_TYPE type, + const AddonInfoPtr& addonInfo, + ADDON_HANDLE parentInstance /* = nullptr*/, + const std::string& instanceID /* = ""*/) + : m_type(type), m_parentInstance(parentInstance), m_addonInfo(addonInfo) +{ + // if no special instance ID is given generate one from class pointer (is + // faster as unique id and also safe enough for them). + m_instanceId = + !instanceID.empty() ? instanceID : StringUtils::Format("%p", static_cast(this)); + + m_info.instance_id = 0; + m_info.unique_work_id = m_instanceId.c_str(); + m_info.type = m_type; + m_info.kodi = this; + m_info.parent = m_parentInstance; + // m_info.first_instance = m_addon && !m_addon->Initialized(); +} + +IInstanceHandler::~IInstanceHandler() +{ +} + +std::string IInstanceHandler::ID() const +{ + return m_addonInfo ? m_addonInfo->ID() : ""; +} + +std::string IInstanceHandler::Name() const +{ + return m_addonInfo ? m_addonInfo->Name() : ""; +} + +std::string IInstanceHandler::Author() const +{ + return m_addonInfo ? m_addonInfo->Author() : ""; +} + +std::string IInstanceHandler::Icon() const +{ + return m_addonInfo ? m_addonInfo->Icon() : ""; +} + +std::string IInstanceHandler::Path() const +{ + return m_addonInfo ? m_addonInfo->Path() : ""; +} + +std::string IInstanceHandler::Profile() const +{ + return m_addonInfo ? m_addonInfo->Profile() : ""; +} + +AddonVersion IInstanceHandler::Version() const +{ + return m_addonInfo ? m_addonInfo->Version() : AddonVersion(); +} + +ADDON_STATUS IInstanceHandler::CreateInstance() +{ + m_process = + CServiceBroker::GetAddonIfcCtrl().GetAddonProcess(m_addonInfo, this, &m_info, m_addon); + if (!m_process) + { + CLog::Log(LOGERROR, + "IInstanceHandler::{}: {} failed to get addon process during instance creation", + __func__, m_addonInfo->ID()); + return ADDON_STATUS_UNKNOWN; + } + m_ifc = &m_process->GetIfc(); + + if (!m_addon || !m_ifc) + return ADDON_STATUS_UNKNOWN; + + std::unique_lock lock(m_cdSec); + + ADDON_STATUS status = m_ifc->kodi_addon_base_h->kodi_addon_create_instance_v1( + m_process->m_hdl, &m_info, &m_instance); + if (status != ADDON_STATUS_OK) + { + CLog::Log(LOGERROR, + "IInstanceHandler::{}: {} returned bad status \"{}\" during instance creation", + __func__, m_addonInfo->ID(), status); + } + return status; +} + +void IInstanceHandler::DestroyInstance() +{ + std::unique_lock lock(m_cdSec); + if (m_addon && m_ifc) + { + m_ifc->kodi_addon_base_h->kodi_addon_destroy_instance_v1(m_process->m_hdl, &m_info, m_instance); + m_ifc = nullptr; + } + + CServiceBroker::GetAddonIfcCtrl().ReleaseAddonProcess(m_process, this); + m_process = nullptr; +} + +std::shared_ptr IInstanceHandler::GetSetting(const std::string& setting) +{ + if (!m_addon->HasSettings()) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - couldn't get settings for add-on '{}'", __func__, + Name()); + return nullptr; + } + + auto value = m_addon->GetSettings()->GetSetting(setting); + if (value == nullptr) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - can't find setting '{}' in '{}'", __func__, setting, + Name()); + return nullptr; + } + + return value; +} + +char* IInstanceHandler::get_instance_user_path() +{ + const std::string path = CSpecialProtocol::TranslatePath(m_addon->Profile()); + + XFILE::CDirectory::Create(path); + return strdup(path.c_str()); +} + +bool IInstanceHandler::is_instance_setting_using_default(const char* id) +{ + if (!id) + return false; + + auto setting = GetSetting(id); + if (setting == nullptr) + return false; + + return setting->IsDefault(); +} + +bool IInstanceHandler::get_instance_setting_bool(const char* id, bool* value) +{ + if (!id || !value) + return false; + + auto setting = GetSetting(id); + if (setting == nullptr) + return false; + + if (setting->GetType() != SettingType::Boolean) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - setting '{}' is not a boolean in '{}'", __func__, + id, Name()); + return false; + } + + *value = std::static_pointer_cast(setting)->GetValue(); + return true; +} + +bool IInstanceHandler::get_instance_setting_int(const char* id, int* value) +{ + if (!id || !value) + return false; + + auto setting = GetSetting(id); + if (setting == nullptr) + return false; + + if (setting->GetType() != SettingType::Integer && setting->GetType() != SettingType::Number) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - setting '{}' is not a integer in '{}'", __func__, + id, Name()); + return false; + } + + if (setting->GetType() == SettingType::Integer) + *value = std::static_pointer_cast(setting)->GetValue(); + else + *value = static_cast(std::static_pointer_cast(setting)->GetValue()); + return true; +} + +bool IInstanceHandler::get_instance_setting_float(const char* id, double* value) +{ + if (!id || !value) + return false; + + auto setting = GetSetting(id); + if (setting == nullptr) + return false; + + if (setting->GetType() != SettingType::Number) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - setting '{}' is not a number in '{}'", __func__, id, + Name()); + return false; + } + + *value = static_cast(std::static_pointer_cast(setting)->GetValue()); + return true; +} + +bool IInstanceHandler::get_instance_setting_string(const char* id, char** value) +{ + if (!id || !value) + return false; + + auto setting = GetSetting(id); + if (setting == nullptr) + return false; + + if (setting->GetType() != SettingType::String) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - setting '{}' is not a string in '{}'", __func__, id, + Name()); + return false; + } + + *value = strdup(std::static_pointer_cast(setting)->GetValue().c_str()); + return true; +} + +bool IInstanceHandler::set_instance_setting_bool(const char* id, bool value) +{ + if (!id) + return false; + + if (CHdl_kodi_addon_base_h::UpdateSettingInActiveDialog(ID(), id, value ? "true" : "false")) + return true; + + if (!m_addon->UpdateSettingBool(id, value)) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - invalid setting type", __func__); + return false; + } + + m_addon->SaveSettings(); + + return true; +} + +bool IInstanceHandler::set_instance_setting_int(const char* id, int value) +{ + if (!id) + return false; + + if (CHdl_kodi_addon_base_h::UpdateSettingInActiveDialog(ID(), id, std::to_string(value))) + return true; + + if (!m_addon->UpdateSettingInt(id, value)) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - invalid setting type", __func__); + return false; + } + + m_addon->SaveSettings(); + + return true; +} + +bool IInstanceHandler::set_instance_setting_float(const char* id, double value) +{ + if (!id) + return false; + + if (CHdl_kodi_addon_base_h::UpdateSettingInActiveDialog(ID(), id, + StringUtils::Format("{:f}", value))) + return true; + + if (!m_addon->UpdateSettingNumber(id, static_cast(value))) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - invalid setting type", __func__); + return false; + } + + m_addon->SaveSettings(); + + return true; +} + +bool IInstanceHandler::set_instance_setting_string(const char* id, const char* value) +{ + if (!id || !value) + return false; + + if (CHdl_kodi_addon_base_h::UpdateSettingInActiveDialog(ID(), id, value)) + return true; + + if (!m_addon->UpdateSettingString(id, value)) + { + CLog::Log(LOGERROR, "IInstanceHandler::{} - invalid setting type", __func__); + return false; + } + + m_addon->SaveSettings(); + + return true; +} diff --git a/xbmc/addons/interface/InstanceHandler.h b/xbmc/addons/interface/InstanceHandler.h new file mode 100644 index 0000000000000..6315bf1a03afd --- /dev/null +++ b/xbmc/addons/interface/InstanceHandler.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "RunningProcess.h" +#include "addons/AddonVersion.h" +#include "addons/IAddon.h" +#include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h" + +#include +#include + +class CSetting; + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CInterface; +typedef void* ADDON_HANDLE; +typedef void* KODI_HANDLE; + +class IInstanceHandler +{ +public: + IInstanceHandler(KODI_ADDON_INSTANCE_TYPE type, + const std::shared_ptr& addonInfo, + ADDON_HANDLE parentInstance = nullptr, + const std::string& instanceID = ""); + virtual ~IInstanceHandler(); + + KODI_ADDON_INSTANCE_TYPE UsedType() const { return m_type; } + const std::string& InstanceID() { return m_instanceId; } + + std::string ID() const; + std::string Name() const; + std::string Author() const; + std::string Icon() const; + std::string Path() const; + std::string Profile() const; + ADDON::AddonVersion Version() const; + + ADDON_STATUS CreateInstance(); + void DestroyInstance(); + const std::shared_ptr& Addon() const { return m_addon; } + const std::shared_ptr& GetAddonInfo() const { return m_addonInfo; } + const std::shared_ptr& GetProcess() const { return m_process; } + + virtual void StopReport(ChildStatus status) {} + virtual void OnPreInstall() {} + virtual void OnPostInstall(bool update, bool modal) {} + virtual void OnPreUnInstall() {} + virtual void OnPostUnInstall() {} + + char* get_instance_user_path(); + /*---AUTO_GEN_PARSE---*/ + bool is_instance_setting_using_default(const char* id); + /*---AUTO_GEN_PARSE---*/ + bool get_instance_setting_bool(const char* id, bool* value); + /*---AUTO_GEN_PARSE---*/ + bool get_instance_setting_int(const char* id, int* value); + /*---AUTO_GEN_PARSE---*/ + bool get_instance_setting_float(const char* id, double* value); + /*---AUTO_GEN_PARSE---*/ + bool get_instance_setting_string(const char* id, char** value); + /*---AUTO_GEN_PARSE---*/ + bool set_instance_setting_bool(const char* id, bool value); + /*---AUTO_GEN_PARSE---*/ + bool set_instance_setting_int(const char* id, int value); + /*---AUTO_GEN_PARSE---*/ + bool set_instance_setting_float(const char* id, double value); + /*---AUTO_GEN_PARSE---*/ + bool set_instance_setting_string(const char* id, const char* value); + /*---AUTO_GEN_PARSE---*/ + +protected: + CInterface* m_ifc; + KODI_ADDON_INSTANCE_INFO m_info{}; + KODI_HANDLE m_instance{}; + +private: + std::shared_ptr GetSetting(const std::string& setting); + + KODI_ADDON_INSTANCE_TYPE m_type; + std::string m_instanceId; + ADDON_HANDLE m_parentInstance; + std::shared_ptr m_process; + std::shared_ptr m_addonInfo; + std::shared_ptr m_addon; + static std::mutex m_cdSec; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/Interface.cpp b/xbmc/addons/interface/Interface.cpp new file mode 100644 index 0000000000000..43f17d6ab86e5 --- /dev/null +++ b/xbmc/addons/interface/Interface.cpp @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "Interface.h" + +#include "addons/kodi-dev-kit/src/shared/DirectData.h" + +/*---AUTO_GEN_PARSE---*/ +#include "api/addon-instance/audiodecoder.h" +#include "api/addon-instance/audioencoder.h" +#include "api/addon-instance/game.h" +#include "api/addon-instance/imagedecoder.h" +#include "api/addon-instance/inputstream.h" +#include "api/addon-instance/peripheral.h" +#include "api/addon-instance/pvr.h" +#include "api/addon-instance/screensaver.h" +#include "api/addon-instance/vfs.h" +#include "api/addon-instance/videocodec.h" +#include "api/addon-instance/visualization.h" +#include "api/addon_base.h" +#include "api/audio_engine.h" +#include "api/filesystem.h" +#include "api/general.h" +#include "api/gui/controls/button.h" +#include "api/gui/controls/edit.h" +#include "api/gui/controls/fade_label.h" +#include "api/gui/controls/image.h" +#include "api/gui/controls/label.h" +#include "api/gui/controls/progress.h" +#include "api/gui/controls/radio_button.h" +#include "api/gui/controls/rendering.h" +#include "api/gui/controls/settings_slider.h" +#include "api/gui/controls/slider.h" +#include "api/gui/controls/spin.h" +#include "api/gui/controls/text_box.h" +#include "api/gui/dialogs/context_menu.h" +#include "api/gui/dialogs/extended_progress.h" +#include "api/gui/dialogs/filebrowser.h" +#include "api/gui/dialogs/keyboard.h" +#include "api/gui/dialogs/numeric.h" +#include "api/gui/dialogs/ok.h" +#include "api/gui/dialogs/progress.h" +#include "api/gui/dialogs/select.h" +#include "api/gui/dialogs/text_viewer.h" +#include "api/gui/dialogs/yes_no.h" +#include "api/gui/general.h" +#include "api/gui/list_item.h" +#include "api/gui/window.h" +#include "api/monitor.h" +#include "api/network.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CInterface::CInterface(CRunningProcess* process, bool directDll) + : m_process(process), + m_directIfc(directDll ? std::make_unique() : nullptr), + m_directDll(directDll) +{ + /*---AUTO_GEN_PARSE---*/ + kodi_addon_base_h = new CHdl_kodi_addon_base_h(*this); + m_handlers[funcGroup_addon_base_h] = kodi_addon_base_h; + kodi_audio_engine_h = new CHdl_kodi_audio_engine_h(*this); + m_handlers[funcGroup_audio_engine_h] = kodi_audio_engine_h; + kodi_filesystem_h = new CHdl_kodi_filesystem_h(*this); + m_handlers[funcGroup_filesystem_h] = kodi_filesystem_h; + kodi_general_h = new CHdl_kodi_general_h(*this); + m_handlers[funcGroup_general_h] = kodi_general_h; + kodi_monitor_h = new CHdl_kodi_monitor_h(*this); + m_handlers[funcGroup_monitor_h] = kodi_monitor_h; + kodi_network_h = new CHdl_kodi_network_h(*this); + m_handlers[funcGroup_network_h] = kodi_network_h; + kodi_addoninstance_audiodecoder_h = new CHdl_kodi_addoninstance_audiodecoder_h(*this); + m_handlers[funcGroup_addoninstance_audiodecoder_h] = kodi_addoninstance_audiodecoder_h; + kodi_addoninstance_audioencoder_h = new CHdl_kodi_addoninstance_audioencoder_h(*this); + m_handlers[funcGroup_addoninstance_audioencoder_h] = kodi_addoninstance_audioencoder_h; + kodi_addoninstance_game_h = new CHdl_kodi_addoninstance_game_h(*this); + m_handlers[funcGroup_addoninstance_game_h] = kodi_addoninstance_game_h; + kodi_addoninstance_imagedecoder_h = new CHdl_kodi_addoninstance_imagedecoder_h(*this); + m_handlers[funcGroup_addoninstance_imagedecoder_h] = kodi_addoninstance_imagedecoder_h; + kodi_addoninstance_inputstream_h = new CHdl_kodi_addoninstance_inputstream_h(*this); + m_handlers[funcGroup_addoninstance_inputstream_h] = kodi_addoninstance_inputstream_h; + kodi_addoninstance_peripheral_h = new CHdl_kodi_addoninstance_peripheral_h(*this); + m_handlers[funcGroup_addoninstance_peripheral_h] = kodi_addoninstance_peripheral_h; + kodi_addoninstance_pvr_h = new CHdl_kodi_addoninstance_pvr_h(*this); + m_handlers[funcGroup_addoninstance_pvr_h] = kodi_addoninstance_pvr_h; + kodi_addoninstance_screensaver_h = new CHdl_kodi_addoninstance_screensaver_h(*this); + m_handlers[funcGroup_addoninstance_screensaver_h] = kodi_addoninstance_screensaver_h; + kodi_addoninstance_vfs_h = new CHdl_kodi_addoninstance_vfs_h(*this); + m_handlers[funcGroup_addoninstance_vfs_h] = kodi_addoninstance_vfs_h; + kodi_addoninstance_videocodec_h = new CHdl_kodi_addoninstance_videocodec_h(*this); + m_handlers[funcGroup_addoninstance_videocodec_h] = kodi_addoninstance_videocodec_h; + kodi_addoninstance_visualization_h = new CHdl_kodi_addoninstance_visualization_h(*this); + m_handlers[funcGroup_addoninstance_visualization_h] = kodi_addoninstance_visualization_h; + kodi_gui_general_h = new CHdl_kodi_gui_general_h(*this); + m_handlers[funcGroup_gui_general_h] = kodi_gui_general_h; + kodi_gui_list_item_h = new CHdl_kodi_gui_list_item_h(*this); + m_handlers[funcGroup_gui_list_item_h] = kodi_gui_list_item_h; + kodi_gui_window_h = new CHdl_kodi_gui_window_h(*this); + m_handlers[funcGroup_gui_window_h] = kodi_gui_window_h; + kodi_gui_controls_button_h = new CHdl_kodi_gui_controls_button_h(*this); + m_handlers[funcGroup_gui_controls_button_h] = kodi_gui_controls_button_h; + kodi_gui_controls_edit_h = new CHdl_kodi_gui_controls_edit_h(*this); + m_handlers[funcGroup_gui_controls_edit_h] = kodi_gui_controls_edit_h; + kodi_gui_controls_fade_label_h = new CHdl_kodi_gui_controls_fade_label_h(*this); + m_handlers[funcGroup_gui_controls_fade_label_h] = kodi_gui_controls_fade_label_h; + kodi_gui_controls_image_h = new CHdl_kodi_gui_controls_image_h(*this); + m_handlers[funcGroup_gui_controls_image_h] = kodi_gui_controls_image_h; + kodi_gui_controls_label_h = new CHdl_kodi_gui_controls_label_h(*this); + m_handlers[funcGroup_gui_controls_label_h] = kodi_gui_controls_label_h; + kodi_gui_controls_progress_h = new CHdl_kodi_gui_controls_progress_h(*this); + m_handlers[funcGroup_gui_controls_progress_h] = kodi_gui_controls_progress_h; + kodi_gui_controls_radio_button_h = new CHdl_kodi_gui_controls_radio_button_h(*this); + m_handlers[funcGroup_gui_controls_radio_button_h] = kodi_gui_controls_radio_button_h; + kodi_gui_controls_rendering_h = new CHdl_kodi_gui_controls_rendering_h(*this); + m_handlers[funcGroup_gui_controls_rendering_h] = kodi_gui_controls_rendering_h; + kodi_gui_controls_settings_slider_h = new CHdl_kodi_gui_controls_settings_slider_h(*this); + m_handlers[funcGroup_gui_controls_settings_slider_h] = kodi_gui_controls_settings_slider_h; + kodi_gui_controls_slider_h = new CHdl_kodi_gui_controls_slider_h(*this); + m_handlers[funcGroup_gui_controls_slider_h] = kodi_gui_controls_slider_h; + kodi_gui_controls_spin_h = new CHdl_kodi_gui_controls_spin_h(*this); + m_handlers[funcGroup_gui_controls_spin_h] = kodi_gui_controls_spin_h; + kodi_gui_controls_text_box_h = new CHdl_kodi_gui_controls_text_box_h(*this); + m_handlers[funcGroup_gui_controls_text_box_h] = kodi_gui_controls_text_box_h; + kodi_gui_dialogs_context_menu_h = new CHdl_kodi_gui_dialogs_context_menu_h(*this); + m_handlers[funcGroup_gui_dialogs_context_menu_h] = kodi_gui_dialogs_context_menu_h; + kodi_gui_dialogs_extended_progress_h = new CHdl_kodi_gui_dialogs_extended_progress_h(*this); + m_handlers[funcGroup_gui_dialogs_extended_progress_h] = kodi_gui_dialogs_extended_progress_h; + kodi_gui_dialogs_filebrowser_h = new CHdl_kodi_gui_dialogs_filebrowser_h(*this); + m_handlers[funcGroup_gui_dialogs_filebrowser_h] = kodi_gui_dialogs_filebrowser_h; + kodi_gui_dialogs_keyboard_h = new CHdl_kodi_gui_dialogs_keyboard_h(*this); + m_handlers[funcGroup_gui_dialogs_keyboard_h] = kodi_gui_dialogs_keyboard_h; + kodi_gui_dialogs_numeric_h = new CHdl_kodi_gui_dialogs_numeric_h(*this); + m_handlers[funcGroup_gui_dialogs_numeric_h] = kodi_gui_dialogs_numeric_h; + kodi_gui_dialogs_ok_h = new CHdl_kodi_gui_dialogs_ok_h(*this); + m_handlers[funcGroup_gui_dialogs_ok_h] = kodi_gui_dialogs_ok_h; + kodi_gui_dialogs_progress_h = new CHdl_kodi_gui_dialogs_progress_h(*this); + m_handlers[funcGroup_gui_dialogs_progress_h] = kodi_gui_dialogs_progress_h; + kodi_gui_dialogs_select_h = new CHdl_kodi_gui_dialogs_select_h(*this); + m_handlers[funcGroup_gui_dialogs_select_h] = kodi_gui_dialogs_select_h; + kodi_gui_dialogs_text_viewer_h = new CHdl_kodi_gui_dialogs_text_viewer_h(*this); + m_handlers[funcGroup_gui_dialogs_text_viewer_h] = kodi_gui_dialogs_text_viewer_h; + kodi_gui_dialogs_yes_no_h = new CHdl_kodi_gui_dialogs_yes_no_h(*this); + m_handlers[funcGroup_gui_dialogs_yes_no_h] = kodi_gui_dialogs_yes_no_h; + + if (m_directIfc != nullptr) + { + kodi_addon_base_h->InitDirect(&m_directIfc->to_kodi.addon_base_h, + &m_directIfc->to_addon.addon_base_h); + kodi_audio_engine_h->InitDirect(&m_directIfc->to_kodi.audio_engine_h, + &m_directIfc->to_addon.audio_engine_h); + kodi_filesystem_h->InitDirect(&m_directIfc->to_kodi.filesystem_h, + &m_directIfc->to_addon.filesystem_h); + kodi_general_h->InitDirect(&m_directIfc->to_kodi.general_h, &m_directIfc->to_addon.general_h); + kodi_monitor_h->InitDirect(&m_directIfc->to_kodi.monitor_h, &m_directIfc->to_addon.monitor_h); + kodi_network_h->InitDirect(&m_directIfc->to_kodi.network_h, &m_directIfc->to_addon.network_h); + kodi_addoninstance_audiodecoder_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_audiodecoder_h, + &m_directIfc->to_addon.addoninstance_audiodecoder_h); + kodi_addoninstance_audioencoder_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_audioencoder_h, + &m_directIfc->to_addon.addoninstance_audioencoder_h); + kodi_addoninstance_game_h->InitDirect(&m_directIfc->to_kodi.addoninstance_game_h, + &m_directIfc->to_addon.addoninstance_game_h); + kodi_addoninstance_imagedecoder_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_imagedecoder_h, + &m_directIfc->to_addon.addoninstance_imagedecoder_h); + kodi_addoninstance_inputstream_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_inputstream_h, + &m_directIfc->to_addon.addoninstance_inputstream_h); + kodi_addoninstance_peripheral_h->InitDirect(&m_directIfc->to_kodi.addoninstance_peripheral_h, + &m_directIfc->to_addon.addoninstance_peripheral_h); + kodi_addoninstance_pvr_h->InitDirect(&m_directIfc->to_kodi.addoninstance_pvr_h, + &m_directIfc->to_addon.addoninstance_pvr_h); + kodi_addoninstance_screensaver_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_screensaver_h, + &m_directIfc->to_addon.addoninstance_screensaver_h); + kodi_addoninstance_vfs_h->InitDirect(&m_directIfc->to_kodi.addoninstance_vfs_h, + &m_directIfc->to_addon.addoninstance_vfs_h); + kodi_addoninstance_videocodec_h->InitDirect(&m_directIfc->to_kodi.addoninstance_videocodec_h, + &m_directIfc->to_addon.addoninstance_videocodec_h); + kodi_addoninstance_visualization_h->InitDirect( + &m_directIfc->to_kodi.addoninstance_visualization_h, + &m_directIfc->to_addon.addoninstance_visualization_h); + kodi_gui_general_h->InitDirect(&m_directIfc->to_kodi.gui_general_h, + &m_directIfc->to_addon.gui_general_h); + kodi_gui_list_item_h->InitDirect(&m_directIfc->to_kodi.gui_list_item_h, + &m_directIfc->to_addon.gui_list_item_h); + kodi_gui_window_h->InitDirect(&m_directIfc->to_kodi.gui_window_h, + &m_directIfc->to_addon.gui_window_h); + kodi_gui_controls_button_h->InitDirect(&m_directIfc->to_kodi.gui_controls_button_h, + &m_directIfc->to_addon.gui_controls_button_h); + kodi_gui_controls_edit_h->InitDirect(&m_directIfc->to_kodi.gui_controls_edit_h, + &m_directIfc->to_addon.gui_controls_edit_h); + kodi_gui_controls_fade_label_h->InitDirect(&m_directIfc->to_kodi.gui_controls_fade_label_h, + &m_directIfc->to_addon.gui_controls_fade_label_h); + kodi_gui_controls_image_h->InitDirect(&m_directIfc->to_kodi.gui_controls_image_h, + &m_directIfc->to_addon.gui_controls_image_h); + kodi_gui_controls_label_h->InitDirect(&m_directIfc->to_kodi.gui_controls_label_h, + &m_directIfc->to_addon.gui_controls_label_h); + kodi_gui_controls_progress_h->InitDirect(&m_directIfc->to_kodi.gui_controls_progress_h, + &m_directIfc->to_addon.gui_controls_progress_h); + kodi_gui_controls_radio_button_h->InitDirect( + &m_directIfc->to_kodi.gui_controls_radio_button_h, + &m_directIfc->to_addon.gui_controls_radio_button_h); + kodi_gui_controls_rendering_h->InitDirect(&m_directIfc->to_kodi.gui_controls_rendering_h, + &m_directIfc->to_addon.gui_controls_rendering_h); + kodi_gui_controls_settings_slider_h->InitDirect( + &m_directIfc->to_kodi.gui_controls_settings_slider_h, + &m_directIfc->to_addon.gui_controls_settings_slider_h); + kodi_gui_controls_slider_h->InitDirect(&m_directIfc->to_kodi.gui_controls_slider_h, + &m_directIfc->to_addon.gui_controls_slider_h); + kodi_gui_controls_spin_h->InitDirect(&m_directIfc->to_kodi.gui_controls_spin_h, + &m_directIfc->to_addon.gui_controls_spin_h); + kodi_gui_controls_text_box_h->InitDirect(&m_directIfc->to_kodi.gui_controls_text_box_h, + &m_directIfc->to_addon.gui_controls_text_box_h); + kodi_gui_dialogs_context_menu_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_context_menu_h, + &m_directIfc->to_addon.gui_dialogs_context_menu_h); + kodi_gui_dialogs_extended_progress_h->InitDirect( + &m_directIfc->to_kodi.gui_dialogs_extended_progress_h, + &m_directIfc->to_addon.gui_dialogs_extended_progress_h); + kodi_gui_dialogs_filebrowser_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_filebrowser_h, + &m_directIfc->to_addon.gui_dialogs_filebrowser_h); + kodi_gui_dialogs_keyboard_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_keyboard_h, + &m_directIfc->to_addon.gui_dialogs_keyboard_h); + kodi_gui_dialogs_numeric_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_numeric_h, + &m_directIfc->to_addon.gui_dialogs_numeric_h); + kodi_gui_dialogs_ok_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_ok_h, + &m_directIfc->to_addon.gui_dialogs_ok_h); + kodi_gui_dialogs_progress_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_progress_h, + &m_directIfc->to_addon.gui_dialogs_progress_h); + kodi_gui_dialogs_select_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_select_h, + &m_directIfc->to_addon.gui_dialogs_select_h); + kodi_gui_dialogs_text_viewer_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_text_viewer_h, + &m_directIfc->to_addon.gui_dialogs_text_viewer_h); + kodi_gui_dialogs_yes_no_h->InitDirect(&m_directIfc->to_kodi.gui_dialogs_yes_no_h, + &m_directIfc->to_addon.gui_dialogs_yes_no_h); + } + /*---AUTO_GEN_PARSE---*/ +} + +CInterface::~CInterface() +{ + for (auto& handler : m_handlers) + { + delete handler; + } +} + +bool CInterface::FuncCall(int group, int func, const msgpack::unpacked& in, msgpack::sbuffer& out) +{ + if (m_handlers[group]) + return m_handlers[group]->HandleMessage(group, func, in, out); + return false; +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/Interface.h b/xbmc/addons/interface/Interface.h new file mode 100644 index 0000000000000..7f7c1f8bae428 --- /dev/null +++ b/xbmc/addons/interface/Interface.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "../kodi-dev-kit/src/shared/SharedGroups.h" +#include "IMsgHdl.h" + +#include + +namespace ADDON +{ +class CAddonInfo; +} /* namespace ADDON */ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/*---AUTO_GEN_PARSE---*/ +class CHdl_kodi_addon_base_h; +class CHdl_kodi_audio_engine_h; +class CHdl_kodi_filesystem_h; +class CHdl_kodi_general_h; +class CHdl_kodi_monitor_h; +class CHdl_kodi_network_h; +class CHdl_kodi_addoninstance_audiodecoder_h; +class CHdl_kodi_addoninstance_audioencoder_h; +class CHdl_kodi_addoninstance_game_h; +class CHdl_kodi_addoninstance_imagedecoder_h; +class CHdl_kodi_addoninstance_inputstream_h; +class CHdl_kodi_addoninstance_peripheral_h; +class CHdl_kodi_addoninstance_pvr_h; +class CHdl_kodi_addoninstance_screensaver_h; +class CHdl_kodi_addoninstance_vfs_h; +class CHdl_kodi_addoninstance_videocodec_h; +class CHdl_kodi_addoninstance_visualization_h; +class CHdl_kodi_gui_general_h; +class CHdl_kodi_gui_list_item_h; +class CHdl_kodi_gui_window_h; +class CHdl_kodi_gui_controls_button_h; +class CHdl_kodi_gui_controls_edit_h; +class CHdl_kodi_gui_controls_fade_label_h; +class CHdl_kodi_gui_controls_image_h; +class CHdl_kodi_gui_controls_label_h; +class CHdl_kodi_gui_controls_progress_h; +class CHdl_kodi_gui_controls_radio_button_h; +class CHdl_kodi_gui_controls_rendering_h; +class CHdl_kodi_gui_controls_settings_slider_h; +class CHdl_kodi_gui_controls_slider_h; +class CHdl_kodi_gui_controls_spin_h; +class CHdl_kodi_gui_controls_text_box_h; +class CHdl_kodi_gui_dialogs_context_menu_h; +class CHdl_kodi_gui_dialogs_extended_progress_h; +class CHdl_kodi_gui_dialogs_filebrowser_h; +class CHdl_kodi_gui_dialogs_keyboard_h; +class CHdl_kodi_gui_dialogs_numeric_h; +class CHdl_kodi_gui_dialogs_ok_h; +class CHdl_kodi_gui_dialogs_progress_h; +class CHdl_kodi_gui_dialogs_select_h; +class CHdl_kodi_gui_dialogs_text_viewer_h; +class CHdl_kodi_gui_dialogs_yes_no_h; +/*---AUTO_GEN_PARSE---*/ + +struct DirectAddonIfc; + +enum class InterfaceKodiClass +{ + CFile, + CHttpHeader, + IAEStream, +}; + +class IInterfaceClassHdl +{ +public: + IInterfaceClassHdl(InterfaceKodiClass ifcClass) : m_ifcClass(ifcClass) {} + virtual ~IInterfaceClassHdl() = default; + + const InterfaceKodiClass m_ifcClass; +}; + +class CInterface +{ +public: + CInterface(CRunningProcess* process, bool directDll); + ~CInterface(); + + bool FuncCall(int group, int func, const msgpack::unpacked& in, msgpack::sbuffer& out); + + /*---AUTO_GEN_PARSE---*/ + CHdl_kodi_addon_base_h* kodi_addon_base_h; + CHdl_kodi_audio_engine_h* kodi_audio_engine_h; + CHdl_kodi_filesystem_h* kodi_filesystem_h; + CHdl_kodi_general_h* kodi_general_h; + CHdl_kodi_monitor_h* kodi_monitor_h; + CHdl_kodi_network_h* kodi_network_h; + CHdl_kodi_addoninstance_audiodecoder_h* kodi_addoninstance_audiodecoder_h; + CHdl_kodi_addoninstance_audioencoder_h* kodi_addoninstance_audioencoder_h; + CHdl_kodi_addoninstance_game_h* kodi_addoninstance_game_h; + CHdl_kodi_addoninstance_imagedecoder_h* kodi_addoninstance_imagedecoder_h; + CHdl_kodi_addoninstance_inputstream_h* kodi_addoninstance_inputstream_h; + CHdl_kodi_addoninstance_peripheral_h* kodi_addoninstance_peripheral_h; + CHdl_kodi_addoninstance_pvr_h* kodi_addoninstance_pvr_h; + CHdl_kodi_addoninstance_screensaver_h* kodi_addoninstance_screensaver_h; + CHdl_kodi_addoninstance_vfs_h* kodi_addoninstance_vfs_h; + CHdl_kodi_addoninstance_videocodec_h* kodi_addoninstance_videocodec_h; + CHdl_kodi_addoninstance_visualization_h* kodi_addoninstance_visualization_h; + CHdl_kodi_gui_general_h* kodi_gui_general_h; + CHdl_kodi_gui_list_item_h* kodi_gui_list_item_h; + CHdl_kodi_gui_window_h* kodi_gui_window_h; + CHdl_kodi_gui_controls_button_h* kodi_gui_controls_button_h; + CHdl_kodi_gui_controls_edit_h* kodi_gui_controls_edit_h; + CHdl_kodi_gui_controls_fade_label_h* kodi_gui_controls_fade_label_h; + CHdl_kodi_gui_controls_image_h* kodi_gui_controls_image_h; + CHdl_kodi_gui_controls_label_h* kodi_gui_controls_label_h; + CHdl_kodi_gui_controls_progress_h* kodi_gui_controls_progress_h; + CHdl_kodi_gui_controls_radio_button_h* kodi_gui_controls_radio_button_h; + CHdl_kodi_gui_controls_rendering_h* kodi_gui_controls_rendering_h; + CHdl_kodi_gui_controls_settings_slider_h* kodi_gui_controls_settings_slider_h; + CHdl_kodi_gui_controls_slider_h* kodi_gui_controls_slider_h; + CHdl_kodi_gui_controls_spin_h* kodi_gui_controls_spin_h; + CHdl_kodi_gui_controls_text_box_h* kodi_gui_controls_text_box_h; + CHdl_kodi_gui_dialogs_context_menu_h* kodi_gui_dialogs_context_menu_h; + CHdl_kodi_gui_dialogs_extended_progress_h* kodi_gui_dialogs_extended_progress_h; + CHdl_kodi_gui_dialogs_filebrowser_h* kodi_gui_dialogs_filebrowser_h; + CHdl_kodi_gui_dialogs_keyboard_h* kodi_gui_dialogs_keyboard_h; + CHdl_kodi_gui_dialogs_numeric_h* kodi_gui_dialogs_numeric_h; + CHdl_kodi_gui_dialogs_ok_h* kodi_gui_dialogs_ok_h; + CHdl_kodi_gui_dialogs_progress_h* kodi_gui_dialogs_progress_h; + CHdl_kodi_gui_dialogs_select_h* kodi_gui_dialogs_select_h; + CHdl_kodi_gui_dialogs_text_viewer_h* kodi_gui_dialogs_text_viewer_h; + CHdl_kodi_gui_dialogs_yes_no_h* kodi_gui_dialogs_yes_no_h; + /*---AUTO_GEN_PARSE---*/ + + CRunningProcess* const m_process; + std::unique_ptr const m_directIfc; + const bool m_directDll; + +private: + std::array m_handlers{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/RunningProcess.cpp b/xbmc/addons/interface/RunningProcess.cpp new file mode 100644 index 0000000000000..4dacef145d112 --- /dev/null +++ b/xbmc/addons/interface/RunningProcess.cpp @@ -0,0 +1,522 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "RunningProcess.h" + +// Interface +#include "Controller.h" +#include "InstanceHandler.h" +#include "RunningThread.h" +#include "api/addon_base.h" + +// Kodi +#include "ServiceBroker.h" +#include "addons/addoninfo/AddonInfo.h" +#include "addons/kodi-dev-kit/src/shared/DirectData.h" +#include "addons/kodi-dev-kit/src/shared/SharedData.h" +#include "addons/kodi-dev-kit/src/shared/api/processor.h" +#include "filesystem/File.h" +#include "utils/log.h" + +#ifdef TARGET_LINUX +#include "processinfo/ProcessInfoLinux.h" +#endif +#include "launcher/LauncherDirectDll.h" +#ifdef TARGET_POSIX +#include "launcher/LauncherPosix.h" +#elif TARGET_WINDOWS +#include "launcher/LauncherWindows.h" +#else +#error No valid OS defined +#endif + +using namespace std::chrono_literals; + +namespace +{ +#ifndef STR_HELPER +#define STR_HELPER(x) #x +#endif +#ifndef STR +#define STR(x) STR_HELPER(x) +#endif +constexpr const char* EXE_FLAG = "--addon"; +constexpr const char* API_VERSION_FLAG = "--api"; +constexpr const char* API_VERSION_VALUE = STR(__KDK_MAJOR__); +constexpr const char* DEBUG_FLAG = "--debug"; +constexpr const char* DEVKIT_LIB_FLAG = "--dl"; +constexpr const char* DEVKIT_MAIN_SHARED_FLAG = "--main-shared"; +constexpr const char* DEVKIT_DIRECT_API_FLAG = "--direct-api"; +} // namespace + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CRunningProcess::CRunningProcess(const std::shared_ptr& addon, + const std::string& uuid, + bool directDll, + bool simulateExeViaSharedLib, + const KODI_ADDON_INSTANCE_INFO* firstInstance) + : CThread("CRunningProcess"), + m_addon(addon), + m_uuid(uuid), +#ifndef KODI_INHIBIT_SHARED + m_directDll(directDll), + m_simulateExeViaSharedLib(simulateExeViaSharedLib), +#else + m_directDll(true), + m_simulateExeViaSharedLib(false), +#endif + m_kodiInitInstancePtr(firstInstance), + m_mainThread(m_threadIdentfier++, this), + m_interface(this, m_directDll), + m_cmdValue_exe(m_addon->Type(m_addon->MainType())->LibPath()), + m_cmdValue_direct_api( + StringUtils::Format("{}", static_cast(m_interface.m_directIfc.get()))) +{ + if (m_directDll && !m_simulateExeViaSharedLib) + m_launcher = new CLauncherDirectDll(addon, uuid); +#ifndef KODI_INHIBIT_SHARED + else +#ifdef TARGET_POSIX + m_launcher = new CLauncherPosix(addon, uuid); +#elif TARGET_WINDOWS + m_launcher = nullptr; +#else + m_launcher = nullptr; +#endif +#endif +} + +CRunningProcess::~CRunningProcess() +{ + Kill(); + delete m_launcher; + delete m_processInfo; +} + +bool CRunningProcess::MakeCommandLineValues(std::vector& argv_cstr) +{ + argv_cstr.reserve(m_argv.size() + 14); + + if (m_simulateExeViaSharedLib) + { + argv_cstr.emplace_back( + const_cast(CServiceBroker::GetAddonIfcCtrl().GetDevkitLaunchExe().c_str())); + argv_cstr.emplace_back(const_cast(EXE_FLAG)); + } + + argv_cstr.emplace_back(const_cast(m_cmdValue_exe.c_str())); + + if (m_directDll) + { + argv_cstr.emplace_back(const_cast(DEVKIT_DIRECT_API_FLAG)); + argv_cstr.emplace_back(const_cast(m_cmdValue_direct_api.c_str())); + } + + argv_cstr.emplace_back(const_cast(API_VERSION_FLAG)); + argv_cstr.emplace_back(const_cast(API_VERSION_VALUE)); + + argv_cstr.emplace_back(const_cast(DEVKIT_MAIN_SHARED_FLAG)); + argv_cstr.emplace_back(const_cast(m_uuid.c_str())); + + argv_cstr.emplace_back(const_cast(DEVKIT_LIB_FLAG)); + argv_cstr.emplace_back( + const_cast(CServiceBroker::GetAddonIfcCtrl().GetDevkitLibPath().c_str())); + + argv_cstr.emplace_back(const_cast(DEBUG_FLAG)); + + for (const auto& arg : m_argv) + argv_cstr.emplace_back(const_cast(arg.c_str())); + + argv_cstr.emplace_back(nullptr); + + return true; +} + +bool CRunningProcess::Launch(const std::vector& argv, bool waitForExit) +{ + /* + * Confirm the wanted executable is really present. + */ + if (m_cmdValue_exe.empty() || !XFILE::CFile::Exists(m_cmdValue_exe)) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: Wanted {} '{}' not present", __func__, + m_directDll ? "library" : "executable", m_cmdValue_exe); + return false; + } + + /* + * Start the addon main thread receiver. + * NOTE This not relate to a real thread process itself only that it handle + * addon his thread calls. + */ + if (!m_mainThread.Create(waitForExit)) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: Failed to create process thread interface for addon", + __func__, m_addon->ID()); + return false; + } + + m_argv = argv; + + /* + * Start addon from here, if wait for exit is set, as it should return direct + * after performed work. + * + * This thought for helper apps where do one time by call the wanted work. + * + * For the normal cases the running thread becomes created where also start + * the executable. + */ + if (waitForExit || (m_directDll && m_launcher->SupportNonBlocking(m_cmdValue_exe))) + { + std::vector argv_cstr; + if (!MakeCommandLineValues(argv_cstr)) + { + CLog::Log(LOGERROR, + "CRunningProcess::{}: Failed to parse command values for addon '{}' process", + __func__, m_addon->ID()); + m_startFailed = true; + m_startDone = true; + return false; + } + + if (!m_launcher->Launch(argv_cstr, waitForExit)) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: Failed to start addon '{}' process", __func__, + m_addon->ID()); + m_startFailed = true; + return false; + } + + m_startFailed = false; + } + else + { + /* + * Start here the thread and wait until done. + * This wait needed to have addon usable for other Kodi places, otherwise + * it can come that Kodi wants to call a non present place, e.g. + * kodi_addon_create below. + */ + CThread::Create(); + while (!m_startDone) + { + CThread::Sleep(1ms); + } + } + + if (!m_startFailed) + { + m_interface.kodi_addon_base_h->kodi_addon_create_v1(m_kodiInitInstancePtr, &m_hdl); + } + + + return !m_startFailed; +} + +bool CRunningProcess::Kill() +{ + // Check addon is running, if yes stop by normal way + if (ProcessActive() == ChildStatus::Running) + { + m_interface.kodi_addon_base_h->kodi_addon_destroy_v1(m_hdl); + + // Inform addon of requested kill and to allow him needed work (e.g. stop process thread). + if (!m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_processor_KillChild(m_uuid)); + SendMessage(funcGroup_Main, kodi_processor_KillChild, in); + } + else + { + void* hdl = m_interface.m_directIfc->to_addon.processor_h.thisClassHdl; + if (m_interface.m_directIfc->to_addon.processor_h.kodi_kill_child) + { + m_interface.m_directIfc->to_addon.processor_h.kodi_kill_child(hdl, m_uuid.c_str()); + } + } + + // Make the process kill with wait until done (if exceeds a time delay a kill becomes forced), + m_launcher->Kill(true); + } + + for (const auto& thread : m_runningSubThreads) + thread->Destroy(); + m_runningSubThreads.clear(); + m_mainThread.Destroy(); + + CThread::StopThread(); + + return true; +} + +ProcessInfoData CRunningProcess::GetProcessInfoData() +{ + static ProcessInfoData dummy; + + if (ProcessActive() != ChildStatus::Running) + { + return dummy; + } + + if (!m_processInfo) + { +#ifdef TARGET_LINUX + m_processInfo = new CProcessInfoLinux(m_addon, m_launcher->GetMainProcessPID()); +#endif + } + + return m_processInfo->Calculate(); +} + +ChildStatus CRunningProcess::ProcessActive() +{ + if (m_launcher) + return m_launcher->ProcessActive(); + + return ChildStatus::NotStarted; +} + +bool CRunningProcess::FuncCall(int group, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (group == funcGroup_Main) + { + switch (func) + { + case kodi_processor_CreateForNewThread: + { + msgParent__IN_kodi_processor_CreateForNewThread t = in.get().as(); + + if (m_mainThread.GetID() != std::get<0>(t)) + { + CLog::Log(LOGERROR, + "CRunningProcess::{}: Addon '{}' interface creation called from invalid place " + "'{}' (should '{}')", + __func__, m_addon->ID(), std::get<0>(t), m_mainThread.GetID()); + return false; + } + + std::shared_ptr thread = + std::make_shared(m_threadIdentfier++, this); + if (!thread->Create(true)) + { + CLog::Log(LOGERROR, + "CRunningProcess::{}: Failed to create new thread process for addon '{}'", + __func__, m_addon->ID()); + return false; + } + + m_runningSubThreads.emplace(thread); + + msgpack::pack(out, msgParent_OUT_kodi_processor_CreateForNewThread(thread->GetID(), + thread->GetThreadID())); + return true; + } + default: + return false; + } + } + + return m_interface.FuncCall(group, func, in, out); +} + +bool CRunningProcess::SendMessage(int group, int func) +{ + // TODO Call with other thread? + return m_mainThread.SendMessage(group, func); +} + +bool CRunningProcess::SendMessage(int group, int func, const msgpack::sbuffer& in) +{ + // TODO Call with other thread? + return m_mainThread.SendMessage(group, func, in); +} + +bool CRunningProcess::SendMessage(int group, + int func, + const msgpack::sbuffer& in, + msgpack::sbuffer& ret) +{ + // TODO Call with other thread? + return m_mainThread.SendMessage(group, func, in, ret); +} + +bool CRunningProcess::SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret) +{ + // TODO Call with other thread? + return m_mainThread.SendMessageOnlyGetReturn(group, func, ret); +} + +void CRunningProcess::RegisterClass(IInterfaceClassHdl* ifcClass) +{ + std::unique_lock lock(m_classRegisterMutex); + m_activeIfcClasses.emplace(ifcClass); +} + +void CRunningProcess::UnregisterClass(IInterfaceClassHdl* ifcClass) +{ + std::unique_lock lock(m_classRegisterMutex); + m_activeIfcClasses.erase(ifcClass); +} + +void CRunningProcess::AddAddonInstance(IInstanceHandler* handler) +{ + // Paranoia check, if there a nullptr, then is really something wrong. + if (handler == nullptr) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: for Id '{}' called with empty instance handler", + __func__, GetAddonID()); + return; + } + + std::unique_lock lock(m_mutex); + + // add the instance handler to the info to know used amount on addon + m_activeAddonHandlers.insert(handler); +} + +void CRunningProcess::ReleaseAddonInstance(IInstanceHandler* handler) +{ + // Paranoia check, if there a nullptr, then is really something wrong. + if (handler == nullptr) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: for Id '{}' called with empty instance handler", + __func__, GetAddonID()); + return; + } + + std::unique_lock lock(m_mutex); + + auto presentHandler = m_activeAddonHandlers.find(handler); + if (presentHandler == m_activeAddonHandlers.end()) + return; + + m_activeAddonHandlers.erase(presentHandler); +} + +void CRunningProcess::InformStopReport(ChildStatus status) +{ + std::unique_lock lock(m_mutex); + + /* + * Inform all running instances about uncontrolled stop by e.g. segemention + * fault on addon. + * + * They can then stop his related threads and destroy related classes. + * This also the reason about "++it;" as there can in for loop the amount + * decreased. + */ + for (auto it = m_activeAddonHandlers.cbegin(); it != m_activeAddonHandlers.cend();) + { + (*it)->StopReport(status); + ++it; + } +} + +size_t CRunningProcess::UsedInstanceCount() const +{ + std::unique_lock lock(m_mutex); + return m_activeAddonHandlers.size(); +} + +void CRunningProcess::SetEndtime(unsigned int milliseconds) +{ + /* + * Set the used endtime, this mostly used by addons where Kodi use as his + * extension, e.g. PVR, audiodecoder and so on. + * + * Other independent running addons not use it as they stop itself. + */ + m_endMilliseconds = std::chrono::milliseconds(milliseconds); + m_endTimer.Set(m_endMilliseconds); +} + +std::chrono::milliseconds CRunningProcess::EndTimeLeft() const +{ + return m_endTimer.GetTimeLeft(); +} + +bool CRunningProcess::UseEndTime() const +{ + return m_endMilliseconds > 0ms; +} + +bool CRunningProcess::IsInUse() const +{ + /* + * If no active instances are present return false and let wait timer expire + * or in case of new instance to reset below again. + */ + if (m_activeAddonHandlers.empty()) + return false; + + /* + * Reset endtime to start. + * Done on ever call (where normally only by "CController::Process()") to use + * after addon no more used and stop his executable. + */ + m_endTimer.Set(m_endMilliseconds); + return true; +} + +void CRunningProcess::Process() +{ + { + /* + * Launch addon from running thread. + * This done for safeness, if the addon was started on another thread where + * becomes stopped somewhere, becomes also the started executable stopped. + */ + std::vector argv_cstr; + if (!MakeCommandLineValues(argv_cstr)) + { + CLog::Log(LOGERROR, + "CRunningProcess::{}: Failed to parse command values for addon '{}' process", + __func__, m_addon->ID()); + m_startFailed = true; + m_startDone = true; + return; + } + + if (!m_launcher->Launch(argv_cstr, false)) + { + CLog::Log(LOGERROR, "CRunningProcess::{}: Failed to start addon '{}' process", __func__, + m_addon->ID()); + m_startFailed = true; + m_startDone = true; + return; + } + + m_startDone = true; + } + + /* + * Do below the addon call to Kodi requests where done by his main thread. + */ + while (!m_bStop) + { + if (!m_mainThread.ProcessOutside()) + { + break; + } + } +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/RunningProcess.h b/xbmc/addons/interface/RunningProcess.h new file mode 100644 index 0000000000000..03fdb3891d921 --- /dev/null +++ b/xbmc/addons/interface/RunningProcess.h @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "Interface.h" +#include "RunningThread.h" +#include "addons/Addon.h" +#include "launcher/ILauncher.h" +#include "processinfo/ProcessInfo.h" +#include "threads/SystemClock.h" +#include "threads/Thread.h" + +#include +#include +#include +#include +#include +#include + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CRunningThread; +class IInstanceHandler; + +class CRunningProcess : private CThread +{ +public: + CRunningProcess(const std::shared_ptr& addon, + const std::string& uuid, + bool directDll, + bool simulateExeViaSharedLib, + const KODI_ADDON_INSTANCE_INFO* firstInstance); + ~CRunningProcess(); + + bool Launch(const std::vector& argv, bool waitForExit); + bool Kill(); + ChildStatus ProcessActive(); + + bool FuncCall(int group, int func, const msgpack::unpacked& in, msgpack::sbuffer& out); + + bool SendMessage(int group, int func); + bool SendMessage(int group, int func, const msgpack::sbuffer& in); + bool SendMessage(int group, int func, const msgpack::sbuffer& in, msgpack::sbuffer& ret); + bool SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret); + + void RegisterClass(IInterfaceClassHdl* ifcClass); + void UnregisterClass(IInterfaceClassHdl* ifcClass); + + void AddAddonInstance(IInstanceHandler* handler); + void ReleaseAddonInstance(IInstanceHandler* handler); + + void InformStopReport(ChildStatus status); + + const std::string& GetUUID() const { return m_uuid; } + const std::shared_ptr& GetAddon() const { return m_addon; } + std::string GetAddonID() const { return m_addon->ID(); } + size_t UsedInstanceCount() const; + + CInterface& GetIfc() { return m_interface; } + + void SetEndtime(unsigned int milliseconds); + std::chrono::milliseconds EndTimeLeft() const; + bool UseEndTime() const; + bool IsInUse() const; + + ProcessInfoData GetProcessInfoData(); + + void* m_hdl; + +private: + void Process() override; + + bool MakeCommandLineValues(std::vector& argv_cstr); + + const std::shared_ptr m_addon; + const std::string m_uuid; + const bool m_directDll; + const bool m_simulateExeViaSharedLib; + const KODI_ADDON_INSTANCE_INFO* m_kodiInitInstancePtr; + int64_t m_threadIdentfier{0}; + CRunningThread m_mainThread; + CInterface m_interface; + const std::string m_cmdValue_exe; + const std::string m_cmdValue_direct_api; + + std::atomic_bool m_startDone{false}; + bool m_startFailed{false}; + std::vector m_argv; + ILauncher* m_launcher; + std::set> m_runningSubThreads; + std::unordered_set m_activeIfcClasses; + std::unordered_set m_activeAddonHandlers; + mutable std::mutex m_mutex; + mutable std::mutex m_classRegisterMutex; + std::chrono::milliseconds m_endMilliseconds; + mutable XbmcThreads::EndTime<> m_endTimer; + CProcessInfo* m_processInfo{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/RunningThread.cpp b/xbmc/addons/interface/RunningThread.cpp new file mode 100644 index 0000000000000..f0d5020e38388 --- /dev/null +++ b/xbmc/addons/interface/RunningThread.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "RunningThread.h" + +#include "RunningProcess.h" +#include "addons/addoninfo/AddonInfo.h" +#include "addons/kodi-dev-kit/src/shared/ShareProcessReceiver.h" +#include "addons/kodi-dev-kit/src/shared/ShareProcessTransmitter.h" +#include "utils/StringUtils.h" +#include "utils/log.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CRunningThread::CRunningThread(int64_t identifier, CRunningProcess* const process) + : m_mainThread(identifier == 0), + m_identifier(identifier), + m_id(StringUtils::Format("{}-ifc-{:05}", process->GetUUID().c_str(), m_identifier)), + m_process(process) +{ + m_shareProcessReceiver = new CShareProcessReceiver(m_id + "-chlsrv", m_mainThread); + m_shareProcessTransmitter = new CShareProcessTransmitter(m_id + "-srvchl", m_mainThread); +} + +CRunningThread::~CRunningThread() +{ + Destroy(); + delete m_shareProcessReceiver; + delete m_shareProcessTransmitter; +} + +bool CRunningThread::Create(bool useThread) +{ + if (!m_shareProcessTransmitter->Create(true)) + { + CLog::Log(LOGERROR, + "CRunningThread::{}: Failed to create shared process memory from Kodi to addon '{}' " + "(ERROR {})", + __func__, m_process->GetAddon()->ID(), m_shareProcessTransmitter->GetLastErrorText()); + return false; + } + + if (!m_shareProcessReceiver->Create(true, useThread)) + { + CLog::Log(LOGERROR, + "CRunningThread::{}: Failed to create shared process memory from addon to Kodi '{}' " + "(ERROR {})", + __func__, m_process->GetAddon()->ID(), m_shareProcessReceiver->GetLastErrorText()); + return false; + } + + m_shareProcessReceiver->RegisterReceiver(std::bind(&CRunningProcess::FuncCall, m_process, + std::placeholders::_1, std::placeholders::_2, + std::placeholders::_3, std::placeholders::_4)); + + return true; +} + +void CRunningThread::Destroy() +{ + m_shareProcessTransmitter->Destroy(); + m_shareProcessReceiver->Destroy(); +} + +bool CRunningThread::SendMessage(int group, int func) +{ + return m_shareProcessTransmitter->SendMessage(group, func); +} + +bool CRunningThread::SendMessage(int group, int func, const msgpack::sbuffer& in) +{ + return m_shareProcessTransmitter->SendMessage(group, func, in); +} + +bool CRunningThread::SendMessage(int group, + int func, + const msgpack::sbuffer& in, + msgpack::sbuffer& ret) +{ + return m_shareProcessTransmitter->SendMessage(group, func, in, ret); +} + +bool CRunningThread::SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret) +{ + return m_shareProcessTransmitter->SendMessageOnlyGetReturn(group, func, ret); +} + +bool CRunningThread::ProcessOutside() +{ + return m_shareProcessReceiver->ProcessOutside(); +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/RunningThread.h b/xbmc/addons/interface/RunningThread.h new file mode 100644 index 0000000000000..935c6fc7cce38 --- /dev/null +++ b/xbmc/addons/interface/RunningThread.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include +#include +#include +#include + +#include + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CRunningProcess; +class CShareProcessReceiver; +class CShareProcessTransmitter; + +class CRunningThread +{ +public: + CRunningThread(int64_t identifier, CRunningProcess* const process); + ~CRunningThread(); + + bool Create(bool useThread); + void Destroy(); + + bool SendMessage(int group, int func); + bool SendMessage(int group, int func, const msgpack::sbuffer& in); + bool SendMessage(int group, int func, const msgpack::sbuffer& in, msgpack::sbuffer& ret); + bool SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret); + + bool ProcessOutside(); + + int64_t GetThreadID() const { return m_identifier; } + const std::string& GetID() const { return m_id; } + +private: + const bool m_mainThread; + const int64_t m_identifier; + const std::string m_id; + CRunningProcess* const m_process; + + int64_t m_pid{-1}; + CShareProcessReceiver* m_shareProcessReceiver{nullptr}; + CShareProcessTransmitter* m_shareProcessTransmitter{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/CMakeLists.txt b/xbmc/addons/interface/api/CMakeLists.txt new file mode 100644 index 0000000000000..c1043a4fd7b8f --- /dev/null +++ b/xbmc/addons/interface/api/CMakeLists.txt @@ -0,0 +1,24 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + addon_base.cpp + audio_engine.cpp + filesystem.cpp + general.cpp + monitor.cpp + network.cpp +) + +set(HEADERS + addon_base.h + audio_engine.h + filesystem.h + general.h + monitor.h + network.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_api) +endif() diff --git a/xbmc/addons/interface/api/addon-instance/CMakeLists.txt b/xbmc/addons/interface/api/addon-instance/CMakeLists.txt new file mode 100644 index 0000000000000..493e36f8feda0 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/CMakeLists.txt @@ -0,0 +1,34 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + audiodecoder.cpp + audioencoder.cpp + game.cpp + imagedecoder.cpp + inputstream.cpp + peripheral.cpp + pvr.cpp + screensaver.cpp + vfs.cpp + videocodec.cpp + visualization.cpp +) + +set(HEADERS + audiodecoder.h + audioencoder.h + game.h + imagedecoder.h + inputstream.h + peripheral.h + pvr.h + screensaver.h + vfs.h + videocodec.h + visualization.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_api_addon-instance) +endif() diff --git a/xbmc/addons/interface/api/addon-instance/audiodecoder.cpp b/xbmc/addons/interface/api/addon-instance/audiodecoder.cpp new file mode 100644 index 0000000000000..2348815d97907 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/audiodecoder.cpp @@ -0,0 +1,273 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audiodecoder.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/audiodecoder.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_audiodecoder_h::InitDirect( + directFuncToKodi_addoninstance_audiodecoder_h* ifcToKodi, + directFuncToAddon_addoninstance_audiodecoder_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; +} + +bool CHdl_kodi_addoninstance_audiodecoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_audiodecoder_h) + return false; + + switch (func) + { + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_audiodecoder_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_audiodecoder_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_supports_file_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_SUPPORTS_FILE_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_supports_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_supports_file_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audiodecoder_supports_file_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + file /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_supports_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_supports_file_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_supports_file_v1(m_ifcToAddon->thisClassHdl, hdl, + file); +} + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_init_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + unsigned int filecache, + int* channels, + int* samplerate, + int* bitspersample, + int64_t* totaltime, + int* bitrate, + enum AudioEngineDataFormat* format, + enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_INIT_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file, unsigned int filecache, int* channels, int* samplerate, int* bitspersample, int64_t* totaltime, int* bitrate, enum AudioEngineDataFormat* format, enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]); + // Tuple in: typedef std::tuple> msgChild__IN_kodi_addon_audiodecoder_init_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple> msgChild_OUT_kodi_addon_audiodecoder_init_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + std::array ifc_info; + std::memcpy(ifc_info.data(), info, sizeof(enum AudioEngineChannel) * AUDIOENGINE_CH_MAX); + msgpack::pack( + in, + msgChild__IN_kodi_addon_audiodecoder_init_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, file /* CheckAPIUse_WAY_6b (0005) */, + filecache /* CheckAPIUse_WAY_9 (0005) */, *channels /* CheckAPIUse_WAY_13 (0005) */, + *samplerate /* CheckAPIUse_WAY_13 (0005) */, + *bitspersample /* CheckAPIUse_WAY_13 (0005) */, + *totaltime /* CheckAPIUse_WAY_13 (0005) */, *bitrate /* CheckAPIUse_WAY_13 (0005) */, + *format /* CheckAPIUse_WAY_14b (0005) */, ifc_info)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_init_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_init_v1 t = ident.get().as(); + *channels = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + *samplerate = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + *bitspersample = std::get<3>(t); /* CheckAPIUse_WAY_13 (0005) */ + *totaltime = std::get<4>(t); /* CheckAPIUse_WAY_13 (0005) */ + *bitrate = std::get<5>(t); /* CheckAPIUse_WAY_13 (0005) */ + *format = std::get<6>(t); /* CheckAPIUse_WAY_14b (0005) */ + std::memcpy(info, std::get<7>(t).data(), sizeof(enum AudioEngineChannel) * AUDIOENGINE_CH_MAX); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_init_v1( + m_ifcToAddon->thisClassHdl, hdl, file, filecache, channels, samplerate, bitspersample, + totaltime, bitrate, format, info); +} + +int CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_read_pcm_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, uint8_t* buffer, size_t size, size_t* actualsize) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_READ_PCM_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, uint8_t* buffer, size_t size, size_t* actualsize); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_read_pcm_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */, size_t> msgChild_OUT_kodi_addon_audiodecoder_read_pcm_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audiodecoder_read_pcm_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + size /* CheckAPIUse_WAY_9 (0005) */, + *actualsize /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_read_pcm_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_read_pcm_v1 t = ident.get().as(); + std::memcpy(buffer, std::get<1>(t).data(), + sizeof(uint8_t) * size); /* CheckAPIUse_WAY_10 (0005) */ + *actualsize = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_read_pcm_v1(m_ifcToAddon->thisClassHdl, hdl, buffer, + size, actualsize); +} + +int64_t CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_seek_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, int64_t time) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_SEEK_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, int64_t time); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_seek_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audiodecoder_seek_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + time /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_seek_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_seek_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_seek_v1(m_ifcToAddon->thisClassHdl, hdl, time); +} + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_read_tag_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_READ_TAG_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file, struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_read_tag_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_read_tag_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audiodecoder_read_tag_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + file /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_read_tag_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_read_tag_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(tag); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_read_tag_v1(m_ifcToAddon->thisClassHdl, hdl, file, + tag); +} + +int CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_track_count_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_TRACK_COUNT_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_track_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_track_count_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audiodecoder_track_count_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + file /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audiodecoder_h, + funcChild_kodi_addon_audiodecoder_track_count_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audiodecoder_track_count_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audiodecoder_track_count_v1(m_ifcToAddon->thisClassHdl, hdl, + file); +} + +// Callbacks from addon to Kodi +/* NOTE: unused (no callbacks here) */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/audiodecoder.h b/xbmc/addons/interface/api/addon-instance/audiodecoder.h new file mode 100644 index 0000000000000..b1725435f209b --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/audiodecoder.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audiodecoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_audiodecoder_h; +struct directFuncToKodi_addoninstance_audiodecoder_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_audiodecoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_audiodecoder_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_audiodecoder_h* ifcToKodi, + directFuncToAddon_addoninstance_audiodecoder_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + bool kodi_addon_audiodecoder_supports_file_v1(const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file); // Added with API 1 + + bool kodi_addon_audiodecoder_init_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + unsigned int filecache, + int* channels, + int* samplerate, + int* bitspersample, + int64_t* totaltime, + int* bitrate, + enum AudioEngineDataFormat* format, + enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]); // Added with API 1 + + int kodi_addon_audiodecoder_read_pcm_v1(const KODI_ADDON_AUDIODECODER_HDL hdl, + uint8_t* buffer, + size_t size, + size_t* actualsize); // Added with API 1 + + int64_t kodi_addon_audiodecoder_seek_v1(const KODI_ADDON_AUDIODECODER_HDL hdl, + int64_t time); // Added with API 1 + + bool kodi_addon_audiodecoder_read_tag_v1( + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag); // Added with API 1 + + int kodi_addon_audiodecoder_track_count_v1(const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + + directFuncToAddon_addoninstance_audiodecoder_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/audioencoder.cpp b/xbmc/addons/interface/api/addon-instance/audioencoder.cpp new file mode 100644 index 0000000000000..b39b730e00b9a --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/audioencoder.cpp @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audioencoder.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/audioencoder.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "cdrip/EncoderAddon.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_audioencoder_h::InitDirect( + directFuncToKodi_addoninstance_audioencoder_h* ifcToKodi, + directFuncToAddon_addoninstance_audioencoder_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_audioencoder_write_v1 = kodi_addon_audioencoder_write_v1; + ifcToKodi->kodi_addon_audioencoder_seek_v1 = kodi_addon_audioencoder_seek_v1; +} + +bool CHdl_kodi_addoninstance_audioencoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_audioencoder_h) + return false; + + switch (func) + { + case funcParent_kodi_addon_audioencoder_write_v1: + { + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_write(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const uint8_t* data, size_t len) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_addon_audioencoder_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_audioencoder_write_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_audioencoder_write_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::vector& data = std::get<1>(t); /* CheckAPIUse_WAY_11 (0001) */ + size_t len = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + ssize_t auto_gen_ret = kodi_addon_audioencoder_write_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, data.data() /* CheckAPIUse_WAY_11 (0001) */, + len /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_audioencoder_write_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_audioencoder_seek_v1: + { + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_seek(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, ssize_t pos, int whence) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_audioencoder_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_audioencoder_seek_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_audioencoder_seek_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + ssize_t pos = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int whence = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + ssize_t auto_gen_ret = kodi_addon_audioencoder_seek_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, pos /* CheckAPIUse_WAY_10 (0001) */, + whence /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_audioencoder_seek_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_audioencoder_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_audioencoder_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_AUDIOENCODER_HDL CHdl_kodi_addoninstance_audioencoder_h:: + kodi_addon_audioencoder_create_v1(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_AUDIOENCODER_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_create_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audioencoder_create_v1( + PtrValue(kodi_hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audioencoder_h, + funcChild_kodi_addon_audioencoder_create_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audioencoder_create_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audioencoder_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_destroy_v1( + KODI_ADDON_AUDIOENCODER_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_DESTROY_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_destroy_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_audioencoder_destroy_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_audioencoder_h, + funcChild_kodi_addon_audioencoder_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_audioencoder_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_start_v1( + KODI_ADDON_AUDIOENCODER_HDL hdl, const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_START_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl, const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_start_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audioencoder_start_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + tag /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audioencoder_h, + funcChild_kodi_addon_audioencoder_start_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audioencoder_start_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audioencoder_start_v1(m_ifcToAddon->thisClassHdl, hdl, tag); +} + +ssize_t CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_encode_v1( + KODI_ADDON_AUDIOENCODER_HDL hdl, const uint8_t* pbt_stream, size_t num_bytes_read) +{ + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_ENCODE_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl, const uint8_t* pbt_stream, size_t num_bytes_read); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_audioencoder_encode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_encode_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_audioencoder_encode_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + std::vector(pbt_stream, + pbt_stream + num_bytes_read) /* CheckAPIUse_WAY_11 (0005) */, + num_bytes_read /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audioencoder_h, + funcChild_kodi_addon_audioencoder_encode_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audioencoder_encode_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audioencoder_encode_v1(m_ifcToAddon->thisClassHdl, hdl, + pbt_stream, num_bytes_read); +} + +bool CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_finish_v1( + KODI_ADDON_AUDIOENCODER_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_FINISH_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_finish_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_finish_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_audioencoder_finish_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_audioencoder_h, + funcChild_kodi_addon_audioencoder_finish_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_audioencoder_finish_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_audioencoder_finish_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +// Callbacks from addon to Kodi + +ssize_t CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_write_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const uint8_t* data, size_t len) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::CDRIP::CEncoderAddon" with "ssize_t Write(const uint8_t* data, size_t len)" on "cdrip/EncoderAddon.h". + + KODI::CDRIP::CEncoderAddon* cb = static_cast(hdl); + return cb->Write(data, len); + /*---AUTO_GEN_PARSE---*/ +} + +ssize_t CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_seek_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, ssize_t pos, int whence) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::CDRIP::CEncoderAddon" with "ssize_t Seek(ssize_t pos, int whence)" on "cdrip/EncoderAddon.h". + + KODI::CDRIP::CEncoderAddon* cb = static_cast(hdl); + return cb->Seek(pos, whence); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/audioencoder.h b/xbmc/addons/interface/api/addon-instance/audioencoder.h new file mode 100644 index 0000000000000..95662146ca2ff --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/audioencoder.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audioencoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_audioencoder_h; +struct directFuncToKodi_addoninstance_audioencoder_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_audioencoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_audioencoder_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_audioencoder_h* ifcToKodi, + directFuncToAddon_addoninstance_audioencoder_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_AUDIOENCODER_HDL kodi_addon_audioencoder_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_audioencoder_destroy_v1(KODI_ADDON_AUDIOENCODER_HDL hdl); // Added with API 1 + + bool kodi_addon_audioencoder_start_v1( + KODI_ADDON_AUDIOENCODER_HDL hdl, + const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag); // Added with API 1 + + ssize_t kodi_addon_audioencoder_encode_v1(KODI_ADDON_AUDIOENCODER_HDL hdl, + const uint8_t* pbt_stream, + size_t num_bytes_read); // Added with API 1 + + bool kodi_addon_audioencoder_finish_v1(KODI_ADDON_AUDIOENCODER_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static ssize_t kodi_addon_audioencoder_write_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const uint8_t* data, + size_t len); // Added with API 1 + + static ssize_t kodi_addon_audioencoder_seek_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + ssize_t pos, + int whence); // Added with API 1 + + + directFuncToAddon_addoninstance_audioencoder_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/game.cpp b/xbmc/addons/interface/api/addon-instance/game.cpp new file mode 100644 index 0000000000000..c8d08c26489a5 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/game.cpp @@ -0,0 +1,447 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "game.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/game.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "games/addons/GameClient.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_game_h::InitDirect(directFuncToKodi_addoninstance_game_h* ifcToKodi, + directFuncToAddon_addoninstance_game_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_game_close_v1 = kodi_addon_game_close_v1; + ifcToKodi->kodi_addon_game_open_stream_v1 = kodi_addon_game_open_stream_v1; + ifcToKodi->kodi_addon_game_get_stream_buffer_v1 = kodi_addon_game_get_stream_buffer_v1; + ifcToKodi->kodi_addon_game_add_stream_data_v1 = kodi_addon_game_add_stream_data_v1; + ifcToKodi->kodi_addon_game_release_stream_buffer_v1 = kodi_addon_game_release_stream_buffer_v1; + ifcToKodi->kodi_addon_game_close_stream_v1 = kodi_addon_game_close_stream_v1; + ifcToKodi->kodi_addon_hw_get_proc_address_v1 = kodi_addon_hw_get_proc_address_v1; + ifcToKodi->kodi_addon_game_input_event_v1 = kodi_addon_game_input_event_v1; +} + +bool CHdl_kodi_addoninstance_game_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_game_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_game_h::{}: addon called with unknown function id '{}' on " + "group 'addoninstance_game_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_GAME_HDL CHdl_kodi_addoninstance_game_h::kodi_addon_game_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_GAME_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + + return m_ifcToAddon->kodi_addon_game_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_destroy_v1(KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_DESTROY_V1)(KODI_ADDON_GAME_HDL hdl); + + m_ifcToAddon->kodi_addon_game_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_game_v1( + const KODI_ADDON_GAME_HDL hdl, const char* url) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_GAME_V1)(const KODI_ADDON_GAME_HDL hdl, const char* url); + + return m_ifcToAddon->kodi_addon_game_load_game_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_game_special_v1( + const KODI_ADDON_GAME_HDL hdl, enum SPECIAL_GAME_TYPE type, const char** urls, size_t urlCount) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_GAME_SPECIAL_V1)(const KODI_ADDON_GAME_HDL hdl, enum SPECIAL_GAME_TYPE type, const char** urls, size_t urlCount); + + return m_ifcToAddon->kodi_addon_game_load_game_special_v1(m_ifcToAddon->thisClassHdl, hdl, type, + urls, urlCount); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_standalone_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_STANDALONE_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_load_standalone_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_unload_game_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_UNLOAD_GAME_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_unload_game_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_game_timing_v1( + const KODI_ADDON_GAME_HDL hdl, struct game_system_timing* timing_info) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_GAME_TIMING_V1)(const KODI_ADDON_GAME_HDL hdl, struct game_system_timing* timing_info); + + return m_ifcToAddon->kodi_addon_game_get_game_timing_v1(m_ifcToAddon->thisClassHdl, hdl, + timing_info); +} + +enum GAME_REGION CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_region_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_REGION(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_REGION_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_get_region_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_requires_game_loop_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_REQUIRES_GAME_LOOP_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_requires_game_loop_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_run_frame_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_RUN_FRAME_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_run_frame_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_reset_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_RESET_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_reset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_hw_context_reset_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HW_CONTEXT_RESET_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_hw_context_reset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_hw_context_destroy_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HW_CONTEXT_DESTROY_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_hw_context_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_has_feature_v1(const KODI_ADDON_GAME_HDL hdl, + const char* controller_id, + const char* feature_name) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HAS_FEATURE_V1)(const KODI_ADDON_GAME_HDL hdl, const char* controller_id, const char* feature_name); + + return m_ifcToAddon->kodi_addon_game_has_feature_v1(m_ifcToAddon->thisClassHdl, hdl, + controller_id, feature_name); +} + +struct game_input_topology* CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_topology_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef struct game_input_topology*(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_TOPOLOGY_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_get_topology_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_free_topology_v1( + const KODI_ADDON_GAME_HDL hdl, struct game_input_topology* topology) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_FREE_TOPOLOGY_V1)(const KODI_ADDON_GAME_HDL hdl, struct game_input_topology* topology); + + m_ifcToAddon->kodi_addon_game_free_topology_v1(m_ifcToAddon->thisClassHdl, hdl, topology); +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_set_controller_layouts_v1( + const KODI_ADDON_GAME_HDL hdl, + const struct game_controller_layout* controllers, + size_t controller_count) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SET_CONTROLLER_LAYOUTS_V1)(const KODI_ADDON_GAME_HDL hdl, const struct game_controller_layout* controllers, size_t controller_count); + + m_ifcToAddon->kodi_addon_game_set_controller_layouts_v1(m_ifcToAddon->thisClassHdl, hdl, + controllers, controller_count); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_enable_keyboard_v1( + const KODI_ADDON_GAME_HDL hdl, bool enable, const char* controller_id) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_ENABLE_KEYBOARD_V1)(const KODI_ADDON_GAME_HDL hdl, bool enable, const char* controller_id); + + return m_ifcToAddon->kodi_addon_game_enable_keyboard_v1(m_ifcToAddon->thisClassHdl, hdl, enable, + controller_id); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_enable_mouse_v1(const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_ENABLE_MOUSE_V1)(const KODI_ADDON_GAME_HDL hdl, bool enable, const char* controller_id); + + return m_ifcToAddon->kodi_addon_game_enable_mouse_v1(m_ifcToAddon->thisClassHdl, hdl, enable, + controller_id); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_connect_controller_v1( + const KODI_ADDON_GAME_HDL hdl, + bool connect, + const char* port_address, + const char* controller_id) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CONNECT_CONTROLLER_V1)(const KODI_ADDON_GAME_HDL hdl, bool connect, const char* port_address, const char* controller_id); + + return m_ifcToAddon->kodi_addon_game_connect_controller_v1(m_ifcToAddon->thisClassHdl, hdl, + connect, port_address, controller_id); +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_input_event_v1( + const KODI_ADDON_GAME_HDL hdl, const struct game_input_event* event) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_INPUT_EVENT_V1)(const KODI_ADDON_GAME_HDL hdl, const struct game_input_event* event); + + return m_ifcToAddon->kodi_addon_game_input_event_v1(m_ifcToAddon->thisClassHdl, hdl, event); +} + +size_t CHdl_kodi_addoninstance_game_h::kodi_addon_game_serialize_size_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef size_t(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SERIALIZE_SIZE_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_serialize_size_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_serialize_v1( + const KODI_ADDON_GAME_HDL hdl, uint8_t* data, size_t size) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SERIALIZE_V1)(const KODI_ADDON_GAME_HDL hdl, uint8_t* data, size_t size); + + return m_ifcToAddon->kodi_addon_game_serialize_v1(m_ifcToAddon->thisClassHdl, hdl, data, size); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_deserialize_v1( + const KODI_ADDON_GAME_HDL hdl, const uint8_t* data, size_t size) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_DESERIALIZE_V1)(const KODI_ADDON_GAME_HDL hdl, const uint8_t* data, size_t size); + + return m_ifcToAddon->kodi_addon_game_deserialize_v1(m_ifcToAddon->thisClassHdl, hdl, data, size); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_cheat_reset_v1( + const KODI_ADDON_GAME_HDL hdl) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CHEAT_RESET_V1)(const KODI_ADDON_GAME_HDL hdl); + + return m_ifcToAddon->kodi_addon_game_cheat_reset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_memory_v1( + const KODI_ADDON_GAME_HDL hdl, enum GAME_MEMORY type, uint8_t** data, size_t* size) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_MEMORY_V1)(const KODI_ADDON_GAME_HDL hdl, enum GAME_MEMORY type, uint8_t** data, size_t* size); + + return m_ifcToAddon->kodi_addon_game_get_memory_v1(m_ifcToAddon->thisClassHdl, hdl, type, data, + size); +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_set_cheat_v1( + const KODI_ADDON_GAME_HDL hdl, unsigned int index, bool enabled, const char* code) +{ + // Original API call: typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SET_CHEAT_V1)(const KODI_ADDON_GAME_HDL hdl, unsigned int index, bool enabled, const char* code); + + return m_ifcToAddon->kodi_addon_game_set_cheat_v1(m_ifcToAddon->thisClassHdl, hdl, index, enabled, + code); +} + +// Callbacks from addon to Kodi + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_close_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "void cb_close_game()" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + cb->cb_close_game(); + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GAME_STREAM_HANDLE CHdl_kodi_addoninstance_game_h::kodi_addon_game_open_stream_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct game_stream_properties* properties) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "KODI_GAME_STREAM_HANDLE cb_open_stream(const game_stream_properties* properties)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + return cb->cb_open_stream(properties); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_stream_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + unsigned int width, + unsigned int height, + struct game_stream_buffer* buffer) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "bool cb_get_stream_buffer(KODI_GAME_STREAM_HANDLE stream, unsigned int width, unsigned int height, game_stream_buffer* buffer)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + return cb->cb_get_stream_buffer(game_hdl, width, height, buffer); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_add_stream_data_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + const struct game_stream_packet* packet) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "void cb_add_stream_data(KODI_GAME_STREAM_HANDLE stream, const game_stream_packet* packet)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + cb->cb_add_stream_data(game_hdl, packet); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_release_stream_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + struct game_stream_buffer* buffer) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "void cb_release_stream_buffer(KODI_GAME_STREAM_HANDLE stream, game_stream_buffer* buffer)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + cb->cb_release_stream_buffer(game_hdl, buffer); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_close_stream_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_GAME_STREAM_HANDLE game_hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "void cb_close_stream(KODI_GAME_STREAM_HANDLE stream)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + cb->cb_close_stream(game_hdl); + /*---AUTO_GEN_PARSE---*/ +} + +game_proc_address_t CHdl_kodi_addoninstance_game_h::kodi_addon_hw_get_proc_address_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* symbol) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + return nullptr; +#warning Function "CHdl_kodi_addoninstance_game_h::kodi_addon_hw_get_proc_address" must be set by hand. Alternatively add /*---AUTO_GEN_PARSE---*/ on back of target function in header to find on scan. + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_input_event_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct game_input_event* event) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::GAME::CGameClient" with "bool cb_input_event(const game_input_event* event)" on "games/addons/GameClient.h". + + KODI::GAME::CGameClient* cb = static_cast(hdl); + return cb->cb_input_event(event); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/game.h b/xbmc/addons/interface/api/addon-instance/game.h new file mode 100644 index 0000000000000..7c65c931700c9 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/game.h @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/game.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_game_h; +struct directFuncToKodi_addoninstance_game_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_game_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_game_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_game_h* ifcToKodi, + directFuncToAddon_addoninstance_game_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_GAME_HDL kodi_addon_game_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_game_destroy_v1(KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_load_game_v1(const KODI_ADDON_GAME_HDL hdl, + const char* url); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_load_game_special_v1(const KODI_ADDON_GAME_HDL hdl, + enum SPECIAL_GAME_TYPE type, + const char** urls, + size_t urlCount); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_load_standalone_v1( + const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_unload_game_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_get_game_timing_v1( + const KODI_ADDON_GAME_HDL hdl, struct game_system_timing* timing_info); // Added with API 1 + + enum GAME_REGION kodi_addon_game_get_region_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + bool kodi_addon_game_requires_game_loop_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_run_frame_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_reset_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_hw_context_reset_v1( + const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_hw_context_destroy_v1( + const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + bool kodi_addon_game_has_feature_v1(const KODI_ADDON_GAME_HDL hdl, + const char* controller_id, + const char* feature_name); // Added with API 1 + + struct game_input_topology* kodi_addon_game_get_topology_v1( + const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + void kodi_addon_game_free_topology_v1(const KODI_ADDON_GAME_HDL hdl, + struct game_input_topology* topology); // Added with API 1 + + void kodi_addon_game_set_controller_layouts_v1(const KODI_ADDON_GAME_HDL hdl, + const struct game_controller_layout* controllers, + size_t controller_count); // Added with API 1 + + bool kodi_addon_game_enable_keyboard_v1(const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); // Added with API 1 + + bool kodi_addon_game_enable_mouse_v1(const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); // Added with API 1 + + bool kodi_addon_game_connect_controller_v1(const KODI_ADDON_GAME_HDL hdl, + bool connect, + const char* port_address, + const char* controller_id); // Added with API 1 + + bool kodi_addon_game_input_event_v1(const KODI_ADDON_GAME_HDL hdl, + const struct game_input_event* event); // Added with API 1 + + size_t kodi_addon_game_serialize_size_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_serialize_v1(const KODI_ADDON_GAME_HDL hdl, + uint8_t* data, + size_t size); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_deserialize_v1(const KODI_ADDON_GAME_HDL hdl, + const uint8_t* data, + size_t size); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_cheat_reset_v1(const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_get_memory_v1(const KODI_ADDON_GAME_HDL hdl, + enum GAME_MEMORY type, + uint8_t** data, + size_t* size); // Added with API 1 + + enum GAME_ERROR kodi_addon_game_set_cheat_v1(const KODI_ADDON_GAME_HDL hdl, + unsigned int index, + bool enabled, + const char* code); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_addon_game_close_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static KODI_GAME_STREAM_HANDLE kodi_addon_game_open_stream_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct game_stream_properties* properties); // Added with API 1 + + static bool kodi_addon_game_get_stream_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + unsigned int width, + unsigned int height, + struct game_stream_buffer* buffer); // Added with API 1 + + static void kodi_addon_game_add_stream_data_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + const struct game_stream_packet* packet); // Added with API 1 + + static void kodi_addon_game_release_stream_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + struct game_stream_buffer* buffer); // Added with API 1 + + static void kodi_addon_game_close_stream_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl); // Added with API 1 + + static game_proc_address_t kodi_addon_hw_get_proc_address_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* symbol); // Added with API 1 + + static bool kodi_addon_game_input_event_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct game_input_event* event); // Added with API 1 + + + directFuncToAddon_addoninstance_game_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/imagedecoder.cpp b/xbmc/addons/interface/api/addon-instance/imagedecoder.cpp new file mode 100644 index 0000000000000..f4717791268d9 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/imagedecoder.cpp @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "imagedecoder.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/imagedecoder.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "addons/ImageDecoder.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_imagedecoder_h::InitDirect( + directFuncToKodi_addoninstance_imagedecoder_h* ifcToKodi, + directFuncToAddon_addoninstance_imagedecoder_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_imagedecoder_h) + return false; + + switch (func) + { + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_imagedecoder_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_imagedecoder_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_supports_file_v1( + const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_SUPPORTS_FILE_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_supports_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_supports_file_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_imagedecoder_supports_file_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + file /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_imagedecoder_h, + funcChild_kodi_addon_imagedecoder_supports_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_imagedecoder_supports_file_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_imagedecoder_supports_file_v1(m_ifcToAddon->thisClassHdl, hdl, + file); +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_read_tag_v1( + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file, + struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_READ_TAG_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file, struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_read_tag_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_read_tag_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_imagedecoder_read_tag_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + file /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_imagedecoder_h, + funcChild_kodi_addon_imagedecoder_read_tag_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_imagedecoder_read_tag_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(info); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_imagedecoder_read_tag_v1(m_ifcToAddon->thisClassHdl, hdl, file, + info); +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_load_image_from_memory_v1( + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* mimetype, + const uint8_t* buffer, + size_t buf_size, + unsigned int* width, + unsigned int* height) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_LOAD_IMAGE_FROM_MEMORY_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* mimetype, const uint8_t* buffer, size_t buf_size, unsigned int* width, unsigned int* height); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int, unsigned int> msgChild__IN_kodi_addon_imagedecoder_load_image_from_memory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_load_image_from_memory_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, + msgChild__IN_kodi_addon_imagedecoder_load_image_from_memory_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, mimetype /* CheckAPIUse_WAY_6b (0005) */, + std::vector(buffer, buffer + buf_size) /* CheckAPIUse_WAY_11 (0005) */, + buf_size /* CheckAPIUse_WAY_9 (0005) */, *width /* CheckAPIUse_WAY_13 (0005) */, + *height /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_imagedecoder_h, + funcChild_kodi_addon_imagedecoder_load_image_from_memory_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_imagedecoder_load_image_from_memory_v1 t = + ident.get().as(); + *width = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + *height = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_imagedecoder_load_image_from_memory_v1( + m_ifcToAddon->thisClassHdl, hdl, mimetype, buffer, buf_size, width, height); +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_decode_v1( + const KODI_ADDON_IMAGEDECODER_HDL hdl, + uint8_t* pixels, + size_t pixels_size, + unsigned int width, + unsigned int height, + unsigned int pitch, + enum ADDON_IMG_FMT format) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_DECODE_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, uint8_t* pixels, size_t pixels_size, unsigned int width, unsigned int height, unsigned int pitch, enum ADDON_IMG_FMT format); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_decode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgChild_OUT_kodi_addon_imagedecoder_decode_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_imagedecoder_decode_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + pixels_size /* CheckAPIUse_WAY_9 (0005) */, width /* CheckAPIUse_WAY_9 (0005) */, + height /* CheckAPIUse_WAY_9 (0005) */, pitch /* CheckAPIUse_WAY_9 (0005) */, + format /* CheckAPIUse_WAY_14a (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_imagedecoder_h, + funcChild_kodi_addon_imagedecoder_decode_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_imagedecoder_decode_v1 t = ident.get().as(); + std::memcpy(pixels, std::get<1>(t).data(), + sizeof(uint8_t) * pixels_size); /* CheckAPIUse_WAY_10 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_imagedecoder_decode_v1(m_ifcToAddon->thisClassHdl, hdl, pixels, + pixels_size, width, height, pitch, format); +} + +// Callbacks from addon to Kodi +/* NOTE: unused (no callbacks here) */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/imagedecoder.h b/xbmc/addons/interface/api/addon-instance/imagedecoder.h new file mode 100644 index 0000000000000..a956224886f49 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/imagedecoder.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/imagedecoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_imagedecoder_h; +struct directFuncToKodi_addoninstance_imagedecoder_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_imagedecoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_imagedecoder_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_imagedecoder_h* ifcToKodi, + directFuncToAddon_addoninstance_imagedecoder_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + bool kodi_addon_imagedecoder_supports_file_v1(const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file); // Added with API 1 + + bool kodi_addon_imagedecoder_read_tag_v1( + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file, + struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info); // Added with API 1 + + bool kodi_addon_imagedecoder_load_image_from_memory_v1(const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* mimetype, + const uint8_t* buffer, + size_t buf_size, + unsigned int* width, + unsigned int* height); // Added with API 1 + + bool kodi_addon_imagedecoder_decode_v1(const KODI_ADDON_IMAGEDECODER_HDL hdl, + uint8_t* pixels, + size_t pixels_size, + unsigned int width, + unsigned int height, + unsigned int pitch, + enum ADDON_IMG_FMT format); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + + directFuncToAddon_addoninstance_imagedecoder_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/inputstream.cpp b/xbmc/addons/interface/api/addon-instance/inputstream.cpp new file mode 100644 index 0000000000000..92d417faac963 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/inputstream.cpp @@ -0,0 +1,404 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "inputstream.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/inputstream.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "cores/VideoPlayer/DVDInputStreams/InputStreamAddon.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_inputstream_h::InitDirect( + directFuncToKodi_addoninstance_inputstream_h* ifcToKodi, + directFuncToAddon_addoninstance_inputstream_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_inputstream_allocate_demux_packet_v1 = + kodi_addon_inputstream_allocate_demux_packet_v1; + ifcToKodi->kodi_addon_inputstream_allocate_encrypted_demux_packet_v1 = + kodi_addon_inputstream_allocate_encrypted_demux_packet_v1; + ifcToKodi->kodi_addon_inputstream_free_demux_packet_v1 = + kodi_addon_inputstream_free_demux_packet_v1; +} + +bool CHdl_kodi_addoninstance_inputstream_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_inputstream_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_inputstream_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_inputstream_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_INPUTSTREAM_HDL CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_INPUTSTREAM_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + + return m_ifcToAddon->kodi_addon_inputstream_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_destroy_v1( + KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DESTROY_V1)(KODI_ADDON_INPUTSTREAM_HDL hdl); + + m_ifcToAddon->kodi_addon_inputstream_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_open_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_PROPERTY* props) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_OPEN_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_PROPERTY* props); + + return m_ifcToAddon->kodi_addon_inputstream_open_v1(m_ifcToAddon->thisClassHdl, hdl, props); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_close_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_CLOSE_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + m_ifcToAddon->kodi_addon_inputstream_close_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +const char* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_path_list_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_PATH_LIST_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_get_path_list_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_capabilities_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_CAPABILITIES* capabilities) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CAPABILITIES_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_CAPABILITIES* capabilities); + + m_ifcToAddon->kodi_addon_inputstream_get_capabilities_v1(m_ifcToAddon->thisClassHdl, hdl, + capabilities); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_stream_ids_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_IDS* ids) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_IDS_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_IDS* ids); + + return m_ifcToAddon->kodi_addon_inputstream_get_stream_ids_v1(m_ifcToAddon->thisClassHdl, hdl, + ids); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + struct INPUTSTREAM_INFO* info, + KODI_OWN_HDL* demuxStream, + PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid, struct INPUTSTREAM_INFO* info, KODI_OWN_HDL* demuxStream, PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream); + + return m_ifcToAddon->kodi_addon_inputstream_get_stream_v1( + m_ifcToAddon->thisClassHdl, hdl, streamid, info, demuxStream, transfer_stream); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_enable_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid, bool enable) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_ENABLE_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid, bool enable); + + m_ifcToAddon->kodi_addon_inputstream_enable_stream_v1(m_ifcToAddon->thisClassHdl, hdl, streamid, + enable); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_open_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_OPEN_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid); + + return m_ifcToAddon->kodi_addon_inputstream_open_stream_v1(m_ifcToAddon->thisClassHdl, hdl, + streamid); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_reset_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_RESET_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + m_ifcToAddon->kodi_addon_inputstream_demux_reset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_abort_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_ABORT_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + m_ifcToAddon->kodi_addon_inputstream_demux_abort_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_flush_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_FLUSH_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + m_ifcToAddon->kodi_addon_inputstream_demux_flush_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +struct DEMUX_PACKET* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_read_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef struct DEMUX_PACKET*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_READ_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_demux_read_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_seek_time_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, double time, bool backwards, double* startpts) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SEEK_TIME_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, double time, bool backwards, double* startpts); + + return m_ifcToAddon->kodi_addon_inputstream_demux_seek_time_v1(m_ifcToAddon->thisClassHdl, hdl, + time, backwards, startpts); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_set_speed_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int speed) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SET_SPEED_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int speed); + + m_ifcToAddon->kodi_addon_inputstream_demux_set_speed_v1(m_ifcToAddon->thisClassHdl, hdl, speed); +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_set_video_resolution_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int width, int height) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SET_VIDEO_RESOLUTION_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int width, int height); + + m_ifcToAddon->kodi_addon_inputstream_set_video_resolution_v1(m_ifcToAddon->thisClassHdl, hdl, + width, height); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_total_time_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TOTAL_TIME_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_get_total_time_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_time_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TIME_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_get_time_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_times_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_TIMES* times) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TIMES_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_TIMES* times); + + return m_ifcToAddon->kodi_addon_inputstream_get_times_v1(m_ifcToAddon->thisClassHdl, hdl, times); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_pos_time_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ms) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_POS_TIME_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int ms); + + return m_ifcToAddon->kodi_addon_inputstream_pos_time_v1(m_ifcToAddon->thisClassHdl, hdl, ms); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_read_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, uint8_t* buffer, unsigned int bufferSize) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_READ_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, uint8_t* buffer, unsigned int bufferSize); + + return m_ifcToAddon->kodi_addon_inputstream_read_stream_v1(m_ifcToAddon->thisClassHdl, hdl, + buffer, bufferSize); +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_seek_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int64_t position, int whence) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SEEK_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int64_t position, int whence); + + return m_ifcToAddon->kodi_addon_inputstream_seek_stream_v1(m_ifcToAddon->thisClassHdl, hdl, + position, whence); +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_position_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_POSITION_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_position_stream_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_length_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_LENGTH_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_length_stream_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_is_real_time_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_IS_REAL_TIME_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_is_real_time_stream_v1(m_ifcToAddon->thisClassHdl, + hdl); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_get_chapter_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_count_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_COUNT_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_get_chapter_count_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +const char* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_name_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) +{ + // Original API call: typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_NAME_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + + return m_ifcToAddon->kodi_addon_inputstream_get_chapter_name_v1(m_ifcToAddon->thisClassHdl, hdl, + ch); +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_pos_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_POS_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + + return m_ifcToAddon->kodi_addon_inputstream_get_chapter_pos_v1(m_ifcToAddon->thisClassHdl, hdl, + ch); +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_seek_chapter_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SEEK_CHAPTER_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + + return m_ifcToAddon->kodi_addon_inputstream_seek_chapter_v1(m_ifcToAddon->thisClassHdl, hdl, ch); +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_block_size_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_BLOCK_SIZE_STREAM_V1)(const KODI_ADDON_INPUTSTREAM_HDL hdl); + + return m_ifcToAddon->kodi_addon_inputstream_block_size_stream_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +// Callbacks from addon to Kodi + +struct DEMUX_PACKET* CHdl_kodi_addoninstance_inputstream_h:: + kodi_addon_inputstream_allocate_demux_packet_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + int data_size) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "CInputStreamAddon" with "DEMUX_PACKET* cb_allocate_demux_packet(int iDataSize = 0)" on "cores/VideoPlayer/DVDInputStreams/InputStreamAddon.h". + + CInputStreamAddon* cb = static_cast(hdl); + return cb->cb_allocate_demux_packet(data_size); + /*---AUTO_GEN_PARSE---*/ +} + +struct DEMUX_PACKET* CHdl_kodi_addoninstance_inputstream_h:: + kodi_addon_inputstream_allocate_encrypted_demux_packet_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int data_size, + unsigned int encrypted_subsample_count) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "CInputStreamAddon" with "DEMUX_PACKET* cb_allocate_encrypted_demux_packet(unsigned int dataSize, unsigned int encryptedSubsampleCount)" on "cores/VideoPlayer/DVDInputStreams/InputStreamAddon.h". + + CInputStreamAddon* cb = static_cast(hdl); + return cb->cb_allocate_encrypted_demux_packet(data_size, encrypted_subsample_count); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_free_demux_packet_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct DEMUX_PACKET* packet) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "CInputStreamAddon" with "void cb_free_demux_packet(DEMUX_PACKET* pPacket)" on "cores/VideoPlayer/DVDInputStreams/InputStreamAddon.h". + + CInputStreamAddon* cb = static_cast(hdl); + cb->cb_free_demux_packet(packet); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/inputstream.h b/xbmc/addons/interface/api/addon-instance/inputstream.h new file mode 100644 index 0000000000000..7f3d04a3dfb95 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/inputstream.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_inputstream_h; +struct directFuncToKodi_addoninstance_inputstream_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_inputstream_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_inputstream_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_inputstream_h* ifcToKodi, + directFuncToAddon_addoninstance_inputstream_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_INPUTSTREAM_HDL kodi_addon_inputstream_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_inputstream_destroy_v1(KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + bool kodi_addon_inputstream_open_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_PROPERTY* props); // Added with API 1 + + void kodi_addon_inputstream_close_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + const char* kodi_addon_inputstream_get_path_list_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + void kodi_addon_inputstream_get_capabilities_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_CAPABILITIES* capabilities); // Added with API 1 + + bool kodi_addon_inputstream_get_stream_ids_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_IDS* ids); // Added with API 1 + + bool kodi_addon_inputstream_get_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + struct INPUTSTREAM_INFO* info, + KODI_OWN_HDL* demuxStream, + PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream); // Added with API 1 + + void kodi_addon_inputstream_enable_stream_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + bool enable); // Added with API 1 + + bool kodi_addon_inputstream_open_stream_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid); // Added with API 1 + + void kodi_addon_inputstream_demux_reset_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + void kodi_addon_inputstream_demux_abort_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + void kodi_addon_inputstream_demux_flush_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + struct DEMUX_PACKET* kodi_addon_inputstream_demux_read_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + bool kodi_addon_inputstream_demux_seek_time_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + double time, + bool backwards, + double* startpts); // Added with API 1 + + void kodi_addon_inputstream_demux_set_speed_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int speed); // Added with API 1 + + void kodi_addon_inputstream_set_video_resolution_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int width, + int height); // Added with API 1 + + int kodi_addon_inputstream_get_total_time_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + int kodi_addon_inputstream_get_time_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + bool kodi_addon_inputstream_get_times_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_TIMES* times); // Added with API 1 + + bool kodi_addon_inputstream_pos_time_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ms); // Added with API 1 + + int kodi_addon_inputstream_read_stream_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + uint8_t* buffer, + unsigned int bufferSize); // Added with API 1 + + int64_t kodi_addon_inputstream_seek_stream_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int64_t position, + int whence); // Added with API 1 + + int64_t kodi_addon_inputstream_position_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + int64_t kodi_addon_inputstream_length_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + bool kodi_addon_inputstream_is_real_time_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + int kodi_addon_inputstream_get_chapter_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + int kodi_addon_inputstream_get_chapter_count_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + const char* kodi_addon_inputstream_get_chapter_name_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ch); // Added with API 1 + + int64_t kodi_addon_inputstream_get_chapter_pos_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ch); // Added with API 1 + + bool kodi_addon_inputstream_seek_chapter_v1(const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ch); // Added with API 1 + + int kodi_addon_inputstream_block_size_stream_v1( + const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static struct DEMUX_PACKET* kodi_addon_inputstream_allocate_demux_packet_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, int data_size); // Added with API 1 + + static struct DEMUX_PACKET* kodi_addon_inputstream_allocate_encrypted_demux_packet_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int data_size, + unsigned int encrypted_subsample_count); // Added with API 1 + + static void kodi_addon_inputstream_free_demux_packet_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct DEMUX_PACKET* packet); // Added with API 1 + + + directFuncToAddon_addoninstance_inputstream_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/peripheral.cpp b/xbmc/addons/interface/api/addon-instance/peripheral.cpp new file mode 100644 index 0000000000000..99f659c3d67e6 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/peripheral.cpp @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "peripheral.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/peripheral.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "peripherals/addons/PeripheralAddon.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_peripheral_h::InitDirect( + directFuncToKodi_addoninstance_peripheral_h* ifcToKodi, + directFuncToAddon_addoninstance_peripheral_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_peripheral_trigger_scan_v1 = kodi_addon_peripheral_trigger_scan_v1; + ifcToKodi->kodi_addon_peripheral_refresh_button_maps_v1 = + kodi_addon_peripheral_refresh_button_maps_v1; + ifcToKodi->kodi_addon_peripheral_feature_count_v1 = kodi_addon_peripheral_feature_count_v1; + ifcToKodi->kodi_addon_peripheral_feature_type_v1 = kodi_addon_peripheral_feature_type_v1; +} + +bool CHdl_kodi_addoninstance_peripheral_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_peripheral_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_peripheral_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_peripheral_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_PERIPHERAL_HDL CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_PERIPHERAL_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + + return m_ifcToAddon->kodi_addon_peripheral_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_destroy_v1( + KODI_ADDON_PERIPHERAL_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_DESTROY_V1)(KODI_ADDON_PERIPHERAL_HDL hdl); + + m_ifcToAddon->kodi_addon_peripheral_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_capabilities_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_CAPABILITIES* capabilities) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_CAPABILITIES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_CAPABILITIES* capabilities); + + m_ifcToAddon->kodi_addon_peripheral_get_capabilities_v1(m_ifcToAddon->thisClassHdl, hdl, + capabilities); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_perform_device_scan_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO** scan_results, + size_t* peripheral_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_PERFORM_DEVICE_SCAN_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_INFO** scan_results, size_t* peripheral_count); + + return m_ifcToAddon->kodi_addon_peripheral_perform_device_scan_v1(m_ifcToAddon->thisClassHdl, hdl, + scan_results, peripheral_count); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_scan_results_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_INFO* scan_results, size_t peripheral_count) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_SCAN_RESULTS_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_INFO* scan_results, size_t peripheral_count); + + m_ifcToAddon->kodi_addon_peripheral_free_scan_results_v1(m_ifcToAddon->thisClassHdl, hdl, + scan_results, peripheral_count); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_events_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT** events, size_t* event_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_EVENTS_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT** events, size_t* event_count); + + return m_ifcToAddon->kodi_addon_peripheral_get_events_v1(m_ifcToAddon->thisClassHdl, hdl, events, + event_count); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_events_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT* events, size_t event_count) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_EVENTS_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT* events, size_t event_count); + + m_ifcToAddon->kodi_addon_peripheral_free_events_v1(m_ifcToAddon->thisClassHdl, hdl, events, + event_count); +} + +bool CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_send_event_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct PERIPHERAL_EVENT* event) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SEND_EVENT_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct PERIPHERAL_EVENT* event); + + return m_ifcToAddon->kodi_addon_peripheral_send_event_v1(m_ifcToAddon->thisClassHdl, hdl, event); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_get_joystick_info_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index, + struct JOYSTICK_INFO* info) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_JOYSTICK_INFO_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index, struct JOYSTICK_INFO* info); + + return m_ifcToAddon->kodi_addon_peripheral_get_joystick_info_v1(m_ifcToAddon->thisClassHdl, hdl, + index, info); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_joystick_info_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_INFO* info) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_JOYSTICK_INFO_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_INFO* info); + + m_ifcToAddon->kodi_addon_peripheral_free_joystick_info_v1(m_ifcToAddon->thisClassHdl, hdl, info); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_features_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + struct JOYSTICK_FEATURE** features, + size_t* feature_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_FEATURES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, const char* controller_id, struct JOYSTICK_FEATURE** features, size_t* feature_count); + + return m_ifcToAddon->kodi_addon_peripheral_get_features_v1( + m_ifcToAddon->thisClassHdl, hdl, joystick, controller_id, features, feature_count); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_features_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_FEATURE* features, size_t feature_count) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_FEATURES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_FEATURE* features, size_t feature_count); + + m_ifcToAddon->kodi_addon_peripheral_free_features_v1(m_ifcToAddon->thisClassHdl, hdl, features, + feature_count); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_map_features_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + const struct JOYSTICK_FEATURE* features, + size_t feature_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_MAP_FEATURES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, const char* controller_id, const struct JOYSTICK_FEATURE* features, size_t feature_count); + + return m_ifcToAddon->kodi_addon_peripheral_map_features_v1( + m_ifcToAddon->thisClassHdl, hdl, joystick, controller_id, features, feature_count); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_get_ignored_primitives_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + struct JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_IGNORED_PRIMITIVES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, struct JOYSTICK_DRIVER_PRIMITIVE** primitives, size_t* primitive_count); + + return m_ifcToAddon->kodi_addon_peripheral_get_ignored_primitives_v1( + m_ifcToAddon->thisClassHdl, hdl, joystick, primitives, primitive_count); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_primitives_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_PRIMITIVES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_DRIVER_PRIMITIVE* primitives, size_t primitive_count); + + m_ifcToAddon->kodi_addon_peripheral_free_primitives_v1(m_ifcToAddon->thisClassHdl, hdl, + primitives, primitive_count); +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_set_ignored_primitives_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) +{ + // Original API call: typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SET_IGNORED_PRIMITIVES_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, size_t primitive_count); + + return m_ifcToAddon->kodi_addon_peripheral_set_ignored_primitives_v1( + m_ifcToAddon->thisClassHdl, hdl, joystick, primitives, primitive_count); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_save_button_map_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SAVE_BUTTON_MAP_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); + + m_ifcToAddon->kodi_addon_peripheral_save_button_map_v1(m_ifcToAddon->thisClassHdl, hdl, joystick); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_revert_button_map_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_REVERT_BUTTON_MAP_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); + + m_ifcToAddon->kodi_addon_peripheral_revert_button_map_v1(m_ifcToAddon->thisClassHdl, hdl, + joystick); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_reset_button_map_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, const char* controller_id) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_RESET_BUTTON_MAP_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick, const char* controller_id); + + m_ifcToAddon->kodi_addon_peripheral_reset_button_map_v1(m_ifcToAddon->thisClassHdl, hdl, joystick, + controller_id); +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_power_off_joystick_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_POWER_OFF_JOYSTICK_V1)(KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index); + + m_ifcToAddon->kodi_addon_peripheral_power_off_joystick_v1(m_ifcToAddon->thisClassHdl, hdl, index); +} + +// Callbacks from addon to Kodi + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_trigger_scan_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PERIPHERALS::CPeripheralAddon" with "void TriggerDeviceScan()" on "peripherals/addons/PeripheralAddon.h". + + PERIPHERALS::CPeripheralAddon* cb = static_cast(hdl); + cb->TriggerDeviceScan(); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_refresh_button_maps_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* device_name, + const char* controller_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PERIPHERALS::CPeripheralAddon" with "void RefreshButtonMaps(const std::string& strDeviceName, const std::string& controllerId = "")" on "peripherals/addons/PeripheralAddon.h". + + PERIPHERALS::CPeripheralAddon* cb = static_cast(hdl); + cb->RefreshButtonMaps(device_name, controller_id); + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_feature_count_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* controller_id, + enum JOYSTICK_FEATURE_TYPE type) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PERIPHERALS::CPeripheralAddon" with "unsigned int FeatureCount(const std::string& controllerId, JOYSTICK_FEATURE_TYPE type) const" on "peripherals/addons/PeripheralAddon.h". + + PERIPHERALS::CPeripheralAddon* cb = static_cast(hdl); + return cb->FeatureCount(controller_id, type); + /*---AUTO_GEN_PARSE---*/ +} + +enum JOYSTICK_FEATURE_TYPE CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_feature_type_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* controller_id, + const char* feature_name) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return JOYSTICK_FEATURE_TYPE_UNKNOWN; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PERIPHERALS::CPeripheralAddon" with "JOYSTICK_FEATURE_TYPE FeatureType(const std::string& controllerId, const std::string& featureName) const" on "peripherals/addons/PeripheralAddon.h". + + PERIPHERALS::CPeripheralAddon* cb = static_cast(hdl); + return cb->FeatureType(controller_id, feature_name); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/peripheral.h b/xbmc/addons/interface/api/addon-instance/peripheral.h new file mode 100644 index 0000000000000..6e4d60211e87e --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/peripheral.h @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/peripheral.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_peripheral_h; +struct directFuncToKodi_addoninstance_peripheral_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_peripheral_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_peripheral_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_peripheral_h* ifcToKodi, + directFuncToAddon_addoninstance_peripheral_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_PERIPHERAL_HDL kodi_addon_peripheral_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_peripheral_destroy_v1(KODI_ADDON_PERIPHERAL_HDL hdl); // Added with API 1 + + void kodi_addon_peripheral_get_capabilities_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_CAPABILITIES* capabilities); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_perform_device_scan_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO** scan_results, + size_t* peripheral_count); // Added with API 1 + + void kodi_addon_peripheral_free_scan_results_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO* scan_results, + size_t peripheral_count); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_get_events_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT** events, + size_t* event_count); // Added with API 1 + + void kodi_addon_peripheral_free_events_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT* events, + size_t event_count); // Added with API 1 + + bool kodi_addon_peripheral_send_event_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct PERIPHERAL_EVENT* event); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_get_joystick_info_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index, + struct JOYSTICK_INFO* info); // Added with API 1 + + void kodi_addon_peripheral_free_joystick_info_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_INFO* info); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_get_features_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + struct JOYSTICK_FEATURE** features, + size_t* feature_count); // Added with API 1 + + void kodi_addon_peripheral_free_features_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_FEATURE* features, + size_t feature_count); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_map_features_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + const struct JOYSTICK_FEATURE* features, + size_t feature_count); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_get_ignored_primitives_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + struct JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count); // Added with API 1 + + void kodi_addon_peripheral_free_primitives_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); // Added with API 1 + + enum PERIPHERAL_ERROR kodi_addon_peripheral_set_ignored_primitives_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); // Added with API 1 + + void kodi_addon_peripheral_save_button_map_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); // Added with API 1 + + void kodi_addon_peripheral_revert_button_map_v1( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); // Added with API 1 + + void kodi_addon_peripheral_reset_button_map_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id); // Added with API 1 + + void kodi_addon_peripheral_power_off_joystick_v1(KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_addon_peripheral_trigger_scan_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_peripheral_refresh_button_maps_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* device_name, + const char* controller_id); // Added with API 1 + + static unsigned int kodi_addon_peripheral_feature_count_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* controller_id, + enum JOYSTICK_FEATURE_TYPE type); // Added with API 1 + + static enum JOYSTICK_FEATURE_TYPE kodi_addon_peripheral_feature_type_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* controller_id, + const char* feature_name); // Added with API 1 + + + directFuncToAddon_addoninstance_peripheral_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/pvr.cpp b/xbmc/addons/interface/api/addon-instance/pvr.cpp new file mode 100644 index 0000000000000..5743b77391e6d --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/pvr.cpp @@ -0,0 +1,2356 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "pvr.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/pvr.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "pvr/addons/PVRClient.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_pvr_h::InitDirect(directFuncToKodi_addoninstance_pvr_h* ifcToKodi, + directFuncToAddon_addoninstance_pvr_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_pvr_get_epg_max_future_days_v1 = kodi_addon_pvr_get_epg_max_future_days_v1; + ifcToKodi->kodi_addon_pvr_get_epg_max_past_days_v1 = kodi_addon_pvr_get_epg_max_past_days_v1; + ifcToKodi->kodi_addon_pvr_add_menu_hook_v1 = kodi_addon_pvr_add_menu_hook_v1; + ifcToKodi->kodi_addon_pvr_recording_notification_v1 = kodi_addon_pvr_recording_notification_v1; + ifcToKodi->kodi_addon_pvr_connection_state_change_v1 = kodi_addon_pvr_connection_state_change_v1; + ifcToKodi->kodi_addon_pvr_epg_event_state_change_v1 = kodi_addon_pvr_epg_event_state_change_v1; + ifcToKodi->kodi_addon_pvr_transfer_channel_entry_v1 = kodi_addon_pvr_transfer_channel_entry_v1; + ifcToKodi->kodi_addon_pvr_transfer_provider_entry_v1 = kodi_addon_pvr_transfer_provider_entry_v1; + ifcToKodi->kodi_addon_pvr_transfer_channel_group_v1 = kodi_addon_pvr_transfer_channel_group_v1; + ifcToKodi->kodi_addon_pvr_transfer_channel_group_member_v1 = + kodi_addon_pvr_transfer_channel_group_member_v1; + ifcToKodi->kodi_addon_pvr_transfer_epg_entry_v1 = kodi_addon_pvr_transfer_epg_entry_v1; + ifcToKodi->kodi_addon_pvr_transfer_recording_entry_v1 = + kodi_addon_pvr_transfer_recording_entry_v1; + ifcToKodi->kodi_addon_pvr_transfer_timer_entry_v1 = kodi_addon_pvr_transfer_timer_entry_v1; + ifcToKodi->kodi_addon_pvr_trigger_channel_update_v1 = kodi_addon_pvr_trigger_channel_update_v1; + ifcToKodi->kodi_addon_pvr_trigger_providers_update_v1 = + kodi_addon_pvr_trigger_providers_update_v1; + ifcToKodi->kodi_addon_pvr_trigger_channel_groups_update_v1 = + kodi_addon_pvr_trigger_channel_groups_update_v1; + ifcToKodi->kodi_addon_pvr_trigger_epg_update_v1 = kodi_addon_pvr_trigger_epg_update_v1; + ifcToKodi->kodi_addon_pvr_trigger_recording_update_v1 = + kodi_addon_pvr_trigger_recording_update_v1; + ifcToKodi->kodi_addon_pvr_trigger_timer_update_v1 = kodi_addon_pvr_trigger_timer_update_v1; +} + +bool CHdl_kodi_addoninstance_pvr_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_pvr_h) + return false; + + switch (func) + { + case funcParent_kodi_addon_pvr_get_epg_max_future_days_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_future_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_get_epg_max_future_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_get_epg_max_future_days_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_get_epg_max_future_days_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_addon_pvr_get_epg_max_future_days_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_pvr_get_epg_max_future_days_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_pvr_get_epg_max_past_days_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_past_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_get_epg_max_past_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_get_epg_max_past_days_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_get_epg_max_past_days_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_addon_pvr_get_epg_max_past_days_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_pvr_get_epg_max_past_days_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_pvr_add_menu_hook_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_add_menu_hook(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct PVR_MENUHOOK* hook) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_add_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_add_menu_hook_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_add_menu_hook_v1 t = in.get().as(); + PVR_MENUHOOK hook; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<1>(t).SetCStructure(&hook); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_add_menu_hook_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + &hook /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_recording_notification_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_recording_notification(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* name, const char* fileName, bool on) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_recording_notification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_recording_notification_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_recording_notification_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& name = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& fileName = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool on = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_addon_pvr_recording_notification_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, name.c_str() /* CheckAPIUse_WAY_6a (0001) */, + fileName.c_str() /* CheckAPIUse_WAY_6a (0001) */, on /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_connection_state_change_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_connection_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* strConnectionString, enum PVR_CONNECTION_STATE newState, const char* strMessage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_connection_state_change_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_connection_state_change_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_connection_state_change_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& strConnectionString = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + enum PVR_CONNECTION_STATE newState = std::get<2>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& strMessage = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_addon_pvr_connection_state_change_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, + strConnectionString.c_str() /* CheckAPIUse_WAY_6a (0001) */, + newState /* CheckAPIUse_WAY_14a (0001) */, + strMessage.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_epg_event_state_change_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_epg_event_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct EPG_TAG* tag, enum EPG_EVENT_STATE newState) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_epg_event_state_change_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_epg_event_state_change_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_epg_event_state_change_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + struct EPG_TAG tag; /* CheckAPIUse_WAY_15 (0001-3) */ + enum EPG_EVENT_STATE newState = std::get<1>(t); /* CheckAPIUse_WAY_14a (0001) */ + kodi_addon_pvr_epg_event_state_change_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + &tag /* CheckAPIUse_WAY_15 (0001-4) */, + newState /* CheckAPIUse_WAY_14a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_pvr_epg_event_state_change_v1( + &tag /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_addon_pvr_transfer_channel_entry_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL* chan) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_entry_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_channel_entry_v1 t = in.get().as(); + PVR_CHANNEL chan; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&chan); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_channel_entry_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &chan /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_provider_entry_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_provider_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_PROVIDER* chanProvider) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_provider_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_provider_entry_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_provider_entry_v1 t = in.get().as(); + PVR_PROVIDER chanProvider; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&chanProvider); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_provider_entry_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &chanProvider /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_channel_group_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP* group) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_group_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_group_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_channel_group_v1 t = in.get().as(); + PVR_CHANNEL_GROUP group; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&group); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_channel_group_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &group /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_channel_group_member_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group_member( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP_MEMBER* member) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_group_member_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_group_member_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_channel_group_member_v1 t = in.get().as(); + PVR_CHANNEL_GROUP_MEMBER member; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&member); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_channel_group_member_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &member /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_epg_entry_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_epg_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct EPG_TAG* epgentry) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_epg_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_epg_entry_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_epg_entry_v1 t = in.get().as(); + EPG_TAG epgentry; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&epgentry); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_epg_entry_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &epgentry /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_recording_entry_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_recording_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_RECORDING* recording) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_recording_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_recording_entry_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_recording_entry_v1 t = in.get().as(); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_recording_entry_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &recording /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_transfer_timer_entry_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_timer_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_TIMER* timer) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_timer_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_timer_entry_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_transfer_timer_entry_v1 t = in.get().as(); + PVR_TIMER timer; /* CheckAPIUse_WAY_16 (0001) */ + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::get<2>(t).SetCStructure(&timer); /* CheckAPIUse_WAY_16 (0001) */ + kodi_addon_pvr_transfer_timer_entry_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + handle /* CheckAPIUse_WAY_12 (0001) */, + &timer /* CheckAPIUse_WAY_16 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_channel_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_channel_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_channel_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_channel_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_pvr_trigger_channel_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_providers_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_providers_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_providers_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_providers_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_providers_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_pvr_trigger_providers_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_channel_groups_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_groups_update( KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_channel_groups_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_channel_groups_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_channel_groups_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_pvr_trigger_channel_groups_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_epg_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_epg_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, unsigned int iChannelUid) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_epg_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_epg_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_epg_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int iChannelUid = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_addon_pvr_trigger_epg_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + iChannelUid /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_recording_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_recording_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_recording_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_recording_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_recording_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_pvr_trigger_recording_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_addon_pvr_trigger_timer_update_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_timer_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_timer_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_timer_update_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_pvr_trigger_timer_update_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_pvr_trigger_timer_update_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_pvr_h::{}: addon called with unknown function id '{}' on " + "group 'addoninstance_pvr_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_capabilities_v1( + KODI_ADDON_PVR_HDL hdl, struct PVR_ADDON_CAPABILITIES* capabilities) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CAPABILITIES_V1)(KODI_ADDON_PVR_HDL hdl, struct PVR_ADDON_CAPABILITIES* capabilities); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_capabilities_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_capabilities_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_capabilities_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_capabilities_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_capabilities_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(capabilities); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_capabilities_v1(m_ifcToAddon->thisClassHdl, hdl, + capabilities); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_name_v1( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_NAME_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_name_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_name_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_backend_name_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + mem_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_backend_name_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_backend_name_v1 t = ident.get().as(); + strncpy(str, std::get<1>(t).c_str(), mem_size); /* CheckAPIUse_WAY_8 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_backend_name_v1(m_ifcToAddon->thisClassHdl, hdl, str, + mem_size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_version_v1( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_VERSION_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_version_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_version_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_backend_version_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + mem_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_backend_version_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_backend_version_v1 t = ident.get().as(); + strncpy(str, std::get<1>(t).c_str(), mem_size); /* CheckAPIUse_WAY_8 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_backend_version_v1(m_ifcToAddon->thisClassHdl, hdl, str, + mem_size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_hostname_v1( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_HOSTNAME_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_hostname_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_hostname_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_backend_hostname_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + mem_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_backend_hostname_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_backend_hostname_v1 t = ident.get().as(); + strncpy(str, std::get<1>(t).c_str(), mem_size); /* CheckAPIUse_WAY_8 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_backend_hostname_v1(m_ifcToAddon->thisClassHdl, hdl, str, + mem_size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_connection_string_v1( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CONNECTION_STRING_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_connection_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_connection_string_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_connection_string_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + mem_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_connection_string_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_connection_string_v1 t = ident.get().as(); + strncpy(str, std::get<1>(t).c_str(), mem_size); /* CheckAPIUse_WAY_8 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_connection_string_v1(m_ifcToAddon->thisClassHdl, hdl, str, + mem_size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_drive_space_v1( + KODI_ADDON_PVR_HDL hdl, uint64_t* total, uint64_t* used) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DRIVE_SPACE_V1)(KODI_ADDON_PVR_HDL hdl, uint64_t* total, uint64_t* used); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_drive_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_drive_space_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_drive_space_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + *total /* CheckAPIUse_WAY_13 (0005) */, + *used /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_drive_space_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_drive_space_v1 t = ident.get().as(); + *total = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + *used = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_drive_space_v1(m_ifcToAddon->thisClassHdl, hdl, total, + used); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_settings_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_SETTINGS_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_settings_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_settings_menu_hook_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_call_settings_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + menuhook /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_call_settings_menu_hook_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_call_settings_menu_hook_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_call_settings_menu_hook_v1(m_ifcToAddon->thisClassHdl, hdl, + menuhook); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channels_amount_v1( + KODI_ADDON_PVR_HDL hdl, int* amount) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channels_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channels_amount_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channels_amount_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + *amount /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channels_amount_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channels_amount_v1 t = ident.get().as(); + *amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channels_amount_v1(m_ifcToAddon->thisClassHdl, hdl, + amount); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channels_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channels_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channels_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channels_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */, + radio /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channels_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channels_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channels_v1(m_ifcToAddon->thisClassHdl, hdl, handle, + radio); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_stream_properties_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channel_stream_properties_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */, + *properties_count /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channel_stream_properties_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channel_stream_properties_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(properties); /* CheckAPIUse_WAY_15 (0005-1) */ + *properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channel_stream_properties_v1( + m_ifcToAddon->thisClassHdl, hdl, channel, properties, properties_count); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_signal_status_v1( + KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_SIGNAL_STATUS* signal_status) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_SIGNAL_STATUS_V1)(KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_SIGNAL_STATUS* signal_status); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_signal_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_signal_status_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_signal_status_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel_uid /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_signal_status_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_signal_status_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(signal_status); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_signal_status_v1(m_ifcToAddon->thisClassHdl, hdl, + channel_uid, signal_status); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_descramble_info_v1( + KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_DESCRAMBLE_INFO* descramble_info) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DESCRAMBLE_INFO_V1)(KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_DESCRAMBLE_INFO* descramble_info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_descramble_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_descramble_info_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_descramble_info_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel_uid /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_descramble_info_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_descramble_info_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(descramble_info); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_descramble_info_v1(m_ifcToAddon->thisClassHdl, hdl, + channel_uid, descramble_info); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_providers_amount_v1( + KODI_ADDON_PVR_HDL hdl, int* amount) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_providers_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_providers_amount_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_providers_amount_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + *amount /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_providers_amount_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_providers_amount_v1 t = ident.get().as(); + *amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_providers_amount_v1(m_ifcToAddon->thisClassHdl, hdl, + amount); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_providers_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_providers_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_providers_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_providers_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_providers_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_providers_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_providers_v1(m_ifcToAddon->thisClassHdl, hdl, handle); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_groups_amount_v1( + KODI_ADDON_PVR_HDL hdl, int* amount) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_groups_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_groups_amount_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channel_groups_amount_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + *amount /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channel_groups_amount_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channel_groups_amount_v1 t = ident.get().as(); + *amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channel_groups_amount_v1(m_ifcToAddon->thisClassHdl, hdl, + amount); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_groups_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_groups_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_groups_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channel_groups_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */, + radio /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channel_groups_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channel_groups_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channel_groups_v1(m_ifcToAddon->thisClassHdl, hdl, handle, + radio); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_group_members_v1( + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUP_MEMBERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP* group); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_group_members_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_group_members_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_channel_group_members_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */, + group /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_channel_group_members_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_channel_group_members_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_channel_group_members_v1(m_ifcToAddon->thisClassHdl, hdl, + handle, group); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_channel_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_channel_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_delete_channel_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_delete_channel_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_delete_channel_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_delete_channel_v1(m_ifcToAddon->thisClassHdl, hdl, channel); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_rename_channel_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_rename_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_rename_channel_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_rename_channel_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_rename_channel_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_rename_channel_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_rename_channel_v1(m_ifcToAddon->thisClassHdl, hdl, channel); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_settings_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SETTINGS_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_settings_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_settings_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_open_dialog_channel_settings_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_open_dialog_channel_settings_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_open_dialog_channel_settings_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_open_dialog_channel_settings_v1(m_ifcToAddon->thisClassHdl, + hdl, channel); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_add_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_ADD_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_add_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_add_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_open_dialog_channel_add_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_open_dialog_channel_add_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_open_dialog_channel_add_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_open_dialog_channel_add_v1(m_ifcToAddon->thisClassHdl, hdl, + channel); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_scan_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SCAN_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_scan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_scan_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_open_dialog_channel_scan_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_open_dialog_channel_scan_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_open_dialog_channel_scan_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_open_dialog_channel_scan_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_channel_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_CHANNEL* channel) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_CHANNEL_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_channel_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_channel_menu_hook_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_call_channel_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + menuhook /* CheckAPIUse_WAY_16 (0005) */, + channel /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_call_channel_menu_hook_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_call_channel_menu_hook_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_call_channel_menu_hook_v1(m_ifcToAddon->thisClassHdl, hdl, + menuhook, channel); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_for_channel_v1( + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + int channel_uid, + time_t start, + time_t end) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_FOR_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, int channel_uid, time_t start, time_t end); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_epg_for_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_epg_for_channel_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_pvr_get_epg_for_channel_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */, + channel_uid /* CheckAPIUse_WAY_9 (0005) */, + start /* CheckAPIUse_WAY_9 (0005) */, end /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_epg_for_channel_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_epg_for_channel_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_epg_for_channel_v1(m_ifcToAddon->thisClassHdl, hdl, + handle, channel_uid, start, end); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_is_epg_tag_recordable_v1( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_recordable) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_RECORDABLE_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_recordable); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_is_epg_tag_recordable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_is_epg_tag_recordable_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_is_epg_tag_recordable_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + tag /* CheckAPIUse_WAY_16 (0005) */, + *is_recordable /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_is_epg_tag_recordable_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_is_epg_tag_recordable_v1 t = ident.get().as(); + *is_recordable = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_is_epg_tag_recordable_v1(m_ifcToAddon->thisClassHdl, hdl, tag, + is_recordable); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_is_epg_tag_playable_v1( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_playable) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_PLAYABLE_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_playable); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_is_epg_tag_playable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_is_epg_tag_playable_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_is_epg_tag_playable_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + tag /* CheckAPIUse_WAY_16 (0005) */, + *is_playable /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_is_epg_tag_playable_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_is_epg_tag_playable_v1 t = ident.get().as(); + *is_playable = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_is_epg_tag_playable_v1(m_ifcToAddon->thisClassHdl, hdl, tag, + is_playable); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_tag_edl_v1( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_EDL_ENTRY edl[], size_t* size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_EDL_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_EDL_ENTRY edl[], size_t* size); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_epg_tag_edl_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_epg_tag_edl_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + std::vector ifc_edl(*size); /* CheckAPIUse_WAY_18 (0005) */ + for (size_t i = 0; i < *size; ++i) + { + ifc_edl[i] = IFC_PVR_EDL_ENTRY(&edl[i]); /* CheckAPIUse_WAY_18 (0005) */ + } + msgpack::pack( + in, msgChild__IN_kodi_addon_pvr_get_epg_tag_edl_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, tag /* CheckAPIUse_WAY_16 (0005) */, + ifc_edl /* CheckAPIUse_WAY_18 (0005) */, *size /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_epg_tag_edl_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_epg_tag_edl_v1 t = ident.get().as(); + std::vector& ifc_out_edl = std::get<1>(t); /* CheckAPIUse_WAY_18 (0005) */ + *size = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + for (size_t i = 0; i < *size; ++i) + { + ifc_out_edl[i].SetCStructure(&edl[i]); + } + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_epg_tag_edl_v1(m_ifcToAddon->thisClassHdl, hdl, tag, edl, + size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_tag_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_epg_tag_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_epg_tag_stream_properties_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_epg_tag_stream_properties_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + tag /* CheckAPIUse_WAY_16 (0005) */, + *properties_count /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_epg_tag_stream_properties_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_epg_tag_stream_properties_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(properties); /* CheckAPIUse_WAY_15 (0005-1) */ + *properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_epg_tag_stream_properties_v1( + m_ifcToAddon->thisClassHdl, hdl, tag, properties, properties_count); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_epg_max_past_days_v1( + KODI_ADDON_PVR_HDL hdl, int past_days) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_PAST_DAYS_V1)(KODI_ADDON_PVR_HDL hdl, int past_days); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_epg_max_past_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_epg_max_past_days_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_set_epg_max_past_days_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + past_days /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_set_epg_max_past_days_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_set_epg_max_past_days_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_set_epg_max_past_days_v1(m_ifcToAddon->thisClassHdl, hdl, + past_days); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_epg_max_future_days_v1( + KODI_ADDON_PVR_HDL hdl, int future_days) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_FUTURE_DAYS_V1)(KODI_ADDON_PVR_HDL hdl, int future_days); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_epg_max_future_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_epg_max_future_days_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_set_epg_max_future_days_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + future_days /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_set_epg_max_future_days_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_set_epg_max_future_days_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_set_epg_max_future_days_v1(m_ifcToAddon->thisClassHdl, hdl, + future_days); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_epg_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct EPG_TAG* tag) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_EPG_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct EPG_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_epg_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_epg_menu_hook_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_call_epg_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + menuhook /* CheckAPIUse_WAY_16 (0005) */, + tag /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_call_epg_menu_hook_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_call_epg_menu_hook_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_call_epg_menu_hook_v1(m_ifcToAddon->thisClassHdl, hdl, + menuhook, tag); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recordings_amount_v1( + KODI_ADDON_PVR_HDL hdl, bool deleted, int* amount) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, bool deleted, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recordings_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recordings_amount_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recordings_amount_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + deleted /* CheckAPIUse_WAY_9 (0005) */, + *amount /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recordings_amount_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recordings_amount_v1 t = ident.get().as(); + *amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recordings_amount_v1(m_ifcToAddon->thisClassHdl, hdl, + deleted, amount); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recordings_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool deleted) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool deleted); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recordings_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recordings_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recordings_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */, + deleted /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recordings_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recordings_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recordings_v1(m_ifcToAddon->thisClassHdl, hdl, handle, + deleted); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_recording_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_delete_recording_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_delete_recording_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_delete_recording_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_delete_recording_v1(m_ifcToAddon->thisClassHdl, hdl, + recording); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_undelete_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UNDELETE_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_undelete_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_undelete_recording_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_undelete_recording_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_undelete_recording_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_undelete_recording_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_undelete_recording_v1(m_ifcToAddon->thisClassHdl, hdl, + recording); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_all_recordings_from_trash_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_ALL_RECORDINGS_FROM_TRASH_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_all_recordings_from_trash_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_all_recordings_from_trash_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_delete_all_recordings_from_trash_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_delete_all_recordings_from_trash_v1, in, + out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_delete_all_recordings_from_trash_v1 t = + ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_delete_all_recordings_from_trash_v1( + m_ifcToAddon->thisClassHdl, hdl); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_rename_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_rename_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_rename_recording_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_rename_recording_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_rename_recording_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_rename_recording_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_rename_recording_v1(m_ifcToAddon->thisClassHdl, hdl, + recording); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_lifetime_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LIFETIME_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_lifetime_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_lifetime_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_set_recording_lifetime_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_set_recording_lifetime_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_set_recording_lifetime_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_set_recording_lifetime_v1(m_ifcToAddon->thisClassHdl, hdl, + recording); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_play_count_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int count) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_PLAY_COUNT_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_play_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_play_count_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_set_recording_play_count_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + count /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_set_recording_play_count_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_set_recording_play_count_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_set_recording_play_count_v1(m_ifcToAddon->thisClassHdl, hdl, + recording, count); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_last_played_position_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int last_played_position) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LAST_PLAYED_POSITION_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int last_played_position); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_last_played_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_last_played_position_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_set_recording_last_played_position_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + last_played_position /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_set_recording_last_played_position_v1, in, + out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_set_recording_last_played_position_v1 t = + ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_set_recording_last_played_position_v1( + m_ifcToAddon->thisClassHdl, hdl, recording, last_played_position); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_last_played_position_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int* last_played_position) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_LAST_PLAYED_POSITION_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int* last_played_position); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_last_played_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_last_played_position_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recording_last_played_position_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + *last_played_position /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recording_last_played_position_v1, in, + out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recording_last_played_position_v1 t = + ident.get().as(); + *last_played_position = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recording_last_played_position_v1( + m_ifcToAddon->thisClassHdl, hdl, recording, last_played_position); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_edl_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_EDL_ENTRY edl[], + size_t* size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_EDL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, struct PVR_EDL_ENTRY edl[], size_t* size); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_recording_edl_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_recording_edl_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + std::vector ifc_edl(*size); /* CheckAPIUse_WAY_18 (0005) */ + for (size_t i = 0; i < *size; ++i) + { + ifc_edl[i] = IFC_PVR_EDL_ENTRY(&edl[i]); /* CheckAPIUse_WAY_18 (0005) */ + } + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recording_edl_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + ifc_edl /* CheckAPIUse_WAY_18 (0005) */, + *size /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recording_edl_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recording_edl_v1 t = ident.get().as(); + std::vector& ifc_out_edl = std::get<1>(t); /* CheckAPIUse_WAY_18 (0005) */ + *size = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + for (size_t i = 0; i < *size; ++i) + { + ifc_out_edl[i].SetCStructure(&edl[i]); + } + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recording_edl_v1(m_ifcToAddon->thisClassHdl, hdl, + recording, edl, size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_size_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int64_t* size) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_SIZE_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int64_t* size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_size_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recording_size_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + *size /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recording_size_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recording_size_v1 t = ident.get().as(); + *size = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recording_size_v1(m_ifcToAddon->thisClassHdl, hdl, + recording, size); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_stream_properties_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_recording_stream_properties_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */, + *properties_count /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_recording_stream_properties_v1, in, + out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_recording_stream_properties_v1 t = + ident.get().as(); + std::get<1>(t).SetCStructure(properties); /* CheckAPIUse_WAY_15 (0005-1) */ + *properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_recording_stream_properties_v1( + m_ifcToAddon->thisClassHdl, hdl, recording, properties, properties_count); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_recording_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_RECORDING* recording) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_RECORDING_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_recording_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_recording_menu_hook_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_call_recording_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + menuhook /* CheckAPIUse_WAY_16 (0005) */, + recording /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_call_recording_menu_hook_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_call_recording_menu_hook_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_call_recording_menu_hook_v1(m_ifcToAddon->thisClassHdl, hdl, + menuhook, recording); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timer_types_v1( + KODI_ADDON_PVR_HDL hdl, struct PVR_TIMER_TYPE types[], size_t* types_count) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMER_TYPES_V1)(KODI_ADDON_PVR_HDL hdl, struct PVR_TIMER_TYPE types[], size_t* types_count); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_timer_types_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_timer_types_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + std::vector ifc_types(*types_count); /* CheckAPIUse_WAY_18 (0005) */ + for (size_t i = 0; i < *types_count; ++i) + { + ifc_types[i] = IFC_PVR_TIMER_TYPE(&types[i]); /* CheckAPIUse_WAY_18 (0005) */ + } + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_timer_types_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + ifc_types /* CheckAPIUse_WAY_18 (0005) */, + *types_count /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_timer_types_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_timer_types_v1 t = ident.get().as(); + std::vector& ifc_out_types = std::get<1>(t); /* CheckAPIUse_WAY_18 (0005) */ + *types_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + for (size_t i = 0; i < *types_count; ++i) + { + ifc_out_types[i].SetCStructure(&types[i]); + } + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_timer_types_v1(m_ifcToAddon->thisClassHdl, hdl, types, + types_count); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timers_amount_v1( + KODI_ADDON_PVR_HDL hdl, int* amount) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_timers_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_timers_amount_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_timers_amount_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + *amount /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_timers_amount_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_timers_amount_v1 t = ident.get().as(); + *amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_timers_amount_v1(m_ifcToAddon->thisClassHdl, hdl, amount); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timers_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_timers_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_timers_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_get_timers_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_get_timers_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_get_timers_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_get_timers_v1(m_ifcToAddon->thisClassHdl, hdl, handle); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_add_timer_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ADD_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_add_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_add_timer_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_pvr_add_timer_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + timer /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_add_timer_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_add_timer_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_add_timer_v1(m_ifcToAddon->thisClassHdl, hdl, timer); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_timer_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer, bool force_delete) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer, bool force_delete); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_timer_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_delete_timer_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + timer /* CheckAPIUse_WAY_16 (0005) */, + force_delete /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_delete_timer_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_delete_timer_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_delete_timer_v1(m_ifcToAddon->thisClassHdl, hdl, timer, + force_delete); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_update_timer_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UPDATE_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_update_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_update_timer_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_update_timer_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + timer /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_update_timer_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_update_timer_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_update_timer_v1(m_ifcToAddon->thisClassHdl, hdl, timer); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_timer_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_TIMER* timer) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_TIMER_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_timer_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_timer_menu_hook_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_call_timer_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + menuhook /* CheckAPIUse_WAY_16 (0005) */, + timer /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_call_timer_menu_hook_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_call_timer_menu_hook_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_call_timer_menu_hook_v1(m_ifcToAddon->thisClassHdl, hdl, + menuhook, timer); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_system_sleep_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_SLEEP_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_system_sleep_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_system_sleep_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_on_system_sleep_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_on_system_sleep_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_on_system_sleep_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_on_system_sleep_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_system_wake_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_WAKE_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_system_wake_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_system_wake_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_on_system_wake_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_on_system_wake_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_on_system_wake_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_on_system_wake_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_power_saving_activated_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_ACTIVATED_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_power_saving_activated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_power_saving_activated_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_on_power_saving_activated_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_on_power_saving_activated_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_on_power_saving_activated_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_on_power_saving_activated_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_power_saving_deactivated_v1( + KODI_ADDON_PVR_HDL hdl) +{ + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_DEACTIVATED_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_power_saving_deactivated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_power_saving_deactivated_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_pvr_on_power_saving_deactivated_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_pvr_h, + funcChild_kodi_addon_pvr_on_power_saving_deactivated_v1, in, out)) + return PVR_ERROR_NO_ERROR; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_pvr_on_power_saving_deactivated_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_pvr_on_power_saving_deactivated_v1(m_ifcToAddon->thisClassHdl, + hdl); +} + +// Callbacks from addon to Kodi + +int CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_max_future_days_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "int cb_get_epg_max_future_days()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + return cb->cb_get_epg_max_future_days(); + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_max_past_days_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "int cb_get_epg_max_past_days()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + return cb->cb_get_epg_max_past_days(); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_add_menu_hook_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct PVR_MENUHOOK* hook) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_add_menu_hook(const PVR_MENUHOOK* hook)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_add_menu_hook(hook); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_recording_notification_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* name, + const char* fileName, + bool on) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_recording_notification(const char* strName, const char* strFileName, bool bOnOff)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_recording_notification(name, fileName, on); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_connection_state_change_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* strConnectionString, + enum PVR_CONNECTION_STATE newState, + const char* strMessage) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_connection_state_change(const char* strConnectionString, PVR_CONNECTION_STATE newState, const char* strMessage)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_connection_state_change(strConnectionString, newState, strMessage); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_epg_event_state_change_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct EPG_TAG* tag, + enum EPG_EVENT_STATE newState) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_epg_event_state_change(EPG_TAG* tag, EPG_EVENT_STATE newState)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_epg_event_state_change(tag, newState); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_channel_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL* chan) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_channel_entry(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_CHANNEL* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_channel_entry(handle, chan); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_provider_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_PROVIDER* chanProvider) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_provider_entry(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_PROVIDER* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_provider_entry(handle, chanProvider); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_channel_group_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_channel_group(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_CHANNEL_GROUP* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_channel_group(handle, group); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_channel_group_member_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP_MEMBER* member) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_channel_group_member(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_CHANNEL_GROUP_MEMBER* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_channel_group_member(handle, member); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_epg_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct EPG_TAG* epgentry) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_epg_entry(const KODI_ADDON_PVR_TRANSFER_HDL handle, const EPG_TAG* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_epg_entry(handle, epgentry); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_recording_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_RECORDING* recording) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_recording_entry(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_RECORDING* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_recording_entry(handle, recording); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_transfer_timer_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_TIMER* timer) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_transfer_timer_entry(const KODI_ADDON_PVR_TRANSFER_HDL handle, const PVR_TIMER* entry)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_transfer_timer_entry(handle, timer); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_channel_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_trigger_channel_update()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_trigger_channel_update(); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_providers_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + +#warning Function "CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_providers_update" must be set by hand. Alternatively add /*---AUTO_GEN_PARSE---*/ on back of target function in header to find on scan. + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_channel_groups_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_trigger_channel_groups_update()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_trigger_channel_groups_update(); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_epg_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, unsigned int iChannelUid) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_trigger_epg_update(unsigned int iChannelUid)" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_trigger_epg_update(iChannelUid); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_recording_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_trigger_recording_update()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_trigger_recording_update(); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_trigger_timer_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "PVR::CPVRClient" with "void cb_trigger_timer_update()" on "pvr/addons/PVRClient.h". + + PVR::CPVRClient* cb = static_cast(hdl); + cb->cb_trigger_timer_update(); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/pvr.h b/xbmc/addons/interface/api/addon-instance/pvr.h new file mode 100644 index 0000000000000..06fdbf2c93abc --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/pvr.h @@ -0,0 +1,372 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_pvr_h; +struct directFuncToKodi_addoninstance_pvr_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_pvr_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_pvr_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_pvr_h* ifcToKodi, + directFuncToAddon_addoninstance_pvr_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + enum PVR_ERROR kodi_addon_pvr_get_capabilities_v1( + KODI_ADDON_PVR_HDL hdl, struct PVR_ADDON_CAPABILITIES* capabilities); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_backend_name_v1(KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_backend_version_v1(KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_backend_hostname_v1(KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_connection_string_v1(KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_drive_space_v1(KODI_ADDON_PVR_HDL hdl, + uint64_t* total, + uint64_t* used); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_call_settings_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channels_amount_v1(KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channels_v1(KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channel_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_signal_status_v1( + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_SIGNAL_STATUS* signal_status); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_descramble_info_v1( + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_DESCRAMBLE_INFO* descramble_info); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_providers_amount_v1(KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_providers_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channel_groups_amount_v1(KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channel_groups_v1(KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_channel_group_members_v1( + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_delete_channel_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_rename_channel_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_settings_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_add_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_scan_v1( + KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_call_channel_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_CHANNEL* channel); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_epg_for_channel_v1(KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + int channel_uid, + time_t start, + time_t end); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_is_epg_tag_recordable_v1(KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_recordable); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_is_epg_tag_playable_v1(KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_playable); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_epg_tag_edl_v1(KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_EDL_ENTRY edl[], + size_t* size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_epg_tag_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_set_epg_max_past_days_v1(KODI_ADDON_PVR_HDL hdl, + int past_days); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_set_epg_max_future_days_v1(KODI_ADDON_PVR_HDL hdl, + int future_days); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_call_epg_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct EPG_TAG* tag); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recordings_amount_v1(KODI_ADDON_PVR_HDL hdl, + bool deleted, + int* amount); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recordings_v1(KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool deleted); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_delete_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_undelete_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_delete_all_recordings_from_trash_v1( + KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_rename_recording_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_set_recording_lifetime_v1( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_set_recording_play_count_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int count); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_set_recording_last_played_position_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int last_played_position); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recording_last_played_position_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int* last_played_position); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recording_edl_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_EDL_ENTRY edl[], + size_t* size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recording_size_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int64_t* size); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_recording_stream_properties_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_call_recording_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_RECORDING* recording); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_timer_types_v1(KODI_ADDON_PVR_HDL hdl, + struct PVR_TIMER_TYPE types[], + size_t* types_count); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_timers_amount_v1(KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_get_timers_v1( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_add_timer_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_delete_timer_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer, + bool force_delete); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_update_timer_v1(KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_call_timer_menu_hook_v1( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_TIMER* timer); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_on_system_sleep_v1(KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_on_system_wake_v1(KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_on_power_saving_activated_v1( + KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + enum PVR_ERROR kodi_addon_pvr_on_power_saving_deactivated_v1( + KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static int kodi_addon_pvr_get_epg_max_future_days_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static int kodi_addon_pvr_get_epg_max_past_days_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_pvr_add_menu_hook_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct PVR_MENUHOOK* hook); // Added with API 1 + + static void kodi_addon_pvr_recording_notification_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* name, + const char* fileName, + bool on); // Added with API 1 + + static void kodi_addon_pvr_connection_state_change_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* strConnectionString, + enum PVR_CONNECTION_STATE newState, + const char* strMessage); // Added with API 1 + + static void kodi_addon_pvr_epg_event_state_change_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct EPG_TAG* tag, + enum EPG_EVENT_STATE newState); // Added with API 1 + + static void kodi_addon_pvr_transfer_channel_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL* chan); // Added with API 1 + + static void kodi_addon_pvr_transfer_provider_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_PROVIDER* chanProvider); // Added with API 1 + + static void kodi_addon_pvr_transfer_channel_group_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group); // Added with API 1 + + static void kodi_addon_pvr_transfer_channel_group_member_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP_MEMBER* member); // Added with API 1 + + static void kodi_addon_pvr_transfer_epg_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct EPG_TAG* epgentry); // Added with API 1 + + static void kodi_addon_pvr_transfer_recording_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_RECORDING* recording); // Added with API 1 + + static void kodi_addon_pvr_transfer_timer_entry_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_TIMER* timer); // Added with API 1 + + static void kodi_addon_pvr_trigger_channel_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_pvr_trigger_providers_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_pvr_trigger_channel_groups_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_pvr_trigger_epg_update_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int iChannelUid); // Added with API 1 + + static void kodi_addon_pvr_trigger_recording_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static void kodi_addon_pvr_trigger_timer_update_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + + directFuncToAddon_addoninstance_pvr_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/screensaver.cpp b/xbmc/addons/interface/api/addon-instance/screensaver.cpp new file mode 100644 index 0000000000000..3c825f7b21a08 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/screensaver.cpp @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "screensaver.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/screensaver.h" + +// Kodi +#include "addons/ScreenSaver.h" +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_screensaver_h::InitDirect( + directFuncToKodi_addoninstance_screensaver_h* ifcToKodi, + directFuncToAddon_addoninstance_screensaver_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_screensaver_get_properties_v1 = kodi_addon_screensaver_get_properties_v1; +} + +bool CHdl_kodi_addoninstance_screensaver_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_screensaver_h) + return false; + + switch (func) + { + case funcParent_kodi_addon_screensaver_get_properties_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_screensaver_get_properties( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_screensaver_get_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_screensaver_get_properties_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_screensaver_get_properties_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + struct KODI_ADDON_SCREENSAVER_PROPS props; /* CheckAPIUse_WAY_15 (0001-3) */ + kodi_addon_screensaver_get_properties_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + &props /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_screensaver_get_properties_v1( + &props /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_screensaver_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_screensaver_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +bool CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_start_v1( + KODI_ADDON_SCREENSAVER_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_START_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_start_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_screensaver_start_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_screensaver_h, + funcChild_kodi_addon_screensaver_start_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_screensaver_start_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_screensaver_start_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_stop_v1( + KODI_ADDON_SCREENSAVER_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_STOP_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_stop_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_stop_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_screensaver_stop_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_screensaver_h, + funcChild_kodi_addon_screensaver_stop_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_screensaver_stop_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_render_v1( + KODI_ADDON_SCREENSAVER_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_RENDER_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_render_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_render_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_screensaver_render_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_screensaver_h, + funcChild_kodi_addon_screensaver_render_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_screensaver_render_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +// Callbacks from addon to Kodi + +void CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_get_properties_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct KODI_ADDON_SCREENSAVER_PROPS* props) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::CScreenSaver" with "void GetProperties(struct KODI_ADDON_SCREENSAVER_PROPS* props)" on "addons/ScreenSaver.h". + + KODI::ADDONS::CScreenSaver* cb = static_cast(hdl); + cb->GetProperties(props); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/screensaver.h b/xbmc/addons/interface/api/addon-instance/screensaver.h new file mode 100644 index 0000000000000..fee1a346b111f --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/screensaver.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_screensaver_h; +struct directFuncToKodi_addoninstance_screensaver_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_screensaver_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_screensaver_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_screensaver_h* ifcToKodi, + directFuncToAddon_addoninstance_screensaver_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + bool kodi_addon_screensaver_start_v1(KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 + + void kodi_addon_screensaver_stop_v1(KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 + + void kodi_addon_screensaver_render_v1(KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_addon_screensaver_get_properties_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct KODI_ADDON_SCREENSAVER_PROPS* props); // Added with API 1 + + + directFuncToAddon_addoninstance_screensaver_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/vfs.cpp b/xbmc/addons/interface/api/addon-instance/vfs.cpp new file mode 100644 index 0000000000000..a8bab79da0beb --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/vfs.cpp @@ -0,0 +1,996 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "vfs.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/vfs.h" + +// Kodi +#include "addons/VFSEntry.h" +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_vfs_h::InitDirect(directFuncToKodi_addoninstance_vfs_h* ifcToKodi, + directFuncToAddon_addoninstance_vfs_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1 = + kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1; + ifcToKodi->kodi_addon_vfs_get_dir_cb__set_error_dialog_v1 = + kodi_addon_vfs_get_dir_cb__set_error_dialog_v1; + ifcToKodi->kodi_addon_vfs_get_dir_cb__require_authentication_v1 = + kodi_addon_vfs_get_dir_cb__require_authentication_v1; +} + +bool CHdl_kodi_addoninstance_vfs_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_vfs_h) + return false; + + switch (func) + { + case funcParent_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_vfs_get_dir_cb__get_keyboard_input( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* heading, char** input, bool hidden_input) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_CTX_CB_HDL ctx_cb_hdl = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* input = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool hidden_input = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, ctx_cb_hdl /* CheckAPIUse_WAY_12 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, &input /* CheckAPIUse_WAY_7 (0001) */, + hidden_input /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + input ? input : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (input) /* CheckAPIUse_WAY_7 (0001) */ + free(input); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__set_error_dialog( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* heading, const char* line1, const char* line2, const char* line3) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_CTX_CB_HDL ctx_cb_hdl = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line1 = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line2 = std::get<4>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line3 = std::get<5>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_addon_vfs_get_dir_cb__set_error_dialog_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, ctx_cb_hdl /* CheckAPIUse_WAY_12 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line1.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line2.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line3.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_addon_vfs_get_dir_cb__require_authentication_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__require_authentication( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__require_authentication_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__require_authentication_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_vfs_get_dir_cb__require_authentication_v1 t = + in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_CTX_CB_HDL ctx_cb_hdl = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& url = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_addon_vfs_get_dir_cb__require_authentication_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, ctx_cb_hdl /* CheckAPIUse_WAY_12 (0001) */, + url.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_vfs_h::{}: addon called with unknown function id '{}' on " + "group 'addoninstance_vfs_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_VFS_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_VFS_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_create_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_create_v1( + PtrValue(kodi_hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, funcChild_kodi_addon_vfs_create_v1, + in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_create_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_destroy_v1(const KODI_ADDON_VFS_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DESTROY_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_destroy_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_destroy_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_vfs_h, funcChild_kodi_addon_vfs_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_vfs_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +KODI_VFS_FILE_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_open_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_open_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_file_open_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_open_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_open_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_open_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +KODI_VFS_FILE_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_open_for_write_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, bool overwrite) +{ + // Original API call: typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_FOR_WRITE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, bool overwrite); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_open_for_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_open_for_write_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_open_for_write_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */, + overwrite /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_open_for_write_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_open_for_write_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_open_for_write_v1(m_ifcToAddon->thisClassHdl, hdl, url, + overwrite); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_close_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_CLOSE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_close_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_close_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_close_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_close_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_close_v1(m_ifcToAddon->thisClassHdl, hdl, context); +} + +ssize_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_read_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t buf_size) +{ + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_READ_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint8_t* buffer, size_t buf_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_read_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgChild_OUT_kodi_addon_vfs_file_read_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_read_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + buf_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_read_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_read_v1 t = ident.get().as(); + std::memcpy(buffer, std::get<1>(t).data(), + sizeof(uint8_t) * buf_size); /* CheckAPIUse_WAY_10 (0005) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_read_v1(m_ifcToAddon->thisClassHdl, hdl, context, buffer, + buf_size); +} + +ssize_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_write_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t buf_size) +{ + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_WRITE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, const uint8_t* buffer, size_t buf_size); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_vfs_file_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_write_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_file_write_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + std::vector(buffer, buffer + buf_size) /* CheckAPIUse_WAY_11 (0005) */, + buf_size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_write_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_write_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_write_v1(m_ifcToAddon->thisClassHdl, hdl, context, + buffer, buf_size); +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_seek_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_SEEK_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, int64_t position, int whence); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_seek_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_seek_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + position /* CheckAPIUse_WAY_9 (0005) */, + whence /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_seek_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_seek_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_seek_v1(m_ifcToAddon->thisClassHdl, hdl, context, + position, whence); +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_truncate_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_TRUNCATE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, int64_t size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_truncate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_truncate_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_truncate_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + size /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_truncate_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_truncate_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_truncate_v1(m_ifcToAddon->thisClassHdl, hdl, context, + size); +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_length_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_LENGTH_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_length_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_length_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_get_length_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_get_length_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_get_length_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_get_length_v1(m_ifcToAddon->thisClassHdl, hdl, context); +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_position_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) +{ + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_POSITION_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_position_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_get_position_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_get_position_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_get_position_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_get_position_v1(m_ifcToAddon->thisClassHdl, hdl, + context); +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_chunk_size_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_CHUNK_SIZE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_chunk_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_chunk_size_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_get_chunk_size_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_get_chunk_size_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_get_chunk_size_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_get_chunk_size_v1(m_ifcToAddon->thisClassHdl, hdl, + context); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_get_seek_possible_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_SEEK_POSSIBLE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_get_seek_possible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_get_seek_possible_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_io_control_get_seek_possible_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_io_control_get_seek_possible_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_io_control_get_seek_possible_v1 t = + ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_io_control_get_seek_possible_v1( + m_ifcToAddon->thisClassHdl, hdl, context); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_get_cache_status_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, struct VFS_CACHE_STATUS* status) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_CACHE_STATUS_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, struct VFS_CACHE_STATUS* status); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_get_cache_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_get_cache_status_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_io_control_get_cache_status_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_io_control_get_cache_status_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_io_control_get_cache_status_v1 t = + ident.get().as(); + std::get<1>(t).SetCStructure(status); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_io_control_get_cache_status_v1( + m_ifcToAddon->thisClassHdl, hdl, context, status); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_set_cache_rate_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint32_t rate) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_CACHE_RATE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint32_t rate); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_set_cache_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_set_cache_rate_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_io_control_set_cache_rate_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + rate /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_io_control_set_cache_rate_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_io_control_set_cache_rate_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_io_control_set_cache_rate_v1(m_ifcToAddon->thisClassHdl, + hdl, context, rate); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_set_retry_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, bool retry) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_RETRY_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, bool retry); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_set_retry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_set_retry_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_file_io_control_set_retry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(context) /* CheckAPIUse_WAY_12 (0005) */, + retry /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_file_io_control_set_retry_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_file_io_control_set_retry_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_file_io_control_set_retry_v1(m_ifcToAddon->thisClassHdl, hdl, + context, retry); +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_stat_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_STAT_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_STAT_STRUCTURE* buffer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_stat_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_stat_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_vfs_stat_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, funcChild_kodi_addon_vfs_stat_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_stat_v1 t = ident.get().as(); + std::get<1>(t).SetCStructure(buffer); /* CheckAPIUse_WAY_15 (0005-1) */ + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_stat_v1(m_ifcToAddon->thisClassHdl, hdl, url, buffer); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_exists_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_EXISTS_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_exists_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_exists_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, funcChild_kodi_addon_vfs_exists_v1, + in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_exists_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_exists_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_clear_out_idle_v1(const KODI_ADDON_VFS_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CLEAR_OUT_IDLE_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_clear_out_idle_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_clear_out_idle_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_clear_out_idle_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_clear_out_idle_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_vfs_clear_out_idle_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_disconnect_all_v1(const KODI_ADDON_VFS_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DISCONNECT_ALL_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_disconnect_all_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_disconnect_all_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_disconnect_all_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_disconnect_all_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_vfs_disconnect_all_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_delete_it_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DELETE_IT_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_delete_it_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_delete_it_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_delete_it_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_delete_it_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_delete_it_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_delete_it_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_rename_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + const struct KODI_ADDON_VFS_URL* url2) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_RENAME_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, const struct KODI_ADDON_VFS_URL* url2); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_rename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_rename_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgChild__IN_kodi_addon_vfs_rename_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */, + url2 /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, funcChild_kodi_addon_vfs_rename_v1, + in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_rename_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_rename_v1(m_ifcToAddon->thisClassHdl, hdl, url, url2); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_exists_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_EXISTS_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_exists_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_directory_exists_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_directory_exists_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_directory_exists_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_directory_exists_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_remove_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_REMOVE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_remove_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_remove_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_directory_remove_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_directory_remove_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_directory_remove_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_directory_remove_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_create_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CREATE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_create_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_directory_create_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_directory_create_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_directory_create_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_directory_create_v1(m_ifcToAddon->thisClassHdl, hdl, url); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_get_v1( + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_GET_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_DIR_ENTRY** entries, size_t* num_entries, KODI_CTX_CB_HDL ctx_cb_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_get_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_vfs_directory_get_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_directory_get_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */, + *num_entries /* CheckAPIUse_WAY_13 (0005) */, + PtrValue(ctx_cb_hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_directory_get_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_directory_get_v1 t = ident.get().as(); + std::vector& ifc_entries = std::get<1>(t); + *num_entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + *entries = static_cast( + malloc(sizeof(VFS_DIR_ENTRY) * ifc_entries.size())); /* CheckAPIUse_WAY_17 (0005) */ + for (size_t i = 0; i < ifc_entries.size(); ++i) + ifc_entries[i].SetCStructure(&(*entries)[i]); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_directory_get_v1(m_ifcToAddon->thisClassHdl, hdl, url, + entries, num_entries, ctx_cb_hdl); +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_contains_files_v1( + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + char** rootpath) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CONTAINS_FILES_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_DIR_ENTRY** entries, size_t* num_entries, char** rootpath); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_contains_files_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t, std::string> msgChild_OUT_kodi_addon_vfs_directory_contains_files_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_vfs_directory_contains_files_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + url /* CheckAPIUse_WAY_16 (0005) */, + *num_entries /* CheckAPIUse_WAY_13 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_vfs_h, + funcChild_kodi_addon_vfs_directory_contains_files_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_vfs_directory_contains_files_v1 t = ident.get().as(); + std::vector& ifc_entries = std::get<1>(t); + *num_entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0005) */ + *rootpath = strdup(std::get<3>(t).c_str()); /* CheckAPIUse_WAY_7 (0005) */ + *entries = static_cast( + malloc(sizeof(VFS_DIR_ENTRY) * ifc_entries.size())); /* CheckAPIUse_WAY_17 (0005) */ + for (size_t i = 0; i < ifc_entries.size(); ++i) + ifc_entries[i].SetCStructure(&(*entries)[i]); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_vfs_directory_contains_files_v1( + m_ifcToAddon->thisClassHdl, hdl, url, entries, num_entries, rootpath); +} + +// Callbacks from addon to Kodi + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + char** input, + bool hidden_input) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVFSEntry" with "bool DoGetKeyboardInput(KODI_CTX_CB_HDL context, const char* heading, char** input, bool hidden_input)" on "addons/VFSEntry.h". + + ADDON::CVFSEntry* cb = static_cast(hdl); + return cb->DoGetKeyboardInput(ctx_cb_hdl, heading, input, hidden_input); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_get_dir_cb__set_error_dialog_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + const char* line1, + const char* line2, + const char* line3) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVFSEntry" with "void DoSetErrorDialog(KODI_CTX_CB_HDL ctx, const char* heading, const char* line1, const char* line2, const char* line3)" on "addons/VFSEntry.h". + + ADDON::CVFSEntry* cb = static_cast(hdl); + cb->DoSetErrorDialog(ctx_cb_hdl, heading, line1, line2, line3); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_get_dir_cb__require_authentication_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* url) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVFSEntry" with "void DoRequireAuthentication(KODI_CTX_CB_HDL ctx, const char* url)" on "addons/VFSEntry.h". + + ADDON::CVFSEntry* cb = static_cast(hdl); + cb->DoRequireAuthentication(ctx_cb_hdl, url); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_free_v1(struct VFS_DIR_ENTRY* entries, + size_t num_entries) +{ + for (size_t i = 0; i < num_entries; ++i) + { + if (entries[i].properties) + { + for (size_t j = 0; j < entries[i].num_props; ++j) + { + free(entries[i].properties[j].name); + free(entries[i].properties[j].val); + } + free(entries[i].properties); + } + free(entries[i].label); + free(entries[i].title); + free(entries[i].path); + } + free(entries); +} +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/vfs.h b/xbmc/addons/interface/api/addon-instance/vfs.h new file mode 100644 index 0000000000000..b70252de2ecfe --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/vfs.h @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_vfs_h; +struct directFuncToKodi_addoninstance_vfs_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_vfs_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_vfs_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_vfs_h* ifcToKodi, + directFuncToAddon_addoninstance_vfs_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + void kodi_addon_vfs_directory_free_v1(struct VFS_DIR_ENTRY* entries, size_t num_entries); + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_VFS_HDL kodi_addon_vfs_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_vfs_destroy_v1(const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + KODI_VFS_FILE_HDL kodi_addon_vfs_file_open_v1( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + KODI_VFS_FILE_HDL kodi_addon_vfs_file_open_for_write_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + bool overwrite); // Added with API 1 + + bool kodi_addon_vfs_file_close_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + ssize_t kodi_addon_vfs_file_read_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t buf_size); // Added with API 1 + + ssize_t kodi_addon_vfs_file_write_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t buf_size); // Added with API 1 + + int64_t kodi_addon_vfs_file_seek_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence); // Added with API 1 + + int kodi_addon_vfs_file_truncate_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size); // Added with API 1 + + int64_t kodi_addon_vfs_file_get_length_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + int64_t kodi_addon_vfs_file_get_position_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + int kodi_addon_vfs_file_get_chunk_size_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + bool kodi_addon_vfs_file_io_control_get_seek_possible_v1( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); // Added with API 1 + + bool kodi_addon_vfs_file_io_control_get_cache_status_v1( + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + struct VFS_CACHE_STATUS* status); // Added with API 1 + + bool kodi_addon_vfs_file_io_control_set_cache_rate_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint32_t rate); // Added with API 1 + + bool kodi_addon_vfs_file_io_control_set_retry_v1(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + bool retry); // Added with API 1 + + int kodi_addon_vfs_stat_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer); // Added with API 1 + + bool kodi_addon_vfs_exists_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + void kodi_addon_vfs_clear_out_idle_v1(const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + void kodi_addon_vfs_disconnect_all_v1(const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + bool kodi_addon_vfs_delete_it_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + bool kodi_addon_vfs_rename_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + const struct KODI_ADDON_VFS_URL* url2); // Added with API 1 + + bool kodi_addon_vfs_directory_exists_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + bool kodi_addon_vfs_directory_remove_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + bool kodi_addon_vfs_directory_create_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + bool kodi_addon_vfs_directory_get_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl); // Added with API 1 + + bool kodi_addon_vfs_directory_contains_files_v1(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + char** rootpath); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + char** input, + bool hidden_input); // Added with API 1 + + static void kodi_addon_vfs_get_dir_cb__set_error_dialog_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + const char* line1, + const char* line2, + const char* line3); // Added with API 1 + + static void kodi_addon_vfs_get_dir_cb__require_authentication_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* url); // Added with API 1 + + + directFuncToAddon_addoninstance_vfs_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/videocodec.cpp b/xbmc/addons/interface/api/addon-instance/videocodec.cpp new file mode 100644 index 0000000000000..614877e7c77e9 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/videocodec.cpp @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "videocodec.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/videocodec.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "cores/VideoPlayer/DVDCodecs/Video/AddonVideoCodec.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_videocodec_h::InitDirect( + directFuncToKodi_addoninstance_videocodec_h* ifcToKodi, + directFuncToAddon_addoninstance_videocodec_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_videocodec_get_frame_buffer_v1 = kodi_addon_videocodec_get_frame_buffer_v1; + ifcToKodi->kodi_addon_videocodec_release_frame_buffer_v1 = + kodi_addon_videocodec_release_frame_buffer_v1; +} + +bool CHdl_kodi_addoninstance_videocodec_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_videocodec_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_videocodec_h::{}: addon called with unknown function id " + "'{}' on group 'addoninstance_videocodec_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_VIDEOCODEC_HDL CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_VIDEOCODEC_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + + return m_ifcToAddon->kodi_addon_videocodec_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_destroy_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_DESTROY_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl); + + m_ifcToAddon->kodi_addon_videocodec_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_open_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_OPEN_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData); + + return m_ifcToAddon->kodi_addon_videocodec_open_v1(m_ifcToAddon->thisClassHdl, hdl, initData); +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_reconfigure_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_RECONFIGURE_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData); + + return m_ifcToAddon->kodi_addon_videocodec_reconfigure_v1(m_ifcToAddon->thisClassHdl, hdl, + initData); +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_add_data_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, const struct DEMUX_PACKET* packet) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_ADD_DATA_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl, const struct DEMUX_PACKET* packet); + + return m_ifcToAddon->kodi_addon_videocodec_add_data_v1(m_ifcToAddon->thisClassHdl, hdl, packet); +} + +enum VIDEOCODEC_RETVAL CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_get_picture_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_PICTURE* picture) +{ + // Original API call: typedef enum VIDEOCODEC_RETVAL(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_GET_PICTURE_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_PICTURE* picture); + + return m_ifcToAddon->kodi_addon_videocodec_get_picture_v1(m_ifcToAddon->thisClassHdl, hdl, + picture); +} + +const char* CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_get_name_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl) +{ + // Original API call: typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_GET_NAME_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl); + + return m_ifcToAddon->kodi_addon_videocodec_get_name_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_reset_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_RESET_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl); + + m_ifcToAddon->kodi_addon_videocodec_reset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +// Callbacks from addon to Kodi + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_get_frame_buffer_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIDEOCODEC_PICTURE* picture) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "CAddonVideoCodec" with "bool GetFrameBuffer(VIDEOCODEC_PICTURE* picture)" on "cores/VideoPlayer/DVDCodecs/Video/AddonVideoCodec.h". + + CAddonVideoCodec* cb = static_cast(hdl); + return cb->GetFrameBuffer(picture); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_release_frame_buffer_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIDEOCODEC_PICTURE* picture) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "CAddonVideoCodec" with "void ReleaseFrameBuffer(KODI_HANDLE videoBufferHandle)" on "cores/VideoPlayer/DVDCodecs/Video/AddonVideoCodec.h". + + CAddonVideoCodec* cb = static_cast(hdl); + cb->ReleaseFrameBuffer(picture); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/videocodec.h b/xbmc/addons/interface/api/addon-instance/videocodec.h new file mode 100644 index 0000000000000..a1b46d92f9d48 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/videocodec.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/videocodec.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_videocodec_h; +struct directFuncToKodi_addoninstance_videocodec_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_videocodec_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_videocodec_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_videocodec_h* ifcToKodi, + directFuncToAddon_addoninstance_videocodec_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_VIDEOCODEC_HDL kodi_addon_videocodec_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_videocodec_destroy_v1(KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 + + bool kodi_addon_videocodec_open_v1(KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_INITDATA* initData); // Added with API 1 + + bool kodi_addon_videocodec_reconfigure_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData); // Added with API 1 + + bool kodi_addon_videocodec_add_data_v1(KODI_ADDON_VIDEOCODEC_HDL hdl, + const struct DEMUX_PACKET* packet); // Added with API 1 + + enum VIDEOCODEC_RETVAL kodi_addon_videocodec_get_picture_v1( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_PICTURE* picture); // Added with API 1 + + const char* kodi_addon_videocodec_get_name_v1(KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 + + void kodi_addon_videocodec_reset_v1(KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_addon_videocodec_get_frame_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIDEOCODEC_PICTURE* picture); // Added with API 1 + + static void kodi_addon_videocodec_release_frame_buffer_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIDEOCODEC_PICTURE* picture); // Added with API 1 + + + directFuncToAddon_addoninstance_videocodec_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/visualization.cpp b/xbmc/addons/interface/api/addon-instance/visualization.cpp new file mode 100644 index 0000000000000..faedee06a5099 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/visualization.cpp @@ -0,0 +1,673 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "visualization.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon-instance/visualization.h" + +// Kodi +#include "addons/Visualization.h" +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_visualization_h::InitDirect( + directFuncToKodi_addoninstance_visualization_h* ifcToKodi, + directFuncToAddon_addoninstance_visualization_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_addon_visualization_get_properties_v1 = + kodi_addon_visualization_get_properties_v1; + ifcToKodi->kodi_addon_visualization_transfer_preset_v1 = + kodi_addon_visualization_transfer_preset_v1; + ifcToKodi->kodi_addon_visualization_clear_presets_v1 = kodi_addon_visualization_clear_presets_v1; +} + +bool CHdl_kodi_addoninstance_visualization_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_visualization_h) + return false; + + switch (func) + { + case funcParent_kodi_addon_visualization_get_properties_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_get_properties(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIS_PROPS* props) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_get_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_get_properties_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_visualization_get_properties_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + struct VIS_PROPS props; /* CheckAPIUse_WAY_15 (0001-3) */ + kodi_addon_visualization_get_properties_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + &props /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_visualization_get_properties_v1( + &props /* CheckAPIUse_WAY_15 (0001-5) */)); + IFC_VIS_PROPS::CleanCStructure(&props); + return true; + } + case funcParent_kodi_addon_visualization_transfer_preset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_transfer_preset(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* preset) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_transfer_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_transfer_preset_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_visualization_transfer_preset_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& preset = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_addon_visualization_transfer_preset_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + preset.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_addon_visualization_clear_presets_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_clear_presets(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_clear_presets_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_clear_presets_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_visualization_clear_presets_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_addon_visualization_clear_presets_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addoninstance_visualization_h::{}: addon called with unknown function " + "id '{}' on group 'addoninstance_visualization_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +KODI_ADDON_VISUALIZATION_HDL CHdl_kodi_addoninstance_visualization_h:: + kodi_addon_visualization_create_v1(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_VISUALIZATION_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_create_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_create_v1( + PtrValue(kodi_hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_create_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_create_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_destroy_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_DESTROY_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_destroy_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_destroy_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_visualization_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_start_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, + int channels, + int samples_per_sec, + int bits_per_sample, + const char* song_name) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_START_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, int channels, int samples_per_sec, int bits_per_sample, const char* song_name); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_start_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_start_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + channels /* CheckAPIUse_WAY_9 (0005) */, + samples_per_sec /* CheckAPIUse_WAY_9 (0005) */, + bits_per_sample /* CheckAPIUse_WAY_9 (0005) */, + song_name /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_start_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_start_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_start_v1( + m_ifcToAddon->thisClassHdl, hdl, channels, samples_per_sec, bits_per_sample, song_name); +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_stop_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_STOP_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_stop_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_stop_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_stop_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_stop_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_visualization_stop_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_info_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, struct VIS_INFO* info) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_INFO_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, struct VIS_INFO* info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_info_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_get_info_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_get_info_v1, in, out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_get_info_v1 t = ident.get().as(); + std::get<0>(t).SetCStructure(info); /* CheckAPIUse_WAY_15 (0005-1) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_visualization_get_info_v1(m_ifcToAddon->thisClassHdl, hdl, info); +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_audio_data_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, + const float* audio_data, + size_t audio_data_length, + const float* freq_data, + size_t freq_data_length) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_AUDIO_DATA_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const float* audio_data, size_t audio_data_length, const float* freq_data, size_t freq_data_length); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, std::vector /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_visualization_audio_data_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_audio_data_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgChild__IN_kodi_addon_visualization_audio_data_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + std::vector(audio_data, + audio_data + audio_data_length) /* CheckAPIUse_WAY_11 (0005) */, + audio_data_length /* CheckAPIUse_WAY_9 (0005) */, + std::vector(freq_data, + freq_data + freq_data_length) /* CheckAPIUse_WAY_11 (0005) */, + freq_data_length /* CheckAPIUse_WAY_9 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_audio_data_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_visualization_audio_data_v1( + m_ifcToAddon->thisClassHdl, hdl, audio_data, audio_data_length, freq_data, freq_data_length); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_is_dirty_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_DIRTY_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_is_dirty_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_is_dirty_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_is_dirty_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_is_dirty_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_is_dirty_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_is_dirty_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_render_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RENDER_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_render_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_render_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_render_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_render_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_visualization_render_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +unsigned int CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_presets_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef unsigned int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_PRESETS_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_presets_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_presets_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_get_presets_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_get_presets_v1, in, out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_get_presets_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_get_presets_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +int CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_active_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_ACTIVE_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_active_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_active_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_get_active_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_get_active_preset_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_get_active_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_get_active_preset_v1(m_ifcToAddon->thisClassHdl, + hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_prev_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_PREV_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_prev_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_prev_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_prev_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_prev_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_prev_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_prev_preset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_next_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_NEXT_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_next_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_next_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_next_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_next_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_next_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_next_preset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_load_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, int select) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOAD_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, int select); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_load_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_load_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_load_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + select /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_load_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_load_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_load_preset_v1(m_ifcToAddon->thisClassHdl, hdl, + select); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_random_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RANDOM_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_random_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_random_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_random_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_random_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_random_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_random_preset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_lock_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOCK_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_lock_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_lock_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_lock_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_lock_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_lock_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_lock_preset_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_rate_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, bool plus_minus) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RATE_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, bool plus_minus); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_rate_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_rate_preset_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_rate_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + plus_minus /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_rate_preset_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_rate_preset_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_rate_preset_v1(m_ifcToAddon->thisClassHdl, hdl, + plus_minus); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_is_locked_v1( + KODI_ADDON_VISUALIZATION_HDL hdl) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_LOCKED_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_is_locked_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_is_locked_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_is_locked_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_is_locked_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_is_locked_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_is_locked_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_update_albumart_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, const char* albumart) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_ALBUMART_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const char* albumart); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_update_albumart_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_update_albumart_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_update_albumart_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + albumart /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_update_albumart_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_update_albumart_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_update_albumart_v1(m_ifcToAddon->thisClassHdl, hdl, + albumart); +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_update_track_v1( + KODI_ADDON_VISUALIZATION_HDL hdl, const struct VIS_TRACK* track) +{ + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_TRACK_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const struct VIS_TRACK* track); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_update_track_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_update_track_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_visualization_update_track_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + track /* CheckAPIUse_WAY_16 (0005) */)); + if (!m_process->SendMessage(funcGroup_addoninstance_visualization_h, + funcChild_kodi_addon_visualization_update_track_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_visualization_update_track_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_visualization_update_track_v1(m_ifcToAddon->thisClassHdl, hdl, + track); +} + +// Callbacks from addon to Kodi + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_properties_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIS_PROPS* props) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVisualization" with "void get_properties(struct VIS_PROPS* props)" on "addons/Visualization.h". + + ADDON::CVisualization* cb = static_cast(hdl); + cb->get_properties(props); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_transfer_preset_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* preset) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVisualization" with "void transfer_preset(const char* preset)" on "addons/Visualization.h". + + ADDON::CVisualization* cb = static_cast(hdl); + cb->transfer_preset(preset); + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_clear_presets_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "ADDON::CVisualization" with "void clear_presets()" on "addons/Visualization.h". + + ADDON::CVisualization* cb = static_cast(hdl); + cb->clear_presets(); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon-instance/visualization.h b/xbmc/addons/interface/api/addon-instance/visualization.h new file mode 100644 index 0000000000000..4ed8d28a3d415 --- /dev/null +++ b/xbmc/addons/interface/api/addon-instance/visualization.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_visualization_h; +struct directFuncToKodi_addoninstance_visualization_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addoninstance_visualization_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_visualization_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addoninstance_visualization_h* ifcToKodi, + directFuncToAddon_addoninstance_visualization_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + KODI_ADDON_VISUALIZATION_HDL kodi_addon_visualization_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_visualization_destroy_v1(KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_start_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + int channels, + int samples_per_sec, + int bits_per_sample, + const char* song_name); // Added with API 1 + + void kodi_addon_visualization_stop_v1(KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + void kodi_addon_visualization_get_info_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + struct VIS_INFO* info); // Added with API 1 + + void kodi_addon_visualization_audio_data_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + const float* audio_data, + size_t audio_data_length, + const float* freq_data, + size_t freq_data_length); // Added with API 1 + + bool kodi_addon_visualization_is_dirty_v1(KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + void kodi_addon_visualization_render_v1(KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + unsigned int kodi_addon_visualization_get_presets_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + int kodi_addon_visualization_get_active_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_prev_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_next_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_load_preset_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + int select); // Added with API 1 + + bool kodi_addon_visualization_random_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_lock_preset_v1( + KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_rate_preset_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + bool plus_minus); // Added with API 1 + + bool kodi_addon_visualization_is_locked_v1(KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + bool kodi_addon_visualization_update_albumart_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + const char* albumart); // Added with API 1 + + bool kodi_addon_visualization_update_track_v1(KODI_ADDON_VISUALIZATION_HDL hdl, + const struct VIS_TRACK* track); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_addon_visualization_get_properties_v1( + void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIS_PROPS* props); // Added with API 1 + + static void kodi_addon_visualization_transfer_preset_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* preset); // Added with API 1 + + static void kodi_addon_visualization_clear_presets_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + + directFuncToAddon_addoninstance_visualization_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon_base.cpp b/xbmc/addons/interface/api/addon_base.cpp new file mode 100644 index 0000000000000..edd120167a0cc --- /dev/null +++ b/xbmc/addons/interface/api/addon_base.cpp @@ -0,0 +1,1592 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "addon_base.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/addon_base.h" + +// Kodi +#include "addons/interface/InstanceHandler.h" +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "Application.h" +#include "GUIUserMessages.h" +#include "addons/AddonManager.h" +#include "addons/gui/GUIDialogAddonSettings.h" +#include "addons/settings/AddonSettings.h" +#include "filesystem/Directory.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "guilib/LocalizeStrings.h" +#include "utils/URIUtils.h" +#include "utils/log.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +bool CHdl_kodi_addon_base_h::UpdateSettingInActiveDialog(const std::string& addonId, + const std::string& id, + const std::string& value) +{ + if (!CServiceBroker::GetGUI()->GetWindowManager().IsWindowActive(WINDOW_DIALOG_ADDON_SETTINGS)) + return false; + + CGUIDialogAddonSettings* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_ADDON_SETTINGS); + if (dialog->GetCurrentAddonID() != addonId) + return false; + + CGUIMessage message(GUI_MSG_SETTING_UPDATED, 0, 0); + std::vector params; + params.emplace_back(id); + params.push_back(value); + message.SetStringParams(params); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(message, + WINDOW_DIALOG_ADDON_SETTINGS); + + return true; +} + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addon_base_h::InitDirect(directFuncToKodi_addon_base_h* ifcToKodi, + directFuncToAddon_addon_base_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + // Unused "kodi_check_main_shared", done only in addon lib + // Unused "kodi_init", done only in addon lib + // Unused "kodi_deinit", done only in addon lib + // Unused "kodi_process", done only in addon lib + ifcToKodi->kodi_log_v1 = kodi_log_v1; + ifcToKodi->kodi_addon_get_addon_path_v1 = kodi_addon_get_addon_path_v1; + ifcToKodi->kodi_addon_get_lib_path_v1 = kodi_addon_get_lib_path_v1; + ifcToKodi->kodi_addon_get_user_path_v1 = kodi_addon_get_user_path_v1; + ifcToKodi->kodi_addon_get_temp_path_v1 = kodi_addon_get_temp_path_v1; + ifcToKodi->kodi_addon_localized_string_v1 = kodi_addon_localized_string_v1; + ifcToKodi->kodi_addon_get_info_v1 = kodi_addon_get_info_v1; + ifcToKodi->kodi_addon_open_settings_dialog_v1 = kodi_addon_open_settings_dialog_v1; + ifcToKodi->kodi_addon_is_setting_using_default_v1 = kodi_addon_is_setting_using_default_v1; + ifcToKodi->kodi_addon_get_setting_bool_v1 = kodi_addon_get_setting_bool_v1; + ifcToKodi->kodi_addon_get_setting_int_v1 = kodi_addon_get_setting_int_v1; + ifcToKodi->kodi_addon_get_setting_float_v1 = kodi_addon_get_setting_float_v1; + ifcToKodi->kodi_addon_get_setting_string_v1 = kodi_addon_get_setting_string_v1; + ifcToKodi->kodi_addon_set_setting_bool_v1 = kodi_addon_set_setting_bool_v1; + ifcToKodi->kodi_addon_set_setting_int_v1 = kodi_addon_set_setting_int_v1; + ifcToKodi->kodi_addon_set_setting_float_v1 = kodi_addon_set_setting_float_v1; + ifcToKodi->kodi_addon_set_setting_string_v1 = kodi_addon_set_setting_string_v1; + ifcToKodi->kodi_addon_instance_get_user_path_v1 = kodi_addon_instance_get_user_path_v1; + ifcToKodi->kodi_addon_instance_is_setting_using_default_v1 = + kodi_addon_instance_is_setting_using_default_v1; + ifcToKodi->kodi_addon_instance_get_setting_bool_v1 = kodi_addon_instance_get_setting_bool_v1; + ifcToKodi->kodi_addon_instance_get_setting_int_v1 = kodi_addon_instance_get_setting_int_v1; + ifcToKodi->kodi_addon_instance_get_setting_float_v1 = kodi_addon_instance_get_setting_float_v1; + ifcToKodi->kodi_addon_instance_get_setting_string_v1 = kodi_addon_instance_get_setting_string_v1; + ifcToKodi->kodi_addon_instance_set_setting_bool_v1 = kodi_addon_instance_set_setting_bool_v1; + ifcToKodi->kodi_addon_instance_set_setting_int_v1 = kodi_addon_instance_set_setting_int_v1; + ifcToKodi->kodi_addon_instance_set_setting_float_v1 = kodi_addon_instance_set_setting_float_v1; + ifcToKodi->kodi_addon_instance_set_setting_string_v1 = kodi_addon_instance_set_setting_string_v1; +} + +bool CHdl_kodi_addon_base_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addon_base_h) + return false; + + switch (func) + { + case funcParent_kodi_log_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_log(enum ADDON_LOG loglevel, const char* format, ...) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_log_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_log_v1; /* Autogenerated */ + msgParent__IN_kodi_log_v1 t = in.get().as(); + enum ADDON_LOG loglevel = std::get<0>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& format = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + + kodi_log_v1(this, loglevel /* CheckAPIUse_WAY_14a (0001) */, + format.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_addon_get_addon_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_addon_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_addon_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_addon_path_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_addon_get_addon_path_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_addon_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_get_lib_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_lib_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_lib_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_lib_path_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_addon_get_lib_path_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_lib_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_get_user_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_user_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_user_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_user_path_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_addon_get_user_path_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_user_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_get_temp_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_temp_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_temp_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_temp_path_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_addon_get_temp_path_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_temp_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_localized_string_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_localized_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_localized_string_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_localized_string_v1 t = in.get().as(); + long label_id = std::get<0>(t); /* CheckAPIUse_WAY_10 (0001) */ + char* auto_gen_ret = + kodi_addon_localized_string_v1(this, label_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_localized_string_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_get_info_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_info(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_info_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_get_info_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_addon_get_info_v1(this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_info_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_open_settings_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_open_settings_dialog() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_open_settings_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_open_settings_dialog_v1; /* Autogenerated */ + bool auto_gen_ret = kodi_addon_open_settings_dialog_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_addon_open_settings_dialog_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_is_setting_using_default_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_is_setting_using_default(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_is_setting_using_default_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_is_setting_using_default_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_is_setting_using_default_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_addon_is_setting_using_default_v1(this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_is_setting_using_default_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_get_setting_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_bool(const char* id, bool* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_get_setting_bool_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_get_setting_bool_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_get_setting_bool_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_get_setting_int_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_int(const char* id, int* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_int_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_get_setting_int_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_get_setting_int_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_get_setting_int_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_get_setting_float_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_float(const char* id, double* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_float_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_get_setting_float_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + double value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_get_setting_float_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_get_setting_float_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_get_setting_string_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_string(const char* id, char** value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_string_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_get_setting_string_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* value = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = kodi_addon_get_setting_string_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, &value /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_get_setting_string_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + value ? value : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (value) /* CheckAPIUse_WAY_7 (0001) */ + free(value); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_addon_set_setting_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_bool(const char* id, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_set_setting_bool_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_set_setting_bool_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_set_setting_bool_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_set_setting_int_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_int(const char* id, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_int_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_set_setting_int_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_set_setting_int_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_set_setting_int_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_set_setting_float_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_float(const char* id, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_float_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_set_setting_float_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + double value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_set_setting_float_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_set_setting_float_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_set_setting_string_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_string(const char* id, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_string_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_set_setting_string_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_addon_set_setting_string_v1(this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_set_setting_string_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_get_user_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_instance_get_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_user_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_user_path_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_get_user_path_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_addon_instance_get_user_path_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_get_user_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_addon_instance_is_setting_using_default_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_is_setting_using_default( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_is_setting_using_default_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_is_setting_using_default_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_is_setting_using_default_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_addon_instance_is_setting_using_default_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_is_setting_using_default_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_get_setting_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_bool( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_get_setting_bool_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool value = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_instance_get_setting_bool_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_instance_get_setting_bool_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_get_setting_int_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_int( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_int_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_get_setting_int_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_instance_get_setting_int_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_instance_get_setting_int_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_get_setting_float_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_float( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_float_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_get_setting_float_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + double value = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_addon_instance_get_setting_float_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &value /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_addon_instance_get_setting_float_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, value /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_get_setting_string_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_string( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, char** value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_string_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_get_setting_string_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* value = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = kodi_addon_instance_get_setting_string_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &value /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_get_setting_string_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + value ? value : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (value) /* CheckAPIUse_WAY_7 (0001) */ + free(value); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_addon_instance_set_setting_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_bool( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_set_setting_bool_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_instance_set_setting_bool_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_set_setting_bool_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_set_setting_int_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_int( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_int_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_set_setting_int_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_instance_set_setting_int_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_set_setting_int_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_set_setting_float_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_float( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_float_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_set_setting_float_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + double value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_addon_instance_set_setting_float_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_set_setting_float_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_addon_instance_set_setting_string_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_string( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_string_v1; /* Autogenerated */ + msgParent__IN_kodi_addon_instance_set_setting_string_v1 t = in.get().as(); + KODI_ADDON_INSTANCE_BACKEND_HDL hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& id = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_addon_instance_set_setting_string_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_addon_instance_set_setting_string_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_addon_base_h::{}: addon called with unknown function id '{}' on group " + "'addon_base_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon + +/*---AUTO_GEN_PARSE---*/ +ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_create_v1( + const KODI_ADDON_INSTANCE_INFO* first_instance, KODI_ADDON_HDL* hdl) +{ + // This function is set by "OVERRIDE;USE_HAND_MAKE" and must be complete set here and other places by hand!!! +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_create_v1(first_instance)); + if (!m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_create_v1, in, out)) + return ADDON_STATUS_UNKNOWN; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_create_v1 t = ident.get().as(); + *hdl = reinterpret_cast(std::get<1>(t)); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_create_v1(m_ifcToAddon->thisClassHdl, first_instance, hdl); +} +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addon_base_h::kodi_addon_destroy_v1(KODI_ADDON_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_V1)(KODI_ADDON_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_destroy_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgChild__IN_kodi_addon_destroy_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_string_v1( + const KODI_ADDON_HDL hdl, const char* name, const char* value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_STRING_V1)(const KODI_ADDON_HDL hdl, const char* name, const char* value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_string_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_setting_change_string_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_setting_change_string_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_setting_change_string_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_setting_change_string_v1(m_ifcToAddon->thisClassHdl, hdl, name, + value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_boolean_v1( + const KODI_ADDON_HDL hdl, const char* name, bool value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_BOOLEAN_V1)(const KODI_ADDON_HDL hdl, const char* name, bool value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_boolean_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_boolean_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_setting_change_boolean_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_setting_change_boolean_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_setting_change_boolean_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_setting_change_boolean_v1(m_ifcToAddon->thisClassHdl, hdl, name, + value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_integer_v1( + const KODI_ADDON_HDL hdl, const char* name, int value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_INTEGER_V1)(const KODI_ADDON_HDL hdl, const char* name, int value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_integer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_integer_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_setting_change_integer_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_setting_change_integer_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_setting_change_integer_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_setting_change_integer_v1(m_ifcToAddon->thisClassHdl, hdl, name, + value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_float_v1( + const KODI_ADDON_HDL hdl, const char* name, double value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_FLOAT_V1)(const KODI_ADDON_HDL hdl, const char* name, double value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_float_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_setting_change_float_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_setting_change_float_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_setting_change_float_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_setting_change_float_v1(m_ifcToAddon->thisClassHdl, hdl, name, + value); +} + +/*---AUTO_GEN_PARSE---*/ +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_create_instance_v1( + const KODI_ADDON_HDL hdl, const struct KODI_ADDON_INSTANCE_INFO* info, KODI_HANDLE* instance) +{ + // This function is set by "OVERRIDE;USE_HAND_MAKE" and must be complete set here and other places by hand!!! +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_create_instance_v1(PtrValue(hdl), info)); + if (!m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_create_instance_v1, in, + out)) + return ADDON_STATUS_UNKNOWN; + + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_create_instance_v1 t = ident.get().as(); + *instance = KODI_HANDLE(std::get<1>(t)); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_create_instance_v1(m_ifcToAddon->thisClassHdl, hdl, info, + instance); +} +/*---AUTO_GEN_PARSE---*/ + +/*---AUTO_GEN_PARSE---*/ +void CHdl_kodi_addon_base_h::kodi_addon_destroy_instance_v1( + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_HANDLE instance) +{ + // This function is set by "OVERRIDE;USE_HAND_MAKE" and must be complete set here and other places by hand!!! + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgChild__IN_kodi_addon_destroy_instance_v1(PtrValue(hdl), info, PtrValue(instance))); + m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_destroy_instance_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_destroy_instance_v1(m_ifcToAddon->thisClassHdl, hdl, info, instance); +} +/*---AUTO_GEN_PARSE---*/ + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_string_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, const char* value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_string_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_instance_setting_change_string_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(instance_hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_6b (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_instance_setting_change_string_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_instance_setting_change_string_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_instance_setting_change_string_v1(m_ifcToAddon->thisClassHdl, hdl, + instance_hdl, name, value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_boolean_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, bool value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_boolean_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_boolean_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_instance_setting_change_boolean_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(instance_hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_instance_setting_change_boolean_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_instance_setting_change_boolean_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_instance_setting_change_boolean_v1( + m_ifcToAddon->thisClassHdl, hdl, instance_hdl, name, value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_integer_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, int value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_integer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_integer_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_instance_setting_change_integer_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(instance_hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_instance_setting_change_integer_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_instance_setting_change_integer_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_instance_setting_change_integer_v1( + m_ifcToAddon->thisClassHdl, hdl, instance_hdl, name, value); +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_float_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value) +{ + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, double value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_float_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgChild__IN_kodi_addon_instance_setting_change_float_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */, + PtrValue(instance_hdl) /* CheckAPIUse_WAY_12 (0005) */, + name /* CheckAPIUse_WAY_6b (0005) */, value /* CheckAPIUse_WAY_9 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, + funcChild_kodi_addon_instance_setting_change_float_v1, in, out)) + return ADDON_STATUS_OK; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_instance_setting_change_float_v1 t = ident.get().as(); + return std::get<0>(t); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_instance_setting_change_float_v1(m_ifcToAddon->thisClassHdl, hdl, + instance_hdl, name, value); +} + +KODI_ADDON_INSTANCE_HDL CHdl_kodi_addon_base_h::kodi_addon_instance_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) +{ + // Original API call: typedef KODI_ADDON_INSTANCE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_create_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgChild__IN_kodi_addon_instance_create_v1( + PtrValue(kodi_hdl) /* CheckAPIUse_WAY_12 (0005) */)); + if (!m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_instance_create_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgChild_OUT_kodi_addon_instance_create_v1 t = ident.get().as(); + return reinterpret_cast(std::get<0>(t)); + } +#endif /* !KODI_INHIBIT_SHARED */ + + return m_ifcToAddon->kodi_addon_instance_create_v1(m_ifcToAddon->thisClassHdl, kodi_hdl); +} + +void CHdl_kodi_addon_base_h::kodi_addon_instance_destroy_v1(KODI_ADDON_INSTANCE_HDL hdl) +{ + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_DESTROY_V1)(KODI_ADDON_INSTANCE_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_destroy_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!m_interface.m_directDll) + { + msgpack::sbuffer in; + msgpack::pack(in, msgChild__IN_kodi_addon_instance_destroy_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0005) */)); + m_process->SendMessage(funcGroup_addon_base_h, funcChild_kodi_addon_instance_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + m_ifcToAddon->kodi_addon_instance_destroy_v1(m_ifcToAddon->thisClassHdl, hdl); +} + +// Callbacks from addon to Kodi + +void CHdl_kodi_addon_base_h::kodi_log_v1(void* thisClassHdl, + enum ADDON_LOG loglevel, + const char* format, + ...) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + int kodiLogLevel = LOGNONE; + switch (loglevel) + { + case ADDON_LOG_DEBUG: + kodiLogLevel = LOGDEBUG; + break; + case ADDON_LOG_INFO: + kodiLogLevel = LOGINFO; + break; + case ADDON_LOG_WARNING: + kodiLogLevel = LOGWARNING; + break; + case ADDON_LOG_ERROR: + kodiLogLevel = LOGERROR; + break; + case ADDON_LOG_FATAL: + kodiLogLevel = LOGFATAL; + break; + default: + kodiLogLevel = LOGDEBUG; + break; + } + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + CLog::Log(kodiLogLevel, "AddOnLog: {}: {}", addon->ID(), format); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_get_addon_path_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + return strdup(CSpecialProtocol::TranslatePath(addon->Path()).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_get_lib_path_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + return strdup(CSpecialProtocol::TranslatePath(addon->Path()).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_get_user_path_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + return strdup(CSpecialProtocol::TranslatePath(addon->Profile()).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_get_temp_path_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + std::string tempPath = + URIUtils::AddFileToFolder(CServiceBroker::GetAddonMgr().GetTempAddonBasePath(), addon->ID()); + tempPath += "-temp"; + XFILE::CDirectory::Create(tempPath); + + return strdup(CSpecialProtocol::TranslatePath(tempPath).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_localized_string_v1(void* thisClassHdl, long label_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + if (g_application.m_bStop) + return nullptr; + + std::string label = + g_localizeStrings.GetAddonString(thisClass->m_process->GetAddonID(), label_id); + if (label.empty()) + label = g_localizeStrings.Get(label_id); + char* buffer = strdup(label.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_get_info_v1(void* thisClassHdl, const char* id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + std::string str; + if (StringUtils::CompareNoCase(id, "author") == 0) + str = addon->Author(); + else if (StringUtils::CompareNoCase(id, "changelog") == 0) + str = addon->ChangeLog(); + else if (StringUtils::CompareNoCase(id, "description") == 0) + str = addon->Description(); + else if (StringUtils::CompareNoCase(id, "disclaimer") == 0) + str = addon->Disclaimer(); + else if (StringUtils::CompareNoCase(id, "fanart") == 0) + str = addon->FanArt(); + else if (StringUtils::CompareNoCase(id, "icon") == 0) + str = addon->Icon(); + else if (StringUtils::CompareNoCase(id, "id") == 0) + str = addon->ID(); + else if (StringUtils::CompareNoCase(id, "name") == 0) + str = addon->Name(); + else if (StringUtils::CompareNoCase(id, "path") == 0) + str = addon->Path(); + else if (StringUtils::CompareNoCase(id, "profile") == 0) + str = addon->Profile(); + else if (StringUtils::CompareNoCase(id, "summary") == 0) + str = addon->Summary(); + else if (StringUtils::CompareNoCase(id, "type") == 0) + str = ADDON::CAddonInfo::TranslateType(addon->Type()); + else if (StringUtils::CompareNoCase(id, "version") == 0) + str = addon->Version().asString(); + else + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - add-on '{}' requests invalid id '{}'", __func__, + addon->ID(), id); + return nullptr; + } + + return strdup(str.c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_open_settings_dialog_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + return CGUIDialogAddonSettings::ShowForAddon(addon); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_is_setting_using_default_v1(void* thisClassHdl, + const char* id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + if (!addon->HasSettings()) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - couldn't get settings for add-on '{}'", __func__, + addon->ID()); + return false; + } + + auto setting = addon->GetSettings()->GetSetting(id); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - can't find setting '{}' in '{}'", __func__, id, + addon->ID()); + return false; + } + + return setting->IsDefault(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_get_setting_bool_v1(void* thisClassHdl, + const char* id, + bool* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (!addon->HasSettings()) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - couldn't get settings for add-on '{}'", __func__, + addon->ID()); + return false; + } + + auto setting = addon->GetSettings()->GetSetting(id); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - can't find setting '{}' in '{}'", __func__, id, + addon->ID()); + return false; + } + + if (setting->GetType() != SettingType::Boolean) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - setting '{}' is not a boolean in '{}'", __func__, + id, addon->ID()); + return false; + } + + *value = std::static_pointer_cast(setting)->GetValue(); + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_get_setting_int_v1(void* thisClassHdl, + const char* id, + int* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (!addon->HasSettings()) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - couldn't get settings for add-on '{}'", __func__, + addon->ID()); + return false; + } + + auto setting = addon->GetSettings()->GetSetting(id); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - can't find setting '{}' in '{}'", __func__, id, + addon->ID()); + return false; + } + + if (setting->GetType() != SettingType::Integer && setting->GetType() != SettingType::Number) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - setting '{}' is not a integer in '{}'", __func__, + id, addon->ID()); + return false; + } + + if (setting->GetType() == SettingType::Integer) + *value = std::static_pointer_cast(setting)->GetValue(); + else + *value = static_cast(std::static_pointer_cast(setting)->GetValue()); + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_get_setting_float_v1(void* thisClassHdl, + const char* id, + double* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (!addon->HasSettings()) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - couldn't get settings for add-on '{}'", __func__, + addon->ID()); + return false; + } + + auto setting = addon->GetSettings()->GetSetting(id); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - can't find setting '{}' in '{}'", __func__, id, + addon->ID()); + return false; + } + + if (setting->GetType() != SettingType::Number) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - setting '{}' is not a number in '{}'", __func__, + id, addon->ID()); + return false; + } + + *value = std::static_pointer_cast(setting)->GetValue(); + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_get_setting_string_v1(void* thisClassHdl, + const char* id, + char** value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (!addon->HasSettings()) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - couldn't get settings for add-on '{}'", __func__, + addon->ID()); + return false; + } + + auto setting = addon->GetSettings()->GetSetting(id); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - can't find setting '{}' in '{}'", __func__, id, + addon->ID()); + return false; + } + + if (setting->GetType() != SettingType::String) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - setting '{}' is not a string in '{}'", __func__, + id, addon->ID()); + return false; + } + + *value = strdup(std::static_pointer_cast(setting)->GetValue().c_str()); + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_set_setting_bool_v1(void* thisClassHdl, + const char* id, + bool value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (UpdateSettingInActiveDialog(addon->ID(), id, StringUtils::Format("%d", value))) + return true; + + if (!addon->UpdateSettingBool(id, value)) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - invalid setting type", __func__); + return false; + } + + addon->SaveSettings(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_set_setting_int_v1(void* thisClassHdl, + const char* id, + int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (UpdateSettingInActiveDialog(addon->ID(), id, StringUtils::Format("%i", value))) + return true; + + if (!addon->UpdateSettingInt(id, value)) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - invalid setting type", __func__); + return false; + } + + addon->SaveSettings(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_set_setting_float_v1(void* thisClassHdl, + const char* id, + double value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (UpdateSettingInActiveDialog(addon->ID(), id, StringUtils::Format("%f", value))) + return true; + + if (!addon->UpdateSettingNumber(id, value)) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - invalid setting type", __func__); + return false; + } + + addon->SaveSettings(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_set_setting_string_v1(void* thisClassHdl, + const char* id, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::shared_ptr addon = thisClass->m_interface.m_process->GetAddon(); + + if (UpdateSettingInActiveDialog(addon->ID(), id, value)) + return true; + + if (!addon->UpdateSettingString(id, value)) + { + CLog::Log(LOGERROR, "CHdlIn_addon_base_h::{} - invalid setting type", __func__); + return false; + } + + addon->SaveSettings(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_addon_base_h::kodi_addon_instance_get_user_path_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "char* get_instance_user_path()" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->get_instance_user_path(); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_is_setting_using_default_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool is_instance_setting_using_default(const char* id)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->is_instance_setting_using_default(id); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_get_setting_bool_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool get_instance_setting_bool(const char* id, bool* value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->get_instance_setting_bool(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_get_setting_int_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool get_instance_setting_int(const char* id, int* value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->get_instance_setting_int(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_get_setting_float_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool get_instance_setting_float(const char* id, double* value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->get_instance_setting_float(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_get_setting_string_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, char** value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool get_instance_setting_string(const char* id, char** value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->get_instance_setting_string(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_set_setting_bool_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool set_instance_setting_bool(const char* id, bool value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->set_instance_setting_bool(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_set_setting_int_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool set_instance_setting_int(const char* id, int value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->set_instance_setting_int(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_set_setting_float_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool set_instance_setting_float(const char* id, double value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->set_instance_setting_float(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_addon_base_h::kodi_addon_instance_set_setting_string_v1( + void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + // AUTOGENERATED - Used by class "KODI::ADDONS::INTERFACE::IInstanceHandler" with "bool set_instance_setting_string(const char* id, const char* value)" on "addons/interface/InstanceHandler.h". + + KODI::ADDONS::INTERFACE::IInstanceHandler* cb = + static_cast(hdl); + return cb->set_instance_setting_string(id, value); + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/addon_base.h b/xbmc/addons/interface/api/addon_base.h new file mode 100644 index 0000000000000..d331e14659d67 --- /dev/null +++ b/xbmc/addons/interface/api/addon_base.h @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/addon_base.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addon_base_h; +struct directFuncToKodi_addon_base_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_addon_base_h : public IMsgHdl +{ +public: + CHdl_kodi_addon_base_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_addon_base_h* ifcToKodi, + directFuncToAddon_addon_base_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + static bool UpdateSettingInActiveDialog(const std::string& addonId, + const std::string& id, + const std::string& value); + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + /*---AUTO_GEN_PARSE---*/ + enum ADDON_STATUS kodi_addon_create_v1(const KODI_ADDON_INSTANCE_INFO* first_instance, + KODI_ADDON_HDL* hdl); + /*---AUTO_GEN_PARSE---*/ + + void kodi_addon_destroy_v1(KODI_ADDON_HDL hdl); // Added with API 1 + + enum ADDON_STATUS kodi_addon_setting_change_string_v1(const KODI_ADDON_HDL hdl, + const char* name, + const char* value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_setting_change_boolean_v1(const KODI_ADDON_HDL hdl, + const char* name, + bool value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_setting_change_integer_v1(const KODI_ADDON_HDL hdl, + const char* name, + int value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_setting_change_float_v1(const KODI_ADDON_HDL hdl, + const char* name, + double value); // Added with API 1 + + /*---AUTO_GEN_PARSE---*/ + enum ADDON_STATUS kodi_addon_create_instance_v1(const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + KODI_HANDLE* instance); // Added with API 1 + /*---AUTO_GEN_PARSE---*/ + + /*---AUTO_GEN_PARSE---*/ + void kodi_addon_destroy_instance_v1(const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_HANDLE instance); // Added with API 1 + /*---AUTO_GEN_PARSE---*/ + + enum ADDON_STATUS kodi_addon_instance_setting_change_string_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_instance_setting_change_boolean_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_instance_setting_change_integer_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value); // Added with API 1 + + enum ADDON_STATUS kodi_addon_instance_setting_change_float_v1( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value); // Added with API 1 + + KODI_ADDON_INSTANCE_HDL kodi_addon_instance_create_v1( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + void kodi_addon_instance_destroy_v1(KODI_ADDON_INSTANCE_HDL hdl); // Added with API 1 + + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_log_v1(void* thisClassHdl, + enum ADDON_LOG loglevel, + const char* format, + ...); // Added with API 1 + + static char* kodi_addon_get_addon_path_v1(void* thisClassHdl); // Added with API 1 + + static char* kodi_addon_get_lib_path_v1(void* thisClassHdl); // Added with API 1 + + static char* kodi_addon_get_user_path_v1(void* thisClassHdl); // Added with API 1 + + static char* kodi_addon_get_temp_path_v1(void* thisClassHdl); // Added with API 1 + + static char* kodi_addon_localized_string_v1(void* thisClassHdl, + long label_id); // Added with API 1 + + static char* kodi_addon_get_info_v1(void* thisClassHdl, const char* id); // Added with API 1 + + static bool kodi_addon_open_settings_dialog_v1(void* thisClassHdl); // Added with API 1 + + static bool kodi_addon_is_setting_using_default_v1(void* thisClassHdl, + const char* id); // Added with API 1 + + static bool kodi_addon_get_setting_bool_v1(void* thisClassHdl, + const char* id, + bool* value); // Added with API 1 + + static bool kodi_addon_get_setting_int_v1(void* thisClassHdl, + const char* id, + int* value); // Added with API 1 + + static bool kodi_addon_get_setting_float_v1(void* thisClassHdl, + const char* id, + double* value); // Added with API 1 + + static bool kodi_addon_get_setting_string_v1(void* thisClassHdl, + const char* id, + char** value); // Added with API 1 + + static bool kodi_addon_set_setting_bool_v1(void* thisClassHdl, + const char* id, + bool value); // Added with API 1 + + static bool kodi_addon_set_setting_int_v1(void* thisClassHdl, + const char* id, + int value); // Added with API 1 + + static bool kodi_addon_set_setting_float_v1(void* thisClassHdl, + const char* id, + double value); // Added with API 1 + + static bool kodi_addon_set_setting_string_v1(void* thisClassHdl, + const char* id, + const char* value); // Added with API 1 + + static char* kodi_addon_instance_get_user_path_v1( + void* thisClassHdl, const KODI_ADDON_INSTANCE_BACKEND_HDL hdl); // Added with API 1 + + static bool kodi_addon_instance_is_setting_using_default_v1( + void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id); // Added with API 1 + + static bool kodi_addon_instance_get_setting_bool_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool* value); // Added with API 1 + + static bool kodi_addon_instance_get_setting_int_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int* value); // Added with API 1 + + static bool kodi_addon_instance_get_setting_float_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + double* value); // Added with API 1 + + static bool kodi_addon_instance_get_setting_string_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + char** value); // Added with API 1 + + static bool kodi_addon_instance_set_setting_bool_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool value); // Added with API 1 + + static bool kodi_addon_instance_set_setting_int_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int value); // Added with API 1 + + static bool kodi_addon_instance_set_setting_float_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + double value); // Added with API 1 + + static bool kodi_addon_instance_set_setting_string_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + const char* value); // Added with API 1 + + + directFuncToAddon_addon_base_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/audio_engine.cpp b/xbmc/addons/interface/api/audio_engine.cpp new file mode 100644 index 0000000000000..6112f21d1fa5f --- /dev/null +++ b/xbmc/addons/interface/api/audio_engine.cpp @@ -0,0 +1,1253 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audio_engine.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/audio_engine.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "ServiceBroker.h" +#include "cores/AudioEngine/Interfaces/AE.h" +#include "cores/AudioEngine/Interfaces/AEStream.h" +#include "cores/AudioEngine/Utils/AEStreamData.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +AEChannel TranslateAEChannelToKodi(AudioEngineChannel channel) +{ + switch (channel) + { + case AUDIOENGINE_CH_RAW: + return AE_CH_RAW; + case AUDIOENGINE_CH_FL: + return AE_CH_FL; + case AUDIOENGINE_CH_FR: + return AE_CH_FR; + case AUDIOENGINE_CH_FC: + return AE_CH_FC; + case AUDIOENGINE_CH_LFE: + return AE_CH_LFE; + case AUDIOENGINE_CH_BL: + return AE_CH_BL; + case AUDIOENGINE_CH_BR: + return AE_CH_BR; + case AUDIOENGINE_CH_FLOC: + return AE_CH_FLOC; + case AUDIOENGINE_CH_FROC: + return AE_CH_FROC; + case AUDIOENGINE_CH_BC: + return AE_CH_BC; + case AUDIOENGINE_CH_SL: + return AE_CH_SL; + case AUDIOENGINE_CH_SR: + return AE_CH_SR; + case AUDIOENGINE_CH_TFL: + return AE_CH_TFL; + case AUDIOENGINE_CH_TFR: + return AE_CH_TFR; + case AUDIOENGINE_CH_TFC: + return AE_CH_TFC; + case AUDIOENGINE_CH_TC: + return AE_CH_TC; + case AUDIOENGINE_CH_TBL: + return AE_CH_TBL; + case AUDIOENGINE_CH_TBR: + return AE_CH_TBR; + case AUDIOENGINE_CH_TBC: + return AE_CH_TBC; + case AUDIOENGINE_CH_BLOC: + return AE_CH_BLOC; + case AUDIOENGINE_CH_BROC: + return AE_CH_BROC; + case AUDIOENGINE_CH_MAX: + return AE_CH_MAX; + case AUDIOENGINE_CH_NULL: + default: + return AE_CH_NULL; + } +} + +AudioEngineChannel TranslateAEChannelToAddon(AEChannel channel) +{ + switch (channel) + { + case AE_CH_RAW: + return AUDIOENGINE_CH_RAW; + case AE_CH_FL: + return AUDIOENGINE_CH_FL; + case AE_CH_FR: + return AUDIOENGINE_CH_FR; + case AE_CH_FC: + return AUDIOENGINE_CH_FC; + case AE_CH_LFE: + return AUDIOENGINE_CH_LFE; + case AE_CH_BL: + return AUDIOENGINE_CH_BL; + case AE_CH_BR: + return AUDIOENGINE_CH_BR; + case AE_CH_FLOC: + return AUDIOENGINE_CH_FLOC; + case AE_CH_FROC: + return AUDIOENGINE_CH_FROC; + case AE_CH_BC: + return AUDIOENGINE_CH_BC; + case AE_CH_SL: + return AUDIOENGINE_CH_SL; + case AE_CH_SR: + return AUDIOENGINE_CH_SR; + case AE_CH_TFL: + return AUDIOENGINE_CH_TFL; + case AE_CH_TFR: + return AUDIOENGINE_CH_TFR; + case AE_CH_TFC: + return AUDIOENGINE_CH_TFC; + case AE_CH_TC: + return AUDIOENGINE_CH_TC; + case AE_CH_TBL: + return AUDIOENGINE_CH_TBL; + case AE_CH_TBR: + return AUDIOENGINE_CH_TBR; + case AE_CH_TBC: + return AUDIOENGINE_CH_TBC; + case AE_CH_BLOC: + return AUDIOENGINE_CH_BLOC; + case AE_CH_BROC: + return AUDIOENGINE_CH_BROC; + case AE_CH_MAX: + return AUDIOENGINE_CH_MAX; + case AE_CH_NULL: + default: + return AUDIOENGINE_CH_NULL; + } +} + +AEDataFormat TranslateAEFormatToKodi(AudioEngineDataFormat format) +{ + switch (format) + { + case AUDIOENGINE_FMT_U8: + return AE_FMT_U8; + case AUDIOENGINE_FMT_S16BE: + return AE_FMT_S16BE; + case AUDIOENGINE_FMT_S16LE: + return AE_FMT_S16LE; + case AUDIOENGINE_FMT_S16NE: + return AE_FMT_S16NE; + case AUDIOENGINE_FMT_S32BE: + return AE_FMT_S32BE; + case AUDIOENGINE_FMT_S32LE: + return AE_FMT_S32LE; + case AUDIOENGINE_FMT_S32NE: + return AE_FMT_S32NE; + case AUDIOENGINE_FMT_S24BE4: + return AE_FMT_S24BE4; + case AUDIOENGINE_FMT_S24LE4: + return AE_FMT_S24LE4; + case AUDIOENGINE_FMT_S24NE4: + return AE_FMT_S24NE4; + case AUDIOENGINE_FMT_S24NE4MSB: + return AE_FMT_S24NE4MSB; + case AUDIOENGINE_FMT_S24BE3: + return AE_FMT_S24BE3; + case AUDIOENGINE_FMT_S24LE3: + return AE_FMT_S24LE3; + case AUDIOENGINE_FMT_S24NE3: + return AE_FMT_S24NE3; + case AUDIOENGINE_FMT_DOUBLE: + return AE_FMT_DOUBLE; + case AUDIOENGINE_FMT_FLOAT: + return AE_FMT_FLOAT; + case AUDIOENGINE_FMT_RAW: + return AE_FMT_RAW; + case AUDIOENGINE_FMT_U8P: + return AE_FMT_U8P; + case AUDIOENGINE_FMT_S16NEP: + return AE_FMT_S16NEP; + case AUDIOENGINE_FMT_S32NEP: + return AE_FMT_S32NEP; + case AUDIOENGINE_FMT_S24NE4P: + return AE_FMT_S24NE4P; + case AUDIOENGINE_FMT_S24NE4MSBP: + return AE_FMT_S24NE4MSBP; + case AUDIOENGINE_FMT_S24NE3P: + return AE_FMT_S24NE3P; + case AUDIOENGINE_FMT_DOUBLEP: + return AE_FMT_DOUBLEP; + case AUDIOENGINE_FMT_FLOATP: + return AE_FMT_FLOATP; + case AUDIOENGINE_FMT_MAX: + return AE_FMT_MAX; + case AUDIOENGINE_FMT_INVALID: + default: + return AE_FMT_INVALID; + } +} + +AudioEngineDataFormat TranslateAEFormatToAddon(AEDataFormat format) +{ + switch (format) + { + case AE_FMT_U8: + return AUDIOENGINE_FMT_U8; + case AE_FMT_S16BE: + return AUDIOENGINE_FMT_S16BE; + case AE_FMT_S16LE: + return AUDIOENGINE_FMT_S16LE; + case AE_FMT_S16NE: + return AUDIOENGINE_FMT_S16NE; + case AE_FMT_S32BE: + return AUDIOENGINE_FMT_S32BE; + case AE_FMT_S32LE: + return AUDIOENGINE_FMT_S32LE; + case AE_FMT_S32NE: + return AUDIOENGINE_FMT_S32NE; + case AE_FMT_S24BE4: + return AUDIOENGINE_FMT_S24BE4; + case AE_FMT_S24LE4: + return AUDIOENGINE_FMT_S24LE4; + case AE_FMT_S24NE4: + return AUDIOENGINE_FMT_S24NE4; + case AE_FMT_S24NE4MSB: + return AUDIOENGINE_FMT_S24NE4MSB; + case AE_FMT_S24BE3: + return AUDIOENGINE_FMT_S24BE3; + case AE_FMT_S24LE3: + return AUDIOENGINE_FMT_S24LE3; + case AE_FMT_S24NE3: + return AUDIOENGINE_FMT_S24NE3; + case AE_FMT_DOUBLE: + return AUDIOENGINE_FMT_DOUBLE; + case AE_FMT_FLOAT: + return AUDIOENGINE_FMT_FLOAT; + case AE_FMT_RAW: + return AUDIOENGINE_FMT_RAW; + case AE_FMT_U8P: + return AUDIOENGINE_FMT_U8P; + case AE_FMT_S16NEP: + return AUDIOENGINE_FMT_S16NEP; + case AE_FMT_S32NEP: + return AUDIOENGINE_FMT_S32NEP; + case AE_FMT_S24NE4P: + return AUDIOENGINE_FMT_S24NE4P; + case AE_FMT_S24NE4MSBP: + return AUDIOENGINE_FMT_S24NE4MSBP; + case AE_FMT_S24NE3P: + return AUDIOENGINE_FMT_S24NE3P; + case AE_FMT_DOUBLEP: + return AUDIOENGINE_FMT_DOUBLEP; + case AE_FMT_FLOATP: + return AUDIOENGINE_FMT_FLOATP; + case AE_FMT_MAX: + return AUDIOENGINE_FMT_MAX; + case AE_FMT_INVALID: + default: + return AUDIOENGINE_FMT_INVALID; + } +} + +class CAddonAudioStream : public IInterfaceClassHdl +{ +public: + CAddonAudioStream() : IInterfaceClassHdl(InterfaceKodiClass::IAEStream) {} + + IAEStream* m_stream; +}; + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_audio_engine_h::InitDirect(directFuncToKodi_audio_engine_h* ifcToKodi, + directFuncToAddon_audio_engine_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_audioengine_get_current_sink_format_v1 = + kodi_audioengine_get_current_sink_format_v1; + ifcToKodi->kodi_audioengine_is_planar_format_v1 = kodi_audioengine_is_planar_format_v1; + ifcToKodi->kodi_audioengine_stream_make_v1 = kodi_audioengine_stream_make_v1; + ifcToKodi->kodi_audioengine_stream_free_v1 = kodi_audioengine_stream_free_v1; + ifcToKodi->kodi_audioengine_stream_get_space_v1 = kodi_audioengine_stream_get_space_v1; + ifcToKodi->kodi_audioengine_stream_add_data_v1 = kodi_audioengine_stream_add_data_v1; + ifcToKodi->kodi_audioengine_stream_get_delay_v1 = kodi_audioengine_stream_get_delay_v1; + ifcToKodi->kodi_audioengine_stream_is_buffering_v1 = kodi_audioengine_stream_is_buffering_v1; + ifcToKodi->kodi_audioengine_stream_get_cache_time_v1 = kodi_audioengine_stream_get_cache_time_v1; + ifcToKodi->kodi_audioengine_stream_get_cache_total_v1 = + kodi_audioengine_stream_get_cache_total_v1; + ifcToKodi->kodi_audioengine_stream_pause_v1 = kodi_audioengine_stream_pause_v1; + ifcToKodi->kodi_audioengine_stream_resume_v1 = kodi_audioengine_stream_resume_v1; + ifcToKodi->kodi_audioengine_stream_drain_v1 = kodi_audioengine_stream_drain_v1; + ifcToKodi->kodi_audioengine_stream_is_draining_v1 = kodi_audioengine_stream_is_draining_v1; + ifcToKodi->kodi_audioengine_stream_is_drained_v1 = kodi_audioengine_stream_is_drained_v1; + ifcToKodi->kodi_audioengine_stream_flush_v1 = kodi_audioengine_stream_flush_v1; + ifcToKodi->kodi_audioengine_stream_get_volume_v1 = kodi_audioengine_stream_get_volume_v1; + ifcToKodi->kodi_audioengine_stream_set_volume_v1 = kodi_audioengine_stream_set_volume_v1; + ifcToKodi->kodi_audioengine_stream_get_amplification_v1 = + kodi_audioengine_stream_get_amplification_v1; + ifcToKodi->kodi_audioengine_stream_set_amplification_v1 = + kodi_audioengine_stream_set_amplification_v1; + ifcToKodi->kodi_audioengine_stream_get_frame_size_v1 = kodi_audioengine_stream_get_frame_size_v1; + ifcToKodi->kodi_audioengine_stream_get_channel_count_v1 = + kodi_audioengine_stream_get_channel_count_v1; + ifcToKodi->kodi_audioengine_stream_get_sample_rate_v1 = + kodi_audioengine_stream_get_sample_rate_v1; + ifcToKodi->kodi_audioengine_stream_get_data_format_v1 = + kodi_audioengine_stream_get_data_format_v1; + ifcToKodi->kodi_audioengine_stream_get_resample_ratio_v1 = + kodi_audioengine_stream_get_resample_ratio_v1; + ifcToKodi->kodi_audioengine_stream_set_resample_ratio_v1 = + kodi_audioengine_stream_set_resample_ratio_v1; +} + +bool CHdl_kodi_audio_engine_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_audio_engine_h) + return false; + + switch (func) + { + case funcParent_kodi_audioengine_get_current_sink_format_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_get_current_sink_format(struct AUDIO_ENGINE_FMT* fmt) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_get_current_sink_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_get_current_sink_format_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_get_current_sink_format_v1 t = in.get().as(); + struct AUDIO_ENGINE_FMT fmt; /* CheckAPIUse_WAY_15 (0001-3) */ + bool auto_gen_ret = + kodi_audioengine_get_current_sink_format_v1(this, &fmt /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack( + out, msgParent_OUT_kodi_audioengine_get_current_sink_format_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, &fmt /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_audioengine_is_planar_format_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_is_planar_format(enum AudioEngineDataFormat format) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_is_planar_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_is_planar_format_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_is_planar_format_v1 t = in.get().as(); + enum AudioEngineDataFormat format = std::get<0>(t); /* CheckAPIUse_WAY_14a (0001) */ + bool auto_gen_ret = + kodi_audioengine_is_planar_format_v1(this, format /* CheckAPIUse_WAY_14a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_is_planar_format_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_make_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_AE_HDL kodi_audioengine_stream_make(const struct AUDIO_ENGINE_FMT* fmt, unsigned int options) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_make_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_make_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_make_v1 t = in.get().as(); + AUDIO_ENGINE_FMT fmt; /* CheckAPIUse_WAY_16 (0001) */ + std::get<0>(t).SetCStructure(&fmt); /* CheckAPIUse_WAY_16 (0001) */ + unsigned int options = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_AE_HDL auto_gen_ret = kodi_audioengine_stream_make_v1( + this, &fmt /* CheckAPIUse_WAY_16 (0001) */, options /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_make_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_audioengine_stream_free_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_free(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_free_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_free_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_free_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_audioengine_stream_free_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_get_space_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_space(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_space_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_space_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int auto_gen_ret = + kodi_audioengine_stream_get_space_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_space_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_add_data_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_add_data(KODI_AE_HDL hdl, uint8_t* const* data, size_t planes, size_t data_size, unsigned int offset, unsigned int frames, unsigned int frame_size, double pts, bool hasDownmix, double centerMixLevel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple>, size_t /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, double /* CheckAPIUse_WAY_11 (0006) */, bool /* CheckAPIUse_WAY_11 (0006) */, double /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_audioengine_stream_add_data_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_add_data_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_add_data_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::vector>& ifc_data = std::get<1>(t); /* CheckAPIUse_WAY_2 (0001) */ + size_t planes = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + size_t data_size = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int offset = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int frames = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int frame_size = std::get<6>(t); /* CheckAPIUse_WAY_10 (0001) */ + double pts = std::get<7>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool hasDownmix = std::get<8>(t); /* CheckAPIUse_WAY_10 (0001) */ + double centerMixLevel = std::get<9>(t); /* CheckAPIUse_WAY_10 (0001) */ + uint8_t** data = new uint8_t*[ifc_data.size()]; /* CheckAPIUse_WAY_2 (0001) */ + for (size_t i = 0; i < ifc_data.size(); ++i) /* CheckAPIUse_WAY_2 (0001) */ + data[i] = ifc_data[i].data(); /* CheckAPIUse_WAY_2 (0001) */ + unsigned int auto_gen_ret = kodi_audioengine_stream_add_data_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, data /* CheckAPIUse_WAY_2 (0001) */, + planes /* CheckAPIUse_WAY_10 (0001) */, data_size /* CheckAPIUse_WAY_10 (0001) */, + offset /* CheckAPIUse_WAY_10 (0001) */, frames /* CheckAPIUse_WAY_10 (0001) */, + frame_size /* CheckAPIUse_WAY_10 (0001) */, pts /* CheckAPIUse_WAY_10 (0001) */, + hasDownmix /* CheckAPIUse_WAY_10 (0001) */, + centerMixLevel /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_add_data_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + delete[] data; /* CheckAPIUse_WAY_2 (0001) */ + return true; + } + case funcParent_kodi_audioengine_stream_get_delay_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_delay(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_delay_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_delay_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_delay_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double auto_gen_ret = + kodi_audioengine_stream_get_delay_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_delay_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_is_buffering_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_buffering(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_buffering_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_buffering_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_is_buffering_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_audioengine_stream_is_buffering_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_is_buffering_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_cache_time_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_time(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_cache_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_cache_time_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_cache_time_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double auto_gen_ret = + kodi_audioengine_stream_get_cache_time_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_cache_time_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_cache_total_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_total(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_cache_total_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_cache_total_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_cache_total_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double auto_gen_ret = + kodi_audioengine_stream_get_cache_total_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_cache_total_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_pause_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_pause(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_pause_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_pause_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_pause_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_audioengine_stream_pause_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_resume_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_resume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_resume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_resume_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_resume_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_audioengine_stream_resume_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_drain_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_drain(KODI_AE_HDL hdl, bool wait) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_drain_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_drain_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_drain_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool wait = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_audioengine_stream_drain_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + wait /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_is_draining_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_draining(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_draining_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_draining_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_is_draining_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_audioengine_stream_is_draining_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_is_draining_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_is_drained_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_drained(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_drained_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_drained_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_is_drained_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_audioengine_stream_is_drained_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_is_drained_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_flush_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_flush(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_flush_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_flush_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_flush_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_audioengine_stream_flush_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_get_volume_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_audioengine_stream_get_volume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_volume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_volume_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_volume_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = + kodi_audioengine_stream_get_volume_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_volume_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_set_volume_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_volume(KODI_AE_HDL hdl, float volume) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_volume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_volume_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_set_volume_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float volume = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_audioengine_stream_set_volume_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + volume /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_get_amplification_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_audioengine_stream_get_amplification(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_amplification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_amplification_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_amplification_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = + kodi_audioengine_stream_get_amplification_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_amplification_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_set_amplification_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_amplification(KODI_AE_HDL hdl, float amplify) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_amplification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_amplification_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_set_amplification_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float amplify = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_audioengine_stream_set_amplification_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + amplify /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_audioengine_stream_get_frame_size_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_frame_size(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_frame_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_frame_size_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_frame_size_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int auto_gen_ret = + kodi_audioengine_stream_get_frame_size_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_frame_size_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_channel_count_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_channel_count(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_channel_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_channel_count_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_channel_count_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int auto_gen_ret = + kodi_audioengine_stream_get_channel_count_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_channel_count_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_sample_rate_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_sample_rate(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_sample_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_sample_rate_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_sample_rate_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int auto_gen_ret = + kodi_audioengine_stream_get_sample_rate_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_sample_rate_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_data_format_v1: + { + // Original API call: ATTR_DLL_EXPORT enum AudioEngineDataFormat kodi_audioengine_stream_get_data_format( KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_data_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_data_format_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_data_format_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + enum AudioEngineDataFormat auto_gen_ret = + kodi_audioengine_stream_get_data_format_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_data_format_v1( + auto_gen_ret /* Return_WAY_3 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_get_resample_ratio_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_resample_ratio(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_resample_ratio_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_resample_ratio_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_get_resample_ratio_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double auto_gen_ret = + kodi_audioengine_stream_get_resample_ratio_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_audioengine_stream_get_resample_ratio_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_audioengine_stream_set_resample_ratio_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_resample_ratio(KODI_AE_HDL hdl, double ratio) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_resample_ratio_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_resample_ratio_v1; /* Autogenerated */ + msgParent__IN_kodi_audioengine_stream_set_resample_ratio_v1 t = in.get().as(); + KODI_AE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double ratio = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_audioengine_stream_set_resample_ratio_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + ratio /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_audio_engine_h::{}: addon called with unknown function id '{}' on group " + "'audio_engine_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_audio_engine_h::kodi_audioengine_get_current_sink_format_v1( + void* thisClassHdl, struct AUDIO_ENGINE_FMT* fmt) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + IAE* engine = CServiceBroker::GetActiveAE(); + if (!engine) + return false; + + AEAudioFormat sinkFormat; + if (!engine->GetCurrentSinkFormat(sinkFormat)) + { + CLog::Log(LOGERROR, "CHdl_kodi_audio_engine_h::{} - failed to get current sink format from AE!", + __func__); + return false; + } + + fmt->data_format = TranslateAEFormatToAddon(sinkFormat.m_dataFormat); + fmt->sample_rate = sinkFormat.m_sampleRate; + fmt->frames = sinkFormat.m_frames; + fmt->frame_size = sinkFormat.m_frameSize; + fmt->channel_count = sinkFormat.m_channelLayout.Count(); + for (unsigned int ch = 0; ch < fmt->channel_count && ch < AUDIOENGINE_CH_MAX; ++ch) + { + fmt->channels[ch] = TranslateAEChannelToAddon(sinkFormat.m_channelLayout[ch]); + } + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_audio_engine_h::kodi_audioengine_is_planar_format_v1( + void* thisClassHdl, enum AudioEngineDataFormat format) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + if (format >= AUDIOENGINE_FMT_U8P || format <= AUDIOENGINE_FMT_FLOATP) + return true; + return false; + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_AE_HDL CHdl_kodi_audio_engine_h::kodi_audioengine_stream_make_v1( + void* thisClassHdl, const struct AUDIO_ENGINE_FMT* fmt, unsigned int options) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + IAE* engine = CServiceBroker::GetActiveAE(); + if (!engine) + return nullptr; + + CAEChannelInfo layout; + for (unsigned int ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) + { + if (fmt->channels[ch] == AUDIOENGINE_CH_NULL) + break; + layout += TranslateAEChannelToKodi(fmt->channels[ch]); + } + + AEAudioFormat format; + format.m_channelLayout = layout; + format.m_dataFormat = TranslateAEFormatToKodi(fmt->data_format); + format.m_sampleRate = fmt->sample_rate; + + /* Translate addon options to kodi's options */ + int kodiOption = 0; + if (options & AUDIO_STREAM_FORCE_RESAMPLE) + kodiOption |= AESTREAM_FORCE_RESAMPLE; + if (options & AUDIO_STREAM_PAUSED) + kodiOption |= AESTREAM_PAUSED; + if (options & AUDIO_STREAM_AUTOSTART) + kodiOption |= AESTREAM_AUTOSTART; + + CAddonAudioStream* stream = new CAddonAudioStream(); + stream->m_stream = engine->MakeStream(format, kodiOption).release(); + if (!stream->m_stream) + { + delete stream; + return nullptr; + } + + thisClass->m_process->RegisterClass(stream); + return KODI_AE_HDL(stream); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_free_v1(void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream) + return; + + thisClass->m_process->UnregisterClass(stream); + IAE* engine = CServiceBroker::GetActiveAE(); + if (engine) + engine->FreeStream(stream->m_stream, true); + delete stream; + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_space_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0; + + return stream->m_stream->GetSpace(); + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_audio_engine_h::kodi_audioengine_stream_add_data_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + uint8_t* const* data, + size_t planes, + size_t data_size, + unsigned int offset, + unsigned int frames, + unsigned int frame_size, + double pts, + bool hasDownmix, + double centerMixLevel) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream || !CServiceBroker::GetActiveAE()) + return 0; + + IAEStream::ExtData extData; + extData.pts = pts; + extData.hasDownmix = hasDownmix; + extData.centerMixLevel = centerMixLevel; + + return stream->m_stream->AddData(data, offset, frames, &extData); + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_delay_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0; + + return stream->m_stream->GetDelay(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_audio_engine_h::kodi_audioengine_stream_is_buffering_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return false; + + return stream->m_stream->IsBuffering(); + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_cache_time_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0; + + return stream->m_stream->GetCacheTime(); + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_cache_total_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0; + + return stream->m_stream->GetCacheTotal(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_pause_v1(void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->Pause(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_resume_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->Resume(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_drain_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + bool wait) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->Drain(wait); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_audio_engine_h::kodi_audioengine_stream_is_draining_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return false; + + return stream->m_stream->IsDraining(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_audio_engine_h::kodi_audioengine_stream_is_drained_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return false; + + return stream->m_stream->IsDrained(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_flush_v1(void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->Flush(); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_volume_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0f; + + return stream->m_stream->GetVolume(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_set_volume_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + float volume) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->SetVolume(volume); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_amplification_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0f; + + return stream->m_stream->GetAmplification(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_set_amplification_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + float amplify) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->SetAmplification(amplify); + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_frame_size_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0; + + return stream->m_stream->GetFrameSize(); + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_channel_count_v1( + void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0; + + return stream->m_stream->GetChannelCount(); + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_sample_rate_v1( + void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0; + + return stream->m_stream->GetSampleRate(); + + /*---AUTO_GEN_PARSE---*/ +} + +enum AudioEngineDataFormat CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_data_format_v1( + void* thisClassHdl, KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return AUDIOENGINE_FMT_INVALID; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return AudioEngineDataFormat::AUDIOENGINE_FMT_INVALID; + + return TranslateAEFormatToAddon(stream->m_stream->GetDataFormat()); + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_audio_engine_h::kodi_audioengine_stream_get_resample_ratio_v1(void* thisClassHdl, + KODI_AE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return 0.0; + + return stream->m_stream->GetResampleRatio(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_audio_engine_h::kodi_audioengine_stream_set_resample_ratio_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + double ratio) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CAddonAudioStream* stream = static_cast(hdl); + if (!stream || !stream->m_stream) + return; + + stream->m_stream->SetResampleRatio(ratio); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/audio_engine.h b/xbmc/addons/interface/api/audio_engine.h new file mode 100644 index 0000000000000..70e698c8eaf05 --- /dev/null +++ b/xbmc/addons/interface/api/audio_engine.h @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/audio_engine.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "cores/AudioEngine/Utils/AEChannelData.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_audio_engine_h; +struct directFuncToKodi_audio_engine_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +AEChannel TranslateAEChannelToKodi(AudioEngineChannel channel); +AudioEngineChannel TranslateAEChannelToAddon(AEChannel channel); +AEDataFormat TranslateAEFormatToKodi(AudioEngineDataFormat format); +AudioEngineDataFormat TranslateAEFormatToAddon(AEDataFormat format); +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_audio_engine_h : public IMsgHdl +{ +public: + CHdl_kodi_audio_engine_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_audio_engine_h* ifcToKodi, + directFuncToAddon_audio_engine_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_audioengine_get_current_sink_format_v1( + void* thisClassHdl, struct AUDIO_ENGINE_FMT* fmt); // Added with API 1 + + static bool kodi_audioengine_is_planar_format_v1( + void* thisClassHdl, enum AudioEngineDataFormat format); // Added with API 1 + + static KODI_AE_HDL kodi_audioengine_stream_make_v1(void* thisClassHdl, + const struct AUDIO_ENGINE_FMT* fmt, + unsigned int options); // Added with API 1 + + static void kodi_audioengine_stream_free_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static unsigned int kodi_audioengine_stream_get_space_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static unsigned int kodi_audioengine_stream_add_data_v1( + void* thisClassHdl, + KODI_AE_HDL hdl, + uint8_t* const* data, + size_t planes, + size_t data_size, + unsigned int offset, + unsigned int frames, + unsigned int frame_size, + double pts, + bool hasDownmix, + double centerMixLevel); // Added with API 1 + + static double kodi_audioengine_stream_get_delay_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static bool kodi_audioengine_stream_is_buffering_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static double kodi_audioengine_stream_get_cache_time_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static double kodi_audioengine_stream_get_cache_total_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_pause_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_resume_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_drain_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + bool wait); // Added with API 1 + + static bool kodi_audioengine_stream_is_draining_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static bool kodi_audioengine_stream_is_drained_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_flush_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static float kodi_audioengine_stream_get_volume_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_set_volume_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + float volume); // Added with API 1 + + static float kodi_audioengine_stream_get_amplification_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_set_amplification_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + float amplify); // Added with API 1 + + static unsigned int kodi_audioengine_stream_get_frame_size_v1( + void* thisClassHdl, KODI_AE_HDL hdl); // Added with API 1 + + static unsigned int kodi_audioengine_stream_get_channel_count_v1( + void* thisClassHdl, KODI_AE_HDL hdl); // Added with API 1 + + static unsigned int kodi_audioengine_stream_get_sample_rate_v1( + void* thisClassHdl, KODI_AE_HDL hdl); // Added with API 1 + + static enum AudioEngineDataFormat kodi_audioengine_stream_get_data_format_v1( + void* thisClassHdl, KODI_AE_HDL hdl); // Added with API 1 + + static double kodi_audioengine_stream_get_resample_ratio_v1(void* thisClassHdl, + KODI_AE_HDL hdl); // Added with API 1 + + static void kodi_audioengine_stream_set_resample_ratio_v1(void* thisClassHdl, + KODI_AE_HDL hdl, + double ratio); // Added with API 1 + + + directFuncToAddon_audio_engine_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/filesystem.cpp b/xbmc/addons/interface/api/filesystem.cpp new file mode 100644 index 0000000000000..8d7fb0d9ebfbd --- /dev/null +++ b/xbmc/addons/interface/api/filesystem.cpp @@ -0,0 +1,2143 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "filesystem.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/filesystem.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "FileItem.h" +#include "Util.h" +#include "addons/interface/RunningProcess.h" +#include "filesystem/CurlFile.h" +#include "filesystem/Directory.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "platform/Filesystem.h" +#include "utils/Crc32.h" +#include "utils/HttpHeader.h" +#include "utils/StringUtils.h" +#include "utils/URIUtils.h" + +#if defined(TARGET_WINDOWS) +#ifndef S_IFLNK +#define S_IFLNK 0120000 +#endif +#ifndef S_ISBLK +#define S_ISBLK(m) (0) +#endif +#ifndef S_ISSOCK +#define S_ISSOCK(m) (0) +#endif +#ifndef S_ISLNK +#define S_ISLNK(m) ((m & S_IFLNK) != 0) +#endif +#ifndef S_ISCHR +#define S_ISCHR(m) ((m & _S_IFCHR) != 0) +#endif +#ifndef S_ISDIR +#define S_ISDIR(m) ((m & _S_IFDIR) != 0) +#endif +#ifndef S_ISFIFO +#define S_ISFIFO(m) ((m & _S_IFIFO) != 0) +#endif +#ifndef S_ISREG +#define S_ISREG(m) ((m & _S_IFREG) != 0) +#endif +#endif + +using namespace XFILE; + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +namespace +{ + +unsigned int TranslateFileReadBitsToKodi(unsigned int addonFlags) +{ + unsigned int kodiFlags = 0; + + if (addonFlags & ADDON_READ_TRUNCATED) + kodiFlags |= READ_TRUNCATED; + if (addonFlags & ADDON_READ_CHUNKED) + kodiFlags |= READ_CHUNKED; + if (addonFlags & ADDON_READ_CACHED) + kodiFlags |= READ_CACHED; + if (addonFlags & ADDON_READ_NO_CACHE) + kodiFlags |= READ_NO_CACHE; + if (addonFlags & ADDON_READ_BITRATE) + kodiFlags |= READ_BITRATE; + if (addonFlags & ADDON_READ_MULTI_STREAM) + kodiFlags |= READ_MULTI_STREAM; + if (addonFlags & ADDON_READ_AUDIO_VIDEO) + kodiFlags |= READ_AUDIO_VIDEO; + if (addonFlags & ADDON_READ_AFTER_WRITE) + kodiFlags |= READ_AFTER_WRITE; + if (addonFlags & READ_REOPEN) + kodiFlags |= READ_REOPEN; + + return kodiFlags; +} + +XFILE::FileProperty TranslateFilePropertyToKodi(FilePropertyTypes type) +{ + XFILE::FileProperty internalType; + switch (type) + { + case ADDON_FILE_PROPERTY_RESPONSE_PROTOCOL: + internalType = XFILE::FILE_PROPERTY_RESPONSE_PROTOCOL; + break; + case ADDON_FILE_PROPERTY_RESPONSE_HEADER: + internalType = XFILE::FILE_PROPERTY_RESPONSE_HEADER; + break; + case ADDON_FILE_PROPERTY_CONTENT_TYPE: + internalType = XFILE::FILE_PROPERTY_CONTENT_TYPE; + break; + case ADDON_FILE_PROPERTY_CONTENT_CHARSET: + internalType = XFILE::FILE_PROPERTY_CONTENT_CHARSET; + break; + case ADDON_FILE_PROPERTY_MIME_TYPE: + internalType = XFILE::FILE_PROPERTY_MIME_TYPE; + break; + case ADDON_FILE_PROPERTY_EFFECTIVE_URL: + internalType = XFILE::FILE_PROPERTY_EFFECTIVE_URL; + break; + default: + CLog::Log(LOGERROR, "{} - invalid type", __func__); + internalType = XFILE::FILE_PROPERTY_RESPONSE_PROTOCOL; + break; + }; + + return internalType; +} + +static void CFileItemListToVFSDirEntries(VFS_DIR_ENTRY* entries, const CFileItemList& items) +{ + for (unsigned int i = 0; i < static_cast(items.Size()); ++i) + { + entries[i].label = strdup(items[i]->GetLabel().c_str()); + entries[i].path = strdup(items[i]->GetPath().c_str()); + entries[i].size = items[i]->m_dwSize; + entries[i].folder = items[i]->m_bIsFolder; + items[i]->m_dateTime.GetAsTime(entries[i].date_time); + } +} + +/* + * CHttpHeader to use on addons, used with IInterfaceClassHdl to know opened parts + * in case of addon crash or wrong exits. + */ +class CAddonHttpHeader : public IInterfaceClassHdl, public CHttpHeader +{ +public: + CAddonHttpHeader() : IInterfaceClassHdl(InterfaceKodiClass::CHttpHeader) {} +}; + +/* + * CFile to use on addons, used with IInterfaceClassHdl to know opened parts + * in case of addon crash or wrong exits. + */ +class CAddonFile : public IInterfaceClassHdl, public CFile +{ +public: + CAddonFile() : IInterfaceClassHdl(InterfaceKodiClass::CFile) {} +}; + +} /* namespace */ + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_filesystem_h::InitDirect(directFuncToKodi_filesystem_h* ifcToKodi, + directFuncToAddon_filesystem_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_vfs_can_open_directory_v1 = kodi_vfs_can_open_directory_v1; + ifcToKodi->kodi_vfs_create_directory_v1 = kodi_vfs_create_directory_v1; + ifcToKodi->kodi_vfs_remove_directory_v1 = kodi_vfs_remove_directory_v1; + ifcToKodi->kodi_vfs_remove_directory_recursive_v1 = kodi_vfs_remove_directory_recursive_v1; + ifcToKodi->kodi_vfs_directory_exists_v1 = kodi_vfs_directory_exists_v1; + ifcToKodi->kodi_vfs_get_directory_v1 = kodi_vfs_get_directory_v1; + // Unused "kodi_vfs_free_directory", done only in addon lib + ifcToKodi->kodi_vfs_file_exists_v1 = kodi_vfs_file_exists_v1; + ifcToKodi->kodi_vfs_stat_file_v1 = kodi_vfs_stat_file_v1; + ifcToKodi->kodi_vfs_delete_file_v1 = kodi_vfs_delete_file_v1; + ifcToKodi->kodi_vfs_rename_file_v1 = kodi_vfs_rename_file_v1; + ifcToKodi->kodi_vfs_copy_file_v1 = kodi_vfs_copy_file_v1; + ifcToKodi->kodi_vfs_get_file_md5_v1 = kodi_vfs_get_file_md5_v1; + ifcToKodi->kodi_vfs_get_cache_thumb_name_v1 = kodi_vfs_get_cache_thumb_name_v1; + ifcToKodi->kodi_vfs_make_legal_filename_v1 = kodi_vfs_make_legal_filename_v1; + ifcToKodi->kodi_vfs_make_legal_path_v1 = kodi_vfs_make_legal_path_v1; + ifcToKodi->kodi_vfs_translate_special_protocol_v1 = kodi_vfs_translate_special_protocol_v1; + ifcToKodi->kodi_vfs_is_internet_stream_v1 = kodi_vfs_is_internet_stream_v1; + ifcToKodi->kodi_vfs_is_on_lan_v1 = kodi_vfs_is_on_lan_v1; + ifcToKodi->kodi_vfs_is_remote_v1 = kodi_vfs_is_remote_v1; + ifcToKodi->kodi_vfs_is_local_v1 = kodi_vfs_is_local_v1; + ifcToKodi->kodi_vfs_is_url_v1 = kodi_vfs_is_url_v1; + ifcToKodi->kodi_vfs_get_mime_type_v1 = kodi_vfs_get_mime_type_v1; + ifcToKodi->kodi_vfs_get_content_type_v1 = kodi_vfs_get_content_type_v1; + ifcToKodi->kodi_vfs_get_cookies_v1 = kodi_vfs_get_cookies_v1; + ifcToKodi->kodi_vfs_get_disk_space_v1 = kodi_vfs_get_disk_space_v1; + ifcToKodi->kodi_vfs_http_header_open_v1 = kodi_vfs_http_header_open_v1; + ifcToKodi->kodi_vfs_http_header_close_v1 = kodi_vfs_http_header_close_v1; + ifcToKodi->kodi_vfs_http_header_get_value_v1 = kodi_vfs_http_header_get_value_v1; + ifcToKodi->kodi_vfs_http_header_get_values_v1 = kodi_vfs_http_header_get_values_v1; + ifcToKodi->kodi_vfs_http_header_get_header_v1 = kodi_vfs_http_header_get_header_v1; + ifcToKodi->kodi_vfs_http_header_get_mime_type_v1 = kodi_vfs_http_header_get_mime_type_v1; + ifcToKodi->kodi_vfs_http_header_get_charset_v1 = kodi_vfs_http_header_get_charset_v1; + ifcToKodi->kodi_vfs_http_header_get_proto_line_v1 = kodi_vfs_http_header_get_proto_line_v1; + ifcToKodi->kodi_vfs_file_open_v1 = kodi_vfs_file_open_v1; + ifcToKodi->kodi_vfs_file_open_for_write_v1 = kodi_vfs_file_open_for_write_v1; + ifcToKodi->kodi_vfs_file_curl_create_v1 = kodi_vfs_file_curl_create_v1; + ifcToKodi->kodi_vfs_file_curl_add_option_v1 = kodi_vfs_file_curl_add_option_v1; + ifcToKodi->kodi_vfs_file_curl_open_v1 = kodi_vfs_file_curl_open_v1; + ifcToKodi->kodi_vfs_file_close_v1 = kodi_vfs_file_close_v1; + ifcToKodi->kodi_vfs_file_read_v1 = kodi_vfs_file_read_v1; + ifcToKodi->kodi_vfs_file_read_line_v1 = kodi_vfs_file_read_line_v1; + ifcToKodi->kodi_vfs_file_write_v1 = kodi_vfs_file_write_v1; + ifcToKodi->kodi_vfs_file_flush_v1 = kodi_vfs_file_flush_v1; + ifcToKodi->kodi_vfs_file_seek_v1 = kodi_vfs_file_seek_v1; + ifcToKodi->kodi_vfs_file_truncate_v1 = kodi_vfs_file_truncate_v1; + ifcToKodi->kodi_vfs_file_get_position_v1 = kodi_vfs_file_get_position_v1; + ifcToKodi->kodi_vfs_file_get_length_v1 = kodi_vfs_file_get_length_v1; + ifcToKodi->kodi_vfs_file_at_end_v1 = kodi_vfs_file_at_end_v1; + ifcToKodi->kodi_vfs_file_get_download_speed_v1 = kodi_vfs_file_get_download_speed_v1; + ifcToKodi->kodi_vfs_file_get_chunk_size_v1 = kodi_vfs_file_get_chunk_size_v1; + ifcToKodi->kodi_vfs_file_io_ctl_get_seek_possible_v1 = kodi_vfs_file_io_ctl_get_seek_possible_v1; + ifcToKodi->kodi_vfs_file_io_ctl_get_cache_status_v1 = kodi_vfs_file_io_ctl_get_cache_status_v1; + ifcToKodi->kodi_vfs_file_io_ctl_set_cache_rate_v1 = kodi_vfs_file_io_ctl_set_cache_rate_v1; + ifcToKodi->kodi_vfs_file_io_ctl_set_retry_v1 = kodi_vfs_file_io_ctl_set_retry_v1; + ifcToKodi->kodi_vfs_file_get_property_value_v1 = kodi_vfs_file_get_property_value_v1; + ifcToKodi->kodi_vfs_file_get_property_values_v1 = kodi_vfs_file_get_property_values_v1; +} + +bool CHdl_kodi_filesystem_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_filesystem_h) + return false; + + switch (func) + { + case funcParent_kodi_vfs_can_open_directory_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_can_open_directory(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_can_open_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_can_open_directory_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_can_open_directory_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_can_open_directory_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_can_open_directory_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_create_directory_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_create_directory(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_create_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_create_directory_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_create_directory_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_create_directory_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_create_directory_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_remove_directory_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_remove_directory(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_remove_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_remove_directory_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_remove_directory_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_remove_directory_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_remove_directory_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_remove_directory_recursive_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_remove_directory_recursive(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_remove_directory_recursive_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_remove_directory_recursive_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_remove_directory_recursive_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_remove_directory_recursive_v1( + this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_remove_directory_recursive_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_directory_exists_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_directory_exists(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_directory_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_directory_exists_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_directory_exists_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_directory_exists_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_directory_exists_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_get_directory_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_directory(const char* path, const char* mask, struct VFS_DIR_ENTRY** items, size_t* num_items) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_get_directory_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_directory_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& mask = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + struct VFS_DIR_ENTRY* items = nullptr; /* CheckAPIUse_WAY_17 (0001) */ + size_t num_items = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_vfs_get_directory_v1( + this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */, + mask.c_str() /* CheckAPIUse_WAY_6a (0001) */, &items /* CheckAPIUse_WAY_17 (0001) */, + &num_items /* CheckAPIUse_WAY_13 (0001) */); + std::vector ifc_items; /* CheckAPIUse_WAY_17 (0001) */ + if (items) + { + ifc_items.reserve(num_items); + for (size_t i = 0; i < num_items; ++i) + { + ifc_items.emplace_back(&items[i]); + ifc_items[i].CleanCStructure(&items[i]); + } + free(items); + } + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_directory_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, ifc_items, + num_items /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_exists_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_exists(const char* filename, bool useCache) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_exists_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_exists_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool useCache = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = + kodi_vfs_file_exists_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + useCache /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_file_exists_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_stat_file_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_stat_file(const char* filename, struct VFS_STAT_STRUCTURE* buffer) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_stat_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_stat_file_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_stat_file_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + struct VFS_STAT_STRUCTURE buffer; /* CheckAPIUse_WAY_15 (0001-3) */ + bool auto_gen_ret = + kodi_vfs_stat_file_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &buffer /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_stat_file_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + &buffer /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_vfs_delete_file_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_delete_file(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_delete_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_delete_file_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_delete_file_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_delete_file_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_delete_file_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_rename_file_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_rename_file(const char* filename, const char* newFileName) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_rename_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_rename_file_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_rename_file_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& newFileName = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_rename_file_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + newFileName.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_rename_file_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_copy_file_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_copy_file(const char* filename, const char* dest) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_copy_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_copy_file_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_copy_file_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& dest = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_copy_file_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + dest.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_copy_file_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_get_file_md5_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_get_file_md5(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_file_md5_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_file_md5_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_file_md5_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_vfs_get_file_md5_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_file_md5_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_get_cache_thumb_name_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_get_cache_thumb_name(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_cache_thumb_name_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_cache_thumb_name_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_cache_thumb_name_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_vfs_get_cache_thumb_name_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_cache_thumb_name_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_make_legal_filename_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_make_legal_filename(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_make_legal_filename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_make_legal_filename_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_make_legal_filename_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_vfs_make_legal_filename_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_make_legal_filename_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_make_legal_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_make_legal_path(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_make_legal_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_make_legal_path_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_make_legal_path_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_vfs_make_legal_path_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_make_legal_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_translate_special_protocol_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_translate_special_protocol(const char* strSource) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_translate_special_protocol_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_translate_special_protocol_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_translate_special_protocol_v1 t = in.get().as(); + const std::string& strSource = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_vfs_translate_special_protocol_v1( + this, strSource.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_translate_special_protocol_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_is_internet_stream_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_internet_stream(const char* path, bool strictCheck) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_internet_stream_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_internet_stream_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_is_internet_stream_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool strictCheck = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = + kodi_vfs_is_internet_stream_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */, + strictCheck /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_is_internet_stream_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_is_on_lan_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_on_lan(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_on_lan_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_is_on_lan_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_is_on_lan_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_is_on_lan_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_is_remote_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_remote(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_remote_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_remote_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_is_remote_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_is_remote_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_is_remote_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_is_local_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_local(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_local_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_local_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_is_local_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_is_local_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_is_local_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_is_url_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_url(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_url_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_url_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_is_url_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_is_url_v1(this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_is_url_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_get_mime_type_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_mime_type(const char* url, char** content, const char* useragent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_mime_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_mime_type_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_mime_type_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* content = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& useragent = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_get_mime_type_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &content /* CheckAPIUse_WAY_7 (0001) */, + useragent.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_mime_type_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + content ? content : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (content) /* CheckAPIUse_WAY_7 (0001) */ + free(content); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_vfs_get_content_type_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_content_type(const char* url, char** content, const char* useragent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_content_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_content_type_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_content_type_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* content = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& useragent = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_vfs_get_content_type_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &content /* CheckAPIUse_WAY_7 (0001) */, + useragent.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_content_type_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + content ? content : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (content) /* CheckAPIUse_WAY_7 (0001) */ + free(content); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_vfs_get_cookies_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_cookies(const char* url, char** cookies) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_cookies_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_cookies_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_cookies_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* cookies = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = kodi_vfs_get_cookies_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &cookies /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_get_cookies_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + cookies ? cookies : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (cookies) /* CheckAPIUse_WAY_7 (0001) */ + free(cookies); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_vfs_get_disk_space_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_disk_space(const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_disk_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_disk_space_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_get_disk_space_v1 t = in.get().as(); + const std::string& path = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + uint64_t capacity = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + uint64_t free = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + uint64_t available = std::get<3>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_vfs_get_disk_space_v1( + this, path.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &capacity /* CheckAPIUse_WAY_13 (0001) */, &free /* CheckAPIUse_WAY_13 (0001) */, + &available /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_get_disk_space_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + capacity /* CheckAPIUse_WAY_13 (0001) */, + free /* CheckAPIUse_WAY_13 (0001) */, + available /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_vfs_http_header_open_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_HTTP_HEADER_HDL kodi_vfs_http_header_open(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_open_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_open_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + KODI_HTTP_HEADER_HDL auto_gen_ret = + kodi_vfs_http_header_open_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_open_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_vfs_http_header_close_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_http_header_close(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_close_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_close_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_vfs_http_header_close_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_vfs_http_header_get_value_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_value(KODI_HTTP_HEADER_HDL hdl, const char* param) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_value_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_value_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& param = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_vfs_http_header_get_value_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, param.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_value_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_http_header_get_values_v1: + { + // Original API call: ATTR_DLL_EXPORT char** kodi_vfs_http_header_get_values(KODI_HTTP_HEADER_HDL hdl, const char* param, size_t* length) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_values_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_http_header_get_values_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_values_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& param = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + size_t length = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + char** auto_gen_ret = kodi_vfs_http_header_get_values_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, param.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &length /* CheckAPIUse_WAY_13 (0001) */); + std::vector auto_gen_ret_cpp; + if (auto_gen_ret) + { + auto_gen_ret_cpp.reserve(length); + for (size_t i = 0; i < length; ++i) + { + if (auto_gen_ret[i]) + { + auto_gen_ret_cpp.emplace_back(auto_gen_ret[i]); + free(auto_gen_ret[i]); + } + } + free(auto_gen_ret); + } + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_values_v1( + auto_gen_ret_cpp /* Return_WAY_6 (0001) */, + length /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_vfs_http_header_get_header_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_header(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_header_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_header_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_header_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_vfs_http_header_get_header_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_header_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_http_header_get_mime_type_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_mime_type(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_mime_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_mime_type_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_mime_type_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_vfs_http_header_get_mime_type_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_mime_type_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_http_header_get_charset_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_charset(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_charset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_charset_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_charset_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_vfs_http_header_get_charset_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_charset_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_http_header_get_proto_line_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_proto_line(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_proto_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_proto_line_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_http_header_get_proto_line_v1 t = in.get().as(); + KODI_HTTP_HEADER_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_vfs_http_header_get_proto_line_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_http_header_get_proto_line_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_file_open_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open(const char* filename, unsigned int flags) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_open_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_open_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + unsigned int flags = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_FILE_HDL auto_gen_ret = + kodi_vfs_file_open_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + flags /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_open_v1(PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_vfs_file_open_for_write_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open_for_write(const char* filename, bool overwrite) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_open_for_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_open_for_write_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_open_for_write_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool overwrite = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_FILE_HDL auto_gen_ret = + kodi_vfs_file_open_for_write_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + overwrite /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_open_for_write_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_vfs_file_curl_create_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_curl_create(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_create_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_curl_create_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + KODI_FILE_HDL auto_gen_ret = + kodi_vfs_file_curl_create_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_curl_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_vfs_file_curl_add_option_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_curl_add_option(KODI_FILE_HDL hdl, enum CURLOptiontype type, const char* name, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_add_option_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_add_option_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_curl_add_option_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + enum CURLOptiontype type = std::get<1>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_vfs_file_curl_add_option_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, type /* CheckAPIUse_WAY_14a (0001) */, + name.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_curl_add_option_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_curl_open_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_curl_open(KODI_FILE_HDL hdl, unsigned int flags) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_open_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_curl_open_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int flags = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_vfs_file_curl_open_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + flags /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_curl_open_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_close_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_file_close(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_close_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_close_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_vfs_file_close_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_vfs_file_read_v1: + { + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_vfs_file_read(KODI_FILE_HDL hdl, uint8_t* ptr, size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_read_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgParent_OUT_kodi_vfs_file_read_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_read_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + + size_t size = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + std::vector ptr(size); /* CheckAPIUse_WAY_11 (0001) */ + ssize_t auto_gen_ret = kodi_vfs_file_read_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + ptr.data() /* CheckAPIUse_WAY_11 (0001) */, + size /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_read_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + ptr /* CheckAPIUse_WAY_11 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_read_line_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_read_line(KODI_FILE_HDL hdl, char* szLine, size_t lineLength) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_read_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_read_line_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_read_line_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + std::string szLine; /* CheckAPIUse_WAY_8 (0001) */ + size_t lineLength = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + szLine.reserve(lineLength); /* CheckAPIUse_WAY_8 (0001) */ + bool auto_gen_ret = + kodi_vfs_file_read_line_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, &szLine[0], + lineLength /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_read_line_v1(auto_gen_ret /* Return_WAY_2 (0001) */, + szLine /* CheckAPIUse_WAY_8 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_write_v1: + { + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_vfs_file_write(KODI_FILE_HDL hdl, const uint8_t* ptr, size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_vfs_file_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_write_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_write_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::vector& ptr = std::get<1>(t); /* CheckAPIUse_WAY_11 (0001) */ + size_t size = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + ssize_t auto_gen_ret = kodi_vfs_file_write_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + ptr.data() /* CheckAPIUse_WAY_11 (0001) */, + size /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_file_write_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_flush_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_file_flush(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_flush_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_flush_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_flush_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_vfs_file_flush_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_vfs_file_seek_v1: + { + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_seek(KODI_FILE_HDL hdl, int64_t position, int whence) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_seek_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_seek_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int64_t position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int whence = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + int64_t auto_gen_ret = kodi_vfs_file_seek_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + position /* CheckAPIUse_WAY_10 (0001) */, + whence /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_file_seek_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_truncate_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_vfs_file_truncate(KODI_FILE_HDL hdl, int64_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_truncate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_truncate_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_truncate_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int64_t size = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int auto_gen_ret = kodi_vfs_file_truncate_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */, + size /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_truncate_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_get_position_v1: + { + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_position(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_position_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_position_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int64_t auto_gen_ret = + kodi_vfs_file_get_position_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_get_position_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_get_length_v1: + { + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_length(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_length_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_length_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_length_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int64_t auto_gen_ret = kodi_vfs_file_get_length_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_vfs_file_get_length_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_at_end_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_at_end(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_at_end_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_at_end_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_at_end_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_vfs_file_at_end_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_vfs_file_at_end_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_get_download_speed_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_vfs_file_get_download_speed(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_download_speed_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_download_speed_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_download_speed_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + double auto_gen_ret = + kodi_vfs_file_get_download_speed_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_get_download_speed_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_get_chunk_size_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_vfs_file_get_chunk_size(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_chunk_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_chunk_size_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_chunk_size_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = kodi_vfs_file_get_chunk_size_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_get_chunk_size_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_io_ctl_get_seek_possible_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_seek_possible(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_get_seek_possible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_get_seek_possible_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_io_ctl_get_seek_possible_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_vfs_file_io_ctl_get_seek_possible_v1(this, hdl /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_io_ctl_get_seek_possible_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_io_ctl_get_cache_status_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_cache_status(KODI_FILE_HDL hdl, struct VFS_CACHE_STATUS* status) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_get_cache_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_get_cache_status_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_io_ctl_get_cache_status_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + struct VFS_CACHE_STATUS status; /* CheckAPIUse_WAY_15 (0001-3) */ + bool auto_gen_ret = kodi_vfs_file_io_ctl_get_cache_status_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, &status /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_io_ctl_get_cache_status_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + &status /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_vfs_file_io_ctl_set_cache_rate_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_cache_rate(KODI_FILE_HDL hdl, uint32_t rate) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_set_cache_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_set_cache_rate_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_io_ctl_set_cache_rate_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + uint32_t rate = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_vfs_file_io_ctl_set_cache_rate_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, rate /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_io_ctl_set_cache_rate_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_io_ctl_set_retry_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_retry(KODI_FILE_HDL hdl, bool retry) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_set_retry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_set_retry_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_io_ctl_set_retry_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool retry = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_vfs_file_io_ctl_set_retry_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, retry /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_io_ctl_set_retry_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_vfs_file_get_property_value_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_file_get_property_value(KODI_FILE_HDL hdl, enum FilePropertyTypes type, const char* name) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_property_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_property_value_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_property_value_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + enum FilePropertyTypes type = std::get<1>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_vfs_file_get_property_value_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, type /* CheckAPIUse_WAY_14a (0001) */, + name.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_get_property_value_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_vfs_file_get_property_values_v1: + { + // Original API call: ATTR_DLL_EXPORT char** kodi_vfs_file_get_property_values(KODI_FILE_HDL hdl, enum FilePropertyTypes type, const char* name, size_t* length) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_property_values_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_file_get_property_values_v1; /* Autogenerated */ + msgParent__IN_kodi_vfs_file_get_property_values_v1 t = in.get().as(); + KODI_FILE_HDL hdl = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + enum FilePropertyTypes type = std::get<1>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + size_t length = std::get<3>(t); /* CheckAPIUse_WAY_13 (0001) */ + char** auto_gen_ret = kodi_vfs_file_get_property_values_v1( + this, hdl /* CheckAPIUse_WAY_12 (0001) */, type /* CheckAPIUse_WAY_14a (0001) */, + name.c_str() /* CheckAPIUse_WAY_6a (0001) */, &length /* CheckAPIUse_WAY_13 (0001) */); + std::vector auto_gen_ret_cpp; + if (auto_gen_ret) + { + auto_gen_ret_cpp.reserve(length); + for (size_t i = 0; i < length; ++i) + { + if (auto_gen_ret[i]) + { + auto_gen_ret_cpp.emplace_back(auto_gen_ret[i]); + free(auto_gen_ret[i]); + } + } + free(auto_gen_ret); + } + msgpack::pack(out, msgParent_OUT_kodi_vfs_file_get_property_values_v1( + auto_gen_ret_cpp /* Return_WAY_6 (0001) */, + length /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_filesystem_h::{}: addon called with unknown function id '{}' on group " + "'filesystem_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_filesystem_h::kodi_vfs_can_open_directory_v1(void* thisClassHdl, const char* url) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemList items; + return CDirectory::GetDirectory(url, items, "", DIR_FLAG_DEFAULTS); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_create_directory_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CDirectory::Create(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_remove_directory_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CDirectory::Remove(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_remove_directory_recursive_v1(void* thisClassHdl, + const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CDirectory::RemoveRecursive(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_directory_exists_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CDirectory::Exists(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_get_directory_v1(void* thisClassHdl, + const char* path, + const char* mask, + struct VFS_DIR_ENTRY** items, + size_t* num_items) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemList fileItems; + if (!CDirectory::GetDirectory(path, fileItems, mask, DIR_FLAG_NO_FILE_DIRS)) + return false; + + if (fileItems.Size() > 0) + { + *num_items = static_cast(fileItems.Size()); + *items = static_cast(calloc(fileItems.Size(), sizeof(VFS_DIR_ENTRY))); + CFileItemListToVFSDirEntries(*items, fileItems); + } + else + { + *num_items = 0; + *items = nullptr; + } + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_exists_v1(void* thisClassHdl, + const char* filename, + bool useCache) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CFile::Exists(filename, useCache); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_stat_file_v1(void* thisClassHdl, + const char* filename, + struct VFS_STAT_STRUCTURE* buffer) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + struct __stat64 statBuffer; + if (CFile::Stat(filename, &statBuffer) != 0) + return false; + + buffer->deviceId = statBuffer.st_dev; + buffer->fileSerialNumber = statBuffer.st_ino; + buffer->size = statBuffer.st_size; + buffer->accessTime = statBuffer.st_atime; + buffer->modificationTime = statBuffer.st_mtime; + buffer->statusTime = statBuffer.st_ctime; + buffer->isDirectory = S_ISDIR(statBuffer.st_mode); + buffer->isSymLink = S_ISLNK(statBuffer.st_mode); + buffer->isBlock = S_ISBLK(statBuffer.st_mode); + buffer->isCharacter = S_ISCHR(statBuffer.st_mode); + buffer->isFifo = S_ISFIFO(statBuffer.st_mode); + buffer->isRegular = S_ISREG(statBuffer.st_mode); + buffer->isSocket = S_ISSOCK(statBuffer.st_mode); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_delete_file_v1(void* thisClassHdl, const char* filename) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CFile::Delete(filename); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_rename_file_v1(void* thisClassHdl, + const char* filename, + const char* newFileName) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CFile::Rename(filename, newFileName); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_copy_file_v1(void* thisClassHdl, + const char* filename, + const char* dest) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CFile::Copy(filename, dest); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_get_file_md5_v1(void* thisClassHdl, const char* filename) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = CUtil::GetFileDigest(filename, KODI::UTILITY::CDigest::Type::MD5); + char* buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_get_cache_thumb_name_v1(void* thisClassHdl, + const char* filename) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + const auto crc = Crc32::ComputeFromLowerCase(filename); + const auto hex = StringUtils::Format("%08x.tbn", crc); + char* buffer = strdup(hex.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_make_legal_filename_v1(void* thisClassHdl, + const char* filename) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = CUtil::MakeLegalFileName(filename); + char* buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_make_legal_path_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = CUtil::MakeLegalPath(path); + char* buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_translate_special_protocol_v1(void* thisClassHdl, + const char* strSource) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(CSpecialProtocol::TranslatePath(strSource).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_is_internet_stream_v1(void* thisClassHdl, + const char* path, + bool strictCheck) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return URIUtils::IsInternetStream(path, strictCheck); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_is_on_lan_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return URIUtils::IsOnLAN(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_is_remote_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return URIUtils::IsRemote(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_is_local_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CURL(path).IsLocal(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_is_url_v1(void* thisClassHdl, const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return URIUtils::IsURL(path); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_get_mime_type_v1(void* thisClassHdl, + const char* url, + char** content, + const char* useragent) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string kodiContent; + bool ret = XFILE::CCurlFile::GetMimeType(CURL(url), kodiContent, useragent); + if (ret && !kodiContent.empty()) + { + *content = strdup(kodiContent.c_str()); + } + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_get_content_type_v1(void* thisClassHdl, + const char* url, + char** content, + const char* useragent) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string kodiContent; + bool ret = XFILE::CCurlFile::GetContentType(CURL(url), kodiContent, useragent); + if (ret && !kodiContent.empty()) + { + *content = strdup(kodiContent.c_str()); + } + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_get_cookies_v1(void* thisClassHdl, + const char* url, + char** cookies) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string kodiCookies; + bool ret = XFILE::CCurlFile::GetCookies(CURL(url), kodiCookies); + if (ret && !kodiCookies.empty()) + { + *cookies = strdup(kodiCookies.c_str()); + } + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_get_disk_space_v1( + void* thisClassHdl, const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + using namespace KODI::PLATFORM::FILESYSTEM; + + std::error_code ec; + auto freeSpace = space(CSpecialProtocol::TranslatePath(path), ec); + if (ec.value() != 0) + return false; + + *capacity = freeSpace.capacity; + *free = freeSpace.free; + *available = freeSpace.available; + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_HTTP_HEADER_HDL CHdl_kodi_filesystem_h::kodi_vfs_http_header_open_v1(void* thisClassHdl, + const char* url) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + + CAddonHttpHeader* httpHeader = new CAddonHttpHeader; + if (!XFILE::CCurlFile::GetHttpHeader(CURL(url), *httpHeader)) + { + delete httpHeader; + return nullptr; + } + + return static_cast(httpHeader); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_filesystem_h::kodi_vfs_http_header_close_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + delete static_cast(hdl); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_value_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl, + const char* param) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = static_cast(hdl)->GetValue(param); + + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char** CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_values_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl, + const char* param, + size_t* length) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::vector values = static_cast(hdl)->GetValues(param); + *length = values.size(); + char** ret = static_cast(malloc(sizeof(char*) * values.size())); + for (size_t i = 0; i < *length; ++i) + { + ret[i] = strdup(values[i].c_str()); + } + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_header_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + std::string string = static_cast(hdl)->GetHeader(); + + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_mime_type_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = static_cast(hdl)->GetMimeType(); + + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_charset_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = static_cast(hdl)->GetCharset(); + + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_http_header_get_proto_line_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = static_cast(hdl)->GetProtoLine(); + + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_FILE_HDL CHdl_kodi_filesystem_h::kodi_vfs_file_open_v1(void* thisClassHdl, + const char* filename, + unsigned int flags) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CAddonFile* file = new CAddonFile; + if (file->Open(filename, TranslateFileReadBitsToKodi(flags))) + return static_cast(file); + + delete file; + return nullptr; + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_FILE_HDL CHdl_kodi_filesystem_h::kodi_vfs_file_open_for_write_v1(void* thisClassHdl, + const char* filename, + bool overwrite) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CAddonFile* file = new CAddonFile; + if (file->OpenForWrite(filename, overwrite)) + return static_cast(file); + + delete file; + return nullptr; + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_FILE_HDL CHdl_kodi_filesystem_h::kodi_vfs_file_curl_create_v1(void* thisClassHdl, + const char* url) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CAddonFile* file = new CAddonFile; + if (file->CURLCreate(url)) + return static_cast(file); + + delete file; + return nullptr; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_curl_add_option_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum CURLOptiontype type, + const char* name, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + XFILE::CURLOPTIONTYPE internalType; + switch (type) + { + case ADDON_CURL_OPTION_OPTION: + internalType = XFILE::CURL_OPTION_OPTION; + break; + case ADDON_CURL_OPTION_PROTOCOL: + internalType = XFILE::CURL_OPTION_PROTOCOL; + break; + case ADDON_CURL_OPTION_CREDENTIALS: + internalType = XFILE::CURL_OPTION_CREDENTIALS; + break; + case ADDON_CURL_OPTION_HEADER: + internalType = XFILE::CURL_OPTION_HEADER; + break; + default: + throw std::logic_error("Interface_Filesystem::curl_add_option - invalid curl option type"); + return false; + }; + + return static_cast(hdl)->CURLAddOption(internalType, name, value); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_curl_open_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + unsigned int flags) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->CURLOpen(TranslateFileReadBitsToKodi(flags)); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_filesystem_h::kodi_vfs_file_close_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(hdl)->Close(); + delete static_cast(hdl); + + /*---AUTO_GEN_PARSE---*/ +} + +ssize_t CHdl_kodi_filesystem_h::kodi_vfs_file_read_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + uint8_t* ptr, + size_t size) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->Read(ptr, size); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_read_line_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + char* szLine, + size_t lineLength) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->ReadString(szLine, lineLength); + + /*---AUTO_GEN_PARSE---*/ +} + +ssize_t CHdl_kodi_filesystem_h::kodi_vfs_file_write_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + const uint8_t* ptr, + size_t size) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->Write(ptr, size); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_filesystem_h::kodi_vfs_file_flush_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(hdl)->Flush(); + + /*---AUTO_GEN_PARSE---*/ +} + +int64_t CHdl_kodi_filesystem_h::kodi_vfs_file_seek_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + int64_t position, + int whence) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->Seek(position, whence); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_filesystem_h::kodi_vfs_file_truncate_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + int64_t size) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->Truncate(size); + + /*---AUTO_GEN_PARSE---*/ +} + +int64_t CHdl_kodi_filesystem_h::kodi_vfs_file_get_position_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->GetPosition(); + + /*---AUTO_GEN_PARSE---*/ +} + +int64_t CHdl_kodi_filesystem_h::kodi_vfs_file_get_length_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->GetLength(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_at_end_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + int64_t length = kodi_vfs_file_get_length_v1(thisClassHdl, hdl); + int64_t position = kodi_vfs_file_get_position_v1(thisClassHdl, hdl); + return position >= length; + + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_filesystem_h::kodi_vfs_file_get_download_speed_v1(void* thisClassHdl, + KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->GetDownloadSpeed(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_filesystem_h::kodi_vfs_file_get_chunk_size_v1(void* thisClassHdl, KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->GetChunkSize(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_io_ctl_get_seek_possible_v1(void* thisClassHdl, + KODI_FILE_HDL hdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->IoControl(EIoControl::IOCTRL_SEEK_POSSIBLE, nullptr) != 0 + ? true + : false; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_io_ctl_get_cache_status_v1( + void* thisClassHdl, KODI_FILE_HDL hdl, struct VFS_CACHE_STATUS* status) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + SCacheStatus data; + memset(&data, 0, sizeof(data)); + int ret = static_cast(hdl)->IoControl(EIoControl::IOCTRL_CACHE_STATUS, &data); + if (ret >= 0) + { + status->forward = data.forward; + status->maxrate = data.maxrate; + status->currate = data.currate; + status->lowrate = data.lowrate; + return true; + } + return false; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_io_ctl_set_cache_rate_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + uint32_t rate) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->IoControl(EIoControl::IOCTRL_CACHE_SETRATE, &rate) >= 0 + ? true + : false; + + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_filesystem_h::kodi_vfs_file_io_ctl_set_retry_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + bool retry) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(hdl)->IoControl(EIoControl::IOCTRL_SET_RETRY, &retry) >= 0 + ? true + : false; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_filesystem_h::kodi_vfs_file_get_property_value_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + XFILE::FileProperty internalType = TranslateFilePropertyToKodi(type); + return strdup(static_cast(hdl)->GetProperty(internalType, name).c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +char** CHdl_kodi_filesystem_h::kodi_vfs_file_get_property_values_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name, + size_t* length) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + XFILE::FileProperty internalType = TranslateFilePropertyToKodi(type); + std::vector values = + static_cast(hdl)->GetPropertyValues(internalType, name); + *length = values.size(); + char** ret = static_cast(malloc(sizeof(char*) * values.size())); + for (size_t i = 0; i < *length; ++i) + { + ret[i] = strdup(values[i].c_str()); + } + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/filesystem.h b/xbmc/addons/interface/api/filesystem.h new file mode 100644 index 0000000000000..abbb49d506d92 --- /dev/null +++ b/xbmc/addons/interface/api/filesystem.h @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/filesystem.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_filesystem_h; +struct directFuncToKodi_filesystem_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_filesystem_h : public IMsgHdl +{ +public: + CHdl_kodi_filesystem_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_filesystem_h* ifcToKodi, + directFuncToAddon_filesystem_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_vfs_can_open_directory_v1(void* thisClassHdl, + const char* url); // Added with API 1 + + static bool kodi_vfs_create_directory_v1(void* thisClassHdl, + const char* path); // Added with API 1 + + static bool kodi_vfs_remove_directory_v1(void* thisClassHdl, + const char* path); // Added with API 1 + + static bool kodi_vfs_remove_directory_recursive_v1(void* thisClassHdl, + const char* path); // Added with API 1 + + static bool kodi_vfs_directory_exists_v1(void* thisClassHdl, + const char* path); // Added with API 1 + + static bool kodi_vfs_get_directory_v1(void* thisClassHdl, + const char* path, + const char* mask, + struct VFS_DIR_ENTRY** items, + size_t* num_items); // Added with API 1 + + static bool kodi_vfs_file_exists_v1(void* thisClassHdl, + const char* filename, + bool useCache); // Added with API 1 + + static bool kodi_vfs_stat_file_v1(void* thisClassHdl, + const char* filename, + struct VFS_STAT_STRUCTURE* buffer); // Added with API 1 + + static bool kodi_vfs_delete_file_v1(void* thisClassHdl, const char* filename); // Added with API 1 + + static bool kodi_vfs_rename_file_v1(void* thisClassHdl, + const char* filename, + const char* newFileName); // Added with API 1 + + static bool kodi_vfs_copy_file_v1(void* thisClassHdl, + const char* filename, + const char* dest); // Added with API 1 + + static char* kodi_vfs_get_file_md5_v1(void* thisClassHdl, + const char* filename); // Added with API 1 + + static char* kodi_vfs_get_cache_thumb_name_v1(void* thisClassHdl, + const char* filename); // Added with API 1 + + static char* kodi_vfs_make_legal_filename_v1(void* thisClassHdl, + const char* filename); // Added with API 1 + + static char* kodi_vfs_make_legal_path_v1(void* thisClassHdl, + const char* path); // Added with API 1 + + static char* kodi_vfs_translate_special_protocol_v1(void* thisClassHdl, + const char* strSource); // Added with API 1 + + static bool kodi_vfs_is_internet_stream_v1(void* thisClassHdl, + const char* path, + bool strictCheck); // Added with API 1 + + static bool kodi_vfs_is_on_lan_v1(void* thisClassHdl, const char* path); // Added with API 1 + + static bool kodi_vfs_is_remote_v1(void* thisClassHdl, const char* path); // Added with API 1 + + static bool kodi_vfs_is_local_v1(void* thisClassHdl, const char* path); // Added with API 1 + + static bool kodi_vfs_is_url_v1(void* thisClassHdl, const char* path); // Added with API 1 + + static bool kodi_vfs_get_mime_type_v1(void* thisClassHdl, + const char* url, + char** content, + const char* useragent); // Added with API 1 + + static bool kodi_vfs_get_content_type_v1(void* thisClassHdl, + const char* url, + char** content, + const char* useragent); // Added with API 1 + + static bool kodi_vfs_get_cookies_v1(void* thisClassHdl, + const char* url, + char** cookies); // Added with API 1 + + static bool kodi_vfs_get_disk_space_v1(void* thisClassHdl, + const char* path, + uint64_t* capacity, + uint64_t* free, + uint64_t* available); // Added with API 1 + + static KODI_HTTP_HEADER_HDL kodi_vfs_http_header_open_v1(void* thisClassHdl, + const char* url); // Added with API 1 + + static void kodi_vfs_http_header_close_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl); // Added with API 1 + + static char* kodi_vfs_http_header_get_value_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl, + const char* param); // Added with API 1 + + static char** kodi_vfs_http_header_get_values_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl, + const char* param, + size_t* length); // Added with API 1 + + static char* kodi_vfs_http_header_get_header_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl); // Added with API 1 + + static char* kodi_vfs_http_header_get_mime_type_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl); // Added with API 1 + + static char* kodi_vfs_http_header_get_charset_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl); // Added with API 1 + + static char* kodi_vfs_http_header_get_proto_line_v1(void* thisClassHdl, + KODI_HTTP_HEADER_HDL hdl); // Added with API 1 + + static KODI_FILE_HDL kodi_vfs_file_open_v1(void* thisClassHdl, + const char* filename, + unsigned int flags); // Added with API 1 + + static KODI_FILE_HDL kodi_vfs_file_open_for_write_v1(void* thisClassHdl, + const char* filename, + bool overwrite); // Added with API 1 + + static KODI_FILE_HDL kodi_vfs_file_curl_create_v1(void* thisClassHdl, + const char* url); // Added with API 1 + + static bool kodi_vfs_file_curl_add_option_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum CURLOptiontype type, + const char* name, + const char* value); // Added with API 1 + + static bool kodi_vfs_file_curl_open_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + unsigned int flags); // Added with API 1 + + static void kodi_vfs_file_close_v1(void* thisClassHdl, KODI_FILE_HDL hdl); // Added with API 1 + + static ssize_t kodi_vfs_file_read_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + uint8_t* ptr, + size_t size); // Added with API 1 + + static bool kodi_vfs_file_read_line_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + char* szLine, + size_t lineLength); // Added with API 1 + + static ssize_t kodi_vfs_file_write_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + const uint8_t* ptr, + size_t size); // Added with API 1 + + static void kodi_vfs_file_flush_v1(void* thisClassHdl, KODI_FILE_HDL hdl); // Added with API 1 + + static int64_t kodi_vfs_file_seek_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + int64_t position, + int whence); // Added with API 1 + + static int kodi_vfs_file_truncate_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + int64_t size); // Added with API 1 + + static int64_t kodi_vfs_file_get_position_v1(void* thisClassHdl, + KODI_FILE_HDL hdl); // Added with API 1 + + static int64_t kodi_vfs_file_get_length_v1(void* thisClassHdl, + KODI_FILE_HDL hdl); // Added with API 1 + + static bool kodi_vfs_file_at_end_v1(void* thisClassHdl, KODI_FILE_HDL hdl); // Added with API 1 + + static double kodi_vfs_file_get_download_speed_v1(void* thisClassHdl, + KODI_FILE_HDL hdl); // Added with API 1 + + static int kodi_vfs_file_get_chunk_size_v1(void* thisClassHdl, + KODI_FILE_HDL hdl); // Added with API 1 + + static bool kodi_vfs_file_io_ctl_get_seek_possible_v1(void* thisClassHdl, + KODI_FILE_HDL hdl); // Added with API 1 + + static bool kodi_vfs_file_io_ctl_get_cache_status_v1( + void* thisClassHdl, KODI_FILE_HDL hdl, struct VFS_CACHE_STATUS* status); // Added with API 1 + + static bool kodi_vfs_file_io_ctl_set_cache_rate_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + uint32_t rate); // Added with API 1 + + static bool kodi_vfs_file_io_ctl_set_retry_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + bool retry); // Added with API 1 + + static char* kodi_vfs_file_get_property_value_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name); // Added with API 1 + + static char** kodi_vfs_file_get_property_values_v1(void* thisClassHdl, + KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name, + size_t* length); // Added with API 1 + + + directFuncToAddon_filesystem_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/general.cpp b/xbmc/addons/interface/api/general.cpp new file mode 100644 index 0000000000000..a4f991648ae93 --- /dev/null +++ b/xbmc/addons/interface/api/general.cpp @@ -0,0 +1,856 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "general.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/general.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "Application.h" +#include "CompileInfo.h" +#include "LangInfo.h" +#include "ServiceBroker.h" +#include "addons/AddonManager.h" +#include "addons/gui/GUIDialogAddonSettings.h" +#include "cores/AudioEngine/Interfaces/AE.h" +#include "dialogs/GUIDialogKaiToast.h" +#include "filesystem/Directory.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "guilib/GUIAudioManager.h" +#include "guilib/GUIComponent.h" +#include "guilib/LocalizeStrings.h" +#include "input/KeyboardLayout.h" +#include "input/KeyboardLayoutManager.h" +#include "settings/Settings.h" +#include "settings/SettingsComponent.h" +#include "utils/CharsetConverter.h" +#include "utils/Digest.h" +#include "utils/LangCodeExpander.h" +#include "utils/MemUtils.h" +#include "utils/StringUtils.h" +#include "utils/URIUtils.h" + +using namespace ADDON; +using namespace KODI::UTILITY; + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_general_h::InitDirect(directFuncToKodi_general_h* ifcToKodi, + directFuncToAddon_general_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_get_localized_string_v1 = kodi_get_localized_string_v1; + ifcToKodi->kodi_get_free_mem_v1 = kodi_get_free_mem_v1; + ifcToKodi->kodi_unknown_to_utf8_v1 = kodi_unknown_to_utf8_v1; + ifcToKodi->kodi_get_language_v1 = kodi_get_language_v1; + ifcToKodi->kodi_queue_notification_v1 = kodi_queue_notification_v1; + ifcToKodi->kodi_get_digest_v1 = kodi_get_digest_v1; + ifcToKodi->kodi_get_region_v1 = kodi_get_region_v1; + ifcToKodi->kodi_get_global_idle_time_v1 = kodi_get_global_idle_time_v1; + ifcToKodi->kodi_is_addon_avilable_v1 = kodi_is_addon_avilable_v1; + ifcToKodi->kodi_version_v1 = kodi_version_v1; + ifcToKodi->kodi_get_current_skin_id_v1 = kodi_get_current_skin_id_v1; + ifcToKodi->kodi_get_keyboard_layout_v1 = kodi_get_keyboard_layout_v1; + ifcToKodi->kodi_change_keyboard_layout_v1 = kodi_change_keyboard_layout_v1; + ifcToKodi->kodi_play_sfx_v1 = kodi_play_sfx_v1; + ifcToKodi->kodi_stop_sfx_v1 = kodi_stop_sfx_v1; +} + +bool CHdl_kodi_general_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_general_h) + return false; + + switch (func) + { + case funcParent_kodi_get_localized_string_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_get_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_localized_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_localized_string_v1; /* Autogenerated */ + msgParent__IN_kodi_get_localized_string_v1 t = in.get().as(); + long label_id = std::get<0>(t); /* CheckAPIUse_WAY_10 (0001) */ + char* auto_gen_ret = + kodi_get_localized_string_v1(this, label_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_get_localized_string_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_get_free_mem_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_get_free_mem(long* free, long* total, bool as_bytes) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_free_mem_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_free_mem_v1; /* Autogenerated */ + msgParent__IN_kodi_get_free_mem_v1 t = in.get().as(); + long free = std::get<0>(t); /* CheckAPIUse_WAY_13 (0001) */ + long total = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool as_bytes = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_get_free_mem_v1(this, &free /* CheckAPIUse_WAY_13 (0001) */, + &total /* CheckAPIUse_WAY_13 (0001) */, + as_bytes /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_get_free_mem_v1(free /* CheckAPIUse_WAY_13 (0001) */, + total /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_unknown_to_utf8_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_unknown_to_utf8(const char* source, bool* ret, bool failOnBadChar) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_unknown_to_utf8_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_unknown_to_utf8_v1; /* Autogenerated */ + msgParent__IN_kodi_unknown_to_utf8_v1 t = in.get().as(); + const std::string& source = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool ret = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool failOnBadChar = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + char* auto_gen_ret = kodi_unknown_to_utf8_v1( + this, source.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &ret /* CheckAPIUse_WAY_13 (0001) */, failOnBadChar /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_unknown_to_utf8_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */, + ret /* CheckAPIUse_WAY_13 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_get_language_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_get_language(enum LangFormats format, bool region) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_language_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_language_v1; /* Autogenerated */ + msgParent__IN_kodi_get_language_v1 t = in.get().as(); + enum LangFormats format = std::get<0>(t); /* CheckAPIUse_WAY_14a (0001) */ + bool region = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + char* auto_gen_ret = kodi_get_language_v1(this, format /* CheckAPIUse_WAY_14a (0001) */, + region /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_get_language_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_queue_notification_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_queue_notification(enum QueueMsg type, const char* header, const char* message, const char* imageFile, unsigned int displayTime, bool withSound, unsigned int messageTime) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_queue_notification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_queue_notification_v1; /* Autogenerated */ + msgParent__IN_kodi_queue_notification_v1 t = in.get().as(); + enum QueueMsg type = std::get<0>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& header = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& message = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& imageFile = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + unsigned int displayTime = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool withSound = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int messageTime = std::get<6>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_queue_notification_v1(this, type /* CheckAPIUse_WAY_14a (0001) */, + header.c_str() /* CheckAPIUse_WAY_6a (0001) */, + message.c_str() /* CheckAPIUse_WAY_6a (0001) */, + imageFile.c_str() /* CheckAPIUse_WAY_6a (0001) */, + displayTime /* CheckAPIUse_WAY_10 (0001) */, + withSound /* CheckAPIUse_WAY_10 (0001) */, + messageTime /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_get_digest_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_get_digest(enum DigestType type, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_digest_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_digest_v1; /* Autogenerated */ + msgParent__IN_kodi_get_digest_v1 t = in.get().as(); + enum DigestType type = std::get<0>(t); /* CheckAPIUse_WAY_14a (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_get_digest_v1(this, type /* CheckAPIUse_WAY_14a (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_get_digest_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_get_region_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_get_region(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_region_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_region_v1; /* Autogenerated */ + msgParent__IN_kodi_get_region_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = kodi_get_region_v1(this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_get_region_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_get_global_idle_time_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_get_global_idle_time() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_global_idle_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_global_idle_time_v1; /* Autogenerated */ + int auto_gen_ret = kodi_get_global_idle_time_v1(this); + msgpack::pack( + out, msgParent_OUT_kodi_get_global_idle_time_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_is_addon_avilable_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_is_addon_avilable(const char* id, char** version, bool* enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_is_addon_avilable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_is_addon_avilable_v1; /* Autogenerated */ + msgParent__IN_kodi_is_addon_avilable_v1 t = in.get().as(); + const std::string& id = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* version = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_is_addon_avilable_v1( + this, id.c_str() /* CheckAPIUse_WAY_6a (0001) */, &version /* CheckAPIUse_WAY_7 (0001) */, + &enabled /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_is_addon_avilable_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + version ? version : "" /* CheckAPIUse_WAY_7 (0001) */, + enabled /* CheckAPIUse_WAY_13 (0001) */)); + if (version) /* CheckAPIUse_WAY_7 (0001) */ + free(version); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_version_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_version( char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_version_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_version_v1; /* Autogenerated */ + msgParent__IN_kodi_version_v1 t = in.get().as(); + char* compile_name = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + int major = std::get<0>(t); /* CheckAPIUse_WAY_13 (0001) */ + int minor = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + char* revision = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + char* tag = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + char* tagversion = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + kodi_version_v1(this, &compile_name /* CheckAPIUse_WAY_7 (0001) */, + &major /* CheckAPIUse_WAY_13 (0001) */, + &minor /* CheckAPIUse_WAY_13 (0001) */, + &revision /* CheckAPIUse_WAY_7 (0001) */, &tag /* CheckAPIUse_WAY_7 (0001) */, + &tagversion /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_version_v1( + compile_name ? compile_name : "" /* CheckAPIUse_WAY_7 (0001) */, + major /* CheckAPIUse_WAY_13 (0001) */, + minor /* CheckAPIUse_WAY_13 (0001) */, + revision ? revision : "" /* CheckAPIUse_WAY_7 (0001) */, + tag ? tag : "" /* CheckAPIUse_WAY_7 (0001) */, + tagversion ? tagversion : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (compile_name) /* CheckAPIUse_WAY_7 (0001) */ + free(compile_name); /* CheckAPIUse_WAY_7 (0001) */ + if (revision) /* CheckAPIUse_WAY_7 (0001) */ + free(revision); /* CheckAPIUse_WAY_7 (0001) */ + if (tag) /* CheckAPIUse_WAY_7 (0001) */ + free(tag); /* CheckAPIUse_WAY_7 (0001) */ + if (tagversion) /* CheckAPIUse_WAY_7 (0001) */ + free(tagversion); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_get_current_skin_id_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_get_current_skin_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_current_skin_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_current_skin_id_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_get_current_skin_id_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_get_current_skin_id_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_get_keyboard_layout_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_get_keyboard_layout(int modifier_key, char** layout_name, struct AddonKeyboardKeyTable* layout) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_keyboard_layout_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_keyboard_layout_v1; /* Autogenerated */ + msgParent__IN_kodi_get_keyboard_layout_v1 t = in.get().as(); + int modifier_key = std::get<0>(t); /* CheckAPIUse_WAY_10 (0001) */ + char* layout_name = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + struct AddonKeyboardKeyTable layout; /* CheckAPIUse_WAY_15 (0001-3) */ + bool auto_gen_ret = kodi_get_keyboard_layout_v1( + this, modifier_key /* CheckAPIUse_WAY_10 (0001) */, + &layout_name /* CheckAPIUse_WAY_7 (0001) */, &layout /* CheckAPIUse_WAY_15 (0001-4) */); + msgpack::pack(out, msgParent_OUT_kodi_get_keyboard_layout_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + layout_name ? layout_name : "" /* CheckAPIUse_WAY_7 (0001) */, + &layout /* CheckAPIUse_WAY_15 (0001-5) */)); + if (layout_name) /* CheckAPIUse_WAY_7 (0001) */ + free(layout_name); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_change_keyboard_layout_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_change_keyboard_layout(char** layout_name) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_change_keyboard_layout_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_change_keyboard_layout_v1; /* Autogenerated */ + msgParent__IN_kodi_change_keyboard_layout_v1 t = in.get().as(); + char* layout_name = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = + kodi_change_keyboard_layout_v1(this, &layout_name /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_change_keyboard_layout_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + layout_name ? layout_name : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (layout_name) /* CheckAPIUse_WAY_7 (0001) */ + free(layout_name); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_play_sfx_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_play_sfx(const char* filename, bool use_cached) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_play_sfx_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_play_sfx_v1; /* Autogenerated */ + msgParent__IN_kodi_play_sfx_v1 t = in.get().as(); + const std::string& filename = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool use_cached = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_play_sfx_v1(this, filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + use_cached /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_stop_sfx_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_stop_sfx() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_stop_sfx_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_stop_sfx_v1; /* Autogenerated */ + kodi_stop_sfx_v1(this); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_general_h::{}: addon called with unknown function id '{}' on group " + "'general_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +char* CHdl_kodi_general_h::kodi_get_localized_string_v1(void* thisClassHdl, long label_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + if (g_application.m_bStop) + return nullptr; + + std::string label = + g_localizeStrings.GetAddonString(thisClass->m_process->GetAddonID(), label_id); + if (label.empty()) + label = g_localizeStrings.Get(label_id); + char* buffer = strdup(label.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_general_h::kodi_get_free_mem_v1(void* thisClassHdl, + long* free, + long* total, + bool as_bytes) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + KODI::MEMORY::MemoryStatus stat; + KODI::MEMORY::GetMemoryStatus(&stat); + *free = static_cast(stat.availPhys); + *total = static_cast(stat.totalPhys); + if (!as_bytes) + { + *free = *free / (1024 * 1024); + *total = *total / (1024 * 1024); + } + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_general_h::kodi_unknown_to_utf8_v1(void* thisClassHdl, + const char* source, + bool* ret, + bool failOnBadChar) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string; + *ret = g_charsetConverter.unknownToUTF8(source, string, failOnBadChar); + char* buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_general_h::kodi_get_language_v1(void* thisClassHdl, + enum LangFormats format, + bool region) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = g_langInfo.GetEnglishLanguageName(); + switch (format) + { + case LANG_FMT_ISO_639_1: + { + std::string langCode; + g_LangCodeExpander.ConvertToISO6391(string, langCode); + string = langCode; + if (region) + { + std::string region2Code; + g_LangCodeExpander.ConvertToISO6391(g_langInfo.GetRegionLocale(), region2Code); + if (!region2Code.empty()) + string += "-" + region2Code; + } + break; + } + case LANG_FMT_ISO_639_2: + { + std::string langCode; + g_LangCodeExpander.ConvertToISO6392B(string, langCode); + string = langCode; + if (region) + { + std::string region3Code; + g_LangCodeExpander.ConvertToISO6392B(g_langInfo.GetRegionLocale(), region3Code); + if (!region3Code.empty()) + string += "-" + region3Code; + } + break; + } + case LANG_FMT_ENGLISH_NAME: + default: + { + if (region) + string += "-" + g_langInfo.GetCurrentRegion(); + break; + } + } + + char* buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_general_h::kodi_queue_notification_v1(void* thisClassHdl, + enum QueueMsg type, + const char* header, + const char* message, + const char* imageFile, + unsigned int displayTime, + bool withSound, + unsigned int messageTime) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + std::shared_ptr addon = thisClass->m_process->GetAddon(); + + std::string usedHeader; + if (header && strlen(header) > 0) + usedHeader = header; + else + usedHeader = addon->Name(); + + QueueMsg qtype = static_cast(type); + + if (qtype != QUEUE_OWN_STYLE) + { + CGUIDialogKaiToast::eMessageType usedType; + switch (qtype) + { + case QueueMsg::QUEUE_WARNING: + usedType = CGUIDialogKaiToast::Warning; + withSound = true; + CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Warning Message: '{}'", __func__, + addon->Name(), message); + break; + case QueueMsg::QUEUE_ERROR: + usedType = CGUIDialogKaiToast::Error; + withSound = true; + CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Error Message : '{}'", __func__, + addon->Name(), message); + break; + case QueueMsg::QUEUE_INFO: + default: + usedType = CGUIDialogKaiToast::Info; + withSound = false; + CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Info Message : '{}'", __func__, + addon->Name(), message); + break; + } + + if (imageFile && strlen(imageFile) > 0) + { + CLog::Log(LOGERROR, + "Interface_General::{} - To use given image file '{}' must be type value set to " + "'QUEUE_OWN_STYLE'", + __func__, imageFile); + } + + CGUIDialogKaiToast::QueueNotification(usedType, usedHeader, message, 3000, withSound); + } + else + { + CGUIDialogKaiToast::QueueNotification(imageFile, usedHeader, message, displayTime, withSound, + messageTime); + } + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_general_h::kodi_get_digest_v1(void* thisClassHdl, + enum DigestType type, + const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + switch (type) + { + case DIGEST_MD5: + return strdup(CDigest::Calculate(CDigest::Type::MD5, text).c_str()); + case DIGEST_SHA1: + return strdup(CDigest::Calculate(CDigest::Type::SHA1, text).c_str()); + case DIGEST_SHA256: + return strdup(CDigest::Calculate(CDigest::Type::SHA256, text).c_str()); + case DIGEST_SHA512: + return strdup(CDigest::Calculate(CDigest::Type::SHA512, text).c_str()); + default: + return nullptr; + } + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_general_h::kodi_get_region_v1(void* thisClassHdl, const char* id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::shared_ptr addon = thisClass->m_process->GetAddon(); + + std::string result; + if (StringUtils::CompareNoCase(id, "datelong") == 0) + { + result = g_langInfo.GetDateFormat(true); + StringUtils::Replace(result, "DDDD", "%A"); + StringUtils::Replace(result, "MMMM", "%B"); + StringUtils::Replace(result, "D", "%d"); + StringUtils::Replace(result, "YYYY", "%Y"); + } + else if (StringUtils::CompareNoCase(id, "dateshort") == 0) + { + result = g_langInfo.GetDateFormat(false); + StringUtils::Replace(result, "MM", "%m"); + StringUtils::Replace(result, "DD", "%d"); +#ifdef TARGET_WINDOWS + StringUtils::Replace(result, "M", "%#m"); + StringUtils::Replace(result, "D", "%#d"); +#else + StringUtils::Replace(result, "M", "%-m"); + StringUtils::Replace(result, "D", "%-d"); +#endif + StringUtils::Replace(result, "YYYY", "%Y"); + } + else if (StringUtils::CompareNoCase(id, "tempunit") == 0) + result = g_langInfo.GetTemperatureUnitString(); + else if (StringUtils::CompareNoCase(id, "speedunit") == 0) + result = g_langInfo.GetSpeedUnitString(); + else if (StringUtils::CompareNoCase(id, "time") == 0) + { + result = g_langInfo.GetTimeFormat(); + StringUtils::Replace(result, "H", "%H"); + StringUtils::Replace(result, "h", "%I"); + StringUtils::Replace(result, "mm", "%M"); + StringUtils::Replace(result, "ss", "%S"); + StringUtils::Replace(result, "xx", "%p"); + } + else if (StringUtils::CompareNoCase(id, "meridiem") == 0) + result = StringUtils::Format("%s/%s", g_langInfo.GetMeridiemSymbol(MeridiemSymbolAM).c_str(), + g_langInfo.GetMeridiemSymbol(MeridiemSymbolPM).c_str()); + else + { + CLog::Log(LOGERROR, "Interface_General::{} - add-on '{}' requests invalid id '{}'", __func__, + addon->Name(), id); + return nullptr; + } + + char* buffer = strdup(result.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_general_h::kodi_get_global_idle_time_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return g_application.GlobalIdleTime(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_general_h::kodi_is_addon_avilable_v1(void* thisClassHdl, + const char* id, + char** version, + bool* enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + AddonPtr addonInfo; + if (!CServiceBroker::GetAddonMgr().GetAddon(id, addonInfo, ADDON_UNKNOWN, OnlyEnabled::NO)) + return false; + + *version = strdup(addonInfo->Version().asString().c_str()); + *enabled = !CServiceBroker::GetAddonMgr().IsAddonDisabled(id); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_general_h::kodi_version_v1(void* thisClassHdl, + char** compile_name, + int* major, + int* minor, + char** revision, + char** tag, + char** tagversion) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + *compile_name = strdup(CCompileInfo::GetAppName()); + *major = CCompileInfo::GetMajor(); + *minor = CCompileInfo::GetMinor(); + *revision = strdup(CCompileInfo::GetSCMID()); + std::string tagStr = CCompileInfo::GetSuffix(); + if (StringUtils::StartsWithNoCase(tagStr, "alpha")) + { + *tag = strdup("alpha"); + *tagversion = strdup(StringUtils::Mid(tagStr, 5).c_str()); + } + else if (StringUtils::StartsWithNoCase(tagStr, "beta")) + { + *tag = strdup("beta"); + *tagversion = strdup(StringUtils::Mid(tagStr, 4).c_str()); + } + else if (StringUtils::StartsWithNoCase(tagStr, "rc")) + { + *tag = strdup("releasecandidate"); + *tagversion = strdup(StringUtils::Mid(tagStr, 2).c_str()); + } + else if (tagStr.empty()) + *tag = strdup("stable"); + else + *tag = strdup("prealpha"); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_general_h::kodi_get_current_skin_id_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(CServiceBroker::GetSettingsComponent() + ->GetSettings() + ->GetString(CSettings::SETTING_LOOKANDFEEL_SKIN) + .c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_general_h::kodi_get_keyboard_layout_v1(void* thisClassHdl, + int modifier_key, + char** layout_name, + struct AddonKeyboardKeyTable* layout) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + const std::string activeLayout = CServiceBroker::GetSettingsComponent()->GetSettings()->GetString( + CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT); + + CKeyboardLayout cpp_layout; + if (!CKeyboardLayoutManager::GetInstance().GetLayout(activeLayout, cpp_layout)) + return false; + + *layout_name = strdup(cpp_layout.GetName().c_str()); + + unsigned int modifiers = CKeyboardLayout::ModifierKeyNone; + if (modifier_key & STD_KB_MODIFIER_KEY_SHIFT) + modifiers |= CKeyboardLayout::ModifierKeyShift; + if (modifier_key & STD_KB_MODIFIER_KEY_SYMBOL) + modifiers |= CKeyboardLayout::ModifierKeySymbol; + + for (unsigned int row = 0; row < STD_KB_BUTTONS_MAX_ROWS; row++) + { + for (unsigned int column = 0; column < STD_KB_BUTTONS_PER_ROW; column++) + { + std::string label = cpp_layout.GetCharAt(row, column, modifiers); + layout->keys[row][column] = strdup(label.c_str()); + } + } + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_general_h::kodi_change_keyboard_layout_v1(void* thisClassHdl, char** layout_name) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::vector layouts; + unsigned int currentLayout = 0; + + const KeyboardLayouts& keyboardLayouts = CKeyboardLayoutManager::GetInstance().GetLayouts(); + const std::shared_ptr settings = CServiceBroker::GetSettingsComponent()->GetSettings(); + const std::vector layoutNames = + settings->GetList(CSettings::SETTING_LOCALE_KEYBOARDLAYOUTS); + const std::string activeLayout = + settings->GetString(CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT); + + for (const auto& layoutName : layoutNames) + { + const auto keyboardLayout = keyboardLayouts.find(layoutName.asString()); + if (keyboardLayout != keyboardLayouts.end()) + { + layouts.emplace_back(keyboardLayout->second); + if (layoutName.asString() == activeLayout) + currentLayout = layouts.size() - 1; + } + } + + currentLayout++; + if (currentLayout >= layouts.size()) + currentLayout = 0; + CKeyboardLayout layout = layouts.empty() ? CKeyboardLayout() : layouts[currentLayout]; + CServiceBroker::GetSettingsComponent()->GetSettings()->SetString( + CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT, layout.GetName()); + + *layout_name = strdup(layout.GetName().c_str()); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_general_h::kodi_play_sfx_v1(void* thisClassHdl, + const char* filename, + bool use_cached) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIComponent* gui = CServiceBroker::GetGUI(); + if (XFILE::CFile::Exists(filename) && gui) + { + gui->GetAudioManager().PlayPythonSound(filename, use_cached); + } + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_general_h::kodi_stop_sfx_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIComponent* gui = CServiceBroker::GetGUI(); + if (gui) + gui->GetAudioManager().Stop(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/general.h b/xbmc/addons/interface/api/general.h new file mode 100644 index 0000000000000..287de37deddce --- /dev/null +++ b/xbmc/addons/interface/api/general.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/general.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_general_h; +struct directFuncToKodi_general_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_general_h : public IMsgHdl +{ +public: + CHdl_kodi_general_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_general_h* ifcToKodi, directFuncToAddon_general_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static char* kodi_get_localized_string_v1(void* thisClassHdl, long label_id); // Added with API 1 + + static void kodi_get_free_mem_v1(void* thisClassHdl, + long* free, + long* total, + bool as_bytes); // Added with API 1 + + static char* kodi_unknown_to_utf8_v1(void* thisClassHdl, + const char* source, + bool* ret, + bool failOnBadChar); // Added with API 1 + + static char* kodi_get_language_v1(void* thisClassHdl, + enum LangFormats format, + bool region); // Added with API 1 + + static void kodi_queue_notification_v1(void* thisClassHdl, + enum QueueMsg type, + const char* header, + const char* message, + const char* imageFile, + unsigned int displayTime, + bool withSound, + unsigned int messageTime); // Added with API 1 + + static char* kodi_get_digest_v1(void* thisClassHdl, + enum DigestType type, + const char* text); // Added with API 1 + + static char* kodi_get_region_v1(void* thisClassHdl, const char* id); // Added with API 1 + + static int kodi_get_global_idle_time_v1(void* thisClassHdl); // Added with API 1 + + static bool kodi_is_addon_avilable_v1(void* thisClassHdl, + const char* id, + char** version, + bool* enabled); // Added with API 1 + + static void kodi_version_v1(void* thisClassHdl, + char** compile_name, + int* major, + int* minor, + char** revision, + char** tag, + char** tagversion); // Added with API 1 + + static char* kodi_get_current_skin_id_v1(void* thisClassHdl); // Added with API 1 + + static bool kodi_get_keyboard_layout_v1(void* thisClassHdl, + int modifier_key, + char** layout_name, + struct AddonKeyboardKeyTable* layout); // Added with API 1 + + static bool kodi_change_keyboard_layout_v1(void* thisClassHdl, + char** layout_name); // Added with API 1 + + static void kodi_play_sfx_v1(void* thisClassHdl, + const char* filename, + bool use_cached); // Added with API 1 + + static void kodi_stop_sfx_v1(void* thisClassHdl); // Added with API 1 + + + directFuncToAddon_general_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/CMakeLists.txt b/xbmc/addons/interface/api/gui/CMakeLists.txt new file mode 100644 index 0000000000000..538bef501aa22 --- /dev/null +++ b/xbmc/addons/interface/api/gui/CMakeLists.txt @@ -0,0 +1,18 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + general.cpp + list_item.cpp + window.cpp +) + +set(HEADERS + general.h + list_item.h + window.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_api_gui) +endif() diff --git a/xbmc/addons/interface/api/gui/controls/CMakeLists.txt b/xbmc/addons/interface/api/gui/controls/CMakeLists.txt new file mode 100644 index 0000000000000..8f37c9634ea06 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/CMakeLists.txt @@ -0,0 +1,36 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + button.cpp + edit.cpp + fade_label.cpp + image.cpp + label.cpp + progress.cpp + radio_button.cpp + rendering.cpp + settings_slider.cpp + slider.cpp + spin.cpp + text_box.cpp +) + +set(HEADERS + button.h + edit.h + fade_label.h + image.h + label.h + progress.h + radio_button.h + rendering.h + settings_slider.h + slider.h + spin.h + text_box.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_api_gui_controls) +endif() diff --git a/xbmc/addons/interface/api/gui/controls/button.cpp b/xbmc/addons/interface/api/gui/controls/button.cpp new file mode 100644 index 0000000000000..5df7f51723bb0 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/button.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "button.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/button.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIButtonControl.h" +#include "utils/StringUtils.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_button_h::InitDirect( + directFuncToKodi_gui_controls_button_h* ifcToKodi, + directFuncToAddon_gui_controls_button_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_button_set_visible_v1 = kodi_gui_controls_button_set_visible_v1; + ifcToKodi->kodi_gui_controls_button_set_enabled_v1 = kodi_gui_controls_button_set_enabled_v1; + ifcToKodi->kodi_gui_controls_button_set_label_v1 = kodi_gui_controls_button_set_label_v1; + ifcToKodi->kodi_gui_controls_button_get_label_v1 = kodi_gui_controls_button_get_label_v1; + ifcToKodi->kodi_gui_controls_button_set_label2_v1 = kodi_gui_controls_button_set_label2_v1; + ifcToKodi->kodi_gui_controls_button_get_label2_v1 = kodi_gui_controls_button_get_label2_v1; +} + +bool CHdl_kodi_gui_controls_button_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_button_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_button_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_button_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_button_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_button_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_button_set_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_set_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_button_set_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_button_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_get_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_button_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_button_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_button_set_label2_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label2(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_label2_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_set_label2_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_button_set_label2_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_button_get_label2_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label2(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_get_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_get_label2_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_button_get_label2_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_button_get_label2_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_button_get_label2_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_button_h::{}: addon called with unknown function id '{}' " + "on group 'gui_controls_button_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_set_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLabel(label); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetLabel().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_set_label2_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLabel2(label); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_button_h::kodi_gui_controls_button_get_label2_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetLabel2().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/button.h b/xbmc/addons/interface/api/gui/controls/button.h new file mode 100644 index 0000000000000..da61315d1d561 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/button.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_button_h; +struct directFuncToKodi_gui_controls_button_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_button_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_button_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_button_h* ifcToKodi, + directFuncToAddon_gui_controls_button_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_button_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_button_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_button_set_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label); // Added with API 1 + + static char* kodi_gui_controls_button_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_button_set_label2_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label); // Added with API 1 + + static char* kodi_gui_controls_button_get_label2_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_button_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/edit.cpp b/xbmc/addons/interface/api/gui/controls/edit.cpp new file mode 100644 index 0000000000000..94ab5d70dfcb5 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/edit.cpp @@ -0,0 +1,378 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "edit.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/edit.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIEditControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_edit_h::InitDirect(directFuncToKodi_gui_controls_edit_h* ifcToKodi, + directFuncToAddon_gui_controls_edit_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_edit_set_visible_v1 = kodi_gui_controls_edit_set_visible_v1; + ifcToKodi->kodi_gui_controls_edit_set_enabled_v1 = kodi_gui_controls_edit_set_enabled_v1; + ifcToKodi->kodi_gui_controls_edit_set_label_v1 = kodi_gui_controls_edit_set_label_v1; + ifcToKodi->kodi_gui_controls_edit_get_label_v1 = kodi_gui_controls_edit_get_label_v1; + ifcToKodi->kodi_gui_controls_edit_set_text_v1 = kodi_gui_controls_edit_set_text_v1; + ifcToKodi->kodi_gui_controls_edit_get_text_v1 = kodi_gui_controls_edit_get_text_v1; + ifcToKodi->kodi_gui_controls_edit_set_cursor_position_v1 = + kodi_gui_controls_edit_set_cursor_position_v1; + ifcToKodi->kodi_gui_controls_edit_get_cursor_position_v1 = + kodi_gui_controls_edit_get_cursor_position_v1; + ifcToKodi->kodi_gui_controls_edit_set_input_type_v1 = kodi_gui_controls_edit_set_input_type_v1; +} + +bool CHdl_kodi_gui_controls_edit_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_edit_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_edit_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_edit_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_edit_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_edit_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_edit_set_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_edit_set_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_edit_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_get_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_edit_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_edit_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_edit_set_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_edit_set_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_edit_get_text_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_text(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_get_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_edit_get_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_edit_get_text_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_edit_set_cursor_position_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_cursor_position(KODI_GUI_CONTROL_HANDLE handle, unsigned int position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_cursor_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_cursor_position_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_cursor_position_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_edit_set_cursor_position_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + position /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_edit_get_cursor_position_v1: + { + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_gui_controls_edit_get_cursor_position( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_cursor_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_cursor_position_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_get_cursor_position_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int auto_gen_ret = kodi_gui_controls_edit_get_cursor_position_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_edit_get_cursor_position_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_edit_set_input_type_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_input_type(KODI_GUI_CONTROL_HANDLE handle, int type, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_input_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_input_type_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_edit_set_input_type_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int type = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_edit_set_input_type_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + type /* CheckAPIUse_WAY_10 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_edit_h::{}: addon called with unknown function id '{}' on " + "group 'gui_controls_edit_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLabel(label); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetLabel().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLabel2(text); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_get_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetLabel2().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_cursor_position_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, unsigned int position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetCursorPosition(position); + + /*---AUTO_GEN_PARSE---*/ +} + +unsigned int CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_get_cursor_position_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetCursorPosition(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_edit_h::kodi_gui_controls_edit_set_input_type_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int type, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIEditControl::INPUT_TYPE kodiType; + switch (static_cast(type)) + { + case ADDON_INPUT_TYPE_TEXT: + kodiType = CGUIEditControl::INPUT_TYPE_TEXT; + break; + case ADDON_INPUT_TYPE_NUMBER: + kodiType = CGUIEditControl::INPUT_TYPE_NUMBER; + break; + case ADDON_INPUT_TYPE_SECONDS: + kodiType = CGUIEditControl::INPUT_TYPE_SECONDS; + break; + case ADDON_INPUT_TYPE_TIME: + kodiType = CGUIEditControl::INPUT_TYPE_TIME; + break; + case ADDON_INPUT_TYPE_DATE: + kodiType = CGUIEditControl::INPUT_TYPE_DATE; + break; + case ADDON_INPUT_TYPE_IPADDRESS: + kodiType = CGUIEditControl::INPUT_TYPE_IPADDRESS; + break; + case ADDON_INPUT_TYPE_PASSWORD: + kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD; + break; + case ADDON_INPUT_TYPE_PASSWORD_MD5: + kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD_MD5; + break; + case ADDON_INPUT_TYPE_SEARCH: + kodiType = CGUIEditControl::INPUT_TYPE_SEARCH; + break; + case ADDON_INPUT_TYPE_FILTER: + kodiType = CGUIEditControl::INPUT_TYPE_FILTER; + break; + case ADDON_INPUT_TYPE_READONLY: + default: + kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD_NUMBER_VERIFY_NEW; + } + + static_cast(handle)->SetInputType(kodiType, heading); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/edit.h b/xbmc/addons/interface/api/gui/controls/edit.h new file mode 100644 index 0000000000000..52f85950a67d0 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/edit.h @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_edit_h; +struct directFuncToKodi_gui_controls_edit_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_edit_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_edit_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_edit_h* ifcToKodi, + directFuncToAddon_gui_controls_edit_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_edit_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_edit_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_edit_set_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label); // Added with API 1 + + static char* kodi_gui_controls_edit_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_edit_set_text_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static char* kodi_gui_controls_edit_get_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_edit_set_cursor_position_v1( + void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + unsigned int position); // Added with API 1 + + static unsigned int kodi_gui_controls_edit_get_cursor_position_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_edit_set_input_type_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int type, + const char* heading); // Added with API 1 + + + directFuncToAddon_gui_controls_edit_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/fade_label.cpp b/xbmc/addons/interface/api/gui/controls/fade_label.cpp new file mode 100644 index 0000000000000..9e6bb0b2ca036 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/fade_label.cpp @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "fade_label.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/fade_label.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIFadeLabelControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_fade_label_h::InitDirect( + directFuncToKodi_gui_controls_fade_label_h* ifcToKodi, + directFuncToAddon_gui_controls_fade_label_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_fade_label_set_visible_v1 = + kodi_gui_controls_fade_label_set_visible_v1; + ifcToKodi->kodi_gui_controls_fade_label_add_label_v1 = kodi_gui_controls_fade_label_add_label_v1; + ifcToKodi->kodi_gui_controls_fade_label_get_label_v1 = kodi_gui_controls_fade_label_get_label_v1; + ifcToKodi->kodi_gui_controls_fade_label_set_scrolling_v1 = + kodi_gui_controls_fade_label_set_scrolling_v1; + ifcToKodi->kodi_gui_controls_fade_label_reset_v1 = kodi_gui_controls_fade_label_reset_v1; +} + +bool CHdl_kodi_gui_controls_fade_label_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_fade_label_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_fade_label_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_fade_label_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_fade_label_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_fade_label_add_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_add_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_add_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_add_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_fade_label_add_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_fade_label_add_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_fade_label_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_fade_label_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_fade_label_get_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_fade_label_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_fade_label_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_fade_label_set_scrolling_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_scrolling(KODI_GUI_CONTROL_HANDLE handle, bool scroll) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_set_scrolling_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_set_scrolling_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_fade_label_set_scrolling_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool scroll = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_fade_label_set_scrolling_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + scroll /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_fade_label_reset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_reset_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_fade_label_reset_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_fade_label_reset_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_fade_label_h::{}: addon called with unknown function id " + "'{}' on group 'gui_controls_fade_label_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_fade_label_h::kodi_gui_controls_fade_label_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_fade_label_h::kodi_gui_controls_fade_label_add_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIFadeLabelControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_ADD, control->GetParentID(), control->GetID()); + msg.SetLabel(text); + control->OnMessage(msg); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_fade_label_h::kodi_gui_controls_fade_label_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CGUIFadeLabelControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_ITEM_SELECTED, control->GetParentID(), control->GetID()); + control->OnMessage(msg); + std::string text = msg.GetLabel(); + return strdup(text.c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_fade_label_h::kodi_gui_controls_fade_label_set_scrolling_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool scroll) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetScrolling(scroll); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_fade_label_h::kodi_gui_controls_fade_label_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIFadeLabelControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); + control->OnMessage(msg); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/fade_label.h b/xbmc/addons/interface/api/gui/controls/fade_label.h new file mode 100644 index 0000000000000..03e6450482c3a --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/fade_label.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_fade_label_h; +struct directFuncToKodi_gui_controls_fade_label_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_fade_label_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_fade_label_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_fade_label_h* ifcToKodi, + directFuncToAddon_gui_controls_fade_label_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_fade_label_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_fade_label_add_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static char* kodi_gui_controls_fade_label_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_fade_label_set_scrolling_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool scroll); // Added with API 1 + + static void kodi_gui_controls_fade_label_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_fade_label_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/image.cpp b/xbmc/addons/interface/api/gui/controls/image.cpp new file mode 100644 index 0000000000000..18ce9d5705a6c --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/image.cpp @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "image.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/image.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIImage.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_image_h::InitDirect(directFuncToKodi_gui_controls_image_h* ifcToKodi, + directFuncToAddon_gui_controls_image_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_image_set_visible_v1 = kodi_gui_controls_image_set_visible_v1; + ifcToKodi->kodi_gui_controls_image_set_filename_v1 = kodi_gui_controls_image_set_filename_v1; + ifcToKodi->kodi_gui_controls_image_set_color_diffuse_v1 = + kodi_gui_controls_image_set_color_diffuse_v1; +} + +bool CHdl_kodi_gui_controls_image_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_image_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_image_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_image_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_image_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_image_set_filename_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_filename(KODI_GUI_CONTROL_HANDLE handle, const char* filename, bool use_cache) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_filename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_filename_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_image_set_filename_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& filename = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool use_cache = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_image_set_filename_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + use_cache /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_image_set_color_diffuse_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_color_diffuse(KODI_GUI_CONTROL_HANDLE handle, uint32_t color_diffuse) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_color_diffuse_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_color_diffuse_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_image_set_color_diffuse_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + uint32_t color_diffuse = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_image_set_color_diffuse_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + color_diffuse /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_image_h::{}: addon called with unknown function id '{}' on " + "group 'gui_controls_image_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_image_h::kodi_gui_controls_image_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_image_h::kodi_gui_controls_image_set_filename_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* filename, bool use_cache) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFileName(filename, false, use_cache); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_image_h::kodi_gui_controls_image_set_color_diffuse_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, uint32_t color_diffuse) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetColorDiffuse(GUILIB::GUIINFO::CGUIInfoColor(color_diffuse)); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/image.h b/xbmc/addons/interface/api/gui/controls/image.h new file mode 100644 index 0000000000000..031113302133f --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/image.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_image_h; +struct directFuncToKodi_gui_controls_image_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_image_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_image_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_image_h* ifcToKodi, + directFuncToAddon_gui_controls_image_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_image_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_image_set_filename_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* filename, + bool use_cache); // Added with API 1 + + static void kodi_gui_controls_image_set_color_diffuse_v1( + void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + uint32_t color_diffuse); // Added with API 1 + + + directFuncToAddon_gui_controls_image_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/label.cpp b/xbmc/addons/interface/api/gui/controls/label.cpp new file mode 100644 index 0000000000000..b72e530ffb999 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/label.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "label.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/label.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIComponent.h" +#include "guilib/GUILabelControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_label_h::InitDirect(directFuncToKodi_gui_controls_label_h* ifcToKodi, + directFuncToAddon_gui_controls_label_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_label_set_visible_v1 = kodi_gui_controls_label_set_visible_v1; + ifcToKodi->kodi_gui_controls_label_set_label_v1 = kodi_gui_controls_label_set_label_v1; + ifcToKodi->kodi_gui_controls_label_get_label_v1 = kodi_gui_controls_label_get_label_v1; +} + +bool CHdl_kodi_gui_controls_label_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_label_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_label_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_label_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_label_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_label_set_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_label_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_set_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_label_set_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_label_set_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_label_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_label_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_label_get_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_label_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_label_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_label_h::{}: addon called with unknown function id '{}' on " + "group 'gui_controls_label_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_label_h::kodi_gui_controls_label_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_label_h::kodi_gui_controls_label_set_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUILabelControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); + msg.SetLabel(text); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_label_h::kodi_gui_controls_label_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetDescription().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/label.h b/xbmc/addons/interface/api/gui/controls/label.h new file mode 100644 index 0000000000000..cc581d5bd35ab --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/label.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_label_h; +struct directFuncToKodi_gui_controls_label_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_label_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_label_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_label_h* ifcToKodi, + directFuncToAddon_gui_controls_label_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_label_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_label_set_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static char* kodi_gui_controls_label_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_label_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/progress.cpp b/xbmc/addons/interface/api/gui/controls/progress.cpp new file mode 100644 index 0000000000000..4d0584f3dce2b --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/progress.cpp @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "progress.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/progress.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIProgressControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_progress_h::InitDirect( + directFuncToKodi_gui_controls_progress_h* ifcToKodi, + directFuncToAddon_gui_controls_progress_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_progress_set_visible_v1 = kodi_gui_controls_progress_set_visible_v1; + ifcToKodi->kodi_gui_controls_progress_set_percentage_v1 = + kodi_gui_controls_progress_set_percentage_v1; + ifcToKodi->kodi_gui_controls_progress_get_percentage_v1 = + kodi_gui_controls_progress_get_percentage_v1; +} + +bool CHdl_kodi_gui_controls_progress_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_progress_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_progress_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_progress_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_progress_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_progress_set_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_percentage(KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_set_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_progress_set_percentage_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float percent = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_progress_set_percentage_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + percent /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_progress_get_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_progress_get_percentage(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_get_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_progress_get_percentage_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = kodi_gui_controls_progress_get_percentage_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_progress_get_percentage_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_progress_h::{}: addon called with unknown function id '{}' " + "on group 'gui_controls_progress_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_progress_h::kodi_gui_controls_progress_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_progress_h::kodi_gui_controls_progress_set_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float percent) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetPercentage(percent); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_progress_h::kodi_gui_controls_progress_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetPercentage(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/progress.h b/xbmc/addons/interface/api/gui/controls/progress.h new file mode 100644 index 0000000000000..27d2e0ac1f434 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/progress.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_progress_h; +struct directFuncToKodi_gui_controls_progress_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_progress_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_progress_h* ifcToKodi, + directFuncToAddon_gui_controls_progress_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_progress_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_progress_set_percentage_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float percent); // Added with API 1 + + static float kodi_gui_controls_progress_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_progress_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/radio_button.cpp b/xbmc/addons/interface/api/gui/controls/radio_button.cpp new file mode 100644 index 0000000000000..750527bd9e7b6 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/radio_button.cpp @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "radio_button.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/radio_button.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIRadioButtonControl.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_radio_button_h::InitDirect( + directFuncToKodi_gui_controls_radio_button_h* ifcToKodi, + directFuncToAddon_gui_controls_radio_button_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_radio_button_set_visible_v1 = + kodi_gui_controls_radio_button_set_visible_v1; + ifcToKodi->kodi_gui_controls_radio_button_set_enabled_v1 = + kodi_gui_controls_radio_button_set_enabled_v1; + ifcToKodi->kodi_gui_controls_radio_button_set_label_v1 = + kodi_gui_controls_radio_button_set_label_v1; + ifcToKodi->kodi_gui_controls_radio_button_get_label_v1 = + kodi_gui_controls_radio_button_get_label_v1; + ifcToKodi->kodi_gui_controls_radio_button_set_selected_v1 = + kodi_gui_controls_radio_button_set_selected_v1; + ifcToKodi->kodi_gui_controls_radio_button_is_selected_v1 = + kodi_gui_controls_radio_button_is_selected_v1; +} + +bool CHdl_kodi_gui_controls_radio_button_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_radio_button_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_radio_button_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_radio_button_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_radio_button_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_radio_button_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_radio_button_set_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_set_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_radio_button_set_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_radio_button_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_radio_button_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_get_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_radio_button_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_radio_button_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_radio_button_set_selected_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_selected(KODI_GUI_CONTROL_HANDLE handle, bool selected) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_selected_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_set_selected_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool selected = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_radio_button_set_selected_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + selected /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_radio_button_is_selected_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_controls_radio_button_is_selected(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_is_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_is_selected_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_button_is_selected_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_gui_controls_radio_button_is_selected_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_radio_button_is_selected_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_radio_button_h::{}: addon called with unknown function id " + "'{}' on group 'gui_controls_radio_button_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_set_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLabel(text); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetLabel().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_set_selected_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool selected) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetSelected(selected); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_controls_radio_button_h::kodi_gui_controls_radio_button_is_selected_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->IsSelected(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/radio_button.h b/xbmc/addons/interface/api/gui/controls/radio_button.h new file mode 100644 index 0000000000000..834a213120dc3 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/radio_button.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_radio_button_h; +struct directFuncToKodi_gui_controls_radio_button_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_radio_button_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_radio_button_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_radio_button_h* ifcToKodi, + directFuncToAddon_gui_controls_radio_button_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_radio_button_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_radio_button_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_radio_button_set_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static char* kodi_gui_controls_radio_button_get_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_radio_button_set_selected_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool selected); // Added with API 1 + + static bool kodi_gui_controls_radio_button_is_selected_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_radio_button_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/rendering.cpp b/xbmc/addons/interface/api/gui/controls/rendering.cpp new file mode 100644 index 0000000000000..9e66a41a3d66e --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/rendering.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "rendering.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/rendering.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "addons/interface/api/gui/general.h" +#include "guilib/GUIRenderingControl.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_rendering_h::InitDirect( + directFuncToKodi_gui_controls_rendering_h* ifcToKodi, + directFuncToAddon_gui_controls_rendering_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_radio_rendering_destroy_v1 = + kodi_gui_controls_radio_rendering_destroy_v1; +} + +bool CHdl_kodi_gui_controls_rendering_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_rendering_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_radio_rendering_destroy_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_rendering_destroy(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_rendering_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_rendering_destroy_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_radio_rendering_destroy_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_radio_rendering_destroy_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_rendering_h::{}: addon called with unknown function id " + "'{}' on group 'gui_controls_rendering_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_rendering_h::kodi_gui_controls_radio_rendering_destroy_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CHdl_kodi_gui_general_h::lock(); + // static_cast(handle)->Delete(); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/rendering.h b/xbmc/addons/interface/api/gui/controls/rendering.h new file mode 100644 index 0000000000000..874bc09b68433 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/rendering.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_rendering_h; +struct directFuncToKodi_gui_controls_rendering_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_rendering_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_rendering_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_rendering_h* ifcToKodi, + directFuncToAddon_gui_controls_rendering_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_radio_rendering_destroy_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_controls_rendering_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/settings_slider.cpp b/xbmc/addons/interface/api/gui/controls/settings_slider.cpp new file mode 100644 index 0000000000000..6bbf78334a0cb --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/settings_slider.cpp @@ -0,0 +1,520 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "settings_slider.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/settings_slider.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIComponent.h" +#include "guilib/GUISettingsSliderControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_settings_slider_h::InitDirect( + directFuncToKodi_gui_controls_settings_slider_h* ifcToKodi, + directFuncToAddon_gui_controls_settings_slider_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_settings_slider_set_visible_v1 = + kodi_gui_controls_settings_slider_set_visible_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_enabled_v1 = + kodi_gui_controls_settings_slider_set_enabled_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_text_v1 = + kodi_gui_controls_settings_slider_set_text_v1; + ifcToKodi->kodi_gui_controls_settings_slider_reset_v1 = + kodi_gui_controls_settings_slider_reset_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_int_range_v1 = + kodi_gui_controls_settings_slider_set_int_range_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_int_value_v1 = + kodi_gui_controls_settings_slider_set_int_value_v1; + ifcToKodi->kodi_gui_controls_settings_slider_get_int_value_v1 = + kodi_gui_controls_settings_slider_get_int_value_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_int_interval_v1 = + kodi_gui_controls_settings_slider_set_int_interval_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_percentage_v1 = + kodi_gui_controls_settings_slider_set_percentage_v1; + ifcToKodi->kodi_gui_controls_settings_slider_get_percentage_v1 = + kodi_gui_controls_settings_slider_get_percentage_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_float_range_v1 = + kodi_gui_controls_settings_slider_set_float_range_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_float_value_v1 = + kodi_gui_controls_settings_slider_set_float_value_v1; + ifcToKodi->kodi_gui_controls_settings_slider_get_float_value_v1 = + kodi_gui_controls_settings_slider_get_float_value_v1; + ifcToKodi->kodi_gui_controls_settings_slider_set_float_interval_v1 = + kodi_gui_controls_settings_slider_set_float_interval_v1; +} + +bool CHdl_kodi_gui_controls_settings_slider_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_settings_slider_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_settings_slider_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_settings_slider_set_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_reset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_reset_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_reset_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_settings_slider_reset_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_int_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_range( KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_int_range_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_int_range_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_value( KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_int_value_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_int_value_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_get_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_settings_slider_get_int_value( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_get_int_value_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = kodi_gui_controls_settings_slider_get_int_value_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_settings_slider_get_int_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_int_interval_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_interval( KODI_GUI_CONTROL_HANDLE handle, int interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_interval_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_int_interval_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int interval = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_int_interval_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, interval /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_percentage( KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_percentage_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float percent = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_percentage_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, percent /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_get_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_percentage( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_get_percentage_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = kodi_gui_controls_settings_slider_get_percentage_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_settings_slider_get_percentage_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_float_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_range( KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_float_range_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + float end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_float_range_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_value( KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_float_value_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_float_value_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_get_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_float_value( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_get_float_value_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = kodi_gui_controls_settings_slider_get_float_value_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_settings_slider_get_float_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_settings_slider_set_float_interval_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_interval( KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_interval_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_settings_slider_set_float_interval_v1 t = + in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float interval = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_settings_slider_set_float_interval_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, interval /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_settings_slider_h::{}: addon called with unknown function " + "id '{}' on group 'gui_controls_settings_slider_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); + msg.SetLabel(label); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_int_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int start, int end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_INT); + control->SetRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_INT); + control->SetIntValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetIntValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h:: + kodi_gui_controls_settings_slider_set_int_interval_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int interval) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetIntInterval(interval); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float percent) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_PERCENTAGE); + control->SetPercentage(percent); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetPercentage(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_float_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float start, float end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_FLOAT); + control->SetFloatRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h::kodi_gui_controls_settings_slider_set_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISettingsSliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_FLOAT); + control->SetFloatValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_settings_slider_h:: + kodi_gui_controls_settings_slider_get_float_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetFloatValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_settings_slider_h:: + kodi_gui_controls_settings_slider_set_float_interval_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float interval) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFloatInterval(interval); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/settings_slider.h b/xbmc/addons/interface/api/gui/controls/settings_slider.h new file mode 100644 index 0000000000000..632e5c12472d0 --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/settings_slider.h @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_settings_slider_h; +struct directFuncToKodi_gui_controls_settings_slider_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_settings_slider_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_settings_slider_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_settings_slider_h* ifcToKodi, + directFuncToAddon_gui_controls_settings_slider_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_settings_slider_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_text_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label); // Added with API 1 + + static void kodi_gui_controls_settings_slider_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_int_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int start, + int end); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_int_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int value); // Added with API 1 + + static int kodi_gui_controls_settings_slider_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_int_interval_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int interval); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float percent); // Added with API 1 + + static float kodi_gui_controls_settings_slider_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_float_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float start, + float end); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_float_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float value); // Added with API 1 + + static float kodi_gui_controls_settings_slider_get_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_settings_slider_set_float_interval_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float interval); // Added with API 1 + + + directFuncToAddon_gui_controls_settings_slider_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/slider.cpp b/xbmc/addons/interface/api/gui/controls/slider.cpp new file mode 100644 index 0000000000000..d3900d27402be --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/slider.cpp @@ -0,0 +1,499 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "slider.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/slider.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIComponent.h" +#include "guilib/GUISliderControl.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_slider_h::InitDirect( + directFuncToKodi_gui_controls_slider_h* ifcToKodi, + directFuncToAddon_gui_controls_slider_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_slider_set_visible_v1 = kodi_gui_controls_slider_set_visible_v1; + ifcToKodi->kodi_gui_controls_slider_set_enabled_v1 = kodi_gui_controls_slider_set_enabled_v1; + ifcToKodi->kodi_gui_controls_slider_reset_v1 = kodi_gui_controls_slider_reset_v1; + ifcToKodi->kodi_gui_controls_slider_get_description_v1 = + kodi_gui_controls_slider_get_description_v1; + ifcToKodi->kodi_gui_controls_slider_set_int_range_v1 = kodi_gui_controls_slider_set_int_range_v1; + ifcToKodi->kodi_gui_controls_slider_set_int_value_v1 = kodi_gui_controls_slider_set_int_value_v1; + ifcToKodi->kodi_gui_controls_slider_get_int_value_v1 = kodi_gui_controls_slider_get_int_value_v1; + ifcToKodi->kodi_gui_controls_slider_set_int_interval_v1 = + kodi_gui_controls_slider_set_int_interval_v1; + ifcToKodi->kodi_gui_controls_slider_set_percentage_v1 = + kodi_gui_controls_slider_set_percentage_v1; + ifcToKodi->kodi_gui_controls_slider_get_percentage_v1 = + kodi_gui_controls_slider_get_percentage_v1; + ifcToKodi->kodi_gui_controls_slider_set_float_range_v1 = + kodi_gui_controls_slider_set_float_range_v1; + ifcToKodi->kodi_gui_controls_slider_set_float_value_v1 = + kodi_gui_controls_slider_set_float_value_v1; + ifcToKodi->kodi_gui_controls_slider_get_float_value_v1 = + kodi_gui_controls_slider_get_float_value_v1; + ifcToKodi->kodi_gui_controls_slider_set_float_interval_v1 = + kodi_gui_controls_slider_set_float_interval_v1; +} + +bool CHdl_kodi_gui_controls_slider_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_slider_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_slider_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_reset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_reset_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_reset_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_slider_reset_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_get_description_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_slider_get_description(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_description_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_description_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_get_description_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_slider_get_description_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_slider_get_description_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_slider_set_int_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_range(KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_int_range_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_int_range_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_set_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_value(KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_int_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_int_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_get_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_slider_get_int_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_get_int_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_controls_slider_get_int_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_slider_get_int_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_slider_set_int_interval_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_interval(KODI_GUI_CONTROL_HANDLE handle, int interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_interval_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_int_interval_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int interval = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_int_interval_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + interval /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_set_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_percentage(KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_percentage_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float percent = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_percentage_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + percent /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_get_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_percentage(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_get_percentage_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = + kodi_gui_controls_slider_get_percentage_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_slider_get_percentage_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_slider_set_float_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_range(KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_float_range_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + float end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_float_range_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_set_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_value(KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_float_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_float_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_slider_get_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_float_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_get_float_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = + kodi_gui_controls_slider_get_float_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_slider_get_float_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_slider_set_float_interval_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_interval_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_slider_set_float_interval_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float interval = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_slider_set_float_interval_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + interval /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_slider_h::{}: addon called with unknown function id '{}' " + "on group 'gui_controls_slider_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_get_description_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetDescription().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_int_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int start, int end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_INT); + control->SetRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_INT); + control->SetIntValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetIntValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_int_interval_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int interval) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetIntInterval(interval); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float percent) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_PERCENTAGE); + control->SetPercentage(percent); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetPercentage(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_float_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float start, float end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_FLOAT); + control->SetFloatRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISliderControl* control = static_cast(handle); + control->SetType(SLIDER_CONTROL_TYPE_FLOAT); + control->SetFloatValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_get_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetFloatValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_slider_h::kodi_gui_controls_slider_set_float_interval_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float interval) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFloatInterval(interval); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/slider.h b/xbmc/addons/interface/api/gui/controls/slider.h new file mode 100644 index 0000000000000..0cf478895b93b --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/slider.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_slider_h; +struct directFuncToKodi_gui_controls_slider_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_slider_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_slider_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_slider_h* ifcToKodi, + directFuncToAddon_gui_controls_slider_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_slider_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_slider_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_slider_reset_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static char* kodi_gui_controls_slider_get_description_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_slider_set_int_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int start, + int end); // Added with API 1 + + static void kodi_gui_controls_slider_set_int_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int value); // Added with API 1 + + static int kodi_gui_controls_slider_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_slider_set_int_interval_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int interval); // Added with API 1 + + static void kodi_gui_controls_slider_set_percentage_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float percent); // Added with API 1 + + static float kodi_gui_controls_slider_get_percentage_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_slider_set_float_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float start, + float end); // Added with API 1 + + static void kodi_gui_controls_slider_set_float_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float value); // Added with API 1 + + static float kodi_gui_controls_slider_get_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_slider_set_float_interval_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float interval); // Added with API 1 + + + directFuncToAddon_gui_controls_slider_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/spin.cpp b/xbmc/addons/interface/api/gui/controls/spin.cpp new file mode 100644 index 0000000000000..5264754fbdf2f --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/spin.cpp @@ -0,0 +1,546 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "spin.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/spin.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIComponent.h" +#include "guilib/GUISpinControlEx.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_spin_h::InitDirect(directFuncToKodi_gui_controls_spin_h* ifcToKodi, + directFuncToAddon_gui_controls_spin_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_spin_set_visible_v1 = kodi_gui_controls_spin_set_visible_v1; + ifcToKodi->kodi_gui_controls_spin_set_enabled_v1 = kodi_gui_controls_spin_set_enabled_v1; + ifcToKodi->kodi_gui_controls_spin_set_text_v1 = kodi_gui_controls_spin_set_text_v1; + ifcToKodi->kodi_gui_controls_spin_reset_v1 = kodi_gui_controls_spin_reset_v1; + ifcToKodi->kodi_gui_controls_spin_set_type_v1 = kodi_gui_controls_spin_set_type_v1; + ifcToKodi->kodi_gui_controls_spin_add_string_label_v1 = + kodi_gui_controls_spin_add_string_label_v1; + ifcToKodi->kodi_gui_controls_spin_set_string_value_v1 = + kodi_gui_controls_spin_set_string_value_v1; + ifcToKodi->kodi_gui_controls_spin_get_string_value_v1 = + kodi_gui_controls_spin_get_string_value_v1; + ifcToKodi->kodi_gui_controls_spin_add_int_label_v1 = kodi_gui_controls_spin_add_int_label_v1; + ifcToKodi->kodi_gui_controls_spin_set_int_range_v1 = kodi_gui_controls_spin_set_int_range_v1; + ifcToKodi->kodi_gui_controls_spin_set_int_value_v1 = kodi_gui_controls_spin_set_int_value_v1; + ifcToKodi->kodi_gui_controls_spin_get_int_value_v1 = kodi_gui_controls_spin_get_int_value_v1; + ifcToKodi->kodi_gui_controls_spin_set_float_range_v1 = kodi_gui_controls_spin_set_float_range_v1; + ifcToKodi->kodi_gui_controls_spin_set_float_value_v1 = kodi_gui_controls_spin_set_float_value_v1; + ifcToKodi->kodi_gui_controls_spin_get_float_value_v1 = kodi_gui_controls_spin_get_float_value_v1; + ifcToKodi->kodi_gui_controls_spin_set_float_interval_v1 = + kodi_gui_controls_spin_set_float_interval_v1; +} + +bool CHdl_kodi_gui_controls_spin_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_spin_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_spin_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_enabled_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_enabled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_enabled_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool enabled = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_enabled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + enabled /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_spin_set_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_reset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_reset_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_reset_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_spin_reset_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_type_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_type(KODI_GUI_CONTROL_HANDLE handle, int type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_type_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_type_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int type = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_type_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + type /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_add_string_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_string_label(KODI_GUI_CONTROL_HANDLE handle, const char* label, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_add_string_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_add_string_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_add_string_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_spin_add_string_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_string_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_string_value(KODI_GUI_CONTROL_HANDLE handle, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_string_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_string_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_string_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& value = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_spin_set_string_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_get_string_value_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_spin_get_string_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_string_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_string_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_get_string_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_spin_get_string_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_spin_get_string_value_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_spin_add_int_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_int_label(KODI_GUI_CONTROL_HANDLE handle, const char* label, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_add_int_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_add_int_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_add_int_label_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_add_int_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_int_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_range(KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_int_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_int_range_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_int_range_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_value(KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_int_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_int_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_get_int_value_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_spin_get_int_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_int_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_get_int_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_controls_spin_get_int_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_spin_get_int_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_spin_set_float_range_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_range(KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_range_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_float_range_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float start = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + float end = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_float_range_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + start /* CheckAPIUse_WAY_10 (0001) */, + end /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_set_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_value(KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_float_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float value = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_float_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_spin_get_float_value_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_spin_get_float_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_float_value_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_get_float_value_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = + kodi_gui_controls_spin_get_float_value_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_spin_get_float_value_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_controls_spin_set_float_interval_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_interval_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_spin_set_float_interval_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float interval = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_spin_set_float_interval_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + interval /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_spin_h::{}: addon called with unknown function id '{}' on " + "group 'gui_controls_spin_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_enabled_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool enabled) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetEnabled(enabled); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISpinControlEx* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); + msg.SetLabel(text); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_reset_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUISpinControlEx* control = static_cast(handle); + CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_type_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int type) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetType(type); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_add_string_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label, const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->AddLabel(std::string(label), std::string(value)); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_string_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetStringValue(std::string(value)); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_get_string_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->GetStringValue().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_add_int_label_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* label, int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->AddLabel(std::string(label), value); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_int_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int start, int end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_float_range_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float start, float end) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFloatRange(start, end); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFloatValue(value); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_get_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetFloatValue(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_spin_h::kodi_gui_controls_spin_set_float_interval_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, float interval) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetFloatInterval(interval); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/spin.h b/xbmc/addons/interface/api/gui/controls/spin.h new file mode 100644 index 0000000000000..0a2f9851c32cf --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/spin.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_spin_h; +struct directFuncToKodi_gui_controls_spin_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_spin_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_spin_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_spin_h* ifcToKodi, + directFuncToAddon_gui_controls_spin_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_spin_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_spin_set_enabled_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool enabled); // Added with API 1 + + static void kodi_gui_controls_spin_set_text_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static void kodi_gui_controls_spin_reset_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_spin_set_type_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int type); // Added with API 1 + + static void kodi_gui_controls_spin_add_string_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label, + const char* value); // Added with API 1 + + static void kodi_gui_controls_spin_set_string_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* value); // Added with API 1 + + static char* kodi_gui_controls_spin_get_string_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_spin_add_int_label_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* label, + int value); // Added with API 1 + + static void kodi_gui_controls_spin_set_int_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int start, + int end); // Added with API 1 + + static void kodi_gui_controls_spin_set_int_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int value); // Added with API 1 + + static int kodi_gui_controls_spin_get_int_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_spin_set_float_range_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float start, + float end); // Added with API 1 + + static void kodi_gui_controls_spin_set_float_value_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float value); // Added with API 1 + + static float kodi_gui_controls_spin_get_float_value_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_spin_set_float_interval_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + float interval); // Added with API 1 + + + directFuncToAddon_gui_controls_spin_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/text_box.cpp b/xbmc/addons/interface/api/gui/controls/text_box.cpp new file mode 100644 index 0000000000000..3fe0f6f29b60a --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/text_box.cpp @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "text_box.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/controls/text_box.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIComponent.h" +#include "guilib/GUITextBox.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_text_box_h::InitDirect( + directFuncToKodi_gui_controls_text_box_h* ifcToKodi, + directFuncToAddon_gui_controls_text_box_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_controls_text_box_set_visible_v1 = kodi_gui_controls_text_box_set_visible_v1; + ifcToKodi->kodi_gui_controls_text_box_reset_v1 = kodi_gui_controls_text_box_reset_v1; + ifcToKodi->kodi_gui_controls_text_box_set_text_v1 = kodi_gui_controls_text_box_set_text_v1; + ifcToKodi->kodi_gui_controls_text_box_get_text_v1 = kodi_gui_controls_text_box_get_text_v1; + ifcToKodi->kodi_gui_controls_text_box_scroll_v1 = kodi_gui_controls_text_box_scroll_v1; + ifcToKodi->kodi_gui_controls_text_box_set_auto_scrolling_v1 = + kodi_gui_controls_text_box_set_auto_scrolling_v1; +} + +bool CHdl_kodi_gui_controls_text_box_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_controls_text_box_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_controls_text_box_set_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_set_visible_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool visible = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_text_box_set_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_text_box_reset_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_reset_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_reset_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_controls_text_box_reset_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_text_box_set_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_set_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_controls_text_box_set_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_controls_text_box_get_text_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_text_box_get_text(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_get_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_get_text_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_controls_text_box_get_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_controls_text_box_get_text_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_controls_text_box_scroll_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_scroll(KODI_GUI_CONTROL_HANDLE handle, unsigned int position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_scroll_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_scroll_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_scroll_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_text_box_scroll_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + position /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_controls_text_box_set_auto_scrolling_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_auto_scrolling( KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_auto_scrolling_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_auto_scrolling_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_controls_text_box_set_auto_scrolling_v1 t = in.get().as(); + KODI_GUI_CONTROL_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int delay = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int time = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + int repeat = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_controls_text_box_set_auto_scrolling_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, delay /* CheckAPIUse_WAY_10 (0001) */, + time /* CheckAPIUse_WAY_10 (0001) */, repeat /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{}: addon called with unknown function id '{}' " + "on group 'gui_controls_text_box_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_set_visible_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + control->SetVisible(visible); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_set_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); + msg.SetLabel(text); + CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_get_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return nullptr; + } + + return strdup(control->GetDescription().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_scroll_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, unsigned int position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + control->Scroll(position); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_controls_text_box_h::kodi_gui_controls_text_box_set_auto_scrolling_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUITextBox* control = static_cast(handle); + if (!control) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_controls_text_box_h::{} - invalid handler data (handle='{}') on addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + control->SetAutoScrolling(delay, time, repeat); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/controls/text_box.h b/xbmc/addons/interface/api/gui/controls/text_box.h new file mode 100644 index 0000000000000..6dc76912dcdcf --- /dev/null +++ b/xbmc/addons/interface/api/gui/controls/text_box.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_text_box_h; +struct directFuncToKodi_gui_controls_text_box_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_controls_text_box_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_text_box_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_controls_text_box_h* ifcToKodi, + directFuncToAddon_gui_controls_text_box_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_controls_text_box_set_visible_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + bool visible); // Added with API 1 + + static void kodi_gui_controls_text_box_reset_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_text_box_set_text_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + const char* text); // Added with API 1 + + static char* kodi_gui_controls_text_box_get_text_v1( + void* thisClassHdl, KODI_GUI_CONTROL_HANDLE handle); // Added with API 1 + + static void kodi_gui_controls_text_box_scroll_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + unsigned int position); // Added with API 1 + + static void kodi_gui_controls_text_box_set_auto_scrolling_v1(void* thisClassHdl, + KODI_GUI_CONTROL_HANDLE handle, + int delay, + int time, + int repeat); // Added with API 1 + + + directFuncToAddon_gui_controls_text_box_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/CMakeLists.txt b/xbmc/addons/interface/api/gui/dialogs/CMakeLists.txt new file mode 100644 index 0000000000000..c1f9c0274b181 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/CMakeLists.txt @@ -0,0 +1,32 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + context_menu.cpp + extended_progress.cpp + filebrowser.cpp + keyboard.cpp + numeric.cpp + ok.cpp + progress.cpp + select.cpp + text_viewer.cpp + yes_no.cpp +) + +set(HEADERS + context_menu.h + extended_progress.h + filebrowser.h + keyboard.h + numeric.h + ok.h + progress.h + select.h + text_viewer.h + yes_no.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_api_gui_dialogs) +endif() diff --git a/xbmc/addons/interface/api/gui/dialogs/context_menu.cpp b/xbmc/addons/interface/api/gui/dialogs/context_menu.cpp new file mode 100644 index 0000000000000..5ccf77ed43f76 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/context_menu.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "context_menu.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/context_menu.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "dialogs/GUIDialogContextMenu.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_context_menu_h::InitDirect( + directFuncToKodi_gui_dialogs_context_menu_h* ifcToKodi, + directFuncToAddon_gui_dialogs_context_menu_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_context_menu_open_v1 = kodi_gui_dialogs_context_menu_open_v1; +} + +bool CHdl_kodi_gui_dialogs_context_menu_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_context_menu_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_context_menu_open_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_context_menu_open(const char* heading, const char* entries[], size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_context_menu_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_context_menu_open_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_context_menu_open_v1 t = in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::vector& cpp_entries = std::get<1>(t); /* CheckAPIUse_WAY_6c (0001) */ + size_t size = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + + std::vector entries; /* CheckAPIUse_WAY_6c (0001) */ + entries.reserve(size); /* CheckAPIUse_WAY_6c (0001) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0001) */ + { + entries.emplace_back(cpp_entries[i].c_str()); /* CheckAPIUse_WAY_6c (0001) */ + } + assert(cpp_entries.size() == size); + + int auto_gen_ret = kodi_gui_dialogs_context_menu_open_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + entries.data() /* CheckAPIUse_WAY_6c (0001) */, size /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_context_menu_open_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_context_menu_h::{}: addon called with unknown function id " + "'{}' on group 'gui_dialogs_context_menu_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +int CHdl_kodi_gui_dialogs_context_menu_h::kodi_gui_dialogs_context_menu_open_v1( + void* thisClassHdl, const char* heading, const char* entries[], size_t size) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + CGUIDialogContextMenu* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_CONTEXT_MENU); + + CContextButtons choices; + for (unsigned int i = 0; i < size; ++i) + choices.Add(i, entries[i]); + + return dialog->Show(choices); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/context_menu.h b/xbmc/addons/interface/api/gui/dialogs/context_menu.h new file mode 100644 index 0000000000000..e4ba5e693e3e2 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/context_menu.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_context_menu_h; +struct directFuncToKodi_gui_dialogs_context_menu_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_context_menu_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_context_menu_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_context_menu_h* ifcToKodi, + directFuncToAddon_gui_dialogs_context_menu_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static int kodi_gui_dialogs_context_menu_open_v1(void* thisClassHdl, + const char* heading, + const char* entries[], + size_t size); // Added with API 1 + + + directFuncToAddon_gui_dialogs_context_menu_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/extended_progress.cpp b/xbmc/addons/interface/api/gui/dialogs/extended_progress.cpp new file mode 100644 index 0000000000000..a78f58809c3e9 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/extended_progress.cpp @@ -0,0 +1,431 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "extended_progress.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/extended_progress.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "dialogs/GUIDialogExtendedProgressBar.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_extended_progress_h::InitDirect( + directFuncToKodi_gui_dialogs_extended_progress_h* ifcToKodi, + directFuncToAddon_gui_dialogs_extended_progress_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_extended_progress_new_dialog_v1 = + kodi_gui_dialogs_extended_progress_new_dialog_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_delete_dialog_v1 = + kodi_gui_dialogs_extended_progress_delete_dialog_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_get_title_v1 = + kodi_gui_dialogs_extended_progress_get_title_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_set_title_v1 = + kodi_gui_dialogs_extended_progress_set_title_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_get_text_v1 = + kodi_gui_dialogs_extended_progress_get_text_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_set_text_v1 = + kodi_gui_dialogs_extended_progress_set_text_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_is_finished_v1 = + kodi_gui_dialogs_extended_progress_is_finished_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_mark_finished_v1 = + kodi_gui_dialogs_extended_progress_mark_finished_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_get_percentage_v1 = + kodi_gui_dialogs_extended_progress_get_percentage_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_set_percentage_v1 = + kodi_gui_dialogs_extended_progress_set_percentage_v1; + ifcToKodi->kodi_gui_dialogs_extended_progress_set_progress_v1 = + kodi_gui_dialogs_extended_progress_set_progress_v1; +} + +bool CHdl_kodi_gui_dialogs_extended_progress_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_extended_progress_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_extended_progress_new_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_extended_progress_new_dialog(const char* title) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_new_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_new_dialog_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_new_dialog_v1 t = in.get().as(); + const std::string& title = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + KODI_GUI_HANDLE auto_gen_ret = kodi_gui_dialogs_extended_progress_new_dialog_v1( + this, title.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_extended_progress_new_dialog_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_delete_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_delete_dialog(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_delete_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_delete_dialog_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_delete_dialog_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_dialogs_extended_progress_delete_dialog_v1(this, + handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_get_title_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_title(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_title_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_title_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_get_title_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = kodi_gui_dialogs_extended_progress_get_title_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_extended_progress_get_title_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_set_title_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_title(KODI_GUI_HANDLE handle, const char* title) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_title_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_title_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_set_title_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& title = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_extended_progress_set_title_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, + title.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_get_text_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_text(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_get_text_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = kodi_gui_dialogs_extended_progress_get_text_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_extended_progress_get_text_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_set_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_text(KODI_GUI_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_set_text_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_extended_progress_set_text_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_is_finished_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_extended_progress_is_finished(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_is_finished_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_is_finished_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_is_finished_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_extended_progress_is_finished_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_extended_progress_is_finished_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_mark_finished_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_mark_finished(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_mark_finished_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_mark_finished_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_mark_finished_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_dialogs_extended_progress_mark_finished_v1(this, + handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_get_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_dialogs_extended_progress_get_percentage(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_get_percentage_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float auto_gen_ret = kodi_gui_dialogs_extended_progress_get_percentage_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_extended_progress_get_percentage_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_set_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_percentage(KODI_GUI_HANDLE handle, float percentage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_set_percentage_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + float percentage = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_extended_progress_set_percentage_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, percentage /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_extended_progress_set_progress_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_progress(KODI_GUI_HANDLE handle, int currentItem, int itemCount) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_progress_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_progress_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_extended_progress_set_progress_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int currentItem = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + int itemCount = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_extended_progress_set_progress_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, currentItem /* CheckAPIUse_WAY_10 (0001) */, + itemCount /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_extended_progress_h::{}: addon called with unknown function " + "id '{}' on group 'gui_dialogs_extended_progress_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +KODI_GUI_HANDLE CHdl_kodi_gui_dialogs_extended_progress_h:: + kodi_gui_dialogs_extended_progress_new_dialog_v1(void* thisClassHdl, const char* title) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + // setup the progress dialog + CGUIDialogExtendedProgressBar* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_EXT_PROGRESS); + if (!dialog) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_extended_progress_h::{} - invalid handler data , " + "dialog='{}') on addon '{}'", + __func__, static_cast(dialog), thisClass->m_process->GetAddonID()); + return nullptr; + } + + CGUIDialogProgressBarHandle* dlgProgressHandle = dialog->GetHandle(title); + return dlgProgressHandle; + + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_delete_dialog_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->MarkFinished(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_get_title_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->Title().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_set_title_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, const char* title) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetTitle(title); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_get_text_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return strdup(static_cast(handle)->Text().c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_set_text_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetText(text); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_is_finished_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->IsFinished(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_mark_finished_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->MarkFinished(); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_dialogs_extended_progress_h:: + kodi_gui_dialogs_extended_progress_get_percentage_v1(void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->Percentage(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h:: + kodi_gui_dialogs_extended_progress_set_percentage_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + float percentage) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetPercentage(percentage); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_extended_progress_h::kodi_gui_dialogs_extended_progress_set_progress_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, int currentItem, int itemCount) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetProgress(currentItem, itemCount); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/extended_progress.h b/xbmc/addons/interface/api/gui/dialogs/extended_progress.h new file mode 100644 index 0000000000000..534396509d66f --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/extended_progress.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_extended_progress_h; +struct directFuncToKodi_gui_dialogs_extended_progress_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_extended_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_extended_progress_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_extended_progress_h* ifcToKodi, + directFuncToAddon_gui_dialogs_extended_progress_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static KODI_GUI_HANDLE kodi_gui_dialogs_extended_progress_new_dialog_v1( + void* thisClassHdl, const char* title); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_delete_dialog_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static char* kodi_gui_dialogs_extended_progress_get_title_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_set_title_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, const char* title); // Added with API 1 + + static char* kodi_gui_dialogs_extended_progress_get_text_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_set_text_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + const char* text); // Added with API 1 + + static bool kodi_gui_dialogs_extended_progress_is_finished_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_mark_finished_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static float kodi_gui_dialogs_extended_progress_get_percentage_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_set_percentage_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, float percentage); // Added with API 1 + + static void kodi_gui_dialogs_extended_progress_set_progress_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + int currentItem, + int itemCount); // Added with API 1 + + + directFuncToAddon_gui_dialogs_extended_progress_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/filebrowser.cpp b/xbmc/addons/interface/api/gui/dialogs/filebrowser.cpp new file mode 100644 index 0000000000000..870a0e670e3cb --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/filebrowser.cpp @@ -0,0 +1,578 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "filebrowser.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/filebrowser.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "URL.h" +#include "dialogs/GUIDialogFileBrowser.h" +#include "settings/MediaSourceSettings.h" +#include "storage/MediaManager.h" +#include "utils/URIUtils.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +namespace +{ + +void GetVECShares(VECSOURCES& vecShares, const std::string& strShares, const std::string& strPath) +{ + std::size_t found; + found = strShares.find("local"); + if (found != std::string::npos) + CServiceBroker::GetMediaManager().GetLocalDrives(vecShares); + found = strShares.find("network"); + if (found != std::string::npos) + CServiceBroker::GetMediaManager().GetNetworkLocations(vecShares); + found = strShares.find("removable"); + if (found != std::string::npos) + CServiceBroker::GetMediaManager().GetRemovableDrives(vecShares); + found = strShares.find("programs"); + if (found != std::string::npos) + { + VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("programs"); + if (sources != nullptr) + vecShares.insert(vecShares.end(), sources->begin(), sources->end()); + } + found = strShares.find("files"); + if (found != std::string::npos) + { + VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("files"); + if (sources != nullptr) + vecShares.insert(vecShares.end(), sources->begin(), sources->end()); + } + found = strShares.find("music"); + if (found != std::string::npos) + { + VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("music"); + if (sources != nullptr) + vecShares.insert(vecShares.end(), sources->begin(), sources->end()); + } + found = strShares.find("video"); + if (found != std::string::npos) + { + VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("video"); + if (sources != nullptr) + vecShares.insert(vecShares.end(), sources->begin(), sources->end()); + } + found = strShares.find("pictures"); + if (found != std::string::npos) + { + VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("pictures"); + if (sources != nullptr) + vecShares.insert(vecShares.end(), sources->begin(), sources->end()); + } + + if (vecShares.empty()) + { + CMediaSource share; + std::string basePath = strPath; + std::string tempPath; + while (URIUtils::GetParentPath(basePath, tempPath)) + basePath = tempPath; + share.strPath = basePath; + // don't include the user details in the share name + CURL url(share.strPath); + share.strName = url.GetWithoutUserDetails(); + vecShares.push_back(share); + } +} + +} /* namespace */ + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_filebrowser_h::InitDirect( + directFuncToKodi_gui_dialogs_filebrowser_h* ifcToKodi, + directFuncToAddon_gui_dialogs_filebrowser_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_directory_v1 = + kodi_gui_dialogs_file_browser_show_and_get_directory_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_file_v1 = + kodi_gui_dialogs_file_browser_show_and_get_file_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1 = + kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_file_list_v1 = + kodi_gui_dialogs_file_browser_show_and_get_file_list_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_source_v1 = + kodi_gui_dialogs_file_browser_show_and_get_source_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_image_v1 = + kodi_gui_dialogs_file_browser_show_and_get_image_v1; + ifcToKodi->kodi_gui_dialogs_file_browser_show_and_get_image_list_v1 = + kodi_gui_dialogs_file_browser_show_and_get_image_list_v1; + // Unused "kodi_gui_dialogs_file_browser_clear_file_list", done only in addon lib +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_filebrowser_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_directory_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_directory(const char* shares, const char* heading, const char* path_in, char** path_out, bool write_only) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_directory_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_directory_v1 t = + in.get().as(); + const std::string& shares = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& path_in = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* path_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool write_only = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + this, shares.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + path_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, &path_out /* CheckAPIUse_WAY_7 (0001) */, + write_only /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + path_out ? path_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (path_out) /* CheckAPIUse_WAY_7 (0001) */ + free(path_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file(const char* shares, const char* mask, const char* heading, const char* path_in, char** path_out, bool use_thumbs, bool use_file_directories) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_v1 t = + in.get().as(); + const std::string& shares = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& mask = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& path_in = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* path_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool use_thumbs = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool use_file_directories = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_file_v1( + this, shares.c_str() /* CheckAPIUse_WAY_6a (0001) */, + mask.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + path_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, &path_out /* CheckAPIUse_WAY_7 (0001) */, + use_thumbs /* CheckAPIUse_WAY_10 (0001) */, + use_file_directories /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + path_out ? path_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (path_out) /* CheckAPIUse_WAY_7 (0001) */ + free(path_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_from_dir( const char* directory, const char* mask, const char* heading, const char* path_in, char** path_out, bool use_thumbs, bool use_file_directories, bool single_list) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1 t = + in.get().as(); + const std::string& directory = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& mask = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& path_in = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* path_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool use_thumbs = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool use_file_directories = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool single_list = std::get<6>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1( + this, directory.c_str() /* CheckAPIUse_WAY_6a (0001) */, + mask.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + path_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, &path_out /* CheckAPIUse_WAY_7 (0001) */, + use_thumbs /* CheckAPIUse_WAY_10 (0001) */, + use_file_directories /* CheckAPIUse_WAY_10 (0001) */, + single_list /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + path_out ? path_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (path_out) /* CheckAPIUse_WAY_7 (0001) */ + free(path_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_list( const char* shares, const char* mask, const char* heading, char*** file_list, size_t* entries, bool use_thumbs, bool use_file_directories) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_8_1 (0006) */, size_t> msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1 t = + in.get().as(); + const std::string& shares = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& mask = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + char** file_list = nullptr; /* CheckAPIUse_WAY_8_1 (0001) */ + size_t entries = std::get<3>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool use_thumbs = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool use_file_directories = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + this, shares.c_str() /* CheckAPIUse_WAY_6a (0001) */, + mask.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &file_list /* CheckAPIUse_WAY_8_1 (0001) */, &entries /* CheckAPIUse_WAY_13 (0001) */, + use_thumbs /* CheckAPIUse_WAY_10 (0001) */, + use_file_directories /* CheckAPIUse_WAY_10 (0001) */); + std::vector cpp_file_list; /* CheckAPIUse_WAY_8 (0001) */ + cpp_file_list.reserve(entries); /* CheckAPIUse_WAY_8 (0001) */ + if (file_list) + { + for (size_t i = 0; i < entries; ++i) /* CheckAPIUse_WAY_8 (0001) */ + { + if (file_list[i]) + { + cpp_file_list.emplace_back(file_list[i]); + free(file_list[i]); + } + else + { + cpp_file_list.emplace_back(""); /* CheckAPIUse_WAY_8 (0001) */ + } + } + free(file_list); + } + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + cpp_file_list /* CheckAPIUse_WAY_8 (0001) */, + entries /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_source_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_source( const char* path_in, char** path_out, bool allow_network_shares, const char* additional_share, const char* type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_source_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_source_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_source_v1 t = + in.get().as(); + const std::string& path_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* path_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool allow_network_shares = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + const std::string& additional_share = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& type = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_source_v1( + this, path_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &path_out /* CheckAPIUse_WAY_7 (0001) */, + allow_network_shares /* CheckAPIUse_WAY_10 (0001) */, + additional_share.c_str() /* CheckAPIUse_WAY_6a (0001) */, + type.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_source_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + path_out ? path_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (path_out) /* CheckAPIUse_WAY_7 (0001) */ + free(path_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_image_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image(const char* shares, const char* heading, const char* path_in, char** path_out) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_v1 t = + in.get().as(); + const std::string& shares = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& path_in = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* path_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_image_v1( + this, shares.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + path_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &path_out /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + path_out ? path_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (path_out) /* CheckAPIUse_WAY_7 (0001) */ + free(path_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image_list(const char* shares, const char* heading, char*** file_list, size_t* entries) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_8_1 (0006) */, size_t> msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1 t = + in.get().as(); + const std::string& shares = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char** file_list = nullptr; /* CheckAPIUse_WAY_8_1 (0001) */ + size_t entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + this, shares.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &file_list /* CheckAPIUse_WAY_8_1 (0001) */, &entries /* CheckAPIUse_WAY_13 (0001) */); + std::vector cpp_file_list; /* CheckAPIUse_WAY_8 (0001) */ + cpp_file_list.reserve(entries); /* CheckAPIUse_WAY_8 (0001) */ + if (file_list) + { + for (size_t i = 0; i < entries; ++i) /* CheckAPIUse_WAY_8 (0001) */ + { + if (file_list[i]) + { + cpp_file_list.emplace_back(file_list[i]); + free(file_list[i]); + } + else + { + cpp_file_list.emplace_back(""); /* CheckAPIUse_WAY_8 (0001) */ + } + } + free(file_list); + } + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + cpp_file_list /* CheckAPIUse_WAY_8 (0001) */, + entries /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_filebrowser_h::{}: addon called with unknown function id " + "'{}' on group 'gui_dialogs_filebrowser_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + void* thisClassHdl, + const char* shares, + const char* heading, + const char* path_in, + char** path_out, + bool write_only) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strPath = path_in; + + VECSOURCES vecShares; + GetVECShares(vecShares, shares, strPath); + bool bRet = CGUIDialogFileBrowser::ShowAndGetDirectory(vecShares, heading, strPath, write_only); + if (bRet) + *path_out = strdup(strPath.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_file_v1( + void* thisClassHdl, + const char* shares, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strPath = path_in; + + VECSOURCES vecShares; + GetVECShares(vecShares, shares, strPath); + bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(vecShares, mask, heading, strPath, use_thumbs, + use_file_directories); + if (bRet) + *path_out = strdup(strPath.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h:: + kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1(void* thisClassHdl, + const char* directory, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories, + bool single_list) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strPath = path_in; + bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(directory, mask, heading, strPath, use_thumbs, + use_file_directories, single_list); + if (bRet) + *path_out = strdup(strPath.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + void* thisClassHdl, + const char* shares, + const char* mask, + const char* heading, + char*** file_list, + size_t* entries, + bool use_thumbs, + bool use_file_directories) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + VECSOURCES vecShares; + GetVECShares(vecShares, shares, ""); + + std::vector pathsInt; + bool bRet = CGUIDialogFileBrowser::ShowAndGetFileList(vecShares, mask, heading, pathsInt, + use_thumbs, use_file_directories); + if (bRet) + { + *entries = pathsInt.size(); + *file_list = static_cast(malloc(*entries * sizeof(char*))); + for (unsigned int i = 0; i < *entries; ++i) + (*file_list)[i] = strdup(pathsInt[i].c_str()); + } + else + *entries = 0; + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_source_v1( + void* thisClassHdl, + const char* path_in, + char** path_out, + bool allow_network_shares, + const char* additional_share, + const char* type) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strPath = path_in; + + VECSOURCES vecShares; + if (additional_share) + GetVECShares(vecShares, additional_share, strPath); + bool bRet = + CGUIDialogFileBrowser::ShowAndGetSource(strPath, allow_network_shares, &vecShares, type); + if (bRet) + *path_out = strdup(strPath.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_image_v1( + void* thisClassHdl, + const char* shares, + const char* heading, + const char* path_in, + char** path_out) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strPath = path_in; + + VECSOURCES vecShares; + GetVECShares(vecShares, shares, strPath); + bool bRet = CGUIDialogFileBrowser::ShowAndGetImage(vecShares, heading, strPath); + if (bRet) + *path_out = strdup(strPath.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_filebrowser_h::kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + void* thisClassHdl, const char* shares, const char* heading, char*** file_list, size_t* entries) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + VECSOURCES vecShares; + GetVECShares(vecShares, shares, ""); + + std::vector pathsInt; + bool bRet = CGUIDialogFileBrowser::ShowAndGetImageList(vecShares, heading, pathsInt); + if (bRet) + { + *entries = pathsInt.size(); + *file_list = static_cast(malloc(*entries * sizeof(char*))); + for (unsigned int i = 0; i < *entries; ++i) + (*file_list)[i] = strdup(pathsInt[i].c_str()); + } + else + *entries = 0; + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/filebrowser.h b/xbmc/addons/interface/api/gui/dialogs/filebrowser.h new file mode 100644 index 0000000000000..f48026d0a54da --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/filebrowser.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_filebrowser_h; +struct directFuncToKodi_gui_dialogs_filebrowser_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_filebrowser_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_filebrowser_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_filebrowser_h* ifcToKodi, + directFuncToAddon_gui_dialogs_filebrowser_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + void* thisClassHdl, + const char* shares, + const char* heading, + const char* path_in, + char** path_out, + bool write_only); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_file_v1( + void* thisClassHdl, + const char* shares, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1( + void* thisClassHdl, + const char* directory, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories, + bool single_list); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + void* thisClassHdl, + const char* shares, + const char* mask, + const char* heading, + char*** file_list, + size_t* entries, + bool use_thumbs, + bool use_file_directories); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_source_v1( + void* thisClassHdl, + const char* path_in, + char** path_out, + bool allow_network_shares, + const char* additional_share, + const char* type); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_image_v1( + void* thisClassHdl, + const char* shares, + const char* heading, + const char* path_in, + char** path_out); // Added with API 1 + + static bool kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + void* thisClassHdl, + const char* shares, + const char* heading, + char*** file_list, + size_t* entries); // Added with API 1 + + + directFuncToAddon_gui_dialogs_filebrowser_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/keyboard.cpp b/xbmc/addons/interface/api/gui/dialogs/keyboard.cpp new file mode 100644 index 0000000000000..27b49096f27d4 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/keyboard.cpp @@ -0,0 +1,510 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "keyboard.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/keyboard.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "guilib/GUIKeyboardFactory.h" +#include "utils/Variant.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_keyboard_h::InitDirect( + directFuncToKodi_gui_dialogs_keyboard_h* ifcToKodi, + directFuncToAddon_gui_dialogs_keyboard_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1 = + kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_get_input_v1 = + kodi_gui_dialogs_keyboard_show_and_get_input_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1 = + kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_get_new_password_v1 = + kodi_gui_dialogs_keyboard_show_and_get_new_password_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1 = + kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1 = + kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_verify_password_v1 = + kodi_gui_dialogs_keyboard_show_and_verify_password_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_show_and_get_filter_v1 = + kodi_gui_dialogs_keyboard_show_and_get_filter_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1 = + kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1; + ifcToKodi->kodi_gui_dialogs_keyboard_is_keyboard_activated_v1 = + kodi_gui_dialogs_keyboard_is_keyboard_activated_v1; +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_keyboard_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input_with_head( const char* text_in, char** text_out, const char* heading, bool allow_empty_result, bool hidden_input, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1 t = + in.get().as(); + const std::string& text_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* text_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool allow_empty_result = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool hidden_input = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + this, text_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &text_out /* CheckAPIUse_WAY_7 (0001) */, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0001) */, + hidden_input /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + text_out ? text_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (text_out) /* CheckAPIUse_WAY_7 (0001) */ + free(text_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_get_input_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input(const char* text_in, char** text_out, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_v1 t = in.get().as(); + const std::string& text_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* text_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool allow_empty_result = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_get_input_v1( + this, text_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &text_out /* CheckAPIUse_WAY_7 (0001) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + text_out ? text_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (text_out) /* CheckAPIUse_WAY_7 (0001) */ + free(text_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head( const char* password_in, char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1 t = + in.get().as(); + const std::string& password_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* password_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool allow_empty_result = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1( + this, password_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &password_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password_out ? password_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password_out) /* CheckAPIUse_WAY_7 (0001) */ + free(password_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password( const char* password_in, char** password_out, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1 t = + in.get().as(); + const std::string& password_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* password_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + unsigned int auto_close_ms = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + this, password_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &password_out /* CheckAPIUse_WAY_7 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password_out ? password_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password_out) /* CheckAPIUse_WAY_7 (0001) */ + free(password_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head( char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1 t = + in.get().as(); + char* password_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool allow_empty_result = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1( + this, &password_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password_out ? password_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password_out) /* CheckAPIUse_WAY_7 (0001) */ + free(password_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password( char** password_out, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1 t = + in.get().as(); + char* password_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + unsigned int auto_close_ms = std::get<0>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + this, &password_out /* CheckAPIUse_WAY_7 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password_out ? password_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password_out) /* CheckAPIUse_WAY_7 (0001) */ + free(password_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_verify_password_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_keyboard_show_and_verify_password(const char* password_in, char** password_out, const char* heading, int retries, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_password_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_password_v1 t = + in.get().as(); + const std::string& password_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* password_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int retries = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + int auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + this, password_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &password_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, retries /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password_out ? password_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password_out) /* CheckAPIUse_WAY_7 (0001) */ + free(password_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_show_and_get_filter_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_filter(const char* text_in, char** text_out, bool searching, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_filter_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_filter_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_filter_v1 t = in.get().as(); + const std::string& text_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* text_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool searching = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int auto_close_ms = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + this, text_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &text_out /* CheckAPIUse_WAY_7 (0001) */, searching /* CheckAPIUse_WAY_10 (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + text_out ? text_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (text_out) /* CheckAPIUse_WAY_7 (0001) */ + free(text_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_send_text_to_active_keyboard(const char* text, bool close_keyboard) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1 t = + in.get().as(); + const std::string& text = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool close_keyboard = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + this, text.c_str() /* CheckAPIUse_WAY_6a (0001) */, + close_keyboard /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_is_keyboard_activated() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1; /* Autogenerated */ + bool auto_gen_ret = kodi_gui_dialogs_keyboard_is_keyboard_activated_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_keyboard_h::{}: addon called with unknown function id '{}' " + "on group 'gui_dialogs_keyboard_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + const char* heading, + bool allow_empty_result, + bool hidden_input, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = text_in; + bool bRet = CGUIKeyboardFactory::ShowAndGetInput(str, CVariant{heading}, allow_empty_result, + hidden_input, auto_close_ms); + if (bRet) + *text_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_get_input_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + bool allow_empty_result, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = text_in; + bool bRet = CGUIKeyboardFactory::ShowAndGetInput(str, allow_empty_result, auto_close_ms); + if (bRet) + *text_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h:: + kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1(void* thisClassHdl, + const char* password_in, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = password_in; + bool bRet = + CGUIKeyboardFactory::ShowAndGetNewPassword(str, heading, allow_empty_result, auto_close_ms); + if (bRet) + *password_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + void* thisClassHdl, const char* password_in, char** password_out, unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = password_in; + bool bRet = CGUIKeyboardFactory::ShowAndGetNewPassword(str, auto_close_ms); + if (bRet) + *password_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h:: + kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1(void* thisClassHdl, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str; + bool bRet = CGUIKeyboardFactory::ShowAndVerifyNewPassword(str, heading, allow_empty_result, + auto_close_ms); + if (bRet) + *password_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + void* thisClassHdl, char** password_out, unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str; + bool bRet = CGUIKeyboardFactory::ShowAndVerifyNewPassword(str, auto_close_ms); + if (bRet) + *password_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + void* thisClassHdl, + const char* password_in, + char** password_out, + const char* heading, + int retries, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = password_in; + int iRet = CGUIKeyboardFactory::ShowAndVerifyPassword(str, heading, retries, auto_close_ms); + if (iRet) + *password_out = strdup(str.c_str()); + return iRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + bool searching, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = text_in; + bool bRet = CGUIKeyboardFactory::ShowAndGetFilter(str, searching, auto_close_ms); + if (bRet) + *text_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + void* thisClassHdl, const char* text, bool close_keyboard) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CGUIKeyboardFactory::SendTextToActiveKeyboard(text, close_keyboard); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_keyboard_h::kodi_gui_dialogs_keyboard_is_keyboard_activated_v1( + void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CGUIKeyboardFactory::isKeyboardActivated(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/keyboard.h b/xbmc/addons/interface/api/gui/dialogs/keyboard.h new file mode 100644 index 0000000000000..de225f1ff41bb --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/keyboard.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_keyboard_h; +struct directFuncToKodi_gui_dialogs_keyboard_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_keyboard_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_keyboard_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_keyboard_h* ifcToKodi, + directFuncToAddon_gui_dialogs_keyboard_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + const char* heading, + bool allow_empty_result, + bool hidden_input, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_get_input_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + bool allow_empty_result, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1( + void* thisClassHdl, + const char* password_in, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + void* thisClassHdl, + const char* password_in, + char** password_out, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1( + void* thisClassHdl, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + void* thisClassHdl, char** password_out, unsigned int auto_close_ms); // Added with API 1 + + static int kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + void* thisClassHdl, + const char* password_in, + char** password_out, + const char* heading, + int retries, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + void* thisClassHdl, + const char* text_in, + char** text_out, + bool searching, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + void* thisClassHdl, const char* text, bool close_keyboard); // Added with API 1 + + static bool kodi_gui_dialogs_keyboard_is_keyboard_activated_v1( + void* thisClassHdl); // Added with API 1 + + + directFuncToAddon_gui_dialogs_keyboard_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/numeric.cpp b/xbmc/addons/interface/api/gui/dialogs/numeric.cpp new file mode 100644 index 0000000000000..e11ca76e0af59 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/numeric.cpp @@ -0,0 +1,410 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "numeric.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/numeric.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "XBDateTime.h" +#include "dialogs/GUIDialogNumeric.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_numeric_h::InitDirect( + directFuncToKodi_gui_dialogs_numeric_h* ifcToKodi, + directFuncToAddon_gui_dialogs_numeric_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_verify_new_password_v1 = + kodi_gui_dialogs_numeric_show_and_verify_new_password_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_verify_password_v1 = + kodi_gui_dialogs_numeric_show_and_verify_password_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_verify_input_v1 = + kodi_gui_dialogs_numeric_show_and_verify_input_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_get_time_v1 = + kodi_gui_dialogs_numeric_show_and_get_time_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_get_date_v1 = + kodi_gui_dialogs_numeric_show_and_get_date_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_get_ip_address_v1 = + kodi_gui_dialogs_numeric_show_and_get_ip_address_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_get_number_v1 = + kodi_gui_dialogs_numeric_show_and_get_number_v1; + ifcToKodi->kodi_gui_dialogs_numeric_show_and_get_seconds_v1 = + kodi_gui_dialogs_numeric_show_and_get_seconds_v1; +} + +bool CHdl_kodi_gui_dialogs_numeric_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_numeric_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_new_password(char** password) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1 t = + in.get().as(); + char* password = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_verify_new_password_v1( + this, &password /* CheckAPIUse_WAY_7 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + password ? password : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (password) /* CheckAPIUse_WAY_7 (0001) */ + free(password); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_verify_password_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_numeric_show_and_verify_password(const char* password, const char* heading, int retries) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_password_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_password_v1 t = + in.get().as(); + const std::string& password = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int retries = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + int auto_gen_ret = kodi_gui_dialogs_numeric_show_and_verify_password_v1( + this, password.c_str() /* CheckAPIUse_WAY_6a (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, retries /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_password_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_verify_input_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_input(const char* verify_in, char** verify_out, const char* heading, bool verify_input) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_input_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_input_v1 t = + in.get().as(); + const std::string& verify_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* verify_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool verify_input = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_verify_input_v1( + this, verify_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &verify_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + verify_input /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_input_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + verify_out ? verify_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (verify_out) /* CheckAPIUse_WAY_7 (0001) */ + free(verify_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_get_time_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_time(struct tm* time, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_time_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_time_v1 t = in.get().as(); + tm time; /* CheckAPIUse_WAY_15 (0001-1) */ + std::get<0>(t).SetCStructure(&time); /* CheckAPIUse_WAY_15 (0001-2) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_get_time_v1( + this, &time /* CheckAPIUse_WAY_15 (0001-4) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_time_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + &time /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_get_date_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_date(struct tm* date, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_date_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_date_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_date_v1 t = in.get().as(); + tm date; /* CheckAPIUse_WAY_15 (0001-1) */ + std::get<0>(t).SetCStructure(&date); /* CheckAPIUse_WAY_15 (0001-2) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_get_date_v1( + this, &date /* CheckAPIUse_WAY_15 (0001-4) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_date_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + &date /* CheckAPIUse_WAY_15 (0001-5) */)); + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_ip_address(const char* ip_address_in, char** ip_address_out, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1 t = + in.get().as(); + const std::string& ip_address_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* ip_address_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + this, ip_address_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &ip_address_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + ip_address_out ? ip_address_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (ip_address_out) /* CheckAPIUse_WAY_7 (0001) */ + free(ip_address_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_get_number_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_number(const char* number_in, char** number_out, const char* heading, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_number_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_number_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_number_v1 t = in.get().as(); + const std::string& number_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* number_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + unsigned int auto_close_ms = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_get_number_v1( + this, number_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &number_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_number_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + number_out ? number_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (number_out) /* CheckAPIUse_WAY_7 (0001) */ + free(number_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + case funcParent_kodi_gui_dialogs_numeric_show_and_get_seconds_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_seconds(const char* time_in, char** time_out, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_seconds_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_seconds_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_seconds_v1 t = in.get().as(); + const std::string& time_in = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* time_out = nullptr; /* CheckAPIUse_WAY_7 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + this, time_in.c_str() /* CheckAPIUse_WAY_6a (0001) */, + &time_out /* CheckAPIUse_WAY_7 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + time_out ? time_out : "" /* CheckAPIUse_WAY_7 (0001) */)); + if (time_out) /* CheckAPIUse_WAY_7 (0001) */ + free(time_out); /* CheckAPIUse_WAY_7 (0001) */ + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_numeric_h::{}: addon called with unknown function id '{}' " + "on group 'gui_dialogs_numeric_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_verify_new_password_v1( + void* thisClassHdl, char** password) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str; + bool bRet = CGUIDialogNumeric::ShowAndVerifyNewPassword(str); + if (bRet) + *password = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_verify_password_v1( + void* thisClassHdl, const char* password, const char* heading, int retries) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + std::string pw(password); + return CGUIDialogNumeric::ShowAndVerifyPassword(pw, heading, retries); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_verify_input_v1( + void* thisClassHdl, + const char* verify_in, + char** verify_out, + const char* heading, + bool verify_input) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = verify_in; + if (CGUIDialogNumeric::ShowAndVerifyInput(str, heading, verify_input) == + InputVerificationResult::SUCCESS) + { + *verify_out = strdup(str.c_str()); + return true; + } + return false; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_get_time_v1( + void* thisClassHdl, struct tm* time, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + KODI::TIME::SystemTime systemTime; + CDateTime dateTime(*time); + dateTime.GetAsSystemTime(systemTime); + if (CGUIDialogNumeric::ShowAndGetTime(systemTime, heading)) + { + dateTime = systemTime; + dateTime.GetAsTm(*time); + return true; + } + return false; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_get_date_v1( + void* thisClassHdl, struct tm* date, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + KODI::TIME::SystemTime systemTime; + CDateTime dateTime(*date); + dateTime.GetAsSystemTime(systemTime); + if (CGUIDialogNumeric::ShowAndGetDate(systemTime, heading)) + { + dateTime = systemTime; + dateTime.GetAsTm(*date); + return true; + } + return false; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + void* thisClassHdl, const char* ip_address_in, char** ip_address_out, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string strIP = ip_address_in; + bool bRet = CGUIDialogNumeric::ShowAndGetIPAddress(strIP, heading); + if (bRet) + *ip_address_out = strdup(strIP.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_get_number_v1( + void* thisClassHdl, + const char* number_in, + char** number_out, + const char* heading, + unsigned int auto_close_ms) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = number_in; + bool bRet = CGUIDialogNumeric::ShowAndGetNumber(str, heading, auto_close_ms); + if (bRet) + *number_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_numeric_h::kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + void* thisClassHdl, const char* time_in, char** time_out, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + std::string str = time_in; + bool bRet = CGUIDialogNumeric::ShowAndGetSeconds(str, heading); + if (bRet) + *time_out = strdup(str.c_str()); + return bRet; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/numeric.h b/xbmc/addons/interface/api/gui/dialogs/numeric.h new file mode 100644 index 0000000000000..9af914a2ce293 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/numeric.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_numeric_h; +struct directFuncToKodi_gui_dialogs_numeric_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_numeric_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_numeric_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_numeric_h* ifcToKodi, + directFuncToAddon_gui_dialogs_numeric_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_gui_dialogs_numeric_show_and_verify_new_password_v1( + void* thisClassHdl, char** password); // Added with API 1 + + static int kodi_gui_dialogs_numeric_show_and_verify_password_v1(void* thisClassHdl, + const char* password, + const char* heading, + int retries); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_verify_input_v1( + void* thisClassHdl, + const char* verify_in, + char** verify_out, + const char* heading, + bool verify_input); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_get_time_v1( + void* thisClassHdl, struct tm* time, const char* heading); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_get_date_v1( + void* thisClassHdl, struct tm* date, const char* heading); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + void* thisClassHdl, + const char* ip_address_in, + char** ip_address_out, + const char* heading); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_get_number_v1( + void* thisClassHdl, + const char* number_in, + char** number_out, + const char* heading, + unsigned int auto_close_ms); // Added with API 1 + + static bool kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + void* thisClassHdl, + const char* time_in, + char** time_out, + const char* heading); // Added with API 1 + + + directFuncToAddon_gui_dialogs_numeric_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/ok.cpp b/xbmc/addons/interface/api/gui/dialogs/ok.cpp new file mode 100644 index 0000000000000..ee69924047105 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/ok.cpp @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "ok.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/ok.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "messaging/helpers/DialogOKHelper.h" +#include "utils/Variant.h" + +using namespace KODI::MESSAGING; + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_ok_h::InitDirect(directFuncToKodi_gui_dialogs_ok_h* ifcToKodi, + directFuncToAddon_gui_dialogs_ok_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_ok_show_and_get_input_single_text_v1 = + kodi_gui_dialogs_ok_show_and_get_input_single_text_v1; + ifcToKodi->kodi_gui_dialogs_ok_show_and_get_input_line_text_v1 = + kodi_gui_dialogs_ok_show_and_get_input_line_text_v1; +} + +bool CHdl_kodi_gui_dialogs_ok_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_ok_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_single_text(const char* heading, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1 t = + in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_ok_show_and_get_input_single_text_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_line_text(const char* heading, const char* line0, const char* line1, const char* line2) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1 t = + in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line0 = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line1 = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line2 = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_ok_show_and_get_input_line_text_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line0.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line1.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line2.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_ok_h::{}: addon called with unknown function id '{}' on " + "group 'gui_dialogs_ok_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_dialogs_ok_h::kodi_gui_dialogs_ok_show_and_get_input_single_text_v1( + void* thisClassHdl, const char* heading, const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + HELPERS::ShowOKDialogText(CVariant{heading}, CVariant{text}); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_ok_h::kodi_gui_dialogs_ok_show_and_get_input_line_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + HELPERS::ShowOKDialogLines(CVariant{heading}, CVariant{line0}, CVariant{line1}, CVariant{line2}); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/ok.h b/xbmc/addons/interface/api/gui/dialogs/ok.h new file mode 100644 index 0000000000000..5292aa3ce2dd0 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/ok.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_ok_h; +struct directFuncToKodi_gui_dialogs_ok_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_ok_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_ok_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_ok_h* ifcToKodi, + directFuncToAddon_gui_dialogs_ok_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_dialogs_ok_show_and_get_input_single_text_v1( + void* thisClassHdl, const char* heading, const char* text); // Added with API 1 + + static void kodi_gui_dialogs_ok_show_and_get_input_line_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2); // Added with API 1 + + + directFuncToAddon_gui_dialogs_ok_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/progress.cpp b/xbmc/addons/interface/api/gui/dialogs/progress.cpp new file mode 100644 index 0000000000000..7d84033295b0c --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/progress.cpp @@ -0,0 +1,466 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "progress.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/progress.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "dialogs/GUIDialogProgress.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "utils/Variant.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_progress_h::InitDirect( + directFuncToKodi_gui_dialogs_progress_h* ifcToKodi, + directFuncToAddon_gui_dialogs_progress_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_progress_new_dialog_v1 = kodi_gui_dialogs_progress_new_dialog_v1; + ifcToKodi->kodi_gui_dialogs_progress_delete_dialog_v1 = + kodi_gui_dialogs_progress_delete_dialog_v1; + ifcToKodi->kodi_gui_dialogs_progress_open_v1 = kodi_gui_dialogs_progress_open_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_heading_v1 = kodi_gui_dialogs_progress_set_heading_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_line_v1 = kodi_gui_dialogs_progress_set_line_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_can_cancel_v1 = + kodi_gui_dialogs_progress_set_can_cancel_v1; + ifcToKodi->kodi_gui_dialogs_progress_is_canceled_v1 = kodi_gui_dialogs_progress_is_canceled_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_percentage_v1 = + kodi_gui_dialogs_progress_set_percentage_v1; + ifcToKodi->kodi_gui_dialogs_progress_get_percentage_v1 = + kodi_gui_dialogs_progress_get_percentage_v1; + ifcToKodi->kodi_gui_dialogs_progress_show_progress_bar_v1 = + kodi_gui_dialogs_progress_show_progress_bar_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_progress_max_v1 = + kodi_gui_dialogs_progress_set_progress_max_v1; + ifcToKodi->kodi_gui_dialogs_progress_set_progress_advance_v1 = + kodi_gui_dialogs_progress_set_progress_advance_v1; + ifcToKodi->kodi_gui_dialogs_progress_abort_v1 = kodi_gui_dialogs_progress_abort_v1; +} + +bool CHdl_kodi_gui_dialogs_progress_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_progress_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_progress_new_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_progress_new_dialog() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_new_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_new_dialog_v1; /* Autogenerated */ + KODI_GUI_HANDLE auto_gen_ret = kodi_gui_dialogs_progress_new_dialog_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_progress_new_dialog_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_dialogs_progress_delete_dialog_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_delete_dialog(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_delete_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_delete_dialog_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_delete_dialog_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_dialogs_progress_delete_dialog_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_open_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_open(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_open_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_open_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_dialogs_progress_open_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_heading_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_heading(KODI_GUI_HANDLE handle, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_heading_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_heading_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_heading_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& heading = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_progress_set_heading_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + heading.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_line_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_line(KODI_GUI_HANDLE handle, unsigned int line_no, const char* line) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_line_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_line_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + unsigned int line_no = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + const std::string& line = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_progress_set_line_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + line_no /* CheckAPIUse_WAY_10 (0001) */, + line.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_can_cancel_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_can_cancel(KODI_GUI_HANDLE handle, bool can_cancel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_can_cancel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_can_cancel_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_can_cancel_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool can_cancel = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_progress_set_can_cancel_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + can_cancel /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_is_canceled_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_is_canceled(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_is_canceled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_is_canceled_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_is_canceled_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_gui_dialogs_progress_is_canceled_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_progress_is_canceled_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_percentage(KODI_GUI_HANDLE handle, int percentage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_percentage_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int percentage = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_progress_set_percentage_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + percentage /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_get_percentage_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_progress_get_percentage(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_get_percentage_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_get_percentage_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_dialogs_progress_get_percentage_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_progress_get_percentage_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_progress_show_progress_bar_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_show_progress_bar(KODI_GUI_HANDLE handle, bool on_off) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_show_progress_bar_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_show_progress_bar_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_show_progress_bar_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool on_off = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_progress_show_progress_bar_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + on_off /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_progress_max_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_max(KODI_GUI_HANDLE handle, int max) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_progress_max_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_progress_max_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_progress_max_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int max = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_progress_set_progress_max_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + max /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_set_progress_advance_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_advance(KODI_GUI_HANDLE handle, int n_steps) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_progress_advance_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_progress_advance_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_set_progress_advance_v1 t = + in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int n_steps = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_dialogs_progress_set_progress_advance_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, n_steps /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_dialogs_progress_abort_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_abort(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_abort_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_abort_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_progress_abort_v1 t = in.get().as(); + KODI_GUI_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_gui_dialogs_progress_abort_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_progress_abort_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_progress_h::{}: addon called with unknown function id '{}' " + "on group 'gui_dialogs_progress_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +KODI_GUI_HANDLE CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_new_dialog_v1( + void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + CGUIDialogProgress* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_PROGRESS); + if (!dialog) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_dialogs_progress_h::{} - invalid handler data (dialog='{}') on addon '{}'", + __func__, static_cast(dialog), thisClass->m_process->GetAddonID()); + return nullptr; + } + + return dialog; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_delete_dialog_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->Close(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_open_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->Open(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_heading_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, const char* heading) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetHeading(heading); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_line_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + unsigned int line_no, + const char* line) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetLine(line_no, line); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_can_cancel_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, bool can_cancel) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetCanCancel(can_cancel); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_is_canceled_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->IsCanceled(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_percentage_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, int percentage) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetPercentage(percentage); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_get_percentage_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->GetPercentage(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_show_progress_bar_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, bool on_off) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->ShowProgressBar(on_off); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_progress_max_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, int max) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetProgressMax(max); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_set_progress_advance_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle, int n_steps) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + static_cast(handle)->SetProgressAdvance(n_steps); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_progress_h::kodi_gui_dialogs_progress_abort_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return static_cast(handle)->Abort(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/progress.h b/xbmc/addons/interface/api/gui/dialogs/progress.h new file mode 100644 index 0000000000000..bf36bb088b248 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/progress.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_progress_h; +struct directFuncToKodi_gui_dialogs_progress_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_progress_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_progress_h* ifcToKodi, + directFuncToAddon_gui_dialogs_progress_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static KODI_GUI_HANDLE kodi_gui_dialogs_progress_new_dialog_v1( + void* thisClassHdl); // Added with API 1 + + static void kodi_gui_dialogs_progress_delete_dialog_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_progress_open_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_heading_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + const char* heading); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_line_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + unsigned int line_no, + const char* line); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_can_cancel_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + bool can_cancel); // Added with API 1 + + static bool kodi_gui_dialogs_progress_is_canceled_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_percentage_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + int percentage); // Added with API 1 + + static int kodi_gui_dialogs_progress_get_percentage_v1( + void* thisClassHdl, KODI_GUI_HANDLE handle); // Added with API 1 + + static void kodi_gui_dialogs_progress_show_progress_bar_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + bool on_off); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_progress_max_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + int max); // Added with API 1 + + static void kodi_gui_dialogs_progress_set_progress_advance_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle, + int n_steps); // Added with API 1 + + static bool kodi_gui_dialogs_progress_abort_v1(void* thisClassHdl, + KODI_GUI_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_dialogs_progress_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/select.cpp b/xbmc/addons/interface/api/gui/dialogs/select.cpp new file mode 100644 index 0000000000000..42565fbb29975 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/select.cpp @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "select.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/select.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "dialogs/GUIDialogSelect.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "utils/Variant.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_select_h::InitDirect(directFuncToKodi_gui_dialogs_select_h* ifcToKodi, + directFuncToAddon_gui_dialogs_select_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_select_open_v1 = kodi_gui_dialogs_select_open_v1; + ifcToKodi->kodi_gui_dialogs_select_open_multi_select_v1 = + kodi_gui_dialogs_select_open_multi_select_v1; +} + +bool CHdl_kodi_gui_dialogs_select_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_select_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_select_open_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_select_open(const char* heading, const char* entries[], size_t size, int selected, unsigned int autoclose) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_select_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_select_open_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_select_open_v1 t = in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::vector& cpp_entries = std::get<1>(t); /* CheckAPIUse_WAY_6c (0001) */ + size_t size = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + int selected = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int autoclose = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + + std::vector entries; /* CheckAPIUse_WAY_6c (0001) */ + entries.reserve(size); /* CheckAPIUse_WAY_6c (0001) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0001) */ + { + entries.emplace_back(cpp_entries[i].c_str()); /* CheckAPIUse_WAY_6c (0001) */ + } + assert(cpp_entries.size() == size); + + int auto_gen_ret = kodi_gui_dialogs_select_open_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + entries.data() /* CheckAPIUse_WAY_6c (0001) */, size /* CheckAPIUse_WAY_10 (0001) */, + selected /* CheckAPIUse_WAY_10 (0001) */, autoclose /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_select_open_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_select_open_multi_select_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_select_open_multi_select(const char* heading, const char* entryIDs[], const char* entryNames[], uint8_t entriesSelected[], size_t size, unsigned int autoclose) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, std::vector /* CheckAPIUse_WAY_6b (0006) */, std::vector /* CheckAPIUse_WAY_10 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_select_open_multi_select_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_10 (0006) */> msgParent_OUT_kodi_gui_dialogs_select_open_multi_select_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_select_open_multi_select_v1 t = in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::vector& cpp_entryIDs = std::get<1>(t); /* CheckAPIUse_WAY_6c (0001) */ + const std::vector& cpp_entryNames = + std::get<2>(t); /* CheckAPIUse_WAY_6c (0001) */ + std::vector& entriesSelected = std::get<3>(t); /* CheckAPIUse_WAY_9 (0001) */ + size_t size = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + unsigned int autoclose = std::get<5>(t); /* CheckAPIUse_WAY_10 (0001) */ + + std::vector entryIDs; /* CheckAPIUse_WAY_6c (0001) */ + entryIDs.reserve(size); /* CheckAPIUse_WAY_6c (0001) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0001) */ + { + entryIDs.emplace_back(cpp_entryIDs[i].c_str()); /* CheckAPIUse_WAY_6c (0001) */ + } + assert(cpp_entryIDs.size() == size); + + + std::vector entryNames; /* CheckAPIUse_WAY_6c (0001) */ + entryNames.reserve(size); /* CheckAPIUse_WAY_6c (0001) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0001) */ + { + entryNames.emplace_back(cpp_entryNames[i].c_str()); /* CheckAPIUse_WAY_6c (0001) */ + } + assert(cpp_entryNames.size() == size); + + bool auto_gen_ret = kodi_gui_dialogs_select_open_multi_select_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + entryIDs.data() /* CheckAPIUse_WAY_6c (0001) */, + entryNames.data() /* CheckAPIUse_WAY_6c (0001) */, + entriesSelected.data() /* CheckAPIUse_WAY_9 (0001) */, + size /* CheckAPIUse_WAY_10 (0001) */, autoclose /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_select_open_multi_select_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + entriesSelected /* CheckAPIUse_WAY_11 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_select_h::{}: addon called with unknown function id '{}' on " + "group 'gui_dialogs_select_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +int CHdl_kodi_gui_dialogs_select_h::kodi_gui_dialogs_select_open_v1(void* thisClassHdl, + const char* heading, + const char* entries[], + size_t size, + int selected, + unsigned int autoclose) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIDialogSelect* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_SELECT); + + dialog->Reset(); + dialog->SetHeading(CVariant{heading}); + + for (unsigned int i = 0; i < size; ++i) + dialog->Add(entries[i]); + + if (selected > 0) + dialog->SetSelected(selected); + if (autoclose > 0) + dialog->SetAutoClose(autoclose); + + dialog->Open(); + return dialog->GetSelectedItem(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_select_h::kodi_gui_dialogs_select_open_multi_select_v1( + void* thisClassHdl, + const char* heading, + const char* entryIDs[], + const char* entryNames[], + uint8_t entriesSelected[], + size_t size, + unsigned int autoclose) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIDialogSelect* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_SELECT); + dialog->Reset(); + dialog->SetMultiSelection(true); + dialog->SetHeading(CVariant{heading}); + + std::vector selectedIndexes; + + for (unsigned int i = 0; i < size; ++i) + { + dialog->Add(entryNames[i]); + if (entriesSelected[i]) + selectedIndexes.push_back(i); + } + + dialog->SetSelected(selectedIndexes); + if (autoclose > 0) + dialog->SetAutoClose(autoclose); + + dialog->Open(); + if (dialog->IsConfirmed()) + { + for (unsigned int i = 0; i < size; ++i) + entriesSelected[i] = 0; + + selectedIndexes = dialog->GetSelectedItems(); + + for (unsigned int i = 0; i < selectedIndexes.size(); ++i) + { + if (selectedIndexes[i]) + entriesSelected[selectedIndexes[i]] = 1; + } + } + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/select.h b/xbmc/addons/interface/api/gui/dialogs/select.h new file mode 100644 index 0000000000000..32114da1322db --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/select.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_select_h; +struct directFuncToKodi_gui_dialogs_select_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_select_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_select_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_select_h* ifcToKodi, + directFuncToAddon_gui_dialogs_select_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static int kodi_gui_dialogs_select_open_v1(void* thisClassHdl, + const char* heading, + const char* entries[], + size_t size, + int selected, + unsigned int autoclose); // Added with API 1 + + static bool kodi_gui_dialogs_select_open_multi_select_v1( + void* thisClassHdl, + const char* heading, + const char* entryIDs[], + const char* entryNames[], + uint8_t entriesSelected[], + size_t size, + unsigned int autoclose); // Added with API 1 + + + directFuncToAddon_gui_dialogs_select_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/text_viewer.cpp b/xbmc/addons/interface/api/gui/dialogs/text_viewer.cpp new file mode 100644 index 0000000000000..bb8e148fca9b7 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/text_viewer.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "text_viewer.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/text_viewer.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "dialogs/GUIDialogTextViewer.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_text_viewer_h::InitDirect( + directFuncToKodi_gui_dialogs_text_viewer_h* ifcToKodi, + directFuncToAddon_gui_dialogs_text_viewer_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_text_viewer_show_v1 = kodi_gui_dialogs_text_viewer_show_v1; +} + +bool CHdl_kodi_gui_dialogs_text_viewer_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_text_viewer_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_text_viewer_show_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_text_viewer_show(const char* heading, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_text_viewer_show_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_text_viewer_show_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_text_viewer_show_v1 t = in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_dialogs_text_viewer_show_v1(this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_text_viewer_h::{}: addon called with unknown function id " + "'{}' on group 'gui_dialogs_text_viewer_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_dialogs_text_viewer_h::kodi_gui_dialogs_text_viewer_show_v1(void* thisClassHdl, + const char* heading, + const char* text) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIDialogTextViewer* dialog = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow( + WINDOW_DIALOG_TEXT_VIEWER); + if (!heading || !text || !dialog) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_dialogs_text_viewer_h::{} - invalid handler data (heading='{}', text='{}', " + "dialog='{}') on addon '{}'", + __func__, static_cast(heading), static_cast(text), + static_cast(dialog), thisClass->m_process->GetAddonID()); + return; + } + + dialog->SetHeading(heading); + dialog->SetText(text); + dialog->Open(); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/text_viewer.h b/xbmc/addons/interface/api/gui/dialogs/text_viewer.h new file mode 100644 index 0000000000000..72b983594b498 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/text_viewer.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_text_viewer_h; +struct directFuncToKodi_gui_dialogs_text_viewer_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_text_viewer_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_text_viewer_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_text_viewer_h* ifcToKodi, + directFuncToAddon_gui_dialogs_text_viewer_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_dialogs_text_viewer_show_v1(void* thisClassHdl, + const char* heading, + const char* text); // Added with API 1 + + + directFuncToAddon_gui_dialogs_text_viewer_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/yes_no.cpp b/xbmc/addons/interface/api/gui/dialogs/yes_no.cpp new file mode 100644 index 0000000000000..e5e1ad5022f35 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/yes_no.cpp @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "yes_no.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/dialogs/yes_no.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "dialogs/GUIDialogYesNo.h" +#include "messaging/helpers/DialogHelper.h" + +using namespace KODI::MESSAGING; +using KODI::MESSAGING::HELPERS::DialogResponse; + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_yes_no_h::InitDirect(directFuncToKodi_gui_dialogs_yes_no_h* ifcToKodi, + directFuncToAddon_gui_dialogs_yes_no_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1 = + kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1; + ifcToKodi->kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1 = + kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1; + ifcToKodi->kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1 = + kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1; +} + +bool CHdl_kodi_gui_dialogs_yes_no_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_dialogs_yes_no_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_single_text(const char* heading, const char* text, bool* canceled, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1 t = + in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& text = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool canceled = std::get<2>(t); /* CheckAPIUse_WAY_13 (0001) */ + const std::string& noLabel = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& yesLabel = std::get<4>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + text.c_str() /* CheckAPIUse_WAY_6a (0001) */, &canceled /* CheckAPIUse_WAY_13 (0001) */, + noLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */, + yesLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, + canceled /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_text(const char* heading, const char* line0, const char* line1, const char* line2, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1 t = + in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line0 = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line1 = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line2 = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& noLabel = std::get<4>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& yesLabel = std::get<5>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line0.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line1.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line2.c_str() /* CheckAPIUse_WAY_6a (0001) */, + noLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */, + yesLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_button_text( const char* heading, const char* line0, const char* line1, const char* line2, bool* canceled, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1 t = + in.get().as(); + const std::string& heading = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line0 = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line1 = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& line2 = std::get<3>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool canceled = std::get<4>(t); /* CheckAPIUse_WAY_13 (0001) */ + const std::string& noLabel = std::get<5>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& yesLabel = std::get<6>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + this, heading.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line0.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line1.c_str() /* CheckAPIUse_WAY_6a (0001) */, + line2.c_str() /* CheckAPIUse_WAY_6a (0001) */, &canceled /* CheckAPIUse_WAY_13 (0001) */, + noLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */, + yesLabel.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, + msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + auto_gen_ret /* Return_WAY_2 (0001) */, canceled /* CheckAPIUse_WAY_13 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_yes_no_h::{}: addon called with unknown function id '{}' on " + "group 'gui_dialogs_yes_no_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_gui_dialogs_yes_no_h::kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + void* thisClassHdl, + const char* heading, + const char* text, + bool* canceled, + const char* noLabel, + const char* yesLabel) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + if (!heading || !text || !canceled || !noLabel || !yesLabel) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_dialogs_yes_no_h::{} - invalid handler data (heading='{}', text='{}', " + "canceled='{}', noLabel='{}', yesLabel='{}') on addon '{}'", + __func__, static_cast(heading), static_cast(text), + static_cast(canceled), static_cast(noLabel), + static_cast(yesLabel), thisClass->m_process->GetAddonID()); + return false; + } + + DialogResponse result = HELPERS::ShowYesNoDialogText(heading, text, noLabel, yesLabel); + *canceled = (result == DialogResponse::CANCELLED); + return (result == DialogResponse::YES); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_yes_no_h::kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2, + const char* noLabel, + const char* yesLabel) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + if (!heading || !line0 || !line1 || !line2 || !noLabel || !yesLabel) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_dialogs_yes_no_h::{} - invalid handler data (heading='{}', line0='{}', " + "line1='{}', line2='{}', " + "noLabel='{}', yesLabel='{}') on addon '{}'", + __func__, static_cast(heading), static_cast(line0), + static_cast(line1), static_cast(line2), + static_cast(noLabel), static_cast(yesLabel), + thisClass->m_process->GetAddonID()); + return false; + } + + return HELPERS::ShowYesNoDialogLines(heading, line0, line1, line2, noLabel, yesLabel) == + DialogResponse::YES; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_dialogs_yes_no_h::kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2, + bool* canceled, + const char* noLabel, + const char* yesLabel) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + if (!heading || !line0 || !line1 || !line2 || !canceled || !noLabel || !yesLabel) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_dialogs_yes_no_h::{} - invalid handler data (heading='{}', line0='{}', " + "line1='{}', line2='{}', " + "canceled='{}', noLabel='{}', yesLabel='{}') on addon '{}'", + __func__, static_cast(heading), static_cast(line0), + static_cast(line1), static_cast(line2), + static_cast(canceled), static_cast(noLabel), + static_cast(yesLabel), thisClass->m_process->GetAddonID()); + return false; + } + + DialogResponse result = + HELPERS::ShowYesNoDialogLines(heading, line0, line1, line2, noLabel, yesLabel); + *canceled = (result == DialogResponse::CANCELLED); + return (result == DialogResponse::YES); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/dialogs/yes_no.h b/xbmc/addons/interface/api/gui/dialogs/yes_no.h new file mode 100644 index 0000000000000..8dcfcd4820e98 --- /dev/null +++ b/xbmc/addons/interface/api/gui/dialogs/yes_no.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_yes_no_h; +struct directFuncToKodi_gui_dialogs_yes_no_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_dialogs_yes_no_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_yes_no_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_dialogs_yes_no_h* ifcToKodi, + directFuncToAddon_gui_dialogs_yes_no_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + void* thisClassHdl, + const char* heading, + const char* text, + bool* canceled, + const char* noLabel, + const char* yesLabel); // Added with API 1 + + static bool kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2, + const char* noLabel, + const char* yesLabel); // Added with API 1 + + static bool kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + void* thisClassHdl, + const char* heading, + const char* line0, + const char* line1, + const char* line2, + bool* canceled, + const char* noLabel, + const char* yesLabel); // Added with API 1 + + + directFuncToAddon_gui_dialogs_yes_no_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/general.cpp b/xbmc/addons/interface/api/gui/general.cpp new file mode 100644 index 0000000000000..d86da9f016081 --- /dev/null +++ b/xbmc/addons/interface/api/gui/general.cpp @@ -0,0 +1,290 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "general.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/general.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "ServiceBroker.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +int CHdl_kodi_gui_general_h::m_iAddonGUILockRef = 0; + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_general_h::InitDirect(directFuncToKodi_gui_general_h* ifcToKodi, + directFuncToAddon_gui_general_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_lock_v1 = kodi_gui_lock_v1; + ifcToKodi->kodi_gui_unlock_v1 = kodi_gui_unlock_v1; + ifcToKodi->kodi_gui_get_screen_height_v1 = kodi_gui_get_screen_height_v1; + ifcToKodi->kodi_gui_get_screen_width_v1 = kodi_gui_get_screen_width_v1; + ifcToKodi->kodi_gui_get_video_resolution_v1 = kodi_gui_get_video_resolution_v1; + ifcToKodi->kodi_gui_get_current_window_dialog_id_v1 = kodi_gui_get_current_window_dialog_id_v1; + ifcToKodi->kodi_gui_get_current_window_id_v1 = kodi_gui_get_current_window_id_v1; + ifcToKodi->kodi_gui_get_hw_context_v1 = kodi_gui_get_hw_context_v1; +} + +bool CHdl_kodi_gui_general_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_general_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_lock_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_lock() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_lock_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_lock_v1; /* Autogenerated */ + kodi_gui_lock_v1(this); + return true; + } + case funcParent_kodi_gui_unlock_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_unlock() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_unlock_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_unlock_v1; /* Autogenerated */ + kodi_gui_unlock_v1(this); + return true; + } + case funcParent_kodi_gui_get_screen_height_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_screen_height() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_screen_height_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_screen_height_v1; /* Autogenerated */ + int auto_gen_ret = kodi_gui_get_screen_height_v1(this); + msgpack::pack( + out, msgParent_OUT_kodi_gui_get_screen_height_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_get_screen_width_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_screen_width() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_screen_width_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_screen_width_v1; /* Autogenerated */ + int auto_gen_ret = kodi_gui_get_screen_width_v1(this); + msgpack::pack( + out, msgParent_OUT_kodi_gui_get_screen_width_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_get_video_resolution_v1: + { + // Original API call: ATTR_DLL_EXPORT float kodi_gui_get_video_resolution() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_video_resolution_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_video_resolution_v1; /* Autogenerated */ + float auto_gen_ret = kodi_gui_get_video_resolution_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_get_video_resolution_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_get_current_window_dialog_id_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_current_window_dialog_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_current_window_dialog_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_current_window_dialog_id_v1; /* Autogenerated */ + int auto_gen_ret = kodi_gui_get_current_window_dialog_id_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_get_current_window_dialog_id_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_get_current_window_id_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_current_window_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_current_window_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_current_window_id_v1; /* Autogenerated */ + int auto_gen_ret = kodi_gui_get_current_window_id_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_get_current_window_id_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_get_hw_context_v1: + { + // Original API call: ATTR_DLL_EXPORT ADDON_HARDWARE_CONTEXT kodi_gui_get_hw_context() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_hw_context_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_hw_context_v1; /* Autogenerated */ + ADDON_HARDWARE_CONTEXT auto_gen_ret = kodi_gui_get_hw_context_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_gui_get_hw_context_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_general_h::{}: addon called with unknown function id '{}' on group " + "'gui_general_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +void CHdl_kodi_gui_general_h::kodi_gui_lock_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + lock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_general_h::kodi_gui_unlock_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_general_h::kodi_gui_get_screen_height_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_general_h::kodi_gui_get_screen_width_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth(); + + /*---AUTO_GEN_PARSE---*/ +} + +float CHdl_kodi_gui_general_h::kodi_gui_get_video_resolution_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0f; + + /*---AUTO_GEN_PARSE---*/ + + return (int)CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_general_h::kodi_gui_get_current_window_dialog_id_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + return (int)CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_general_h::kodi_gui_get_current_window_id_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CSingleLock gl(CServiceBroker::GetWinSystem()->GetGfxContext()); + return CServiceBroker::GetGUI()->GetWindowManager().GetTopmostModalDialog(); + + /*---AUTO_GEN_PARSE---*/ +} + +ADDON_HARDWARE_CONTEXT CHdl_kodi_gui_general_h::kodi_gui_get_hw_context_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return CServiceBroker::GetWinSystem()->GetHWContext(); + ; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_general_h::lock() +{ + if (m_iAddonGUILockRef == 0) + CServiceBroker::GetWinSystem()->GetGfxContext().lock(); + ++m_iAddonGUILockRef; +} + +void CHdl_kodi_gui_general_h::unlock() +{ + if (m_iAddonGUILockRef > 0) + { + --m_iAddonGUILockRef; + if (m_iAddonGUILockRef == 0) + CServiceBroker::GetWinSystem()->GetGfxContext().unlock(); + } +} + +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/general.h b/xbmc/addons/interface/api/gui/general.h new file mode 100644 index 0000000000000..ccb08ad738752 --- /dev/null +++ b/xbmc/addons/interface/api/gui/general.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/general.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_general_h; +struct directFuncToKodi_gui_general_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_general_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_general_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_general_h* ifcToKodi, + directFuncToAddon_gui_general_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + static void lock(); + static void unlock(); + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + static int m_iAddonGUILockRef; + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static void kodi_gui_lock_v1(void* thisClassHdl); // Added with API 1 + + static void kodi_gui_unlock_v1(void* thisClassHdl); // Added with API 1 + + static int kodi_gui_get_screen_height_v1(void* thisClassHdl); // Added with API 1 + + static int kodi_gui_get_screen_width_v1(void* thisClassHdl); // Added with API 1 + + static float kodi_gui_get_video_resolution_v1(void* thisClassHdl); // Added with API 1 + + static int kodi_gui_get_current_window_dialog_id_v1(void* thisClassHdl); // Added with API 1 + + static int kodi_gui_get_current_window_id_v1(void* thisClassHdl); // Added with API 1 + + static ADDON_HARDWARE_CONTEXT kodi_gui_get_hw_context_v1(void* thisClassHdl); // Added with API 1 + + + directFuncToAddon_gui_general_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/list_item.cpp b/xbmc/addons/interface/api/gui/list_item.cpp new file mode 100644 index 0000000000000..342cda6d6faf6 --- /dev/null +++ b/xbmc/addons/interface/api/gui/list_item.cpp @@ -0,0 +1,659 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "list_item.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/list_item.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "FileItem.h" +#include "general.h" +#include "utils/StringUtils.h" +#include "utils/Variant.h" + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_list_item_h::InitDirect(directFuncToKodi_gui_list_item_h* ifcToKodi, + directFuncToAddon_gui_list_item_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_listitem_create_v1 = kodi_gui_listitem_create_v1; + ifcToKodi->kodi_gui_listitem_destroy_v1 = kodi_gui_listitem_destroy_v1; + ifcToKodi->kodi_gui_listitem_get_label_v1 = kodi_gui_listitem_get_label_v1; + ifcToKodi->kodi_gui_listitem_set_label_v1 = kodi_gui_listitem_set_label_v1; + ifcToKodi->kodi_gui_listitem_get_label2_v1 = kodi_gui_listitem_get_label2_v1; + ifcToKodi->kodi_gui_listitem_set_label2_v1 = kodi_gui_listitem_set_label2_v1; + ifcToKodi->kodi_gui_listitem_get_art_v1 = kodi_gui_listitem_get_art_v1; + ifcToKodi->kodi_gui_listitem_set_art_v1 = kodi_gui_listitem_set_art_v1; + ifcToKodi->kodi_gui_listitem_get_path_v1 = kodi_gui_listitem_get_path_v1; + ifcToKodi->kodi_gui_listitem_set_path_v1 = kodi_gui_listitem_set_path_v1; + ifcToKodi->kodi_gui_listitem_get_property_v1 = kodi_gui_listitem_get_property_v1; + ifcToKodi->kodi_gui_listitem_set_property_v1 = kodi_gui_listitem_set_property_v1; + ifcToKodi->kodi_gui_listitem_select_v1 = kodi_gui_listitem_select_v1; + ifcToKodi->kodi_gui_listitem_is_selected_v1 = kodi_gui_listitem_is_selected_v1; +} + +bool CHdl_kodi_gui_list_item_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_list_item_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_listitem_create_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_listitem_create(const char* label, const char* label2, const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_create_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_create_v1 t = in.get().as(); + const std::string& label = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& label2 = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& path = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + KODI_GUI_LISTITEM_HANDLE auto_gen_ret = + kodi_gui_listitem_create_v1(this, label.c_str() /* CheckAPIUse_WAY_6a (0001) */, + label2.c_str() /* CheckAPIUse_WAY_6a (0001) */, + path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_listitem_destroy_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_destroy(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_destroy_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_destroy_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_listitem_destroy_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_get_label_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_get_label_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_listitem_get_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_get_label_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_listitem_set_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_label(KODI_GUI_LISTITEM_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_set_label_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_listitem_set_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_get_label2_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label2(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_label2_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_get_label2_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_listitem_get_label2_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_get_label2_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_listitem_set_label2_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_label2(KODI_GUI_LISTITEM_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_label2_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_set_label2_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& label = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_listitem_set_label2_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_get_art_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_art_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_art_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_get_art_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& type = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_gui_listitem_get_art_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + type.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_get_art_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_listitem_set_art_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type, const char* image) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_art_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_art_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_set_art_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& type = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& image = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_listitem_set_art_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + type.c_str() /* CheckAPIUse_WAY_6a (0001) */, + image.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_get_path_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_path(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_path_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_get_path_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + char* auto_gen_ret = + kodi_gui_listitem_get_path_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_get_path_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_listitem_set_path_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_path(KODI_GUI_LISTITEM_HANDLE handle, const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_path_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_set_path_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& path = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_listitem_set_path_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + path.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_get_property_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_property(KODI_GUI_LISTITEM_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_get_property_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_gui_listitem_get_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_get_property_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_listitem_set_property_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_property(KODI_GUI_LISTITEM_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_set_property_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_listitem_set_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_select_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_select(KODI_GUI_LISTITEM_HANDLE handle, bool select) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_select_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_select_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_select_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool select = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_listitem_select_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + select /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_listitem_is_selected_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_listitem_is_selected(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_is_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_is_selected_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_listitem_is_selected_v1 t = in.get().as(); + KODI_GUI_LISTITEM_HANDLE handle = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = + kodi_gui_listitem_is_selected_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_listitem_is_selected_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_list_item_h::{}: addon called with unknown function id '{}' on " + "group 'gui_list_item_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +KODI_GUI_LISTITEM_HANDLE CHdl_kodi_gui_list_item_h::kodi_gui_listitem_create_v1(void* thisClassHdl, + const char* label, + const char* label2, + const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = new CFileItemPtr(new CFileItem()); + if (label) + item->get()->SetLabel(label); + if (label2) + item->get()->SetLabel2(label2); + if (path) + item->get()->SetPath(path); + + return item; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_destroy_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item) + delete item; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_list_item_h::kodi_gui_listitem_get_label_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return nullptr; + } + + char* ret; + CHdl_kodi_gui_general_h::lock(); + ret = strdup(item->get()->GetLabel().c_str()); + CHdl_kodi_gui_general_h::unlock(); + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_set_label_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + item->get()->SetLabel(label); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_list_item_h::kodi_gui_listitem_get_label2_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return nullptr; + } + + char* ret; + CHdl_kodi_gui_general_h::lock(); + ret = strdup(item->get()->GetLabel2().c_str()); + CHdl_kodi_gui_general_h::unlock(); + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_set_label2_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + item->get()->SetLabel2(label); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_list_item_h::kodi_gui_listitem_get_art_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* type) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return nullptr; + } + + char* ret; + CHdl_kodi_gui_general_h::lock(); + ret = strdup(item->get()->GetArt(type).c_str()); + CHdl_kodi_gui_general_h::unlock(); + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_set_art_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* type, + const char* image) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + item->get()->SetArt(type, image); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_list_item_h::kodi_gui_listitem_get_path_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return nullptr; + } + + char* ret; + CHdl_kodi_gui_general_h::lock(); + ret = strdup(item->get()->GetPath().c_str()); + CHdl_kodi_gui_general_h::unlock(); + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_set_path_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* path) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + item->get()->SetPath(path); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_list_item_h::kodi_gui_listitem_get_property_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return nullptr; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + char* ret = strdup(item->get()->GetProperty(lowerKey).asString().c_str()); + CHdl_kodi_gui_general_h::unlock(); + + return ret; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_set_property_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* key, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + item->get()->SetProperty(lowerKey, CVariant(value)); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_list_item_h::kodi_gui_listitem_select_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + bool select) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + item->get()->Select(select); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_list_item_h::kodi_gui_listitem_is_selected_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CFileItemPtr* item = static_cast(handle); + if (item->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_list_item_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return false; + } + + CHdl_kodi_gui_general_h::lock(); + bool ret = item->get()->IsSelected(); + CHdl_kodi_gui_general_h::unlock(); + + return ret; + + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/list_item.h b/xbmc/addons/interface/api/gui/list_item.h new file mode 100644 index 0000000000000..cf7704e3f51e2 --- /dev/null +++ b/xbmc/addons/interface/api/gui/list_item.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_list_item_h; +struct directFuncToKodi_gui_list_item_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_list_item_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_list_item_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_list_item_h* ifcToKodi, + directFuncToAddon_gui_list_item_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static KODI_GUI_LISTITEM_HANDLE kodi_gui_listitem_create_v1(void* thisClassHdl, + const char* label, + const char* label2, + const char* path); // Added with API 1 + + static void kodi_gui_listitem_destroy_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle); // Added with API 1 + + static char* kodi_gui_listitem_get_label_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle); // Added with API 1 + + static void kodi_gui_listitem_set_label_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* label); // Added with API 1 + + static char* kodi_gui_listitem_get_label2_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle); // Added with API 1 + + static void kodi_gui_listitem_set_label2_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* label); // Added with API 1 + + static char* kodi_gui_listitem_get_art_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* type); // Added with API 1 + + static void kodi_gui_listitem_set_art_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* type, + const char* image); // Added with API 1 + + static char* kodi_gui_listitem_get_path_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle); // Added with API 1 + + static void kodi_gui_listitem_set_path_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* path); // Added with API 1 + + static char* kodi_gui_listitem_get_property_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* key); // Added with API 1 + + static void kodi_gui_listitem_set_property_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + const char* key, + const char* value); // Added with API 1 + + static void kodi_gui_listitem_select_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle, + bool select); // Added with API 1 + + static bool kodi_gui_listitem_is_selected_v1(void* thisClassHdl, + KODI_GUI_LISTITEM_HANDLE handle); // Added with API 1 + + + directFuncToAddon_gui_list_item_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/window.cpp b/xbmc/addons/interface/api/gui/window.cpp new file mode 100644 index 0000000000000..a38e1f4a6fd94 --- /dev/null +++ b/xbmc/addons/interface/api/gui/window.cpp @@ -0,0 +1,2421 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "window.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/gui/window.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "Application.h" +#include "FileItem.h" +#include "ServiceBroker.h" +#include "addons/Skin.h" +#include "addons/interface/tools/GUITranslator.h" +#include "general.h" +// #include "controls/Rendering.h" +#include "filesystem/File.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIRenderingControl.h" +#include "guilib/GUIWindowManager.h" +#include "guilib/TextureManager.h" +#include "input/Key.h" +#include "messaging/ApplicationMessenger.h" +#include "threads/Event.h" +#include "utils/StringUtils.h" +#include "utils/URIUtils.h" +#include "utils/Variant.h" + +using namespace ADDON; +using namespace KODI::MESSAGING; + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +CGUIAddonWindow::CGUIAddonWindow(int id, + const std::string& strXML, + std::shared_ptr addon, + bool isMedia) + : CGUIMediaWindow(id, strXML.c_str()), + m_windowId(id), + m_oldWindowId(0), + m_addon(addon), + m_isMedia(isMedia) +{ + m_loadType = LOAD_ON_GUI_INIT; +} + +CGUIControl* CGUIAddonWindow::GetAddonControl(int controlId, + CGUIControl::GUICONTROLTYPES type, + const std::string& typeName) +{ + // Load window resources, if not already done, to have related xml content + // present and to let control find it + if (!m_windowLoaded) + { + if (!Initialize()) + { + CLog::Log(LOGERROR, + "CGUIAddonGUI_Window::{}: {} - Window initialize failed by control id '{}' request " + "for '{}'", + __func__, m_addon->Name(), controlId, typeName); + return nullptr; + } + } + + CGUIControl* pGUIControl = GetControl(controlId); + if (!pGUIControl) + { + CLog::Log(LOGERROR, + "CGUIAddonGUI_Window::{}: {} - Requested GUI control Id '{}' for '{}' not present!", + __func__, m_addon->Name(), controlId, typeName); + return nullptr; + } + else if (pGUIControl->GetControlType() != type) + { + CLog::Log(LOGERROR, + "CGUIAddonGUI_Window::{}: {} - Requested GUI control Id '{}' not the type '{}'!", + __func__, m_addon->Name(), controlId, typeName); + return nullptr; + } + + return pGUIControl; +} + +bool CGUIAddonWindow::OnAction(const CAction& action) +{ + // Let addon decide whether it wants to handle action first + if (CBOnAction && + CBOnAction(m_clientHandle, CAddonGUITranslator::TranslateActionIdToAddon(action.GetID()))) + return true; + + return CGUIWindow::OnAction(action); +} +bool CGUIAddonWindow::OnMessage(CGUIMessage& message) +{ + switch (message.GetMessage()) + { + case GUI_MSG_WINDOW_DEINIT: + { + return CGUIMediaWindow::OnMessage(message); + } + break; + + case GUI_MSG_WINDOW_INIT: + { + CGUIMediaWindow::OnMessage(message); + + if (CBOnInit) + CBOnInit(m_clientHandle); + return true; + } + break; + + case GUI_MSG_FOCUSED: + { + if (m_viewControl.HasControl(message.GetControlId()) && + m_viewControl.GetCurrentControl() != message.GetControlId()) + { + m_viewControl.SetFocused(); + return true; + } + // check if our focused control is one of our category buttons + int iControl = message.GetControlId(); + if (CBOnFocus) + CBOnFocus(m_clientHandle, iControl); + } + break; + + case GUI_MSG_NOTIFY_ALL: + { + // most messages from GUI_MSG_NOTIFY_ALL break container content, whitelist working ones. + if (message.GetParam1() == GUI_MSG_PAGE_CHANGE || + message.GetParam1() == GUI_MSG_WINDOW_RESIZE) + return CGUIMediaWindow::OnMessage(message); + return true; + } + + case GUI_MSG_CLICKED: + { + int iControl = message.GetSenderId(); + if (iControl && iControl != this->GetID()) + { + CGUIControl* controlClicked = this->GetControl(iControl); + + // The old python way used to check list AND SELECITEM method or if its a button, checkmark. + // Its done this way for now to allow other controls without a python version like togglebutton to still raise a onAction event + if (controlClicked) // Will get problems if we the id is not on the window and we try to do GetControlType on it. So check to make sure it exists + { + if ((controlClicked->IsContainer() && (message.GetParam1() == ACTION_SELECT_ITEM || + message.GetParam1() == ACTION_MOUSE_LEFT_CLICK)) || + !controlClicked->IsContainer()) + { + if (CBOnClick) + return CBOnClick(m_clientHandle, iControl); + } + else if (controlClicked->IsContainer() && + (message.GetParam1() == ACTION_MOUSE_RIGHT_CLICK || + message.GetParam1() == ACTION_CONTEXT_MENU)) + { + if (CBOnAction) + { + // Check addon want to handle right click for a context menu, if + // not used from addon becomes "GetContextButtons(...)" called. + if (CBOnAction(m_clientHandle, ADDON_ACTION_CONTEXT_MENU)) + return true; + } + } + } + } + } + break; + } + + return CGUIMediaWindow::OnMessage(message); +} + +void CGUIAddonWindow::AllocResources(bool forceLoad /*= false */) +{ + std::string tmpDir = URIUtils::GetDirectory(GetProperty("xmlfile").asString()); + std::string fallbackMediaPath; + URIUtils::GetParentPath(tmpDir, fallbackMediaPath); + URIUtils::RemoveSlashAtEnd(fallbackMediaPath); + m_mediaDir = fallbackMediaPath; + + CServiceBroker::GetGUI()->GetTextureManager().AddTexturePath(m_mediaDir); + CGUIMediaWindow::AllocResources(forceLoad); + CServiceBroker::GetGUI()->GetTextureManager().RemoveTexturePath(m_mediaDir); +} + +void CGUIAddonWindow::Render() +{ + CServiceBroker::GetGUI()->GetTextureManager().AddTexturePath(m_mediaDir); + CGUIMediaWindow::Render(); + CServiceBroker::GetGUI()->GetTextureManager().RemoveTexturePath(m_mediaDir); +} + +void CGUIAddonWindow::AddItem(CFileItemPtr* fileItem, int itemPosition) +{ + if (itemPosition == -1 || itemPosition > m_vecItems->Size()) + { + m_vecItems->Add(*fileItem); + } + else if (itemPosition < -1 && !(itemPosition - 1 < m_vecItems->Size())) + { + m_vecItems->AddFront(*fileItem, 0); + } + else + { + m_vecItems->AddFront(*fileItem, itemPosition); + } + m_viewControl.SetItems(*m_vecItems); + UpdateButtons(); +} + +void CGUIAddonWindow::RemoveItem(int itemPosition) +{ + m_vecItems->Remove(itemPosition); + m_viewControl.SetItems(*m_vecItems); + UpdateButtons(); +} + +void CGUIAddonWindow::RemoveItem(CFileItemPtr* fileItem) +{ + m_vecItems->Remove(fileItem->get()); + m_viewControl.SetItems(*m_vecItems); + UpdateButtons(); +} + +int CGUIAddonWindow::GetCurrentListPosition() +{ + return m_viewControl.GetSelectedItem(); +} + +void CGUIAddonWindow::SetCurrentListPosition(int item) +{ + m_viewControl.SetSelectedItem(item); +} + +int CGUIAddonWindow::GetListSize() +{ + return m_vecItems->Size(); +} + +CFileItemPtr* CGUIAddonWindow::GetListItem(int position) +{ + if (position < 0 || position >= m_vecItems->Size()) + return nullptr; + return new CFileItemPtr(m_vecItems->Get(position)); +} + +void CGUIAddonWindow::ClearList() +{ + ClearFileItems(); + + m_viewControl.SetItems(*m_vecItems); + UpdateButtons(); +} + +void CGUIAddonWindow::SetContainerProperty(const std::string& key, const std::string& value) +{ + m_vecItems->SetProperty(key, value); +} + +void CGUIAddonWindow::SetContainerContent(const std::string& value) +{ + m_vecItems->SetContent(value); +} + +int CGUIAddonWindow::GetCurrentContainerControlId() +{ + return m_viewControl.GetCurrentControl(); +} + +void CGUIAddonWindow::GetContextButtons(int itemNumber, CContextButtons& buttons) +{ + gui_context_menu_pair c_buttons[ADDON_MAX_CONTEXT_ENTRIES]; + memset(&c_buttons, 0, sizeof(c_buttons)); + unsigned int size = ADDON_MAX_CONTEXT_ENTRIES; + if (CBGetContextButtons) + { + CBGetContextButtons(m_clientHandle, itemNumber, c_buttons, &size); + for (unsigned int i = 0; i < size; ++i) + buttons.push_back(std::pair(c_buttons[i].id, c_buttons[i].name)); + } +} + +bool CGUIAddonWindow::OnContextButton(int itemNumber, CONTEXT_BUTTON button) +{ + if (CBOnContextButton) + return CBOnContextButton(m_clientHandle, itemNumber, static_cast(button)); + return false; +} + +void CGUIAddonWindow::WaitForActionEvent(unsigned int timeout) +{ + m_actionEvent.Wait(std::chrono::milliseconds(timeout)); + m_actionEvent.Reset(); +} + +void CGUIAddonWindow::PulseActionEvent() +{ + m_actionEvent.Set(); +} + +void CGUIAddonWindow::SetupShares() +{ + UpdateButtons(); +} + + +CGUIAddonWindowDialog::CGUIAddonWindowDialog(int id, + const std::string& strXML, + std::shared_ptr addon) + : CGUIAddonWindow(id, strXML, addon, false), m_bRunning(false) +{ +} + +void CGUIAddonWindowDialog::Show(bool show /* = true */, bool modal /* = true*/) +{ + if (modal) + { + unsigned int count = CServiceBroker::GetWinSystem()->GetGfxContext().exit(); + CApplicationMessenger::GetInstance().SendMsg(TMSG_GUI_ADDON_DIALOG, 0, show ? 1 : 0, + static_cast(this)); + CServiceBroker::GetWinSystem()->GetGfxContext().restore(count); + } + else + CApplicationMessenger::GetInstance().PostMsg(TMSG_GUI_ADDON_DIALOG, 0, show ? 1 : 0, + static_cast(this)); +} + +void CGUIAddonWindowDialog::Show_Internal(bool show /* = true */) +{ + if (show) + { + m_bRunning = true; + CServiceBroker::GetGUI()->GetWindowManager().RegisterDialog(this); + + // activate this window... + CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, WINDOW_INVALID, GetID()); + OnMessage(msg); + + // this dialog is derived from GUIMediaWindow + // make sure it is rendered last + m_renderOrder = RENDER_ORDER_DIALOG; + while (m_bRunning) + { + if (!ProcessRenderLoop(false)) + break; + } + } + else // hide + { + m_bRunning = false; + + CGUIMessage msg(GUI_MSG_WINDOW_DEINIT, 0, 0); + OnMessage(msg); + + CServiceBroker::GetGUI()->GetWindowManager().RemoveDialog(GetID()); + } +} + +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_window_h::InitDirect(directFuncToKodi_gui_window_h* ifcToKodi, + directFuncToAddon_gui_window_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_gui_window_create_v1 = kodi_gui_window_create_v1; + ifcToKodi->kodi_gui_window_destroy_v1 = kodi_gui_window_destroy_v1; + ifcToKodi->kodi_gui_window_show_v1 = kodi_gui_window_show_v1; + ifcToKodi->kodi_gui_window_close_v1 = kodi_gui_window_close_v1; + ifcToKodi->kodi_gui_window_do_modal_v1 = kodi_gui_window_do_modal_v1; + ifcToKodi->kodi_gui_window_set_focus_id_v1 = kodi_gui_window_set_focus_id_v1; + ifcToKodi->kodi_gui_window_get_focus_id_v1 = kodi_gui_window_get_focus_id_v1; + ifcToKodi->kodi_gui_window_set_control_label_v1 = kodi_gui_window_set_control_label_v1; + ifcToKodi->kodi_gui_window_set_control_visible_v1 = kodi_gui_window_set_control_visible_v1; + ifcToKodi->kodi_gui_window_set_control_selected_v1 = kodi_gui_window_set_control_selected_v1; + ifcToKodi->kodi_gui_window_set_property_v1 = kodi_gui_window_set_property_v1; + ifcToKodi->kodi_gui_window_set_property_int_v1 = kodi_gui_window_set_property_int_v1; + ifcToKodi->kodi_gui_window_set_property_bool_v1 = kodi_gui_window_set_property_bool_v1; + ifcToKodi->kodi_gui_window_set_property_double_v1 = kodi_gui_window_set_property_double_v1; + ifcToKodi->kodi_gui_window_get_property_v1 = kodi_gui_window_get_property_v1; + ifcToKodi->kodi_gui_window_get_property_int_v1 = kodi_gui_window_get_property_int_v1; + ifcToKodi->kodi_gui_window_get_property_bool_v1 = kodi_gui_window_get_property_bool_v1; + ifcToKodi->kodi_gui_window_get_property_double_v1 = kodi_gui_window_get_property_double_v1; + ifcToKodi->kodi_gui_window_clear_properties_v1 = kodi_gui_window_clear_properties_v1; + ifcToKodi->kodi_gui_window_clear_property_v1 = kodi_gui_window_clear_property_v1; + ifcToKodi->kodi_gui_window_clear_item_list_v1 = kodi_gui_window_clear_item_list_v1; + ifcToKodi->kodi_gui_window_add_list_item_v1 = kodi_gui_window_add_list_item_v1; + ifcToKodi->kodi_gui_window_remove_list_item_from_position_v1 = + kodi_gui_window_remove_list_item_from_position_v1; + ifcToKodi->kodi_gui_window_remove_list_item_v1 = kodi_gui_window_remove_list_item_v1; + ifcToKodi->kodi_gui_window_get_list_item_v1 = kodi_gui_window_get_list_item_v1; + ifcToKodi->kodi_gui_window_set_current_list_position_v1 = + kodi_gui_window_set_current_list_position_v1; + ifcToKodi->kodi_gui_window_get_current_list_position_v1 = + kodi_gui_window_get_current_list_position_v1; + ifcToKodi->kodi_gui_window_get_list_size_v1 = kodi_gui_window_get_list_size_v1; + ifcToKodi->kodi_gui_window_set_container_property_v1 = kodi_gui_window_set_container_property_v1; + ifcToKodi->kodi_gui_window_set_container_content_v1 = kodi_gui_window_set_container_content_v1; + ifcToKodi->kodi_gui_window_get_current_container_id_v1 = + kodi_gui_window_get_current_container_id_v1; + ifcToKodi->kodi_gui_window_mark_dirty_region_v1 = kodi_gui_window_mark_dirty_region_v1; + ifcToKodi->kodi_gui_window_get_control_button_v1 = kodi_gui_window_get_control_button_v1; + ifcToKodi->kodi_gui_window_get_control_edit_v1 = kodi_gui_window_get_control_edit_v1; + ifcToKodi->kodi_gui_window_get_control_fade_label_v1 = kodi_gui_window_get_control_fade_label_v1; + ifcToKodi->kodi_gui_window_get_control_image_v1 = kodi_gui_window_get_control_image_v1; + ifcToKodi->kodi_gui_window_get_control_label_v1 = kodi_gui_window_get_control_label_v1; + ifcToKodi->kodi_gui_window_get_control_progress_v1 = kodi_gui_window_get_control_progress_v1; + ifcToKodi->kodi_gui_window_get_control_radio_button_v1 = + kodi_gui_window_get_control_radio_button_v1; + ifcToKodi->kodi_gui_window_get_control_render_addon_v1 = + kodi_gui_window_get_control_render_addon_v1; + ifcToKodi->kodi_gui_window_get_control_settings_slider_v1 = + kodi_gui_window_get_control_settings_slider_v1; + ifcToKodi->kodi_gui_window_get_control_slider_v1 = kodi_gui_window_get_control_slider_v1; + ifcToKodi->kodi_gui_window_get_control_spin_v1 = kodi_gui_window_get_control_spin_v1; + ifcToKodi->kodi_gui_window_get_control_text_box_v1 = kodi_gui_window_get_control_text_box_v1; +} + +bool CHdl_kodi_gui_window_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_gui_window_h) + return false; + + switch (func) + { + case funcParent_kodi_gui_window_create_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_WINDOW_HANDLE kodi_gui_window_create(KODI_HANDLE kodiBase, const char* xml_filename, const char* default_skin, bool as_dialog, bool is_media) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_create_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_create_v1 t = in.get().as(); + KODI_HANDLE kodiBase = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& xml_filename = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& default_skin = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool as_dialog = std::get<3>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool is_media = std::get<4>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_WINDOW_HANDLE auto_gen_ret = kodi_gui_window_create_v1( + this, kodiBase /* CheckAPIUse_WAY_12 (0001) */, + xml_filename.c_str() /* CheckAPIUse_WAY_6a (0001) */, + default_skin.c_str() /* CheckAPIUse_WAY_6a (0001) */, + as_dialog /* CheckAPIUse_WAY_10 (0001) */, is_media /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_destroy_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_destroy(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_destroy_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_destroy_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_window_destroy_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_window_show_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_show(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_show_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_show_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_show_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_gui_window_show_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_gui_window_show_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_close_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_close(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_close_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_close_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_gui_window_close_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, + msgParent_OUT_kodi_gui_window_close_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_do_modal_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_do_modal(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_do_modal_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_do_modal_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_do_modal_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + bool auto_gen_ret = kodi_gui_window_do_modal_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_gui_window_do_modal_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_set_focus_id_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_set_focus_id(KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_focus_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_focus_id_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_focus_id_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = kodi_gui_window_set_focus_id_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_set_focus_id_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_get_focus_id_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_focus_id(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_focus_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_focus_id_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_focus_id_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_window_get_focus_id_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_focus_id_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_set_control_label_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_label(KODI_GUI_WINDOW_HANDLE handle, int control_id, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_control_label_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + const std::string& label = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_window_set_control_label_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + control_id /* CheckAPIUse_WAY_10 (0001) */, + label.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_control_visible_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_visible(KODI_GUI_WINDOW_HANDLE handle, int control_id, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_visible_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_control_visible_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool visible = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_control_visible_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + control_id /* CheckAPIUse_WAY_10 (0001) */, + visible /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_control_selected_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_selected(KODI_GUI_WINDOW_HANDLE handle, int control_id, bool selected) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_selected_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_control_selected_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool selected = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_control_selected_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + control_id /* CheckAPIUse_WAY_10 (0001) */, + selected /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_property_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property(KODI_GUI_WINDOW_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_property_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_window_set_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_property_int_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_int(KODI_GUI_WINDOW_HANDLE handle, const char* key, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_int_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_property_int_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_property_int_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_property_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_bool(KODI_GUI_WINDOW_HANDLE handle, const char* key, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_property_bool_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_property_bool_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_property_double_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_double(KODI_GUI_WINDOW_HANDLE handle, const char* key, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_double_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_double_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_property_double_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + double value = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_property_double_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_get_property_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_window_get_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_property_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_gui_window_get_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_property_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_gui_window_get_property_int_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_property_int(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_int_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_property_int_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + int auto_gen_ret = + kodi_gui_window_get_property_int_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_property_int_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_get_property_bool_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_get_property_bool(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_bool_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_property_bool_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_gui_window_get_property_bool_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_property_bool_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_get_property_double_v1: + { + // Original API call: ATTR_DLL_EXPORT double kodi_gui_window_get_property_double(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_double_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_double_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_property_double_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + double auto_gen_ret = + kodi_gui_window_get_property_double_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_property_double_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_clear_properties_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_properties(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_properties_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_clear_properties_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_window_clear_properties_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_window_clear_property_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_clear_property_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_window_clear_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_window_clear_item_list_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_item_list(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_item_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_item_list_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_clear_item_list_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_window_clear_item_list_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_window_add_list_item_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_add_list_item(KODI_GUI_WINDOW_HANDLE handle, KODI_GUI_LISTITEM_HANDLE item, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_add_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_add_list_item_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_add_list_item_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_GUI_LISTITEM_HANDLE item = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int list_position = std::get<2>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_add_list_item_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + item /* CheckAPIUse_WAY_12 (0001) */, + list_position /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_remove_list_item_from_position_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item_from_position(KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_remove_list_item_from_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_remove_list_item_from_position_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_remove_list_item_from_position_v1 t = + in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int list_position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_remove_list_item_from_position_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, + list_position /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_remove_list_item_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item(KODI_GUI_WINDOW_HANDLE handle, KODI_GUI_LISTITEM_HANDLE item) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_remove_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_remove_list_item_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_remove_list_item_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + KODI_GUI_LISTITEM_HANDLE item = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_window_remove_list_item_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + item /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_window_get_list_item_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_window_get_list_item( KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_list_item_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_list_item_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int list_position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_LISTITEM_HANDLE auto_gen_ret = + kodi_gui_window_get_list_item_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + list_position /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_list_item_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_set_current_list_position_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_current_list_position(KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_current_list_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_current_list_position_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_current_list_position_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int list_position = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + kodi_gui_window_set_current_list_position_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + list_position /* CheckAPIUse_WAY_10 (0001) */); + return true; + } + case funcParent_kodi_gui_window_get_current_list_position_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_current_list_position(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_current_list_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_current_list_position_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_current_list_position_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = kodi_gui_window_get_current_list_position_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_current_list_position_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_get_list_size_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_list_size(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_list_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_list_size_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_list_size_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_window_get_list_size_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_list_size_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_set_container_property_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_container_property(KODI_GUI_WINDOW_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_container_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_container_property_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_container_property_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& key = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_window_set_container_property_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + key.c_str() /* CheckAPIUse_WAY_6a (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_window_set_container_content_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_container_content(KODI_GUI_WINDOW_HANDLE handle, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_container_content_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_container_content_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_set_container_content_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + const std::string& value = std::get<1>(t); /* CheckAPIUse_WAY_6a (0001) */ + kodi_gui_window_set_container_content_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */, + value.c_str() /* CheckAPIUse_WAY_6a (0001) */); + return true; + } + case funcParent_kodi_gui_window_get_current_container_id_v1: + { + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_current_container_id(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_current_container_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_current_container_id_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_current_container_id_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int auto_gen_ret = + kodi_gui_window_get_current_container_id_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_current_container_id_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_gui_window_mark_dirty_region_v1: + { + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_mark_dirty_region(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_mark_dirty_region_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_mark_dirty_region_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_mark_dirty_region_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + kodi_gui_window_mark_dirty_region_v1(this, handle /* CheckAPIUse_WAY_12 (0001) */); + return true; + } + case funcParent_kodi_gui_window_get_control_button_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_button( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_button_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_button_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_button_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_button_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_button_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_edit_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_edit( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_edit_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_edit_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_edit_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_edit_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_edit_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_fade_label_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_fade_label( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_fade_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_fade_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_fade_label_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_fade_label_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_fade_label_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_image_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_image( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_image_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_image_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_image_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_image_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_image_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_label_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_label( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_label_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_label_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_label_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_label_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_progress_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_progress( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_progress_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_progress_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_progress_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_progress_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_progress_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_radio_button_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_radio_button( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_radio_button_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_radio_button_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_radio_button_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_radio_button_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_radio_button_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_render_addon_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_render_addon( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_render_addon_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_render_addon_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_render_addon_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_render_addon_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_render_addon_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_settings_slider_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_settings_slider( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_settings_slider_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_settings_slider_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_settings_slider_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_settings_slider_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_settings_slider_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_slider_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_slider( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_slider_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_slider_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_slider_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_slider_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_slider_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_spin_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_spin( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_spin_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_spin_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_spin_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_spin_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_spin_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + case funcParent_kodi_gui_window_get_control_text_box_v1: + { + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_text_box( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_text_box_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_text_box_v1; /* Autogenerated */ + msgParent__IN_kodi_gui_window_get_control_text_box_v1 t = in.get().as(); + KODI_GUI_WINDOW_HANDLE handle = + reinterpret_cast(std::get<0>(t)); /* CheckAPIUse_WAY_12 (0001) */ + int control_id = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + KODI_GUI_CONTROL_HANDLE auto_gen_ret = kodi_gui_window_get_control_text_box_v1( + this, handle /* CheckAPIUse_WAY_12 (0001) */, control_id /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_gui_window_get_control_text_box_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0001) */ + )); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{}: addon called with unknown function id '{}' on group " + "'gui_window_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +KODI_GUI_WINDOW_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_create_v1(void* thisClassHdl, + KODI_HANDLE kodiBase, + const char* xml_filename, + const char* default_skin, + bool as_dialog, + bool is_media) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::shared_ptr addon = thisClass->m_process->GetAddon(); + if (as_dialog && is_media) + { + CLog::Log( + LOGWARNING, + "CHdl_kodi_gui_window_h::{}: {}/{} - addon tries to create dialog as media window who " + "not allowed, contact Developer '{}' of this addon", + __func__, CAddonInfo::TranslateType(addon->Type()), addon->Name(), addon->Author()); + } + + RESOLUTION_INFO res; + std::string strSkinPath = g_SkinInfo->GetSkinPath(xml_filename, &res); + + if (!XFILE::CFile::Exists(strSkinPath)) + { + std::string str("none"); + ADDON::AddonInfoPtr addonInfo = std::make_shared(str, ADDON::ADDON_SKIN); + + // Check for the matching folder for the skin in the fallback skins folder + std::string fallbackPath = URIUtils::AddFileToFolder(addon->Path(), "resources", "skins"); + std::string basePath = URIUtils::AddFileToFolder(fallbackPath, g_SkinInfo->ID()); + + strSkinPath = g_SkinInfo->GetSkinPath(xml_filename, &res, basePath); + + // Check for the matching folder for the skin in the fallback skins folder (if it exists) + if (XFILE::CFile::Exists(basePath)) + { + addonInfo->SetPath(basePath); + const std::shared_ptr skinInfo = + std::make_shared(addonInfo, res); + skinInfo->Start(); + strSkinPath = skinInfo->GetSkinPath(xml_filename, &res); + } + + if (!XFILE::CFile::Exists(strSkinPath)) + { + // Finally fallback to the DefaultSkin as it didn't exist in either the Kodi Skin folder or the fallback skin folder + addonInfo->SetPath(URIUtils::AddFileToFolder(fallbackPath, default_skin)); + const std::shared_ptr skinInfo = + std::make_shared(addonInfo, res); + + skinInfo->Start(); + strSkinPath = skinInfo->GetSkinPath(xml_filename, &res); + if (!XFILE::CFile::Exists(strSkinPath)) + { + CLog::Log( + LOGERROR, + "CHdl_kodi_gui_window_h::{}: {}/{} - XML File '{}' for Window is missing, contact " + "Developer '{}' of this addon", + __func__, CAddonInfo::TranslateType(addon->Type()), addon->Name(), strSkinPath, + addon->Author()); + return nullptr; + } + } + } + + int id = GetNextAvailableWindowId(); + if (id < 0) + return nullptr; + + CGUIWindow* window; + if (!as_dialog) + window = new CGUIAddonWindow(id, strSkinPath, addon, is_media); + else + window = new CGUIAddonWindowDialog(id, strSkinPath, addon); + + CHdl_kodi_gui_general_h::lock(); + CServiceBroker::GetGUI()->GetWindowManager().Add(window); + CHdl_kodi_gui_general_h::unlock(); + + if (!CServiceBroker::GetGUI()->GetWindowManager().GetWindow(id)) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - Requested window id '{}' does not exist for addon '{}'", + __func__, id, thisClass->m_process->GetAddonID()); + delete window; + return nullptr; + } + window->SetCoordsRes(res); + return window; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_destroy_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + CGUIWindow* pWindow = + CServiceBroker::GetGUI()->GetWindowManager().GetWindow(pAddonWindow->GetID()); + if (pWindow) + { + // first change to an existing window + if (CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow() == pAddonWindow->GetID() && + !g_application.m_bStop) + { + if (CServiceBroker::GetGUI()->GetWindowManager().GetWindow(pAddonWindow->m_oldWindowId)) + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->m_oldWindowId); + else // old window does not exist anymore, switch to home + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_HOME); + } + // Free any window properties + pAddonWindow->ClearProperties(); + // free the window's resources and unload it (free all guicontrols) + pAddonWindow->FreeResources(true); + + CServiceBroker::GetGUI()->GetWindowManager().Remove(pAddonWindow->GetID()); + } + delete pAddonWindow; + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_window_h::kodi_gui_window_show_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return false; + } + + if (pAddonWindow->m_oldWindowId != pAddonWindow->m_windowId && + pAddonWindow->m_windowId != CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) + pAddonWindow->m_oldWindowId = CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); + + CHdl_kodi_gui_general_h::lock(); + if (pAddonWindow->IsDialog()) + dynamic_cast(pAddonWindow)->Show(true, false); + else + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->GetID()); + CHdl_kodi_gui_general_h::unlock(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_window_h::kodi_gui_window_close_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return false; + } + + pAddonWindow->PulseActionEvent(); + + CHdl_kodi_gui_general_h::lock(); + + // if it's a dialog, we have to close it a bit different + if (pAddonWindow->IsDialog()) + dynamic_cast(pAddonWindow)->Show(false); + else + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->m_oldWindowId); + pAddonWindow->m_oldWindowId = 0; + + CHdl_kodi_gui_general_h::unlock(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_window_h::kodi_gui_window_do_modal_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return false; + } + + if (pAddonWindow->GetID() == CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) + return true; + + if (pAddonWindow->m_oldWindowId != pAddonWindow->m_windowId && + pAddonWindow->m_windowId != CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) + pAddonWindow->m_oldWindowId = CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); + + CHdl_kodi_gui_general_h::lock(); + if (pAddonWindow->IsDialog()) + dynamic_cast(pAddonWindow)->Show(true, true); + else + CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->GetID()); + CHdl_kodi_gui_general_h::unlock(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_window_h::kodi_gui_window_set_focus_id_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return false; + } + + CHdl_kodi_gui_general_h::lock(); + CGUIMessage msg(GUI_MSG_SETFOCUS, pAddonWindow->m_windowId, control_id); + pAddonWindow->OnMessage(msg); + CHdl_kodi_gui_general_h::unlock(); + + return true; + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_window_h::kodi_gui_window_get_focus_id_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return -1; + } + + CHdl_kodi_gui_general_h::lock(); + int control_id = pAddonWindow->GetFocusedControlID(); + CHdl_kodi_gui_general_h::unlock(); + + if (control_id == -1) + CLog::Log(LOGERROR, "CHdl_kodi_gui_window_h - {}: {} - No control in this window has focus", + __func__, thisClass->m_process->GetAddonID()); + + return control_id; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_control_label_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* label) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + CGUIMessage msg(GUI_MSG_LABEL_SET, pAddonWindow->m_windowId, control_id); + msg.SetLabel(label); + pAddonWindow->OnMessage(msg); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_control_visible_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool visible) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + CGUIMessage msg(visible ? GUI_MSG_VISIBLE : GUI_MSG_HIDDEN, pAddonWindow->m_windowId, control_id); + pAddonWindow->OnMessage(msg); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_control_selected_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool selected) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + CGUIMessage msg(selected ? GUI_MSG_SET_SELECTED : GUI_MSG_SET_DESELECTED, + pAddonWindow->m_windowId, control_id); + pAddonWindow->OnMessage(msg); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetProperty(lowerKey, value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_property_int_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + int value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetProperty(lowerKey, value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_property_bool_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + bool value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetProperty(lowerKey, value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_property_double_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + double value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetProperty(lowerKey, value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_gui_window_h::kodi_gui_window_get_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return nullptr; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + std::string value = pAddonWindow->GetProperty(lowerKey).asString(); + CHdl_kodi_gui_general_h::unlock(); + + return strdup(value.c_str()); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_window_h::kodi_gui_window_get_property_int_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return -1; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + int value = static_cast(pAddonWindow->GetProperty(lowerKey).asInteger()); + CHdl_kodi_gui_general_h::unlock(); + + return value; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_gui_window_h::kodi_gui_window_get_property_bool_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return false; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + bool value = pAddonWindow->GetProperty(lowerKey).asBoolean(); + CHdl_kodi_gui_general_h::unlock(); + + return value; + + /*---AUTO_GEN_PARSE---*/ +} + +double CHdl_kodi_gui_window_h::kodi_gui_window_get_property_double_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0.0; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return 0.0; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + double value = pAddonWindow->GetProperty(lowerKey).asDouble(); + CHdl_kodi_gui_general_h::unlock(); + + return value; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_clear_properties_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->ClearProperties(); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_clear_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + std::string lowerKey = key; + StringUtils::ToLower(lowerKey); + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetProperty(lowerKey, ""); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_clear_item_list_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->ClearList(); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_add_list_item_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item, + int list_position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CFileItemPtr* pItem(static_cast(item)); + if (pItem->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_window_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->AddItem(pItem, list_position); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_remove_list_item_from_position_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int list_position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->RemoveItem(list_position); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_remove_list_item_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CFileItemPtr* pItem(static_cast(item)); + if (pItem->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_window_h::{} - empty list item called on addon '{}'", + __func__, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->RemoveItem(pItem); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_LISTITEM_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_list_item_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int list_position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return nullptr; + } + + CHdl_kodi_gui_general_h::lock(); + CFileItemPtr* pItem(pAddonWindow->GetListItem(list_position)); + if (pItem == nullptr || pItem->get() == nullptr) + { + CLog::Log(LOGERROR, "CHdl_kodi_gui_window_h - {}: {} - Index out of range", __func__, + thisClass->m_process->GetAddonID()); + + if (pItem) + { + delete pItem; + pItem = nullptr; + } + } + CHdl_kodi_gui_general_h::unlock(); + + return pItem; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_current_list_position_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int list_position) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetCurrentListPosition(list_position); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_window_h::kodi_gui_window_get_current_list_position_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return -1; + } + + CHdl_kodi_gui_general_h::lock(); + int listPos = pAddonWindow->GetCurrentListPosition(); + CHdl_kodi_gui_general_h::unlock(); + + return listPos; + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_window_h::kodi_gui_window_get_list_size_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return -1; + } + + CHdl_kodi_gui_general_h::lock(); + int listSize = pAddonWindow->GetListSize(); + CHdl_kodi_gui_general_h::unlock(); + + return listSize; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_container_property_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, const char* key, const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetContainerProperty(key, value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_set_container_content_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* value) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->SetContainerContent(value); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +int CHdl_kodi_gui_window_h::kodi_gui_window_get_current_container_id_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return -1; + } + + CHdl_kodi_gui_general_h::lock(); + int id = pAddonWindow->GetCurrentContainerControlId(); + CHdl_kodi_gui_general_h::unlock(); + + return id; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_gui_window_h::kodi_gui_window_mark_dirty_region_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return; + } + + CHdl_kodi_gui_general_h::lock(); + pAddonWindow->MarkDirtyRegion(); + CHdl_kodi_gui_general_h::unlock(); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_button_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_BUTTON, + "button"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_edit_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_EDIT, "edit"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_fade_label_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_FADELABEL, + "fade label"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_image_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_IMAGE, + "image"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_label_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_LABEL, + "label"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_progress_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_PROGRESS, + "progress"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_radio_button_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_RADIO, + "radio button"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_render_addon_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + return nullptr; +#warning Function "CHdl_kodi_gui_window_h::kodi_gui_window_get_control_render_addon" must be set by hand. Alternatively add /*---AUTO_GEN_PARSE---*/ on back of target function in header to find on scan. + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_settings_slider_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + // Code below must be set manually by hand to make work to Kodi + + return GetControl(thisClass, handle, control_id, __func__, + CGUIControl::GUICONTROL_SETTINGS_SLIDER, "settings slider"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_slider_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_SLIDER, + "slider"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_spin_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_SPINEX, + "spin"); + + /*---AUTO_GEN_PARSE---*/ +} + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::kodi_gui_window_get_control_text_box_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + return GetControl(thisClass, handle, control_id, __func__, CGUIControl::GUICONTROL_TEXTBOX, + "textbox"); + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +KODI_GUI_CONTROL_HANDLE CHdl_kodi_gui_window_h::GetControl(CHdl_kodi_gui_window_h* thisClass, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* function, + CGUIControl::GUICONTROLTYPES type, + const std::string& typeName) +{ + CGUIAddonWindow* pAddonWindow = static_cast(handle); + if (!pAddonWindow) + { + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - invalid handler data (handle='{}') on " + "addon '{}'", + __func__, handle, thisClass->m_process->GetAddonID()); + return nullptr; + } + + return pAddonWindow->GetAddonControl(control_id, type, typeName); +} + +int CHdl_kodi_gui_window_h::GetNextAvailableWindowId() +{ + CHdl_kodi_gui_general_h::lock(); + + // if window WINDOW_ADDON_END is in use it means addon can't create more windows + if (CServiceBroker::GetGUI()->GetWindowManager().GetWindow(WINDOW_ADDON_END)) + { + CHdl_kodi_gui_general_h::unlock(); + CLog::Log(LOGERROR, + "CHdl_kodi_gui_window_h::{} - Maximum number of windows for binary addons reached", + __func__); + return -1; + } + + // window id's WINDOW_ADDON_START - WINDOW_ADDON_END are reserved for addons + // get first window id that is not in use + int id = WINDOW_ADDON_START; + while (id < WINDOW_ADDON_END && + CServiceBroker::GetGUI()->GetWindowManager().GetWindow(id) != nullptr) + id++; + + CHdl_kodi_gui_general_h::unlock(); + return id; +} + +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/gui/window.h b/xbmc/addons/interface/api/gui/window.h new file mode 100644 index 0000000000000..f21cf2232d648 --- /dev/null +++ b/xbmc/addons/interface/api/gui/window.h @@ -0,0 +1,328 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/gui/window.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +#include "windows/GUIMediaWindow.h" + +namespace ADDON +{ +class IAddon; +} + +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_window_h; +struct directFuncToKodi_gui_window_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +class CGUIAddonWindow : public CGUIMediaWindow +{ + friend class CHdl_kodi_gui_window_h; + +public: + CGUIAddonWindow(int id, + const std::string& strXML, + std::shared_ptr addon, + bool isMedia); + ~CGUIAddonWindow() override = default; + + bool OnMessage(CGUIMessage& message) override; + bool OnAction(const CAction& action) override; + void AllocResources(bool forceLoad = false) override; + void Render() override; + bool IsMediaWindow() const override { return m_isMedia; } + + /* Addon to Kodi call functions */ + void PulseActionEvent(); + void AddItem(CFileItemPtr* fileItem, int itemPosition); + void RemoveItem(int itemPosition); + void RemoveItem(CFileItemPtr* fileItem); + void ClearList(); + CFileItemPtr* GetListItem(int position); + int GetListSize(); + int GetCurrentListPosition(); + void SetCurrentListPosition(int item); + void SetContainerProperty(const std::string& key, const std::string& value); + void SetContainerContent(const std::string& value); + int GetCurrentContainerControlId(); + CGUIControl* GetAddonControl(int controlId, + CGUIControl::GUICONTROLTYPES type, + const std::string& typeName); + + const int m_windowId; + int m_oldWindowId; + +protected: + void GetContextButtons(int itemNumber, CContextButtons& buttons) override; + bool OnContextButton(int itemNumber, CONTEXT_BUTTON button) override; + void SetupShares() override; + + /* kodi to addon callback function addresses */ + KODI_GUI_CLIENT_HANDLE m_clientHandle{nullptr}; + bool (*CBOnInit)(KODI_GUI_CLIENT_HANDLE cbhdl){nullptr}; + bool (*CBOnFocus)(KODI_GUI_CLIENT_HANDLE cbhdl, int controlId){nullptr}; + bool (*CBOnClick)(KODI_GUI_CLIENT_HANDLE cbhdl, int controlId){nullptr}; + bool (*CBOnAction)(KODI_GUI_CLIENT_HANDLE cbhdl, ADDON_ACTION actionId){nullptr}; + void (*CBGetContextButtons)(KODI_GUI_CLIENT_HANDLE cbhdl, + int itemNumber, + gui_context_menu_pair* buttons, + unsigned int* size){nullptr}; + bool (*CBOnContextButton)(KODI_GUI_CLIENT_HANDLE cbhdl, int itemNumber, unsigned int button){ + nullptr}; + +private: + void WaitForActionEvent(unsigned int timeout); + + CEvent m_actionEvent{true}; + std::shared_ptr m_addon; + std::string m_mediaDir; + bool m_isMedia; +}; + +class CGUIAddonWindowDialog : public CGUIAddonWindow +{ +public: + CGUIAddonWindowDialog(int id, const std::string& strXML, std::shared_ptr addon); + + bool IsDialogRunning() const override { return m_bRunning; } + bool IsDialog() const override { return true; } + bool IsModalDialog() const override { return true; } + + void Show(bool show = true, bool modal = true); + void Show_Internal(bool show = true); + +private: + bool m_bRunning; +}; + +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_gui_window_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_window_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_gui_window_h* ifcToKodi, + directFuncToAddon_gui_window_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + static KODI_GUI_CONTROL_HANDLE GetControl(CHdl_kodi_gui_window_h* thisClass, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* function, + CGUIControl::GUICONTROLTYPES type, + const std::string& typeName); + static int GetNextAvailableWindowId(); + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static KODI_GUI_WINDOW_HANDLE kodi_gui_window_create_v1(void* thisClassHdl, + KODI_HANDLE kodiBase, + const char* xml_filename, + const char* default_skin, + bool as_dialog, + bool is_media); // Added with API 1 + + static void kodi_gui_window_destroy_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static bool kodi_gui_window_show_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static bool kodi_gui_window_close_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static bool kodi_gui_window_do_modal_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static bool kodi_gui_window_set_focus_id_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id); // Added with API 1 + + static int kodi_gui_window_get_focus_id_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static void kodi_gui_window_set_control_label_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* label); // Added with API 1 + + static void kodi_gui_window_set_control_visible_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool visible); // Added with API 1 + + static void kodi_gui_window_set_control_selected_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool selected); // Added with API 1 + + static void kodi_gui_window_set_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value); // Added with API 1 + + static void kodi_gui_window_set_property_int_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + int value); // Added with API 1 + + static void kodi_gui_window_set_property_bool_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + bool value); // Added with API 1 + + static void kodi_gui_window_set_property_double_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + double value); // Added with API 1 + + static char* kodi_gui_window_get_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key); // Added with API 1 + + static int kodi_gui_window_get_property_int_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key); // Added with API 1 + + static bool kodi_gui_window_get_property_bool_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key); // Added with API 1 + + static double kodi_gui_window_get_property_double_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key); // Added with API 1 + + static void kodi_gui_window_clear_properties_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static void kodi_gui_window_clear_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key); // Added with API 1 + + static void kodi_gui_window_clear_item_list_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static void kodi_gui_window_add_list_item_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item, + int list_position); // Added with API 1 + + static void kodi_gui_window_remove_list_item_from_position_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int list_position); // Added with API 1 + + static void kodi_gui_window_remove_list_item_v1( + void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item); // Added with API 1 + + static KODI_GUI_LISTITEM_HANDLE kodi_gui_window_get_list_item_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int list_position); // Added with API 1 + + static void kodi_gui_window_set_current_list_position_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + int list_position); // Added with API 1 + + static int kodi_gui_window_get_current_list_position_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static int kodi_gui_window_get_list_size_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static void kodi_gui_window_set_container_property_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value); // Added with API 1 + + static void kodi_gui_window_set_container_content_v1(void* thisClassHdl, + KODI_GUI_WINDOW_HANDLE handle, + const char* value); // Added with API 1 + + static int kodi_gui_window_get_current_container_id_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static void kodi_gui_window_mark_dirty_region_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_button_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_edit_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_fade_label_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_image_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_label_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_progress_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_radio_button_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_render_addon_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_settings_slider_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_slider_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_spin_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + static KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_text_box_v1( + void* thisClassHdl, KODI_GUI_WINDOW_HANDLE handle, int control_id); // Added with API 1 + + + directFuncToAddon_gui_window_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/monitor.cpp b/xbmc/addons/interface/api/monitor.cpp new file mode 100644 index 0000000000000..cd271952d2983 --- /dev/null +++ b/xbmc/addons/interface/api/monitor.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "monitor.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/monitor.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_monitor_h::InitDirect(directFuncToKodi_monitor_h* ifcToKodi, + directFuncToAddon_monitor_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + // Unused "kodi_monitor_wait_for_abort", done only in addon lib + // Unused "kodi_monitor_abort_requested", done only in addon lib +} + +bool CHdl_kodi_monitor_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_monitor_h) + return false; + + switch (func) + { + default: + CLog::Log(LOGERROR, + "CHdl_kodi_monitor_h::{}: addon called with unknown function id '{}' on group " + "'monitor_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi +/* NOTE: unused (no callbacks here) */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/monitor.h b/xbmc/addons/interface/api/monitor.h new file mode 100644 index 0000000000000..721f1c954836d --- /dev/null +++ b/xbmc/addons/interface/api/monitor.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/monitor.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_monitor_h; +struct directFuncToKodi_monitor_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_monitor_h : public IMsgHdl +{ +public: + CHdl_kodi_monitor_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_monitor_h* ifcToKodi, directFuncToAddon_monitor_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + + directFuncToAddon_monitor_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/network.cpp b/xbmc/addons/interface/api/network.cpp new file mode 100644 index 0000000000000..860642196dc0a --- /dev/null +++ b/xbmc/addons/interface/api/network.cpp @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "network.h" + +// Shared API +#include "addons/kodi-dev-kit/src/shared/api/network.h" + +// Kodi +#include "addons/interface/RunningProcess.h" +#include "utils/log.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +#include "ServiceBroker.h" +#include "URL.h" +#include "network/DNSNameCache.h" +#include "network/Network.h" +#include "utils/SystemInfo.h" +#include "utils/URIUtils.h" +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_network_h::InitDirect(directFuncToKodi_network_h* ifcToKodi, + directFuncToAddon_network_h* ifcToAddon) +{ + ifcToKodi->thisClassHdl = this; + m_ifcToAddon = ifcToAddon; + ifcToKodi->kodi_network_wake_on_lan_v1 = kodi_network_wake_on_lan_v1; + ifcToKodi->kodi_network_get_ip_address_v1 = kodi_network_get_ip_address_v1; + ifcToKodi->kodi_network_dns_lookup_v1 = kodi_network_dns_lookup_v1; + ifcToKodi->kodi_network_url_encode_v1 = kodi_network_url_encode_v1; + ifcToKodi->kodi_network_get_hostname_v1 = kodi_network_get_hostname_v1; + ifcToKodi->kodi_network_is_local_host_v1 = kodi_network_is_local_host_v1; + ifcToKodi->kodi_network_is_host_on_lan_v1 = kodi_network_is_host_on_lan_v1; + ifcToKodi->kodi_network_get_user_agent_v1 = kodi_network_get_user_agent_v1; +} + +bool CHdl_kodi_network_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_network_h) + return false; + + switch (func) + { + case funcParent_kodi_network_wake_on_lan_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_network_wake_on_lan(const char* mac) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_wake_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_wake_on_lan_v1; /* Autogenerated */ + msgParent__IN_kodi_network_wake_on_lan_v1 t = in.get().as(); + const std::string& mac = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_network_wake_on_lan_v1(this, mac.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_network_wake_on_lan_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_network_get_ip_address_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_ip_address() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_ip_address_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_ip_address_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_network_get_ip_address_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_network_get_ip_address_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_network_dns_lookup_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_network_dns_lookup(const char* url, bool* ret) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_dns_lookup_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_dns_lookup_v1; /* Autogenerated */ + msgParent__IN_kodi_network_dns_lookup_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool ret = std::get<1>(t); /* CheckAPIUse_WAY_13 (0001) */ + char* auto_gen_ret = kodi_network_dns_lookup_v1( + this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */, &ret /* CheckAPIUse_WAY_13 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_network_dns_lookup_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */, + ret /* CheckAPIUse_WAY_13 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_network_url_encode_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_network_url_encode(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_url_encode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_url_encode_v1; /* Autogenerated */ + msgParent__IN_kodi_network_url_encode_v1 t = in.get().as(); + const std::string& url = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + char* auto_gen_ret = + kodi_network_url_encode_v1(this, url.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_network_url_encode_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_network_get_hostname_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_hostname() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_hostname_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_hostname_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_network_get_hostname_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_network_get_hostname_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + case funcParent_kodi_network_is_local_host_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_network_is_local_host(const char* hostname) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_is_local_host_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_is_local_host_v1; /* Autogenerated */ + msgParent__IN_kodi_network_is_local_host_v1 t = in.get().as(); + const std::string& hostname = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool auto_gen_ret = + kodi_network_is_local_host_v1(this, hostname.c_str() /* CheckAPIUse_WAY_6a (0001) */); + msgpack::pack( + out, msgParent_OUT_kodi_network_is_local_host_v1(auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_network_is_host_on_lan_v1: + { + // Original API call: ATTR_DLL_EXPORT bool kodi_network_is_host_on_lan(const char* hostname, bool offLineCheck) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_is_host_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_is_host_on_lan_v1; /* Autogenerated */ + msgParent__IN_kodi_network_is_host_on_lan_v1 t = in.get().as(); + const std::string& hostname = std::get<0>(t); /* CheckAPIUse_WAY_6a (0001) */ + bool offLineCheck = std::get<1>(t); /* CheckAPIUse_WAY_10 (0001) */ + bool auto_gen_ret = + kodi_network_is_host_on_lan_v1(this, hostname.c_str() /* CheckAPIUse_WAY_6a (0001) */, + offLineCheck /* CheckAPIUse_WAY_10 (0001) */); + msgpack::pack(out, msgParent_OUT_kodi_network_is_host_on_lan_v1( + auto_gen_ret /* Return_WAY_2 (0001) */)); + return true; + } + case funcParent_kodi_network_get_user_agent_v1: + { + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_user_agent() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_user_agent_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_user_agent_v1; /* Autogenerated */ + char* auto_gen_ret = kodi_network_get_user_agent_v1(this); + msgpack::pack(out, msgParent_OUT_kodi_network_get_user_agent_v1( + auto_gen_ret ? auto_gen_ret : "" /* Return_WAY_1 (0001) */)); + if (auto_gen_ret) + free(auto_gen_ret); + return true; + } + default: + CLog::Log(LOGERROR, + "CHdl_kodi_network_h::{}: addon called with unknown function id '{}' on group " + "'network_h'", + __func__, func); + } + + return false; +} + +// Function calls from Kodi to addon +/* NOTE: unused (no functions here) */ + +// Callbacks from addon to Kodi + +bool CHdl_kodi_network_h::kodi_network_wake_on_lan_v1(void* thisClassHdl, const char* mac) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CServiceBroker::GetNetwork().WakeOnLan(mac); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_network_h::kodi_network_get_ip_address_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string titleIP; + CNetworkInterface* iface = CServiceBroker::GetNetwork().GetFirstConnectedInterface(); + if (iface) + titleIP = iface->GetCurrentIPAddress(); + else + titleIP = "127.0.0.1"; + + char* buffer = nullptr; + if (!titleIP.empty()) + buffer = strdup(titleIP.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_network_h::kodi_network_dns_lookup_v1(void* thisClassHdl, + const char* url, + bool* ret) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string; + *ret = CDNSNameCache::Lookup(url, string); + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_network_h::kodi_network_url_encode_v1(void* thisClassHdl, const char* url) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = CURL::Encode(url); + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_network_h::kodi_network_get_hostname_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string hostname; + if (!CServiceBroker::GetNetwork().GetHostName(hostname)) + return nullptr; + + char* buffer = nullptr; + if (!hostname.empty()) + buffer = strdup(hostname.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_network_h::kodi_network_is_local_host_v1(void* thisClassHdl, const char* hostname) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return CServiceBroker::GetNetwork().IsLocalHost(hostname); + + /*---AUTO_GEN_PARSE---*/ +} + +bool CHdl_kodi_network_h::kodi_network_is_host_on_lan_v1(void* thisClassHdl, + const char* hostname, + bool offLineCheck) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + /*---AUTO_GEN_PARSE---*/ + + return URIUtils::IsHostOnLAN(hostname, offLineCheck); + + /*---AUTO_GEN_PARSE---*/ +} + +char* CHdl_kodi_network_h::kodi_network_get_user_agent_v1(void* thisClassHdl) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + /*---AUTO_GEN_PARSE---*/ + + std::string string = CSysInfo::GetUserAgent(); + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/api/network.h b/xbmc/addons/interface/api/network.h new file mode 100644 index 0000000000000..3a947d0d1d60f --- /dev/null +++ b/xbmc/addons/interface/api/network.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "addons/interface/IMsgHdl.h" + +// API include +#include "addons/kodi-dev-kit/include/kodi/c-api/network.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_network_h; +struct directFuncToKodi_network_h; + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +class CHdl_kodi_network_h : public IMsgHdl +{ +public: + CHdl_kodi_network_h(CInterface& interface) : IMsgHdl(interface) {} + + void InitDirect(directFuncToKodi_network_h* ifcToKodi, directFuncToAddon_network_h* ifcToAddon); + + // To handle callbacks from addon by shared sandbox API (static functions below in private becomes used) + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Function calls from Kodi to addon + +private: + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Callbacks from addon to Kodi + static bool kodi_network_wake_on_lan_v1(void* thisClassHdl, const char* mac); // Added with API 1 + + static char* kodi_network_get_ip_address_v1(void* thisClassHdl); // Added with API 1 + + static char* kodi_network_dns_lookup_v1(void* thisClassHdl, + const char* url, + bool* ret); // Added with API 1 + + static char* kodi_network_url_encode_v1(void* thisClassHdl, const char* url); // Added with API 1 + + static char* kodi_network_get_hostname_v1(void* thisClassHdl); // Added with API 1 + + static bool kodi_network_is_local_host_v1(void* thisClassHdl, + const char* hostname); // Added with API 1 + + static bool kodi_network_is_host_on_lan_v1(void* thisClassHdl, + const char* hostname, + bool offLineCheck); // Added with API 1 + + static char* kodi_network_get_user_agent_v1(void* thisClassHdl); // Added with API 1 + + + directFuncToAddon_network_h* m_ifcToAddon{nullptr}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/launcher/CMakeLists.txt b/xbmc/addons/interface/launcher/CMakeLists.txt new file mode 100644 index 0000000000000..84762bfd4bbdd --- /dev/null +++ b/xbmc/addons/interface/launcher/CMakeLists.txt @@ -0,0 +1,25 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + LauncherDirectDll.cpp + $<$:LauncherPosix.cpp> + $<$:LauncherPosix.cpp> + $<$:LauncherPosix.cpp> + $<$:LauncherPosix.cpp> + $<$:LauncherPosix.cpp> +) + +set(HEADERS + ILauncher.h + LauncherDirectDll.h + $<$:LauncherPosix.h> + $<$:LauncherPosix.h> + $<$:LauncherPosix.h> + $<$:LauncherPosix.h> + $<$:LauncherPosix.h> +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_launcher) +endif() diff --git a/xbmc/addons/interface/launcher/ILauncher.h b/xbmc/addons/interface/launcher/ILauncher.h new file mode 100644 index 0000000000000..7326ce9624135 --- /dev/null +++ b/xbmc/addons/interface/launcher/ILauncher.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include +#include +#include +#include + +namespace ADDON +{ +class IAddon; +} + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +enum class ChildStatus +{ + Running, + NotStarted, + ExitedNormal, + StoppedBySignal, + StoppedByUnknown, + KilledFromOutside, + SeqmentionFault, +}; + +class ILauncher +{ +public: + ILauncher(std::shared_ptr addonInfo, const std::string& uuid) + : m_addonInfo(addonInfo), m_uuid(uuid) + { + } + virtual ~ILauncher() = default; + + virtual bool Launch(const std::vector& argv, bool waitForExit) = 0; + virtual bool Kill(bool wait = true) = 0; + virtual int64_t GetMainProcessPID() const = 0; + virtual ChildStatus ProcessActive() = 0; + virtual bool SupportNonBlocking() { return false; } + virtual bool SupportNonBlocking(const std::string& path) { return false; } + + int GetExitCode() const { return m_exitCode; } + ChildStatus GetLastChildStatus() const { return m_lastStatus; } + +protected: + const std::shared_ptr m_addonInfo; + const std::string m_uuid; + + int m_exitCode = 0; + std::atomic m_lastStatus{ChildStatus::NotStarted}; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/launcher/LauncherDirectDll.cpp b/xbmc/addons/interface/launcher/LauncherDirectDll.cpp new file mode 100644 index 0000000000000..f9069bf41e041 --- /dev/null +++ b/xbmc/addons/interface/launcher/LauncherDirectDll.cpp @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "LauncherDirectDll.h" + +#include "addons/IAddon.h" +#include "filesystem/File.h" +#include "filesystem/SpecialProtocol.h" +#include "utils/URIUtils.h" +#include "utils/Variant.h" +#include "utils/log.h" + +using namespace std::chrono_literals; + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +CLauncherDirectDll::CLauncherDirectDll(std::shared_ptr addon, + const std::string& uuid) + : ILauncher(addon, uuid), CThread(addon->ID().c_str()) +{ +} + +CLauncherDirectDll::~CLauncherDirectDll() +{ + Kill(true); +} + +bool CLauncherDirectDll::Launch(const std::vector& argv, bool waitForExit) +{ + std::string strFileName = argv[0]; + if (strFileName.empty()) + return false; + + m_argv = argv; + + /* Load the Dll */ + if (!m_pDll) + { + m_pDll = new DllAddon; + m_pDll->SetFile(strFileName); + m_pDll->EnableDelayedUnload(false); + if (!m_pDll->Load()) + { + delete m_pDll; + m_pDll = nullptr; + + return false; + } + } + + if (SupportNonBlocking()) + { + int ret = m_pDll->non_blocking_main_start(m_argv.size(), m_argv.data()); + if (ret != 0) + return false; + } + else if (waitForExit) + { + int ret = m_pDll->main(m_argv.size(), m_argv.data()); + if (ret != 0) + return false; + fprintf(stderr, "%s 5\n", __PRETTY_FUNCTION__); + } + else + { + CThread::Create(); + while (!m_startDone) + { + CThread::Sleep(1ms); + } + CThread::Sleep(10ms); + fprintf(stderr, "%s 6\n", __PRETTY_FUNCTION__); + } + + return true; +} + +bool CLauncherDirectDll::Kill(bool wait) +{ + if (!m_pDll) + return true; + + if (SupportNonBlocking()) + { + m_pDll->non_blocking_main_stop(); + } + else + { + CThread::StopThread(); + } + + /* Unload library file */ + if (m_pDll) + { + m_pDll->Unload(); + delete m_pDll; + m_pDll = nullptr; + } + + return true; +} + +ChildStatus CLauncherDirectDll::ProcessActive() +{ + return m_pDll ? ChildStatus::Running : ChildStatus::ExitedNormal; +} + +std::string CLauncherDirectDll::GetDllPath(const std::string& libPath) +{ + std::string strFileName = libPath; + std::string strLibName = URIUtils::GetFileName(strFileName); + + if (strLibName.empty()) + return ""; + + /* Check if lib being loaded exists, else check in XBMC binary location */ +#if defined(TARGET_ANDROID) + if (XFILE::CFile::Exists(strFileName)) + { + bool doCopy = true; + std::string dstfile = URIUtils::AddFileToFolder( + CSpecialProtocol::TranslatePath("special://xbmcaltbinaddons/"), strLibName); + + struct __stat64 dstFileStat; + if (XFILE::CFile::Stat(dstfile, &dstFileStat) == 0) + { + struct __stat64 srcFileStat; + if (XFILE::CFile::Stat(strFileName, &srcFileStat) == 0) + { + if (dstFileStat.st_size == srcFileStat.st_size && + dstFileStat.st_mtime > srcFileStat.st_mtime) + doCopy = false; + } + } + + if (doCopy) + { + CLog::Log(LOGDEBUG, "ADDON: caching {} to {}", strFileName, dstfile); + XFILE::CFile::Copy(strFileName, dstfile); + } + + strFileName = dstfile; + } + if (!XFILE::CFile::Exists(strFileName)) + { + std::string tempbin = getenv("KODI_ANDROID_LIBS"); + strFileName = tempbin + "/" + strLibName; + } +#endif + + if (!XFILE::CFile::Exists(strFileName)) + { + std::string strAltFileName; + + std::string altbin = CSpecialProtocol::TranslatePath("special://xbmcaltbinaddons/"); + if (!altbin.empty()) + { + strAltFileName = altbin + strLibName; + if (!XFILE::CFile::Exists(strAltFileName)) + { + std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/addons/"); + strAltFileName = strFileName; + strAltFileName.erase(0, temp.size()); + strAltFileName = altbin + strAltFileName; + } + CLog::Log(LOGDEBUG, "ADDON: Trying to load {}", strAltFileName); + } + + if (XFILE::CFile::Exists(strAltFileName)) + strFileName = strAltFileName; + else + { + std::string temp = CSpecialProtocol::TranslatePath("special://xbmc/"); + std::string tempbin = CSpecialProtocol::TranslatePath("special://xbmcbin/"); + strFileName.erase(0, temp.size()); + strFileName = tempbin + strFileName; + if (!XFILE::CFile::Exists(strFileName)) + { + CLog::Log(LOGERROR, "ADDON: Could not locate {}", strLibName); + strFileName.clear(); + } + } + } + + return strFileName; +} + +void CLauncherDirectDll::Process() +{ + m_startDone = true; + m_pDll->main(m_argv.size(), m_argv.data()); +} + +bool CLauncherDirectDll::SupportNonBlocking() +{ + return m_pDll->non_blocking_main_start_available(); +} + +bool CLauncherDirectDll::SupportNonBlocking(const std::string& path) +{ + /* Load the Dll */ + if (!m_pDll) + { + m_pDll = new DllAddon; + m_pDll->SetFile(path); + m_pDll->EnableDelayedUnload(false); + if (!m_pDll->Load()) + { + delete m_pDll; + m_pDll = nullptr; + + return false; + } + } + + return SupportNonBlocking(); +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/launcher/LauncherDirectDll.h b/xbmc/addons/interface/launcher/LauncherDirectDll.h new file mode 100644 index 0000000000000..549bd16cd5291 --- /dev/null +++ b/xbmc/addons/interface/launcher/LauncherDirectDll.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "DynamicDll.h" +#include "ILauncher.h" +#include "threads/Thread.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class DllAddonInterface +{ +public: + virtual ~DllAddonInterface() = default; + virtual int main(int argc, char* argv[]) = 0; + virtual int non_blocking_main_start(int argc, char* argv[]) = 0; + virtual void non_blocking_main_stop() = 0; +}; + +class DllAddon : public DllDynamic, public DllAddonInterface +{ +public: + DECLARE_DLL_WRAPPER_TEMPLATE(DllAddon) + DEFINE_METHOD2(int, main, (int p1, char* p2[])) + DEFINE_METHOD2(int, non_blocking_main_start, (int p1, char* p2[])) + DEFINE_METHOD0(void, non_blocking_main_stop) + bool main_available() { return m_main != nullptr; } + bool non_blocking_main_start_available() { return m_non_blocking_main_start != nullptr; } + BEGIN_METHOD_RESOLVE() + RESOLVE_METHOD_RENAME_OPTIONAL(main, main) + RESOLVE_METHOD_RENAME_OPTIONAL(non_blocking_main_start, non_blocking_main_start) + RESOLVE_METHOD_RENAME_OPTIONAL(non_blocking_main_stop, non_blocking_main_stop) + END_METHOD_RESOLVE() +}; + +class CLauncherDirectDll : public ILauncher, private CThread +{ +public: + CLauncherDirectDll(std::shared_ptr addon, const std::string& uuid); + ~CLauncherDirectDll(); + + bool Launch(const std::vector& argv, bool waitForExit) override; + bool Kill(bool wait) override; + int64_t GetMainProcessPID() const override { return static_cast(m_pid); } + ChildStatus ProcessActive() override; + bool SupportNonBlocking() override; + bool SupportNonBlocking(const std::string& path) override; + +private: + std::string GetDllPath(const std::string& libPath); + + void Process() override; + + std::atomic_bool m_startDone{false}; + std::vector m_argv; + DllAddon* m_pDll = nullptr; + pid_t m_pid = -1; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/launcher/LauncherPosix.cpp b/xbmc/addons/interface/launcher/LauncherPosix.cpp new file mode 100644 index 0000000000000..0e75c28a6d168 --- /dev/null +++ b/xbmc/addons/interface/launcher/LauncherPosix.cpp @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:linux,freebsd,android,osx,darwin_embedded>---*/ + +#include "LauncherPosix.h" + +#include "../../utils/log.h" + +#include +#include + +#include +#include + +#if defined(TARGET_LINUX) +#include +#endif + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +// Set the calling thread's signal mask to new_sigmask and return +// the previous signal mask. +sigset_t SetSignalMask(const sigset_t& new_sigmask) +{ + sigset_t old_sigmask; +#if defined(OS_ANDROID) + // POSIX says pthread_sigmask() must be used in multi-threaded processes, + // but Android's pthread_sigmask() was broken until 4.1: + // https://code.google.com/p/android/issues/detail?id=15337 + // http://stackoverflow.com/questions/13777109/pthread-sigmask-on-android-not-working + RAW_CHECK(sigprocmask(SIG_SETMASK, &new_sigmask, &old_sigmask) == 0); +#else + RAW_CHECK(pthread_sigmask(SIG_SETMASK, &new_sigmask, &old_sigmask) == 0); +#endif + return old_sigmask; +} + +void ResetChildSignalHandlersToDefaults() +{ + // The previous signal handlers are likely to be meaningless in the child's + // context so we reset them to the defaults for now. http://crbug.com/44953 + // These signal handlers are set up at least in browser_main_posix.cc: + // BrowserMainPartsPosix::PreEarlyInitialization and stack_trace_posix.cc: + // EnableInProcessStackDumping. + signal(SIGHUP, SIG_DFL); + signal(SIGINT, SIG_DFL); + signal(SIGILL, SIG_DFL); + signal(SIGABRT, SIG_DFL); + signal(SIGFPE, SIG_DFL); + signal(SIGBUS, SIG_DFL); + signal(SIGSEGV, SIG_DFL); + signal(SIGSYS, SIG_DFL); + signal(SIGTERM, SIG_DFL); +} + +CLauncherPosix::CLauncherPosix(std::shared_ptr addon, const std::string& uuid) + : ILauncher(addon, uuid) +{ +} + +bool CLauncherPosix::Launch(const std::vector& argv, bool waitForExit) +{ + using namespace std::chrono; + + sigset_t full_sigset; + sigfillset(&full_sigset); + const sigset_t orig_sigmask = SetSignalMask(full_sigset); + + const auto before_fork = high_resolution_clock::now(); + pid_t pid = fork(); + + // Always restore the original signal mask in the parent. + if (pid != 0) + { + const auto after_fork = high_resolution_clock::now(); + SetSignalMask(orig_sigmask); + + duration fork_time = duration_cast>(after_fork - before_fork); + CLog::Log(LOGDEBUG, "CChildLauncherPosix::{}: Child fork time {}", __func__, fork_time.count()); + } + + if (pid == -1) + { + CLog::Log(LOGERROR, "CChildLauncherPosix::{}: Failed to create child process", __func__); + return false; + } + + if (pid == 0) + { + ResetChildSignalHandlersToDefaults(); + SetSignalMask(orig_sigmask); + +#if defined(TARGET_LINUX) + if (prctl(PR_SET_PDEATHSIG, SIGKILL) != 0) + { + fprintf(stderr, "prctl(PR_SET_PDEATHSIG) failed"); + _exit(127); + } +#endif + + execvp(argv[0], argv.data()); + + _exit(0); + } + + CLog::Log( + LOGINFO, + "CChildLauncherPosix::{}: Started child process for webbrowser addon (pid {}) in wait {}", + __func__, pid, waitForExit ? "yes" : "no"); + m_pid = pid; + + if (waitForExit) + { + int status = 0; + pid_t ret = HANDLE_EINTR(waitpid(pid, &status, 0)); + if (ret <= 0) + { + ProcessStatus(status); + m_pid = pid; + } + } + + return true; +} + +bool CLauncherPosix::Kill(bool wait) +{ + fprintf(stderr, "KILL\n"); + if (m_pid) + { + if (m_lastStatus == ChildStatus::Running) + { + int cnt = 10; + while (cnt-- > 0) + { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + if (ProcessActive() != ChildStatus::Running) + { + CLog::Log(LOGDEBUG, "CChildLauncherPosix::{}: Child correctly stopped itself (pid {})", + __func__, m_pid); + return true; + } + } + + CLog::Log(LOGDEBUG, "CChildLauncherPosix::{}: Forcing stop of child (pid {})", __func__, + m_pid); + + bool did_terminate = kill(m_pid, SIGTERM) == 0; + + if (wait && did_terminate) + { + cnt = 50; + pid_t ret_pid = 0; + while (ret_pid <= 0 && cnt-- > 0) + { + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + ret_pid = HANDLE_EINTR(waitpid(m_pid, nullptr, WNOHANG)); + } + if (ret_pid > 0) + return true; + + did_terminate = kill(m_pid, SIGKILL) == 0; + if (did_terminate) + { + ret_pid = HANDLE_EINTR(waitpid(m_pid, nullptr, 0)); + if (ret_pid > 0) + return true; + } + } + + if (!did_terminate) + { + CLog::Log(LOGERROR, "CChildLauncherPosix::{}: Unable to terminate process {}", __func__, + m_pid); + return false; + } + } + } + + return true; +} + +ChildStatus CLauncherPosix::ProcessActive() +{ + int status = 0; + pid_t ret = waitpid(m_pid, &status, WNOHANG | WUNTRACED | WCONTINUED); + if (ret == 0) + { + m_lastStatus = ChildStatus::Running; + } + else if (ret == -1) + { + CLog::Log(LOGERROR, "CChildLauncherPosix::{}: Asked sandbox process pid {} no more present", + __func__, m_pid); + if (m_lastStatus == ChildStatus::Running) + m_lastStatus = ChildStatus::StoppedByUnknown; + return m_lastStatus; + } + else + { + ProcessStatus(status); + } + + return m_lastStatus; +} + +void CLauncherPosix::ProcessStatus(int status) +{ + if (WIFEXITED(status)) + { + m_exitCode = WEXITSTATUS(status); + m_lastStatus = ChildStatus::ExitedNormal; + CLog::Log(LOGDEBUG, + "CChildLauncherPosix::{}: Sandbox process pid {}, stopped normal with exit code {}", + __func__, m_pid, m_exitCode); + } + else if (WIFSIGNALED(status)) + { + m_exitCode = WTERMSIG(status); + fprintf(stderr, "<<<<<<<<<<<<< %i %i %i %i %i %i\n", WSTOPSIG(status), WTERMSIG(status), + WCOREDUMP(status), WIFSIGNALED(status), WIFSTOPPED(status), WIFEXITED(status)); + if (m_exitCode == SIGSEGV) + { + m_lastStatus = ChildStatus::SeqmentionFault; + CLog::Log(LOGFATAL, "CChildLauncherPosix::{}: Sandbox process pid {} with seqmention fault", + __func__, m_pid, m_exitCode); + } + else + { + m_lastStatus = ChildStatus::StoppedBySignal; + CLog::Log(LOGFATAL, "CChildLauncherPosix::{}: Sandbox process pid {} signaled with {}", + __func__, m_pid, m_exitCode); + } + } + else if (WIFSTOPPED(status)) + { + m_exitCode = WSTOPSIG(status); + m_lastStatus = ChildStatus::StoppedBySignal; + CLog::Log(LOGFATAL, + "CChildLauncherPosix::{}: Sandbox process pid {} stopped from outside with {}", + __func__, m_pid, m_exitCode); + } + else + { + m_lastStatus = ChildStatus::StoppedByUnknown; + CLog::Log(LOGFATAL, + "CChildLauncherPosix::{}: Sandbox process pid {} stopped with unknown status {}", + __func__, m_pid, status); + } +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/launcher/LauncherPosix.h b/xbmc/addons/interface/launcher/LauncherPosix.h new file mode 100644 index 0000000000000..f931fad01e023 --- /dev/null +++ b/xbmc/addons/interface/launcher/LauncherPosix.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:linux,freebsd,android,osx,darwin_embedded>---*/ + +#pragma once + +#include "ILauncher.h" + +#define HANDLE_EINTR(x) \ + ({ \ + decltype(x) eintr_wrapper_result; \ + do \ + { \ + eintr_wrapper_result = (x); \ + } while (eintr_wrapper_result == -1 && errno == EINTR); \ + eintr_wrapper_result; \ + }) + +#define RAW_CHECK(condition) \ + do \ + { \ + if (!(condition)) \ + CLog::Log(LOGERROR, "Check failed: " #condition); \ + } while (0) + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CLauncherPosix : public ILauncher +{ +public: + CLauncherPosix(std::shared_ptr addon, const std::string& uuid); + ~CLauncherPosix() = default; + + bool Launch(const std::vector& argv, bool waitForExit) override; + bool Kill(bool wait) override; + int64_t GetMainProcessPID() const override { return static_cast(m_pid); } + ChildStatus ProcessActive() override; + +private: + void ProcessStatus(int status); + + pid_t m_pid = -1; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/CMakeLists.txt b/xbmc/addons/interface/processinfo/CMakeLists.txt new file mode 100644 index 0000000000000..a43abd41a2416 --- /dev/null +++ b/xbmc/addons/interface/processinfo/CMakeLists.txt @@ -0,0 +1,27 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + $<$:ProcessInfoAndroid.cpp> + $<$:ProcessInfoDarwinEmbedded.cpp> + $<$:ProcessInfoFreeBSD.cpp> + $<$:ProcessInfoLinux.cpp> + $<$:ProcessInfoOSX.cpp> + $<$:ProcessInfoWindows.cpp> + $<$:ProcessInfoWindowsStore.cpp> +) + +set(HEADERS + ProcessInfo.h + $<$:ProcessInfoAndroid.h> + $<$:ProcessInfoDarwinEmbedded.h> + $<$:ProcessInfoFreeBSD.h> + $<$:ProcessInfoLinux.h> + $<$:ProcessInfoOSX.h> + $<$:ProcessInfoWindows.h> + $<$:ProcessInfoWindowsStore.h> +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_processinfo) +endif() diff --git a/xbmc/addons/interface/processinfo/ProcessInfo.h b/xbmc/addons/interface/processinfo/ProcessInfo.h new file mode 100644 index 0000000000000..d24cfcbf42217 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfo.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include + +namespace ADDON +{ +class IAddon; +} + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct ProcessInfoData +{ + std::shared_ptr m_addon; + int64_t m_pid{-1}; + int m_usedThreadsAmount{-1}; + int m_usedCPUPercentage{0}; + uint64_t m_usedPhysicalMemoryAmount{0}; + uint64_t m_usedVirtualMemoryAmount{0}; + uint64_t m_usedSharedMemoryAmount{0}; +}; + +class CProcessInfo +{ +public: + CProcessInfo(std::shared_ptr addon, int64_t pid) : m_addon(addon), m_pid(pid) {} + virtual ~CProcessInfo() = default; + + virtual ProcessInfoData Calculate() = 0; + +protected: + std::shared_ptr m_addon; + int64_t m_pid; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoAndroid.cpp b/xbmc/addons/interface/processinfo/ProcessInfoAndroid.cpp new file mode 100644 index 0000000000000..b481492d91340 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoAndroid.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:android>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoAndroid.h b/xbmc/addons/interface/processinfo/ProcessInfoAndroid.h new file mode 100644 index 0000000000000..eaf9a5dd206f6 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoAndroid.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:android>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.cpp b/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.cpp new file mode 100644 index 0000000000000..0be8eccc1c322 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:darwin_embedded>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.h b/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.h new file mode 100644 index 0000000000000..32cdcdfb5024d --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoDarwinEmbedded.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:darwin_embedded>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.cpp b/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.cpp new file mode 100644 index 0000000000000..1e44a2160986d --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:freebsd>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.h b/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.h new file mode 100644 index 0000000000000..cbda706313ad7 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoFreeBSD.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:freebsd>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoLinux.cpp b/xbmc/addons/interface/processinfo/ProcessInfoLinux.cpp new file mode 100644 index 0000000000000..09cc8421eec2f --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoLinux.cpp @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:linux>---*/ + +#include "ProcessInfoLinux.h" + +#include "utils/StringUtils.h" +#include "utils/TimeUtils.h" + +#include +#include + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +#define m_lastTotalUser CProcessInfo::m_value1; +#define m_lastTotalUserLow CProcessInfo::m_value2; +#define m_lastTotalSys CProcessInfo::m_value3; +#define m_lastTotalIdle CProcessInfo::m_value4; + +CProcessInfoLinux::CProcessInfoLinux(std::shared_ptr addon, int64_t used_pid) + : CProcessInfo(addon, used_pid) +{ + m_currentInfo.m_addon = m_addon; + + std::ifstream procstat_stream("/proc/stat", std::ios_base::in); + std::string line; + std::getline(procstat_stream, line); + + uint64_t user; + uint64_t nice2; + uint64_t system; + uint64_t idle; + sscanf(line.c_str(), "%*s %lu %lu %lu %lu", &user, &nice2, &system, &idle); + m_lastTotalCPU = user + nice2 + system + idle; + + char buf[128]; + snprintf(buf, sizeof(buf), "/proc/%ld/stat", m_pid); + std::ifstream stat_stream(buf, std::ios_base::in); + + int64_t pid; + std::string comm; + char state[1]; + int ppid; + int pgrp; + int session; + int tty_nr; + int tpgid; + unsigned int flags; + uint32_t minflt; + uint32_t cminflt; + uint32_t majflt; + uint32_t cmajflt; + uint32_t utime; + uint32_t stime; + int32_t cutime; + int32_t cstime; + int32_t priority; + int32_t nice; + int32_t num_threads; + int32_t itrealvalue; + uint64_t starttime; + uint32_t vsize; + uint32_t rss; + + stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> + minflt >> cminflt >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> + nice >> num_threads >> itrealvalue >> starttime >> vsize >> rss; + + stat_stream.close(); + + m_lastProcessCPU = utime + stime; + + std::ifstream cpuinfo_stream("/proc/cpuinfo", std::ios_base::in); + for (std::string line; std::getline(cpuinfo_stream, line);) + { + if (StringUtils::StartsWith(line, "processor")) + { + ++m_numProcessors; + } + } +} + +ProcessInfoData CProcessInfoLinux::Calculate() +{ + if (CTimeUtils::GetFrameTime() - m_lastInfoTime < UPDATE_INTERVAL) + return m_currentInfo; + + m_lastInfoTime = CTimeUtils::GetFrameTime(); + + char buf[128]; + snprintf(buf, sizeof(buf), "/proc/%ld/stat", m_pid); + std::ifstream stat_stream(buf, std::ios_base::in); + + int64_t pid; + std::string comm; + char state[1]; + int ppid; + int pgrp; + int session; + int tty_nr; + int tpgid; + unsigned int flags; + uint32_t minflt; + uint32_t cminflt; + uint32_t majflt; + uint32_t cmajflt; + uint64_t utime; + uint64_t stime; + uint64_t cutime; + uint64_t cstime; + int32_t priority; + int32_t nice; + int32_t num_threads; + int32_t itrealvalue; + uint64_t starttime; + uint32_t vsize; + uint32_t rss; + + stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> + minflt >> cminflt >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> + nice >> num_threads >> itrealvalue >> starttime >> vsize >> rss; + + stat_stream.close(); + + m_currentInfo.m_pid = pid; + + snprintf(buf, sizeof(buf), "/proc/%ld/status", m_pid); + std::ifstream status_stream(buf, std::ios_base::in); + for (std::string line; std::getline(status_stream, line);) + { + StringUtils::RemoveDuplicatedSpacesAndTabs(line); + if (StringUtils::StartsWith(line, "RssShmem:")) + { + m_currentInfo.m_usedSharedMemoryAmount = atoll(line.c_str() + sizeof("RssShmem:")) * 1024; + } + else if (StringUtils::StartsWith(line, "VmSize:")) + { + m_currentInfo.m_usedVirtualMemoryAmount = atoll(line.c_str() + sizeof("VmSize:")) * 1024; + } + else if (StringUtils::StartsWith(line, "VmRSS:")) + { + m_currentInfo.m_usedPhysicalMemoryAmount = atoll(line.c_str() + sizeof("VmRSS:")) * 1024; + } + else if (StringUtils::StartsWith(line, "Threads:")) + { + m_currentInfo.m_usedThreadsAmount = atoll(line.c_str() + sizeof("Threads:")); + } + } + + std::ifstream procstat_stream("/proc/stat", std::ios_base::in); + std::string line; + std::getline(procstat_stream, line); + + uint64_t user; + uint64_t nice2; + uint64_t system; + uint64_t idle; + sscanf(line.c_str(), "%*s %lu %lu %lu %lu", &user, &nice2, &system, &idle); + uint64_t currentTotalCPU = user + nice2 + system + idle; + uint64_t currentProcessCPU = utime + stime; + + m_currentInfo.m_usedCPUPercentage = m_numProcessors * (currentProcessCPU - m_lastProcessCPU) * + 100 / (float)(currentTotalCPU - m_lastTotalCPU); + + m_lastTotalCPU = currentTotalCPU; + m_lastProcessCPU = currentProcessCPU; + + return m_currentInfo; +} + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoLinux.h b/xbmc/addons/interface/processinfo/ProcessInfoLinux.h new file mode 100644 index 0000000000000..c5e0d47267d1b --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoLinux.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:linux>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CProcessInfoLinux : public CProcessInfo +{ +public: + CProcessInfoLinux(std::shared_ptr addon, int64_t pid); + + ProcessInfoData Calculate() override; + +private: + static const int UPDATE_INTERVAL = 500; + mutable unsigned int m_lastInfoTime{static_cast(-UPDATE_INTERVAL)}; + + uint64_t m_lastTotalCPU; + uint64_t m_lastProcessCPU; + int m_numProcessors{0}; + ProcessInfoData m_currentInfo; +}; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoOSX.cpp b/xbmc/addons/interface/processinfo/ProcessInfoOSX.cpp new file mode 100644 index 0000000000000..c79f9ef7abff0 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoOSX.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:osx>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoOSX.h b/xbmc/addons/interface/processinfo/ProcessInfoOSX.h new file mode 100644 index 0000000000000..833d637bca920 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoOSX.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:osx>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoWindows.cpp b/xbmc/addons/interface/processinfo/ProcessInfoWindows.cpp new file mode 100644 index 0000000000000..9985e76ab0b4a --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoWindows.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:windows>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoWindows.h b/xbmc/addons/interface/processinfo/ProcessInfoWindows.h new file mode 100644 index 0000000000000..b83b3ca700350 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoWindows.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:windows>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.cpp b/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.cpp new file mode 100644 index 0000000000000..31a49181375e2 --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:windowsstore>---*/ + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.h b/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.h new file mode 100644 index 0000000000000..9112b3fc0869d --- /dev/null +++ b/xbmc/addons/interface/processinfo/ProcessInfoWindowsStore.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/*---AUTO_GEN_PARSE<$$CORE_SYSTEM_NAME:windowsstore>---*/ + +#pragma once + +#include "ProcessInfo.h" + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interface/tools/CMakeLists.txt b/xbmc/addons/interface/tools/CMakeLists.txt new file mode 100644 index 0000000000000..e88ea3486fd47 --- /dev/null +++ b/xbmc/addons/interface/tools/CMakeLists.txt @@ -0,0 +1,14 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + GUITranslator.cpp +) + +set(HEADERS + GUITranslator.h +) + +if(NOT ENABLE_STATIC_LIBS OR SOURCES) + core_add_library(addons_interface_tools) +endif() diff --git a/xbmc/addons/interfaces/gui/GUITranslator.cpp b/xbmc/addons/interface/tools/GUITranslator.cpp similarity index 99% rename from xbmc/addons/interfaces/gui/GUITranslator.cpp rename to xbmc/addons/interface/tools/GUITranslator.cpp index 2db26011ac9d9..058c0df6ff377 100644 --- a/xbmc/addons/interfaces/gui/GUITranslator.cpp +++ b/xbmc/addons/interface/tools/GUITranslator.cpp @@ -10,7 +10,7 @@ #include "input/actions/ActionIDs.h" -using namespace ADDON; +using namespace KODI::ADDONS::INTERFACE; ADDON_ACTION CAddonGUITranslator::TranslateActionIdToAddon(int kodiId) { diff --git a/xbmc/addons/interfaces/gui/GUITranslator.h b/xbmc/addons/interface/tools/GUITranslator.h similarity index 87% rename from xbmc/addons/interfaces/gui/GUITranslator.h rename to xbmc/addons/interface/tools/GUITranslator.h index 8bd6b5c1ef4a3..42dddede2f5fc 100644 --- a/xbmc/addons/interfaces/gui/GUITranslator.h +++ b/xbmc/addons/interface/tools/GUITranslator.h @@ -10,7 +10,11 @@ #include "addons/kodi-dev-kit/include/kodi/c-api/gui/input/action_ids.h" -namespace ADDON +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE { /*! @@ -38,4 +42,6 @@ class CAddonGUITranslator static int TranslateActionIdToKodi(ADDON_ACTION addonId); }; -} /* namespace ADDON */ +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ diff --git a/xbmc/addons/interfaces/AddonBase.cpp b/xbmc/addons/interfaces/AddonBase.cpp deleted file mode 100644 index dd28c472a6d9b..0000000000000 --- a/xbmc/addons/interfaces/AddonBase.cpp +++ /dev/null @@ -1,652 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "AddonBase.h" - -#include "Application.h" -#include "GUIUserMessages.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/gui/GUIDialogAddonSettings.h" -#include "addons/settings/AddonSettings.h" -#include "filesystem/Directory.h" -#include "filesystem/SpecialProtocol.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "guilib/LocalizeStrings.h" -#include "utils/URIUtils.h" -#include "utils/log.h" - -// "C" interface addon callback handle classes -#include "AudioEngine.h" -#include "Filesystem.h" -#include "General.h" -#include "Network.h" -#include "gui/General.h" - -namespace ADDON -{ - -std::vector Interface_Base::s_registeredInterfaces; - -bool Interface_Base::InitInterface(CAddonDll* addon, - AddonGlobalInterface& addonInterface, - KODI_ADDON_INSTANCE_STRUCT* firstKodiInstance) -{ - addonInterface = {}; - - addonInterface.addonBase = nullptr; - addonInterface.globalSingleInstance = nullptr; - addonInterface.firstKodiInstance = firstKodiInstance; - - // Create function list from kodi to addon, generated with malloc to have - // compatible with other versions - addonInterface.toKodi = new AddonToKodiFuncTable_Addon(); - addonInterface.toKodi->kodiBase = addon; - addonInterface.toKodi->addon_log_msg = addon_log_msg; - addonInterface.toKodi->free_string = free_string; - addonInterface.toKodi->free_string_array = free_string_array; - - addonInterface.toKodi->kodi_addon = new AddonToKodiFuncTable_kodi_addon(); - addonInterface.toKodi->kodi_addon->get_addon_path = get_addon_path; - addonInterface.toKodi->kodi_addon->get_lib_path = get_lib_path; - addonInterface.toKodi->kodi_addon->get_user_path = get_user_path; - addonInterface.toKodi->kodi_addon->get_temp_path = get_temp_path; - addonInterface.toKodi->kodi_addon->get_localized_string = get_localized_string; - addonInterface.toKodi->kodi_addon->open_settings_dialog = open_settings_dialog; - addonInterface.toKodi->kodi_addon->is_setting_using_default = is_setting_using_default; - addonInterface.toKodi->kodi_addon->get_setting_bool = get_setting_bool; - addonInterface.toKodi->kodi_addon->get_setting_int = get_setting_int; - addonInterface.toKodi->kodi_addon->get_setting_float = get_setting_float; - addonInterface.toKodi->kodi_addon->get_setting_string = get_setting_string; - addonInterface.toKodi->kodi_addon->set_setting_bool = set_setting_bool; - addonInterface.toKodi->kodi_addon->set_setting_int = set_setting_int; - addonInterface.toKodi->kodi_addon->set_setting_float = set_setting_float; - addonInterface.toKodi->kodi_addon->set_setting_string = set_setting_string; - addonInterface.toKodi->kodi_addon->get_addon_info = get_addon_info; - addonInterface.toKodi->kodi_addon->get_type_version = get_type_version; - addonInterface.toKodi->kodi_addon->get_interface = get_interface; - - // Related parts becomes set from addon headers, make here to nullptr to allow - // checks for right set of them - addonInterface.toAddon = new KodiToAddonFuncTable_Addon(); - - // Init the other interfaces - Interface_General::Init(&addonInterface); - Interface_AudioEngine::Init(&addonInterface); - Interface_Filesystem::Init(&addonInterface); - Interface_Network::Init(&addonInterface); - Interface_GUIGeneral::Init(&addonInterface); - - return true; -} - -void Interface_Base::DeInitInterface(AddonGlobalInterface& addonInterface) -{ - Interface_GUIGeneral::DeInit(&addonInterface); - Interface_Network::DeInit(&addonInterface); - Interface_Filesystem::DeInit(&addonInterface); - Interface_AudioEngine::DeInit(&addonInterface); - Interface_General::DeInit(&addonInterface); - - if (addonInterface.toKodi) - delete addonInterface.toKodi->kodi_addon; - delete addonInterface.toKodi; - delete addonInterface.toAddon; - addonInterface = {}; -} - -void Interface_Base::RegisterInterface(ADDON_GET_INTERFACE_FN fn) -{ - s_registeredInterfaces.push_back(fn); -} - -bool Interface_Base::UpdateSettingInActiveDialog(CAddonDll* addon, - const char* id, - const std::string& value) -{ - if (!CServiceBroker::GetGUI()->GetWindowManager().IsWindowActive(WINDOW_DIALOG_ADDON_SETTINGS)) - return false; - - CGUIDialogAddonSettings* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_ADDON_SETTINGS); - if (dialog->GetCurrentAddonID() != addon->ID()) - return false; - - CGUIMessage message(GUI_MSG_SETTING_UPDATED, 0, 0); - std::vector params; - params.emplace_back(id); - params.push_back(value); - message.SetStringParams(params); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(message, - WINDOW_DIALOG_ADDON_SETTINGS); - - return true; -} - -/*! - * @brief Addon to Kodi basic callbacks below - * - * The amount of functions here are hold so minimal as possible. Only parts - * where needed on nearly every add-on (e.g. addon_log_msg) are to add there. - * - * More specific parts like e.g. to open files should be added to a separate - * part. - */ -//@{ - -void Interface_Base::addon_log_msg(const KODI_ADDON_BACKEND_HDL hdl, - const int addonLogLevel, - const char* strMessage) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "addon_log_msg(...) called with empty kodi instance pointer"); - return; - } - - int logLevel = LOGNONE; - switch (addonLogLevel) - { - case ADDON_LOG_DEBUG: - logLevel = LOGDEBUG; - break; - case ADDON_LOG_INFO: - logLevel = LOGINFO; - break; - case ADDON_LOG_WARNING: - logLevel = LOGWARNING; - break; - case ADDON_LOG_ERROR: - logLevel = LOGERROR; - break; - case ADDON_LOG_FATAL: - logLevel = LOGFATAL; - break; - default: - logLevel = LOGDEBUG; - break; - } - - CLog::Log(logLevel, "AddOnLog: {}: {}", addon->ID(), strMessage); -} - -char* Interface_Base::get_type_version(const KODI_ADDON_BACKEND_HDL hdl, int type) -{ - return strdup(kodi::addon::GetTypeVersion(type)); -} - -char* Interface_Base::get_addon_path(const KODI_ADDON_BACKEND_HDL hdl) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "get_addon_path(...) called with empty kodi instance pointer"); - return nullptr; - } - - return strdup(CSpecialProtocol::TranslatePath(addon->Path()).c_str()); -} - -char* Interface_Base::get_lib_path(const KODI_ADDON_BACKEND_HDL hdl) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "get_lib_path(...) called with empty kodi instance pointer"); - return nullptr; - } - - return strdup(CSpecialProtocol::TranslatePath("special://xbmcbinaddons/" + addon->ID()).c_str()); -} - -char* Interface_Base::get_user_path(const KODI_ADDON_BACKEND_HDL hdl) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "get_user_path(...) called with empty kodi instance pointer"); - return nullptr; - } - - return strdup(CSpecialProtocol::TranslatePath(addon->Profile()).c_str()); -} - -char* Interface_Base::get_temp_path(const KODI_ADDON_BACKEND_HDL hdl) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "get_temp_path(...) called with empty kodi instance pointer"); - return nullptr; - } - - std::string tempPath = - URIUtils::AddFileToFolder(CServiceBroker::GetAddonMgr().GetTempAddonBasePath(), addon->ID()); - tempPath += "-temp"; - XFILE::CDirectory::Create(tempPath); - - return strdup(CSpecialProtocol::TranslatePath(tempPath).c_str()); -} - -char* Interface_Base::get_localized_string(const KODI_ADDON_BACKEND_HDL hdl, long label_id) -{ - CAddonDll* addon = static_cast(hdl); - if (!addon) - { - CLog::Log(LOGERROR, "get_localized_string(...) called with empty kodi instance pointer"); - return nullptr; - } - - if (g_application.m_bStop) - return nullptr; - - std::string label = g_localizeStrings.GetAddonString(addon->ID(), label_id); - if (label.empty()) - label = g_localizeStrings.Get(label_id); - char* buffer = strdup(label.c_str()); - return buffer; -} - -char* Interface_Base::get_addon_info(const KODI_ADDON_BACKEND_HDL hdl, const char* id) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "get_addon_info(...) called with empty pointer"); - return nullptr; - } - - std::string str; - if (StringUtils::CompareNoCase(id, "author") == 0) - str = addon->Author(); - else if (StringUtils::CompareNoCase(id, "changelog") == 0) - str = addon->ChangeLog(); - else if (StringUtils::CompareNoCase(id, "description") == 0) - str = addon->Description(); - else if (StringUtils::CompareNoCase(id, "disclaimer") == 0) - str = addon->Disclaimer(); - else if (StringUtils::CompareNoCase(id, "fanart") == 0) - str = addon->FanArt(); - else if (StringUtils::CompareNoCase(id, "icon") == 0) - str = addon->Icon(); - else if (StringUtils::CompareNoCase(id, "id") == 0) - str = addon->ID(); - else if (StringUtils::CompareNoCase(id, "name") == 0) - str = addon->Name(); - else if (StringUtils::CompareNoCase(id, "path") == 0) - str = addon->Path(); - else if (StringUtils::CompareNoCase(id, "profile") == 0) - str = addon->Profile(); - else if (StringUtils::CompareNoCase(id, "summary") == 0) - str = addon->Summary(); - else if (StringUtils::CompareNoCase(id, "type") == 0) - str = ADDON::CAddonInfo::TranslateType(addon->Type()); - else if (StringUtils::CompareNoCase(id, "version") == 0) - str = addon->Version().asString(); - else - { - CLog::Log(LOGERROR, "Interface_Base::{} - add-on '{}' requests invalid id '{}'", __func__, - addon->Name(), id); - return nullptr; - } - - char* buffer = strdup(str.c_str()); - return buffer; -} - -bool Interface_Base::open_settings_dialog(const KODI_ADDON_BACKEND_HDL hdl) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "open_settings_dialog(...) called with empty kodi instance pointer"); - return false; - } - - // show settings dialog - AddonPtr addonInfo; - if (!CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), addonInfo, ADDON_UNKNOWN, - OnlyEnabled::YES)) - { - CLog::Log(LOGERROR, "Interface_Base::{} - Could not get addon information for '{}'", __func__, - addon->ID()); - return false; - } - - return CGUIDialogAddonSettings::ShowForAddon(addonInfo); -} - -bool Interface_Base::is_setting_using_default(const KODI_ADDON_BACKEND_HDL hdl, const char* id) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}')", __func__, hdl, - static_cast(id)); - - return false; - } - - if (!addon->HasSettings()) - { - CLog::Log(LOGERROR, "Interface_Base::{} - couldn't get settings for add-on '{}'", __func__, - addon->Name()); - return false; - } - - auto setting = addon->GetSettings()->GetSetting(id); - if (setting == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - can't find setting '{}' in '{}'", __func__, id, - addon->Name()); - return false; - } - - return setting->IsDefault(); -} - -bool Interface_Base::get_setting_bool(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool* value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr || value == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (!addon->HasSettings()) - { - CLog::Log(LOGERROR, "Interface_Base::{} - couldn't get settings for add-on '{}'", __func__, - addon->Name()); - return false; - } - - auto setting = addon->GetSettings()->GetSetting(id); - if (setting == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - can't find setting '{}' in '{}'", __func__, id, - addon->Name()); - return false; - } - - if (setting->GetType() != SettingType::Boolean) - { - CLog::Log(LOGERROR, "Interface_Base::{} - setting '{}' is not a boolean in '{}'", __func__, id, - addon->Name()); - return false; - } - - *value = std::static_pointer_cast(setting)->GetValue(); - return true; -} - -bool Interface_Base::get_setting_int(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int* value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr || value == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (!addon->HasSettings()) - { - CLog::Log(LOGERROR, "Interface_Base::{} - couldn't get settings for add-on '{}'", __func__, - addon->Name()); - return false; - } - - auto setting = addon->GetSettings()->GetSetting(id); - if (setting == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - can't find setting '{}' in '{}'", __func__, id, - addon->Name()); - return false; - } - - if (setting->GetType() != SettingType::Integer && setting->GetType() != SettingType::Number) - { - CLog::Log(LOGERROR, "Interface_Base::{} - setting '{}' is not a integer in '{}'", __func__, id, - addon->Name()); - return false; - } - - if (setting->GetType() == SettingType::Integer) - *value = std::static_pointer_cast(setting)->GetValue(); - else - *value = static_cast(std::static_pointer_cast(setting)->GetValue()); - return true; -} - -bool Interface_Base::get_setting_float(const KODI_ADDON_BACKEND_HDL hdl, - const char* id, - float* value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr || value == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (!addon->HasSettings()) - { - CLog::Log(LOGERROR, "Interface_Base::{} - couldn't get settings for add-on '{}'", __func__, - addon->Name()); - return false; - } - - auto setting = addon->GetSettings()->GetSetting(id); - if (setting == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - can't find setting '{}' in '{}'", __func__, id, - addon->Name()); - return false; - } - - if (setting->GetType() != SettingType::Number) - { - CLog::Log(LOGERROR, "Interface_Base::{} - setting '{}' is not a number in '{}'", __func__, id, - addon->Name()); - return false; - } - - *value = static_cast(std::static_pointer_cast(setting)->GetValue()); - return true; -} - -bool Interface_Base::get_setting_string(const KODI_ADDON_BACKEND_HDL hdl, - const char* id, - char** value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr || value == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (!addon->HasSettings()) - { - CLog::Log(LOGERROR, "Interface_Base::{} - couldn't get settings for add-on '{}'", __func__, - addon->Name()); - return false; - } - - auto setting = addon->GetSettings()->GetSetting(id); - if (setting == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - can't find setting '{}' in '{}'", __func__, id, - addon->Name()); - return false; - } - - if (setting->GetType() != SettingType::String) - { - CLog::Log(LOGERROR, "Interface_Base::{} - setting '{}' is not a string in '{}'", __func__, id, - addon->Name()); - return false; - } - - *value = strdup(std::static_pointer_cast(setting)->GetValue().c_str()); - return true; -} - -bool Interface_Base::set_setting_bool(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}')", __func__, hdl, - static_cast(id)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(addon, id, value ? "true" : "false")) - return true; - - if (!addon->UpdateSettingBool(id, value)) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid setting type", __func__); - return false; - } - - addon->SaveSettings(); - - return true; -} - -bool Interface_Base::set_setting_int(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}')", __func__, hdl, - static_cast(id)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(addon, id, std::to_string(value))) - return true; - - if (!addon->UpdateSettingInt(id, value)) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid setting type", __func__); - return false; - } - - addon->SaveSettings(); - - return true; -} - -bool Interface_Base::set_setting_float(const KODI_ADDON_BACKEND_HDL hdl, - const char* id, - float value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}')", __func__, hdl, - static_cast(id)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(addon, id, StringUtils::Format("{:f}", value))) - return true; - - if (!addon->UpdateSettingNumber(id, static_cast(value))) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid setting type", __func__); - return false; - } - - addon->SaveSettings(); - - return true; -} - -bool Interface_Base::set_setting_string(const KODI_ADDON_BACKEND_HDL hdl, - const char* id, - const char* value) -{ - CAddonDll* addon = static_cast(hdl); - if (addon == nullptr || id == nullptr || value == nullptr) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid data (addon='{}', id='{}', value='{}')", - __func__, hdl, static_cast(id), static_cast(value)); - - return false; - } - - if (Interface_Base::UpdateSettingInActiveDialog(addon, id, value)) - return true; - - if (!addon->UpdateSettingString(id, value)) - { - CLog::Log(LOGERROR, "Interface_Base::{} - invalid setting type", __func__); - return false; - } - - addon->SaveSettings(); - - return true; -} - -void Interface_Base::free_string(const KODI_ADDON_BACKEND_HDL hdl, char* str) -{ - if (str) - free(str); -} - -void Interface_Base::free_string_array(const KODI_ADDON_BACKEND_HDL hdl, - char** arr, - int numElements) -{ - if (arr) - { - for (int i = 0; i < numElements; ++i) - { - free(arr[i]); - } - free(arr); - } -} - -void* Interface_Base::get_interface(const KODI_ADDON_BACKEND_HDL hdl, - const char* name, - const char* version) -{ - if (!name || !version) - return nullptr; - - void* retval(nullptr); - - for (auto fn : s_registeredInterfaces) - if ((retval = fn(name, version))) - break; - - return retval; -} - -//@} - -} // namespace ADDON diff --git a/xbmc/addons/interfaces/AddonBase.h b/xbmc/addons/interfaces/AddonBase.h deleted file mode 100644 index d516849e20114..0000000000000 --- a/xbmc/addons/interfaces/AddonBase.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" - -extern "C" -{ -namespace ADDON -{ - -typedef void* (*ADDON_GET_INTERFACE_FN)(const std::string& name, const std::string& version); - -class CAddonDll; - -/*! - * @brief Global general Add-on to Kodi callback functions - * - * To hold general functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/General.h" - */ -struct Interface_Base -{ - static bool InitInterface(CAddonDll* addon, - AddonGlobalInterface& addonInterface, - KODI_ADDON_INSTANCE_STRUCT* firstKodiInstance); - static void DeInitInterface(AddonGlobalInterface& addonInterface); - static void RegisterInterface(ADDON_GET_INTERFACE_FN fn); - static bool UpdateSettingInActiveDialog(CAddonDll* addon, - const char* id, - const std::string& value); - - static std::vector s_registeredInterfaces; - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void addon_log_msg(const KODI_ADDON_BACKEND_HDL hdl, - const int addonLogLevel, - const char* strMessage); - static char* get_type_version(const KODI_ADDON_BACKEND_HDL hdl, int type); - static char* get_addon_path(const KODI_ADDON_BACKEND_HDL hdl); - static char* get_lib_path(const KODI_ADDON_BACKEND_HDL hdl); - static char* get_user_path(const KODI_ADDON_BACKEND_HDL hdl); - static char* get_temp_path(const KODI_ADDON_BACKEND_HDL hdl); - static char* get_localized_string(const KODI_ADDON_BACKEND_HDL hdl, long label_id); - static char* get_addon_info(const KODI_ADDON_BACKEND_HDL hdl, const char* id); - static bool open_settings_dialog(const KODI_ADDON_BACKEND_HDL hdl); - static bool is_setting_using_default(const KODI_ADDON_BACKEND_HDL hdl, const char* id); - static bool get_setting_bool(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool* value); - static bool get_setting_int(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int* value); - static bool get_setting_float(const KODI_ADDON_BACKEND_HDL hdl, const char* id, float* value); - static bool get_setting_string(const KODI_ADDON_BACKEND_HDL hdl, const char* id, char** value); - static bool set_setting_bool(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool value); - static bool set_setting_int(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int value); - static bool set_setting_float(const KODI_ADDON_BACKEND_HDL hdl, const char* id, float value); - static bool set_setting_string(const KODI_ADDON_BACKEND_HDL hdl, - const char* id, - const char* value); - static void free_string(const KODI_ADDON_BACKEND_HDL hdl, char* str); - static void free_string_array(const KODI_ADDON_BACKEND_HDL hdl, char** arr, int numElements); - static void* get_interface(const KODI_ADDON_BACKEND_HDL hdl, - const char* name, - const char* version); - //@} -}; - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/AudioEngine.cpp b/xbmc/addons/interfaces/AudioEngine.cpp deleted file mode 100644 index 0efcc07f3f091..0000000000000 --- a/xbmc/addons/interfaces/AudioEngine.cpp +++ /dev/null @@ -1,761 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "AudioEngine.h" - -#include "ServiceBroker.h" -#include "addons/kodi-dev-kit/include/kodi/AddonBase.h" -#include "cores/AudioEngine/Interfaces/AE.h" -#include "cores/AudioEngine/Interfaces/AEStream.h" -#include "cores/AudioEngine/Utils/AEStreamData.h" -#include "utils/log.h" - -using namespace kodi; // addon-dev-kit namespace -using namespace kodi::audioengine; // addon-dev-kit namespace - -namespace ADDON -{ - -void Interface_AudioEngine::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_audioengine = new AddonToKodiFuncTable_kodi_audioengine(); - - // write KODI audio DSP specific add-on function addresses to callback table - addonInterface->toKodi->kodi_audioengine->make_stream = audioengine_make_stream; - addonInterface->toKodi->kodi_audioengine->free_stream = audioengine_free_stream; - addonInterface->toKodi->kodi_audioengine->get_current_sink_format = get_current_sink_format; - - // AEStream add-on function callback table - addonInterface->toKodi->kodi_audioengine->aestream_get_space = aestream_get_space; - addonInterface->toKodi->kodi_audioengine->aestream_add_data = aestream_add_data; - addonInterface->toKodi->kodi_audioengine->aestream_get_delay = aestream_get_delay; - addonInterface->toKodi->kodi_audioengine->aestream_is_buffering = aestream_is_buffering; - addonInterface->toKodi->kodi_audioengine->aestream_get_cache_time = aestream_get_cache_time; - addonInterface->toKodi->kodi_audioengine->aestream_get_cache_total = aestream_get_cache_total; - addonInterface->toKodi->kodi_audioengine->aestream_pause = aestream_pause; - addonInterface->toKodi->kodi_audioengine->aestream_resume = aestream_resume; - addonInterface->toKodi->kodi_audioengine->aestream_drain = aestream_drain; - addonInterface->toKodi->kodi_audioengine->aestream_is_draining = aestream_is_draining; - addonInterface->toKodi->kodi_audioengine->aestream_is_drained = aestream_is_drained; - addonInterface->toKodi->kodi_audioengine->aestream_flush = aestream_flush; - addonInterface->toKodi->kodi_audioengine->aestream_get_volume = aestream_get_volume; - addonInterface->toKodi->kodi_audioengine->aestream_set_volume = aestream_set_volume; - addonInterface->toKodi->kodi_audioengine->aestream_get_amplification = aestream_get_amplification; - addonInterface->toKodi->kodi_audioengine->aestream_set_amplification = aestream_set_amplification; - addonInterface->toKodi->kodi_audioengine->aestream_get_frame_size = aestream_get_frame_size; - addonInterface->toKodi->kodi_audioengine->aestream_get_channel_count = aestream_get_channel_count; - addonInterface->toKodi->kodi_audioengine->aestream_get_sample_rate = aestream_get_sample_rate; - addonInterface->toKodi->kodi_audioengine->aestream_get_data_format = aestream_get_data_format; - addonInterface->toKodi->kodi_audioengine->aestream_get_resample_ratio = - aestream_get_resample_ratio; - addonInterface->toKodi->kodi_audioengine->aestream_set_resample_ratio = - aestream_set_resample_ratio; -} - -void Interface_AudioEngine::DeInit(AddonGlobalInterface* addonInterface) -{ - if (addonInterface->toKodi) /* <-- Safe check, needed so long old addon way is present */ - { - delete addonInterface->toKodi->kodi_audioengine; - addonInterface->toKodi->kodi_audioengine = nullptr; - } -} - -AEChannel Interface_AudioEngine::TranslateAEChannelToKodi(AudioEngineChannel channel) -{ - switch (channel) - { - case AUDIOENGINE_CH_RAW: - return AE_CH_RAW; - case AUDIOENGINE_CH_FL: - return AE_CH_FL; - case AUDIOENGINE_CH_FR: - return AE_CH_FR; - case AUDIOENGINE_CH_FC: - return AE_CH_FC; - case AUDIOENGINE_CH_LFE: - return AE_CH_LFE; - case AUDIOENGINE_CH_BL: - return AE_CH_BL; - case AUDIOENGINE_CH_BR: - return AE_CH_BR; - case AUDIOENGINE_CH_FLOC: - return AE_CH_FLOC; - case AUDIOENGINE_CH_FROC: - return AE_CH_FROC; - case AUDIOENGINE_CH_BC: - return AE_CH_BC; - case AUDIOENGINE_CH_SL: - return AE_CH_SL; - case AUDIOENGINE_CH_SR: - return AE_CH_SR; - case AUDIOENGINE_CH_TFL: - return AE_CH_TFL; - case AUDIOENGINE_CH_TFR: - return AE_CH_TFR; - case AUDIOENGINE_CH_TFC: - return AE_CH_TFC; - case AUDIOENGINE_CH_TC: - return AE_CH_TC; - case AUDIOENGINE_CH_TBL: - return AE_CH_TBL; - case AUDIOENGINE_CH_TBR: - return AE_CH_TBR; - case AUDIOENGINE_CH_TBC: - return AE_CH_TBC; - case AUDIOENGINE_CH_BLOC: - return AE_CH_BLOC; - case AUDIOENGINE_CH_BROC: - return AE_CH_BROC; - case AUDIOENGINE_CH_MAX: - return AE_CH_MAX; - case AUDIOENGINE_CH_NULL: - default: - return AE_CH_NULL; - } -} - -AudioEngineChannel Interface_AudioEngine::TranslateAEChannelToAddon(AEChannel channel) -{ - switch (channel) - { - case AE_CH_RAW: - return AUDIOENGINE_CH_RAW; - case AE_CH_FL: - return AUDIOENGINE_CH_FL; - case AE_CH_FR: - return AUDIOENGINE_CH_FR; - case AE_CH_FC: - return AUDIOENGINE_CH_FC; - case AE_CH_LFE: - return AUDIOENGINE_CH_LFE; - case AE_CH_BL: - return AUDIOENGINE_CH_BL; - case AE_CH_BR: - return AUDIOENGINE_CH_BR; - case AE_CH_FLOC: - return AUDIOENGINE_CH_FLOC; - case AE_CH_FROC: - return AUDIOENGINE_CH_FROC; - case AE_CH_BC: - return AUDIOENGINE_CH_BC; - case AE_CH_SL: - return AUDIOENGINE_CH_SL; - case AE_CH_SR: - return AUDIOENGINE_CH_SR; - case AE_CH_TFL: - return AUDIOENGINE_CH_TFL; - case AE_CH_TFR: - return AUDIOENGINE_CH_TFR; - case AE_CH_TFC: - return AUDIOENGINE_CH_TFC; - case AE_CH_TC: - return AUDIOENGINE_CH_TC; - case AE_CH_TBL: - return AUDIOENGINE_CH_TBL; - case AE_CH_TBR: - return AUDIOENGINE_CH_TBR; - case AE_CH_TBC: - return AUDIOENGINE_CH_TBC; - case AE_CH_BLOC: - return AUDIOENGINE_CH_BLOC; - case AE_CH_BROC: - return AUDIOENGINE_CH_BROC; - case AE_CH_MAX: - return AUDIOENGINE_CH_MAX; - case AE_CH_NULL: - default: - return AUDIOENGINE_CH_NULL; - } -} - -AEDataFormat Interface_AudioEngine::TranslateAEFormatToKodi(AudioEngineDataFormat format) -{ - switch (format) - { - case AUDIOENGINE_FMT_U8: - return AE_FMT_U8; - case AUDIOENGINE_FMT_S16BE: - return AE_FMT_S16BE; - case AUDIOENGINE_FMT_S16LE: - return AE_FMT_S16LE; - case AUDIOENGINE_FMT_S16NE: - return AE_FMT_S16NE; - case AUDIOENGINE_FMT_S32BE: - return AE_FMT_S32BE; - case AUDIOENGINE_FMT_S32LE: - return AE_FMT_S32LE; - case AUDIOENGINE_FMT_S32NE: - return AE_FMT_S32NE; - case AUDIOENGINE_FMT_S24BE4: - return AE_FMT_S24BE4; - case AUDIOENGINE_FMT_S24LE4: - return AE_FMT_S24LE4; - case AUDIOENGINE_FMT_S24NE4: - return AE_FMT_S24NE4; - case AUDIOENGINE_FMT_S24NE4MSB: - return AE_FMT_S24NE4MSB; - case AUDIOENGINE_FMT_S24BE3: - return AE_FMT_S24BE3; - case AUDIOENGINE_FMT_S24LE3: - return AE_FMT_S24LE3; - case AUDIOENGINE_FMT_S24NE3: - return AE_FMT_S24NE3; - case AUDIOENGINE_FMT_DOUBLE: - return AE_FMT_DOUBLE; - case AUDIOENGINE_FMT_FLOAT: - return AE_FMT_FLOAT; - case AUDIOENGINE_FMT_RAW: - return AE_FMT_RAW; - case AUDIOENGINE_FMT_U8P: - return AE_FMT_U8P; - case AUDIOENGINE_FMT_S16NEP: - return AE_FMT_S16NEP; - case AUDIOENGINE_FMT_S32NEP: - return AE_FMT_S32NEP; - case AUDIOENGINE_FMT_S24NE4P: - return AE_FMT_S24NE4P; - case AUDIOENGINE_FMT_S24NE4MSBP: - return AE_FMT_S24NE4MSBP; - case AUDIOENGINE_FMT_S24NE3P: - return AE_FMT_S24NE3P; - case AUDIOENGINE_FMT_DOUBLEP: - return AE_FMT_DOUBLEP; - case AUDIOENGINE_FMT_FLOATP: - return AE_FMT_FLOATP; - case AUDIOENGINE_FMT_MAX: - return AE_FMT_MAX; - case AUDIOENGINE_FMT_INVALID: - default: - return AE_FMT_INVALID; - } -} - -AudioEngineDataFormat Interface_AudioEngine::TranslateAEFormatToAddon(AEDataFormat format) -{ - switch (format) - { - case AE_FMT_U8: - return AUDIOENGINE_FMT_U8; - case AE_FMT_S16BE: - return AUDIOENGINE_FMT_S16BE; - case AE_FMT_S16LE: - return AUDIOENGINE_FMT_S16LE; - case AE_FMT_S16NE: - return AUDIOENGINE_FMT_S16NE; - case AE_FMT_S32BE: - return AUDIOENGINE_FMT_S32BE; - case AE_FMT_S32LE: - return AUDIOENGINE_FMT_S32LE; - case AE_FMT_S32NE: - return AUDIOENGINE_FMT_S32NE; - case AE_FMT_S24BE4: - return AUDIOENGINE_FMT_S24BE4; - case AE_FMT_S24LE4: - return AUDIOENGINE_FMT_S24LE4; - case AE_FMT_S24NE4: - return AUDIOENGINE_FMT_S24NE4; - case AE_FMT_S24NE4MSB: - return AUDIOENGINE_FMT_S24NE4MSB; - case AE_FMT_S24BE3: - return AUDIOENGINE_FMT_S24BE3; - case AE_FMT_S24LE3: - return AUDIOENGINE_FMT_S24LE3; - case AE_FMT_S24NE3: - return AUDIOENGINE_FMT_S24NE3; - case AE_FMT_DOUBLE: - return AUDIOENGINE_FMT_DOUBLE; - case AE_FMT_FLOAT: - return AUDIOENGINE_FMT_FLOAT; - case AE_FMT_RAW: - return AUDIOENGINE_FMT_RAW; - case AE_FMT_U8P: - return AUDIOENGINE_FMT_U8P; - case AE_FMT_S16NEP: - return AUDIOENGINE_FMT_S16NEP; - case AE_FMT_S32NEP: - return AUDIOENGINE_FMT_S32NEP; - case AE_FMT_S24NE4P: - return AUDIOENGINE_FMT_S24NE4P; - case AE_FMT_S24NE4MSBP: - return AUDIOENGINE_FMT_S24NE4MSBP; - case AE_FMT_S24NE3P: - return AUDIOENGINE_FMT_S24NE3P; - case AE_FMT_DOUBLEP: - return AUDIOENGINE_FMT_DOUBLEP; - case AE_FMT_FLOATP: - return AUDIOENGINE_FMT_FLOATP; - case AE_FMT_MAX: - return AUDIOENGINE_FMT_MAX; - case AE_FMT_INVALID: - default: - return AUDIOENGINE_FMT_INVALID; - } -} - -AEStreamHandle* Interface_AudioEngine::audioengine_make_stream(void* kodiBase, - AUDIO_ENGINE_FORMAT* streamFormat, - unsigned int options) -{ - if (!kodiBase || !streamFormat) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamFormat='{}')", - __FUNCTION__, kodiBase, static_cast(streamFormat)); - return nullptr; - } - - IAE* engine = CServiceBroker::GetActiveAE(); - if (!engine) - return nullptr; - - CAEChannelInfo layout; - for (unsigned int ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) - { - if (streamFormat->m_channels[ch] == AUDIOENGINE_CH_NULL) - break; - layout += TranslateAEChannelToKodi(streamFormat->m_channels[ch]); - } - - AEAudioFormat format; - format.m_channelLayout = layout; - format.m_dataFormat = TranslateAEFormatToKodi(streamFormat->m_dataFormat); - format.m_sampleRate = streamFormat->m_sampleRate; - - /* Translate addon options to kodi's options */ - int kodiOption = 0; - if (options & AUDIO_STREAM_FORCE_RESAMPLE) - kodiOption |= AESTREAM_FORCE_RESAMPLE; - if (options & AUDIO_STREAM_PAUSED) - kodiOption |= AESTREAM_PAUSED; - if (options & AUDIO_STREAM_AUTOSTART) - kodiOption |= AESTREAM_AUTOSTART; - - return engine->MakeStream(format, kodiOption).release(); -} - -void Interface_AudioEngine::audioengine_free_stream(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - IAE* engine = CServiceBroker::GetActiveAE(); - if (engine) - engine->FreeStream(static_cast(streamHandle), true); -} - -bool Interface_AudioEngine::get_current_sink_format(void* kodiBase, AUDIO_ENGINE_FORMAT* format) -{ - if (!kodiBase || !format) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', format='{}')", - __FUNCTION__, kodiBase, static_cast(format)); - return false; - } - - IAE* engine = CServiceBroker::GetActiveAE(); - if (!engine) - return false; - - AEAudioFormat sinkFormat; - if (!engine->GetCurrentSinkFormat(sinkFormat)) - { - CLog::Log(LOGERROR, "Interface_AudioEngine::{} - failed to get current sink format from AE!", - __FUNCTION__); - return false; - } - - format->m_dataFormat = TranslateAEFormatToAddon(sinkFormat.m_dataFormat); - format->m_sampleRate = sinkFormat.m_sampleRate; - format->m_frames = sinkFormat.m_frames; - format->m_frameSize = sinkFormat.m_frameSize; - format->m_channelCount = sinkFormat.m_channelLayout.Count(); - for (unsigned int ch = 0; ch < format->m_channelCount && ch < AUDIOENGINE_CH_MAX; ++ch) - { - format->m_channels[ch] = TranslateAEChannelToAddon(sinkFormat.m_channelLayout[ch]); - } - - return true; -} - -unsigned int Interface_AudioEngine::aestream_get_space(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return 0; - } - - return static_cast(streamHandle)->GetSpace(); -} - -unsigned int Interface_AudioEngine::aestream_add_data(void* kodiBase, - AEStreamHandle* streamHandle, - uint8_t* const* data, - unsigned int offset, - unsigned int frames, - double pts, - bool hasDownmix, - double centerMixLevel) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return 0; - } - - if (!CServiceBroker::GetActiveAE()) - return 0; - - IAEStream::ExtData extData; - extData.pts = pts; - extData.hasDownmix = hasDownmix; - extData.centerMixLevel = centerMixLevel; - return static_cast(streamHandle)->AddData(data, offset, frames, &extData); -} - -double Interface_AudioEngine::aestream_get_delay(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0; - - return static_cast(streamHandle)->GetDelay(); -} - -bool Interface_AudioEngine::aestream_is_buffering(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return false; - } - - if (!CServiceBroker::GetActiveAE()) - return false; - - return static_cast(streamHandle)->IsBuffering(); -} - -double Interface_AudioEngine::aestream_get_cache_time(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0; - - return static_cast(streamHandle)->GetCacheTime(); -} - -double Interface_AudioEngine::aestream_get_cache_total(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0; - - return static_cast(streamHandle)->GetCacheTotal(); -} - -void Interface_AudioEngine::aestream_pause(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->Pause(); -} - -void Interface_AudioEngine::aestream_resume(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - static_cast(streamHandle)->Resume(); -} - -void Interface_AudioEngine::aestream_drain(void* kodiBase, AEStreamHandle* streamHandle, bool wait) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->Drain(wait); -} - -bool Interface_AudioEngine::aestream_is_draining(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return false; - } - - if (!CServiceBroker::GetActiveAE()) - return false; - - return static_cast(streamHandle)->IsDraining(); -} - -bool Interface_AudioEngine::aestream_is_drained(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return false; - } - - if (!CServiceBroker::GetActiveAE()) - return false; - - return static_cast(streamHandle)->IsDrained(); -} - -void Interface_AudioEngine::aestream_flush(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->Flush(); -} - -float Interface_AudioEngine::aestream_get_volume(void* kodiBase, AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0f; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0f; - - return static_cast(streamHandle)->GetVolume(); -} - -void Interface_AudioEngine::aestream_set_volume(void* kodiBase, - AEStreamHandle* streamHandle, - float volume) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->SetVolume(volume); -} - -float Interface_AudioEngine::aestream_get_amplification(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0f; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0f; - - return static_cast(streamHandle)->GetAmplification(); -} - -void Interface_AudioEngine::aestream_set_amplification(void* kodiBase, - AEStreamHandle* streamHandle, - float amplify) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->SetAmplification(amplify); -} - -unsigned int Interface_AudioEngine::aestream_get_frame_size(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return 0; - } - - if (!CServiceBroker::GetActiveAE()) - return 0; - - return static_cast(streamHandle)->GetFrameSize(); -} - -unsigned int Interface_AudioEngine::aestream_get_channel_count(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return 0; - } - - if (!CServiceBroker::GetActiveAE()) - return 0; - - return static_cast(streamHandle)->GetChannelCount(); -} - -unsigned int Interface_AudioEngine::aestream_get_sample_rate(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return 0; - } - - if (!CServiceBroker::GetActiveAE()) - return 0; - - return static_cast(streamHandle)->GetSampleRate(); -} - -AudioEngineDataFormat Interface_AudioEngine::aestream_get_data_format(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return AUDIOENGINE_FMT_INVALID; - } - - if (!CServiceBroker::GetActiveAE()) - return AUDIOENGINE_FMT_INVALID; - - return TranslateAEFormatToAddon(static_cast(streamHandle)->GetDataFormat()); -} - -double Interface_AudioEngine::aestream_get_resample_ratio(void* kodiBase, - AEStreamHandle* streamHandle) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return -1.0; - } - - if (!CServiceBroker::GetActiveAE()) - return -1.0; - - return static_cast(streamHandle)->GetResampleRatio(); -} - -void Interface_AudioEngine::aestream_set_resample_ratio(void* kodiBase, - AEStreamHandle* streamHandle, - double ratio) -{ - if (!kodiBase || !streamHandle) - { - CLog::Log(LOGERROR, - "Interface_AudioEngine::{} - invalid stream data (kodiBase='{}', streamHandle='{}')", - __FUNCTION__, kodiBase, static_cast(streamHandle)); - return; - } - - if (!CServiceBroker::GetActiveAE()) - return; - - static_cast(streamHandle)->SetResampleRatio(ratio); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/AudioEngine.h b/xbmc/addons/interfaces/AudioEngine.h deleted file mode 100644 index 3700931049f51..0000000000000 --- a/xbmc/addons/interfaces/AudioEngine.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/AudioEngine.h" -#include "cores/AudioEngine/Utils/AEChannelData.h" - -extern "C" -{ -namespace ADDON -{ - -struct Interface_AudioEngine -{ - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /** - * @brief Translation functions to separate Kodi and addons - * - * This thought to make it more safe for cases as something changed inside - * Kodi, addons overseen and breaks API, further to have on addons a better - * documentation about this parts. - */ - //@{ - static AEChannel TranslateAEChannelToKodi(AudioEngineChannel channel); - static AudioEngineChannel TranslateAEChannelToAddon(AEChannel channel); - static AEDataFormat TranslateAEFormatToKodi(AudioEngineDataFormat format); - static AudioEngineDataFormat TranslateAEFormatToAddon(AEDataFormat format); - //@} - - /** - * Creates and returns a new handle to an IAEStream in the format specified, this function should never fail - * @param[in] streamFormat Format to use for stream - * @param[in] options A bit field of stream options (see: enum AEStreamOptions) - * @return a new Handle to an IAEStream that will accept data in the requested format - */ - static AEStreamHandle* audioengine_make_stream(void* kodiBase, - AUDIO_ENGINE_FORMAT* streamFormat, - unsigned int options); - - /** - * This method will remove the specified stream from the engine. - * For OSX/IOS this is essential to reconfigure the audio output. - * @param[in] streamHandle The stream to be altered - */ - static void audioengine_free_stream(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Get the current sink data format - * - * @param[in] sinkFormat sink data format. For more details see AUDIO_ENGINE_FORMAT. - * @return Returns true on success, else false. - */ - static bool get_current_sink_format(void* kodiBase, AUDIO_ENGINE_FORMAT* sinkFormat); - - /** - * Returns the amount of space available in the stream - * @return The number of bytes AddData will consume - */ - static unsigned int aestream_get_space(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Add planar or interleaved PCM data to the stream - * @param[in] data array of pointers to the planes - * @param[in] offset to frame in frames - * @param[in] frames number of frames - * @return The number of frames consumed - */ - static unsigned int aestream_add_data(void* kodiBase, - AEStreamHandle* streamHandle, - uint8_t* const* data, - unsigned int offset, - unsigned int frames, - double pts, - bool hasDownmix, - double centerMixLevel); - - /** - * Returns the time in seconds that it will take - * for the next added packet to be heard from the speakers. - * @return seconds - */ - static double aestream_get_delay(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns if the stream is buffering - * @return True if the stream is buffering - */ - static bool aestream_is_buffering(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns the time in seconds that it will take - * to underrun the cache if no sample is added. - * @return seconds - */ - static double aestream_get_cache_time(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns the total time in seconds of the cache - * @return seconds - */ - static double aestream_get_cache_total(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Pauses the stream playback - */ - static void aestream_pause(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Resumes the stream after pausing - */ - static void aestream_resume(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Start draining the stream - * @note Once called AddData will not consume more data. - */ - static void aestream_drain(void* kodiBase, AEStreamHandle* streamHandle, bool wait); - - /** - * Returns true if the is stream draining - */ - static bool aestream_is_draining(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns true if the is stream has finished draining - */ - static bool aestream_is_drained(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Flush all buffers dropping the audio data - */ - static void aestream_flush(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Return the stream's current volume level - * @return The volume level between 0.0 and 1.0 - */ - static float aestream_get_volume(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Set the stream's volume level - * @param volume The new volume level between 0.0 and 1.0 - */ - static void aestream_set_volume(void* kodiBase, AEStreamHandle* streamHandle, float volume); - - /** - * Gets the stream's volume amplification in linear units. - * @return The volume amplification factor between 1.0 and 1000.0 - */ - static float aestream_get_amplification(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Sets the stream's volume amplification in linear units. - * @param amplify The volume amplification factor between 1.0 and 1000.0 - */ - static void aestream_set_amplification(void* kodiBase, - AEStreamHandle* streamHandle, - float amplify); - - /** - * Returns the size of one audio frame in bytes (channelCount * resolution) - * @return The size in bytes of one frame - */ - static unsigned int aestream_get_frame_size(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns the number of channels the stream is configured to accept - * @return The channel count - */ - static unsigned int aestream_get_channel_count(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Returns the stream's sample rate, if the stream is using a dynamic sample - * rate, this value will NOT reflect any changes made by calls to SetResampleRatio() - * @return The stream's sample rate (eg, 48000) - */ - static unsigned int aestream_get_sample_rate(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Return the data format the stream has been configured with - * @return The stream's data format (eg, AE_FMT_S16LE) - */ - static AudioEngineDataFormat aestream_get_data_format(void* kodiBase, - AEStreamHandle* streamHandle); - - /** - * Return the resample ratio - * @note This will return an undefined value if the stream is not resampling - * @return the current resample ratio or undefined if the stream is not resampling - */ - static double aestream_get_resample_ratio(void* kodiBase, AEStreamHandle* streamHandle); - - /** - * Sets the resample ratio - * @note This function may return false if the stream is not resampling, if you wish to use this be sure to set the AESTREAM_FORCE_RESAMPLE option - * @param[in] ratio the new sample rate ratio, calculated by ((double)desiredRate / (double)GetSampleRate()) - */ - static void aestream_set_resample_ratio(void* kodiBase, - AEStreamHandle* streamHandle, - double ratio); -}; - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/CMakeLists.txt b/xbmc/addons/interfaces/CMakeLists.txt deleted file mode 100644 index 8e58bb6cf9698..0000000000000 --- a/xbmc/addons/interfaces/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -set(SOURCES AddonBase.cpp - AudioEngine.cpp - General.cpp - Filesystem.cpp - Network.cpp) - -set(HEADERS AddonBase.h - AudioEngine.h - General.h - Filesystem.h - Network.h) - -if(CORE_SYSTEM_NAME STREQUAL android) - list(APPEND SOURCES platform/android/System.cpp) - list(APPEND HEADERS platform/android/System.h) -endif() - -core_add_library(addons_interfaces) diff --git a/xbmc/addons/interfaces/Filesystem.cpp b/xbmc/addons/interfaces/Filesystem.cpp deleted file mode 100644 index 80dee33016cdf..0000000000000 --- a/xbmc/addons/interfaces/Filesystem.cpp +++ /dev/null @@ -1,1179 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Filesystem.h" - -#include "Util.h" -#include "addons/binary-addons/AddonDll.h" -#include "filesystem/CurlFile.h" -#include "filesystem/Directory.h" -#include "filesystem/File.h" -#include "filesystem/SpecialProtocol.h" -#include "platform/Filesystem.h" -#include "utils/Crc32.h" -#include "utils/HttpHeader.h" -#include "utils/StringUtils.h" -#include "utils/URIUtils.h" -#include "utils/log.h" - -#include - -#if defined(TARGET_WINDOWS) -#ifndef S_IFLNK -#define S_IFLNK 0120000 -#endif -#ifndef S_ISBLK -#define S_ISBLK(m) (0) -#endif -#ifndef S_ISSOCK -#define S_ISSOCK(m) (0) -#endif -#ifndef S_ISLNK -#define S_ISLNK(m) ((m & S_IFLNK) != 0) -#endif -#ifndef S_ISCHR -#define S_ISCHR(m) ((m & _S_IFCHR) != 0) -#endif -#ifndef S_ISDIR -#define S_ISDIR(m) ((m & _S_IFDIR) != 0) -#endif -#ifndef S_ISFIFO -#define S_ISFIFO(m) ((m & _S_IFIFO) != 0) -#endif -#ifndef S_ISREG -#define S_ISREG(m) ((m & _S_IFREG) != 0) -#endif -#endif - -using namespace kodi; // addon-dev-kit namespace -using namespace XFILE; - -extern "C" -{ -namespace ADDON -{ - -void Interface_Filesystem::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_filesystem = new AddonToKodiFuncTable_kodi_filesystem(); - - addonInterface->toKodi->kodi_filesystem->can_open_directory = can_open_directory; - addonInterface->toKodi->kodi_filesystem->create_directory = create_directory; - addonInterface->toKodi->kodi_filesystem->directory_exists = directory_exists; - addonInterface->toKodi->kodi_filesystem->remove_directory = remove_directory; - addonInterface->toKodi->kodi_filesystem->remove_directory_recursive = remove_directory_recursive; - addonInterface->toKodi->kodi_filesystem->get_directory = get_directory; - addonInterface->toKodi->kodi_filesystem->free_directory = free_directory; - - addonInterface->toKodi->kodi_filesystem->file_exists = file_exists; - addonInterface->toKodi->kodi_filesystem->stat_file = stat_file; - addonInterface->toKodi->kodi_filesystem->delete_file = delete_file; - addonInterface->toKodi->kodi_filesystem->rename_file = rename_file; - addonInterface->toKodi->kodi_filesystem->copy_file = copy_file; - addonInterface->toKodi->kodi_filesystem->get_file_md5 = get_file_md5; - addonInterface->toKodi->kodi_filesystem->get_cache_thumb_name = get_cache_thumb_name; - addonInterface->toKodi->kodi_filesystem->make_legal_filename = make_legal_filename; - addonInterface->toKodi->kodi_filesystem->make_legal_path = make_legal_path; - addonInterface->toKodi->kodi_filesystem->translate_special_protocol = translate_special_protocol; - addonInterface->toKodi->kodi_filesystem->get_disk_space = get_disk_space; - addonInterface->toKodi->kodi_filesystem->is_internet_stream = is_internet_stream; - addonInterface->toKodi->kodi_filesystem->is_on_lan = is_on_lan; - addonInterface->toKodi->kodi_filesystem->is_remote = is_remote; - addonInterface->toKodi->kodi_filesystem->is_local = is_local; - addonInterface->toKodi->kodi_filesystem->is_url = is_url; - addonInterface->toKodi->kodi_filesystem->get_http_header = get_http_header; - addonInterface->toKodi->kodi_filesystem->get_mime_type = get_mime_type; - addonInterface->toKodi->kodi_filesystem->get_content_type = get_content_type; - addonInterface->toKodi->kodi_filesystem->get_cookies = get_cookies; - - addonInterface->toKodi->kodi_filesystem->http_header_create = http_header_create; - addonInterface->toKodi->kodi_filesystem->http_header_free = http_header_free; - - addonInterface->toKodi->kodi_filesystem->open_file = open_file; - addonInterface->toKodi->kodi_filesystem->open_file_for_write = open_file_for_write; - addonInterface->toKodi->kodi_filesystem->read_file = read_file; - addonInterface->toKodi->kodi_filesystem->read_file_string = read_file_string; - addonInterface->toKodi->kodi_filesystem->write_file = write_file; - addonInterface->toKodi->kodi_filesystem->flush_file = flush_file; - addonInterface->toKodi->kodi_filesystem->seek_file = seek_file; - addonInterface->toKodi->kodi_filesystem->truncate_file = truncate_file; - addonInterface->toKodi->kodi_filesystem->get_file_position = get_file_position; - addonInterface->toKodi->kodi_filesystem->get_file_length = get_file_length; - addonInterface->toKodi->kodi_filesystem->get_file_download_speed = get_file_download_speed; - addonInterface->toKodi->kodi_filesystem->close_file = close_file; - addonInterface->toKodi->kodi_filesystem->get_file_chunk_size = get_file_chunk_size; - addonInterface->toKodi->kodi_filesystem->io_control_get_seek_possible = - io_control_get_seek_possible; - addonInterface->toKodi->kodi_filesystem->io_control_get_cache_status = - io_control_get_cache_status; - addonInterface->toKodi->kodi_filesystem->io_control_set_cache_rate = io_control_set_cache_rate; - addonInterface->toKodi->kodi_filesystem->io_control_set_retry = io_control_set_retry; - addonInterface->toKodi->kodi_filesystem->get_property_values = get_property_values; - - addonInterface->toKodi->kodi_filesystem->curl_create = curl_create; - addonInterface->toKodi->kodi_filesystem->curl_add_option = curl_add_option; - addonInterface->toKodi->kodi_filesystem->curl_open = curl_open; -} - -void Interface_Filesystem::DeInit(AddonGlobalInterface* addonInterface) -{ - if (addonInterface->toKodi) /* <-- Safe check, needed so long old addon way is present */ - { - delete addonInterface->toKodi->kodi_filesystem; - addonInterface->toKodi->kodi_filesystem = nullptr; - } -} - -unsigned int Interface_Filesystem::TranslateFileReadBitsToKodi(unsigned int addonFlags) -{ - unsigned int kodiFlags = 0; - - if (addonFlags & ADDON_READ_TRUNCATED) - kodiFlags |= READ_TRUNCATED; - if (addonFlags & ADDON_READ_CHUNKED) - kodiFlags |= READ_CHUNKED; - if (addonFlags & ADDON_READ_CACHED) - kodiFlags |= READ_CACHED; - if (addonFlags & ADDON_READ_NO_CACHE) - kodiFlags |= READ_NO_CACHE; - if (addonFlags & ADDON_READ_BITRATE) - kodiFlags |= READ_BITRATE; - if (addonFlags & ADDON_READ_MULTI_STREAM) - kodiFlags |= READ_MULTI_STREAM; - if (addonFlags & ADDON_READ_AUDIO_VIDEO) - kodiFlags |= READ_AUDIO_VIDEO; - if (addonFlags & ADDON_READ_AFTER_WRITE) - kodiFlags |= READ_AFTER_WRITE; - if (addonFlags & READ_REOPEN) - kodiFlags |= READ_REOPEN; - - return kodiFlags; -} - -bool Interface_Filesystem::can_open_directory(void* kodiBase, const char* url) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', url='{}')", - __FUNCTION__, kodiBase, static_cast(url)); - return false; - } - - CFileItemList items; - return CDirectory::GetDirectory(url, items, "", DIR_FLAG_DEFAULTS); -} - -bool Interface_Filesystem::create_directory(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{}')", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return CDirectory::Create(path); -} - -bool Interface_Filesystem::directory_exists(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{}')", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return CDirectory::Exists(path); -} - -bool Interface_Filesystem::remove_directory(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{}')", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - // Empty directory - CFileItemList fileItems; - CDirectory::GetDirectory(path, fileItems, "", DIR_FLAG_DEFAULTS); - for (int i = 0; i < fileItems.Size(); ++i) - CFile::Delete(fileItems.Get(i)->GetPath()); - - return CDirectory::Remove(path); -} - -bool Interface_Filesystem::remove_directory_recursive(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{}')", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return CDirectory::RemoveRecursive(path); -} - -static void CFileItemListToVFSDirEntries(VFSDirEntry* entries, const CFileItemList& items) -{ - for (unsigned int i = 0; i < static_cast(items.Size()); ++i) - { - entries[i].label = strdup(items[i]->GetLabel().c_str()); - entries[i].path = strdup(items[i]->GetPath().c_str()); - entries[i].size = items[i]->m_dwSize; - entries[i].folder = items[i]->m_bIsFolder; - items[i]->m_dateTime.GetAsTime(entries[i].date_time); - } -} - -bool Interface_Filesystem::get_directory(void* kodiBase, - const char* path, - const char* mask, - struct VFSDirEntry** items, - unsigned int* num_items) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr || mask == nullptr || items == nullptr || - num_items == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', path='{}', mask='{}', " - "items='{}', num_items='{}'", - __FUNCTION__, kodiBase, static_cast(path), - static_cast(mask), static_cast(items), - static_cast(num_items)); - return false; - } - - CFileItemList fileItems; - if (!CDirectory::GetDirectory(path, fileItems, mask, DIR_FLAG_NO_FILE_DIRS)) - return false; - - if (fileItems.Size() > 0) - { - *num_items = static_cast(fileItems.Size()); - *items = new VFSDirEntry[fileItems.Size()]; - CFileItemListToVFSDirEntries(*items, fileItems); - } - else - { - *num_items = 0; - *items = nullptr; - } - - return true; -} - -void Interface_Filesystem::free_directory(void* kodiBase, - struct VFSDirEntry* items, - unsigned int num_items) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || items == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', items='{}')", - __FUNCTION__, kodiBase, static_cast(items)); - return; - } - - for (unsigned int i = 0; i < num_items; ++i) - { - free(items[i].label); - free(items[i].path); - } - delete[] items; -} - -//------------------------------------------------------------------------------ - -bool Interface_Filesystem::file_exists(void* kodiBase, const char* filename, bool useCache) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}')", - __FUNCTION__, kodiBase, static_cast(filename)); - return false; - } - - return CFile::Exists(filename, useCache); -} - -bool Interface_Filesystem::stat_file(void* kodiBase, - const char* filename, - struct STAT_STRUCTURE* buffer) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr || buffer == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}', buffer='{}')", - __FUNCTION__, kodiBase, static_cast(filename), - static_cast(buffer)); - return false; - } - - struct __stat64 statBuffer; - if (CFile::Stat(filename, &statBuffer) != 0) - return false; - - buffer->deviceId = statBuffer.st_dev; - buffer->fileSerialNumber = statBuffer.st_ino; - buffer->size = statBuffer.st_size; - buffer->accessTime = statBuffer.st_atime; - buffer->modificationTime = statBuffer.st_mtime; - buffer->statusTime = statBuffer.st_ctime; - buffer->isDirectory = S_ISDIR(statBuffer.st_mode); - buffer->isSymLink = S_ISLNK(statBuffer.st_mode); - buffer->isBlock = S_ISBLK(statBuffer.st_mode); - buffer->isCharacter = S_ISCHR(statBuffer.st_mode); - buffer->isFifo = S_ISFIFO(statBuffer.st_mode); - buffer->isRegular = S_ISREG(statBuffer.st_mode); - buffer->isSocket = S_ISSOCK(statBuffer.st_mode); - - return true; -} - -bool Interface_Filesystem::delete_file(void* kodiBase, const char* filename) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}')", - __FUNCTION__, kodiBase, static_cast(filename)); - return false; - } - - return CFile::Delete(filename); -} - -bool Interface_Filesystem::rename_file(void* kodiBase, - const char* filename, - const char* newFileName) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr || newFileName == nullptr) - { - CLog::Log( - LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}', newFileName='{}')", - __FUNCTION__, kodiBase, static_cast(filename), - static_cast(newFileName)); - return false; - } - - return CFile::Rename(filename, newFileName); -} - -bool Interface_Filesystem::copy_file(void* kodiBase, const char* filename, const char* dest) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr || dest == nullptr) - { - CLog::Log( - LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}', dest='{}')", - __FUNCTION__, kodiBase, static_cast(filename), static_cast(dest)); - return false; - } - - return CFile::Copy(filename, dest); -} - -char* Interface_Filesystem::get_file_md5(void* kodiBase, const char* filename) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{})", - __FUNCTION__, kodiBase, static_cast(filename)); - return nullptr; - } - - std::string string = CUtil::GetFileDigest(filename, KODI::UTILITY::CDigest::Type::MD5); - char* buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::get_cache_thumb_name(void* kodiBase, const char* filename) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{})", - __FUNCTION__, kodiBase, static_cast(filename)); - return nullptr; - } - - const auto crc = Crc32::ComputeFromLowerCase(filename); - const auto hex = StringUtils::Format("{:08x}.tbn", crc); - char* buffer = strdup(hex.c_str()); - return buffer; -} - -char* Interface_Filesystem::make_legal_filename(void* kodiBase, const char* filename) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{})", - __FUNCTION__, kodiBase, static_cast(filename)); - return nullptr; - } - - std::string string = CUtil::MakeLegalFileName(filename); - char* buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::make_legal_path(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return nullptr; - } - - std::string string = CUtil::MakeLegalPath(path); - char* buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::translate_special_protocol(void* kodiBase, const char* strSource) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || strSource == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', strSource='{})", - __FUNCTION__, kodiBase, static_cast(strSource)); - return nullptr; - } - - return strdup(CSpecialProtocol::TranslatePath(strSource).c_str()); -} - -bool Interface_Filesystem::get_disk_space( - void* kodiBase, const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available) -{ - using namespace KODI::PLATFORM::FILESYSTEM; - - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr || capacity == nullptr || free == nullptr || - available == nullptr) - { - CLog::Log( - LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', path='{}, capacity='{}, free='{}, " - "available='{})", - __FUNCTION__, kodiBase, static_cast(path), static_cast(capacity), - static_cast(free), static_cast(available)); - return false; - } - - std::error_code ec; - auto freeSpace = space(CSpecialProtocol::TranslatePath(path), ec); - if (ec.value() != 0) - return false; - - *capacity = freeSpace.capacity; - *free = freeSpace.free; - *available = freeSpace.available; - return true; -} - -bool Interface_Filesystem::is_internet_stream(void* kodiBase, const char* path, bool strictCheck) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return URIUtils::IsInternetStream(path, strictCheck); -} - -bool Interface_Filesystem::is_on_lan(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return URIUtils::IsOnLAN(path); -} - -bool Interface_Filesystem::is_remote(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return URIUtils::IsRemote(path); -} - -bool Interface_Filesystem::is_local(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return CURL(path).IsLocal(); -} - -bool Interface_Filesystem::is_url(void* kodiBase, const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || path == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', path='{})", - __FUNCTION__, kodiBase, static_cast(path)); - return false; - } - - return URIUtils::IsURL(path); -} - -bool Interface_Filesystem::get_mime_type(void* kodiBase, - const char* url, - char** content, - const char* useragent) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr || content == nullptr || useragent == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', url='{}', content='{}', " - "useragent='{}')", - __FUNCTION__, kodiBase, static_cast(url), - static_cast(content), static_cast(useragent)); - return false; - } - - std::string kodiContent; - bool ret = XFILE::CCurlFile::GetMimeType(CURL(url), kodiContent, useragent); - if (ret && !kodiContent.empty()) - { - *content = strdup(kodiContent.c_str()); - } - return ret; -} - -bool Interface_Filesystem::get_content_type(void* kodiBase, - const char* url, - char** content, - const char* useragent) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr || content == nullptr || useragent == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', url='{}', content='{}', " - "useragent='{}')", - __FUNCTION__, kodiBase, static_cast(url), - static_cast(content), static_cast(useragent)); - return false; - } - - std::string kodiContent; - bool ret = XFILE::CCurlFile::GetContentType(CURL(url), kodiContent, useragent); - if (ret && !kodiContent.empty()) - { - *content = strdup(kodiContent.c_str()); - } - return ret; -} - -bool Interface_Filesystem::get_cookies(void* kodiBase, const char* url, char** cookies) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr || cookies == nullptr) - { - CLog::Log( - LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', url='{}', cookies='{}')", - __FUNCTION__, kodiBase, static_cast(url), static_cast(cookies)); - return false; - } - - std::string kodiCookies; - bool ret = XFILE::CCurlFile::GetCookies(CURL(url), kodiCookies); - if (ret && !kodiCookies.empty()) - { - *cookies = strdup(kodiCookies.c_str()); - } - return ret; -} - -bool Interface_Filesystem::get_http_header(void* kodiBase, - const char* url, - struct KODI_HTTP_HEADER* headers) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr || headers == nullptr || headers->handle == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data pointer given", __func__); - return false; - } - - CHttpHeader* httpHeader = static_cast(headers->handle); - return XFILE::CCurlFile::GetHttpHeader(CURL(url), *httpHeader); -} - -//------------------------------------------------------------------------------ - -bool Interface_Filesystem::http_header_create(void* kodiBase, struct KODI_HTTP_HEADER* headers) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || headers == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', headers='{}')", - __FUNCTION__, kodiBase, static_cast(headers)); - return false; - } - - headers->handle = new CHttpHeader; - headers->get_value = http_header_get_value; - headers->get_values = http_header_get_values; - headers->get_header = http_header_get_header; - headers->get_mime_type = http_header_get_mime_type; - headers->get_charset = http_header_get_charset; - headers->get_proto_line = http_header_get_proto_line; - - return true; -} - -void Interface_Filesystem::http_header_free(void* kodiBase, struct KODI_HTTP_HEADER* headers) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || headers == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', headers='{}')", - __FUNCTION__, kodiBase, static_cast(headers)); - return; - } - - delete static_cast(headers->handle); - headers->handle = nullptr; -} - -char* Interface_Filesystem::http_header_get_value(void* kodiBase, void* handle, const char* param) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr || param == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}', param='{}')", - __FUNCTION__, kodiBase, handle, static_cast(param)); - return nullptr; - } - - std::string string = static_cast(handle)->GetValue(param); - - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -char** Interface_Filesystem::http_header_get_values(void* kodiBase, - void* handle, - const char* param, - int* length) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr || param == nullptr || length == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}', param='{}', " - "length='{}')", - __FUNCTION__, kodiBase, handle, static_cast(param), - static_cast(length)); - return nullptr; - } - - - std::vector values = static_cast(handle)->GetValues(param); - *length = values.size(); - char** ret = static_cast(malloc(sizeof(char*) * values.size())); - for (int i = 0; i < *length; ++i) - { - ret[i] = strdup(values[i].c_str()); - } - return ret; -} - -char* Interface_Filesystem::http_header_get_header(void* kodiBase, void* handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}')", - __FUNCTION__, kodiBase, handle); - return nullptr; - } - - std::string string = static_cast(handle)->GetHeader(); - - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::http_header_get_mime_type(void* kodiBase, void* handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}')", - __FUNCTION__, kodiBase, handle); - return nullptr; - } - - std::string string = static_cast(handle)->GetMimeType(); - - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::http_header_get_charset(void* kodiBase, void* handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}')", - __FUNCTION__, kodiBase, handle); - return nullptr; - } - - std::string string = static_cast(handle)->GetCharset(); - - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Filesystem::http_header_get_proto_line(void* kodiBase, void* handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || handle == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', handle='{}')", - __FUNCTION__, kodiBase, handle); - return nullptr; - } - - std::string string = static_cast(handle)->GetProtoLine(); - - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -//------------------------------------------------------------------------------ - -void* Interface_Filesystem::open_file(void* kodiBase, const char* filename, unsigned int flags) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}')", - __FUNCTION__, kodiBase, static_cast(filename)); - return nullptr; - } - - CFile* file = new CFile; - if (file->Open(filename, TranslateFileReadBitsToKodi(flags))) - return static_cast(file); - - delete file; - return nullptr; -} - -void* Interface_Filesystem::open_file_for_write(void* kodiBase, - const char* filename, - bool overwrite) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || filename == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', filename='{}')", - __FUNCTION__, kodiBase, static_cast(filename)); - return nullptr; - } - - CFile* file = new CFile; - if (file->OpenForWrite(filename, overwrite)) - return static_cast(file); - - delete file; - return nullptr; -} - -ssize_t Interface_Filesystem::read_file(void* kodiBase, void* file, void* ptr, size_t size) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || ptr == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}', ptr='{}')", - __FUNCTION__, kodiBase, file, ptr); - return -1; - } - - return static_cast(file)->Read(ptr, size); -} - -bool Interface_Filesystem::read_file_string(void* kodiBase, - void* file, - char* szLine, - int lineLength) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || szLine == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', file='{}', szLine=='{}')", - __FUNCTION__, kodiBase, file, static_cast(szLine)); - return false; - } - - return static_cast(file)->ReadString(szLine, lineLength); -} - -ssize_t Interface_Filesystem::write_file(void* kodiBase, void* file, const void* ptr, size_t size) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || ptr == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}', ptr='{}')", - __FUNCTION__, kodiBase, file, ptr); - return -1; - } - - return static_cast(file)->Write(ptr, size); -} - -void Interface_Filesystem::flush_file(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return; - } - - static_cast(file)->Flush(); -} - -int64_t Interface_Filesystem::seek_file(void* kodiBase, void* file, int64_t position, int whence) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return -1; - } - - return static_cast(file)->Seek(position, whence); -} - -int Interface_Filesystem::truncate_file(void* kodiBase, void* file, int64_t size) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return -1; - } - - return static_cast(file)->Truncate(size); -} - -int64_t Interface_Filesystem::get_file_position(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return -1; - } - - return static_cast(file)->GetPosition(); -} - -int64_t Interface_Filesystem::get_file_length(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return -1; - } - - return static_cast(file)->GetLength(); -} - -double Interface_Filesystem::get_file_download_speed(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return 0.0; - } - - return static_cast(file)->GetDownloadSpeed(); -} - -void Interface_Filesystem::close_file(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return; - } - - static_cast(file)->Close(); - delete static_cast(file); -} - -int Interface_Filesystem::get_file_chunk_size(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_VFS::{} - invalid data (addon='{}', file='{}')", __FUNCTION__, - kodiBase, file); - return -1; - } - - return static_cast(file)->GetChunkSize(); -} - -bool Interface_Filesystem::io_control_get_seek_possible(void* kodiBase, void* file) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_VFS::{} - invalid data (addon='{}', file='{}')", __FUNCTION__, - kodiBase, file); - return false; - } - - return static_cast(file)->IoControl(EIoControl::IOCTRL_SEEK_POSSIBLE, nullptr) != 0 - ? true - : false; -} - -bool Interface_Filesystem::io_control_get_cache_status(void* kodiBase, - void* file, - struct VFS_CACHE_STATUS_DATA* status) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || status == nullptr) - { - CLog::Log(LOGERROR, "Interface_VFS::{} - invalid data (addon='{}', file='{}, status='{}')", - __FUNCTION__, kodiBase, file, static_cast(status)); - return false; - } - - SCacheStatus data = {}; - int ret = static_cast(file)->IoControl(EIoControl::IOCTRL_CACHE_STATUS, &data); - if (ret >= 0) - { - status->forward = data.forward; - status->maxrate = data.maxrate; - status->currate = data.currate; - status->lowrate = data.lowrate; - return true; - } - return false; -} - -bool Interface_Filesystem::io_control_set_cache_rate(void* kodiBase, void* file, uint32_t rate) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_VFS::{} - invalid data (addon='{}', file='{}')", __FUNCTION__, - kodiBase, file); - return false; - } - - return static_cast(file)->IoControl(EIoControl::IOCTRL_CACHE_SETRATE, &rate) >= 0 ? true - : false; -} - -bool Interface_Filesystem::io_control_set_retry(void* kodiBase, void* file, bool retry) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_VFS::{} - invalid data (addon='{}', file='{}')", __FUNCTION__, - kodiBase, file); - return false; - } - - return static_cast(file)->IoControl(EIoControl::IOCTRL_SET_RETRY, &retry) >= 0 ? true - : false; -} - -char** Interface_Filesystem::get_property_values( - void* kodiBase, void* file, int type, const char* name, int* numValues) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || name == nullptr || numValues == nullptr) - { - CLog::Log(LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', file='{}', name='{}', " - "numValues='{}')", - __FUNCTION__, kodiBase, file, static_cast(name), - static_cast(numValues)); - return nullptr; - } - - XFILE::FileProperty internalType; - switch (type) - { - case ADDON_FILE_PROPERTY_RESPONSE_PROTOCOL: - internalType = XFILE::FILE_PROPERTY_RESPONSE_PROTOCOL; - break; - case ADDON_FILE_PROPERTY_RESPONSE_HEADER: - internalType = XFILE::FILE_PROPERTY_RESPONSE_HEADER; - break; - case ADDON_FILE_PROPERTY_CONTENT_TYPE: - internalType = XFILE::FILE_PROPERTY_CONTENT_TYPE; - break; - case ADDON_FILE_PROPERTY_CONTENT_CHARSET: - internalType = XFILE::FILE_PROPERTY_CONTENT_CHARSET; - break; - case ADDON_FILE_PROPERTY_MIME_TYPE: - internalType = XFILE::FILE_PROPERTY_MIME_TYPE; - break; - case ADDON_FILE_PROPERTY_EFFECTIVE_URL: - internalType = XFILE::FILE_PROPERTY_EFFECTIVE_URL; - break; - default: - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return nullptr; - }; - std::vector values = - static_cast(file)->GetPropertyValues(internalType, name); - *numValues = values.size(); - char** ret = static_cast(malloc(sizeof(char*) * values.size())); - for (int i = 0; i < *numValues; ++i) - { - ret[i] = strdup(values[i].c_str()); - } - return ret; -} - -void* Interface_Filesystem::curl_create(void* kodiBase, const char* url) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', url='{}')", - __FUNCTION__, kodiBase, static_cast(url)); - return nullptr; - } - - CFile* file = new CFile; - if (file->CURLCreate(url)) - return static_cast(file); - - delete file; - return nullptr; -} - -bool Interface_Filesystem::curl_add_option( - void* kodiBase, void* file, int type, const char* name, const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr || name == nullptr || value == nullptr) - { - CLog::Log( - LOGERROR, - "Interface_Filesystem::{} - invalid data (addon='{}', file='{}', name='{}', value='{}')", - __FUNCTION__, kodiBase, file, static_cast(name), - static_cast(value)); - return false; - } - - XFILE::CURLOPTIONTYPE internalType; - switch (type) - { - case ADDON_CURL_OPTION_OPTION: - internalType = XFILE::CURL_OPTION_OPTION; - break; - case ADDON_CURL_OPTION_PROTOCOL: - internalType = XFILE::CURL_OPTION_PROTOCOL; - break; - case ADDON_CURL_OPTION_CREDENTIALS: - internalType = XFILE::CURL_OPTION_CREDENTIALS; - break; - case ADDON_CURL_OPTION_HEADER: - internalType = XFILE::CURL_OPTION_HEADER; - break; - default: - throw std::logic_error("Interface_Filesystem::curl_add_option - invalid curl option type"); - return false; - }; - - return static_cast(file)->CURLAddOption(internalType, name, value); -} - -bool Interface_Filesystem::curl_open(void* kodiBase, void* file, unsigned int flags) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || file == nullptr) - { - CLog::Log(LOGERROR, "Interface_Filesystem::{} - invalid data (addon='{}', file='{}')", - __FUNCTION__, kodiBase, file); - return false; - } - - return static_cast(file)->CURLOpen(TranslateFileReadBitsToKodi(flags)); -} - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/Filesystem.h b/xbmc/addons/interfaces/Filesystem.h deleted file mode 100644 index 55e90ce95febd..0000000000000 --- a/xbmc/addons/interfaces/Filesystem.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/Filesystem.h" - -extern "C" -{ - -struct VFSDirEntry; -struct AddonGlobalInterface; - -namespace ADDON -{ - -struct Interface_Filesystem -{ - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - static unsigned int TranslateFileReadBitsToKodi(unsigned int addonFlags); - - /*! - * @brief callback functions from add-on to kodi - * - * @note For add of new functions use the "_" style to identify direct a - * add-on callback function. Everything with CamelCase is only for the - * usage in Kodi only. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - ///@{ - static bool can_open_directory(void* kodiBase, const char* url); - static bool create_directory(void* kodiBase, const char* path); - static bool directory_exists(void* kodiBase, const char* path); - static bool remove_directory(void* kodiBase, const char* path); - static bool remove_directory_recursive(void* kodiBase, const char* path); - static bool get_directory(void* kodiBase, - const char* path, - const char* mask, - struct VFSDirEntry** items, - unsigned int* num_items); - static void free_directory(void* kodiBase, struct VFSDirEntry* items, unsigned int num_items); - - static bool file_exists(void* kodiBase, const char* filename, bool useCache); - static bool stat_file(void* kodiBase, const char* filename, struct STAT_STRUCTURE* buffer); - static bool delete_file(void* kodiBase, const char* filename); - static bool rename_file(void* kodiBase, const char* filename, const char* newFileName); - static bool copy_file(void* kodiBase, const char* filename, const char* dest); - static char* get_file_md5(void* kodiBase, const char* filename); - static char* get_cache_thumb_name(void* kodiBase, const char* filename); - static char* make_legal_filename(void* kodiBase, const char* filename); - static char* make_legal_path(void* kodiBase, const char* path); - static char* translate_special_protocol(void* kodiBase, const char* strSource); - static bool get_disk_space( - void* kodiBase, const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available); - static bool is_internet_stream(void* kodiBase, const char* path, bool strictCheck); - static bool is_on_lan(void* kodiBase, const char* path); - static bool is_remote(void* kodiBase, const char* path); - static bool is_local(void* kodiBase, const char* path); - static bool is_url(void* kodiBase, const char* path); - - static bool get_http_header(void* kodiBase, const char* url, struct KODI_HTTP_HEADER* headers); - static bool get_mime_type(void* kodiBase, const char* url, char** content, const char* useragent); - static bool get_content_type(void* kodiBase, - const char* url, - char** content, - const char* useragent); - static bool get_cookies(void* kodiBase, const char* url, char** cookies); - - /*! - * @brief Callback functions addon class kodi::vfs::CFile - */ - ///@{ - static bool http_header_create(void* kodiBase, struct KODI_HTTP_HEADER* headers); - static void http_header_free(void* kodiBase, struct KODI_HTTP_HEADER* headers); - - static char* http_header_get_value(void* kodiBase, void* handle, const char* param); - static char** http_header_get_values(void* kodiBase, - void* handle, - const char* param, - int* length); - static char* http_header_get_header(void* kodiBase, void* handle); - static char* http_header_get_mime_type(void* kodiBase, void* handle); - static char* http_header_get_charset(void* kodiBase, void* handle); - static char* http_header_get_proto_line(void* kodiBase, void* handle); - ///@} - - /*! - * @brief Callback functions addon class kodi::vfs::CFile - */ - ///@{ - static void* open_file(void* kodiBase, const char* filename, unsigned int flags); - static void* open_file_for_write(void* kodiBase, const char* filename, bool overwrite); - static ssize_t read_file(void* kodiBase, void* file, void* ptr, size_t size); - static bool read_file_string(void* kodiBase, void* file, char* szLine, int lineLength); - static ssize_t write_file(void* kodiBase, void* file, const void* ptr, size_t size); - static void flush_file(void* kodiBase, void* file); - static int64_t seek_file(void* kodiBase, void* file, int64_t position, int whence); - static int truncate_file(void* kodiBase, void* file, int64_t size); - static int64_t get_file_position(void* kodiBase, void* file); - static int64_t get_file_length(void* kodiBase, void* file); - static double get_file_download_speed(void* kodiBase, void* file); - static void close_file(void* kodiBase, void* file); - static int get_file_chunk_size(void* kodiBase, void* file); - static bool io_control_get_seek_possible(void* kodiBase, void* file); - static bool io_control_get_cache_status(void* kodiBase, - void* file, - struct VFS_CACHE_STATUS_DATA* status); - static bool io_control_set_cache_rate(void* kodiBase, void* file, uint32_t rate); - static bool io_control_set_retry(void* kodiBase, void* file, bool retry); - static char** get_property_values( - void* kodiBase, void* file, int type, const char* name, int* numValues); - - static void* curl_create(void* kodiBase, const char* url); - static bool curl_add_option( - void* kodiBase, void* file, int type, const char* name, const char* value); - static bool curl_open(void* kodiBase, void* file, unsigned int flags); - ///@} - ///@} -}; - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/General.cpp b/xbmc/addons/interfaces/General.cpp deleted file mode 100644 index 50a38bd1253b6..0000000000000 --- a/xbmc/addons/interfaces/General.cpp +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "General.h" - -#include "Application.h" -#include "CompileInfo.h" -#include "LangInfo.h" -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/gui/GUIDialogAddonSettings.h" -#include "addons/kodi-dev-kit/include/kodi/General.h" -#include "dialogs/GUIDialogKaiToast.h" -#include "input/KeyboardLayout.h" -#include "input/KeyboardLayoutManager.h" -#include "settings/Settings.h" -#include "settings/SettingsComponent.h" -#include "utils/CharsetConverter.h" -#include "utils/Digest.h" -#include "utils/LangCodeExpander.h" -#include "utils/MemUtils.h" -#include "utils/StringUtils.h" -#include "utils/log.h" - -#include - -using namespace kodi; // addon-dev-kit namespace -using KODI::UTILITY::CDigest; - -namespace ADDON -{ - -void Interface_General::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi = static_cast(malloc(sizeof(AddonToKodiFuncTable_kodi))); - - addonInterface->toKodi->kodi->unknown_to_utf8 = unknown_to_utf8; - addonInterface->toKodi->kodi->get_language = get_language; - addonInterface->toKodi->kodi->queue_notification = queue_notification; - addonInterface->toKodi->kodi->get_md5 = get_md5; - addonInterface->toKodi->kodi->get_region = get_region; - addonInterface->toKodi->kodi->get_free_mem = get_free_mem; - addonInterface->toKodi->kodi->get_global_idle_time = get_global_idle_time; - addonInterface->toKodi->kodi->is_addon_avilable = is_addon_avilable; - addonInterface->toKodi->kodi->kodi_version = kodi_version; - addonInterface->toKodi->kodi->get_current_skin_id = get_current_skin_id; - addonInterface->toKodi->kodi->get_keyboard_layout = get_keyboard_layout; - addonInterface->toKodi->kodi->change_keyboard_layout = change_keyboard_layout; -} - -void Interface_General::DeInit(AddonGlobalInterface* addonInterface) -{ - if (addonInterface->toKodi && /* <-- needed as long as the old addon way is used */ - addonInterface->toKodi->kodi) - { - free(addonInterface->toKodi->kodi); - addonInterface->toKodi->kodi = nullptr; - } -} - -char* Interface_General::unknown_to_utf8(void* kodiBase, const char* source, bool* ret, bool failOnBadChar) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon || !source || !ret) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', source='{}', ret='{}')", - __FUNCTION__, kodiBase, static_cast(source), static_cast(ret)); - return nullptr; - } - - std::string string; - *ret = g_charsetConverter.unknownToUTF8(source, string, failOnBadChar); - char* buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_General::get_language(void* kodiBase, int format, bool region) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return nullptr; - } - - std::string string = g_langInfo.GetEnglishLanguageName(); - switch (format) - { - case LANG_FMT_ISO_639_1: - { - std::string langCode; - g_LangCodeExpander.ConvertToISO6391(string, langCode); - string = langCode; - if (region) - { - std::string region2Code; - g_LangCodeExpander.ConvertToISO6391(g_langInfo.GetRegionLocale(), region2Code); - if (!region2Code.empty()) - string += "-" + region2Code; - } - break; - } - case LANG_FMT_ISO_639_2: - { - std::string langCode; - g_LangCodeExpander.ConvertToISO6392B(string, langCode); - string = langCode; - if (region) - { - std::string region3Code; - g_LangCodeExpander.ConvertToISO6392B(g_langInfo.GetRegionLocale(), region3Code); - if (!region3Code.empty()) - string += "-" + region3Code; - } - break; - } - case LANG_FMT_ENGLISH_NAME: - default: - { - if (region) - string += "-" + g_langInfo.GetCurrentRegion(); - break; - } - } - - char* buffer = strdup(string.c_str()); - return buffer; -} - -bool Interface_General::queue_notification(void* kodiBase, int type, const char* header, - const char* message, const char* imageFile, - unsigned int displayTime, bool withSound, - unsigned int messageTime) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || message == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', message='{}')", - __FUNCTION__, kodiBase, static_cast(message)); - return false; - } - - std::string usedHeader; - if (header && strlen(header) > 0) - usedHeader = header; - else - usedHeader = addon->Name(); - - QueueMsg qtype = static_cast(type); - - if (qtype != QUEUE_OWN_STYLE) - { - CGUIDialogKaiToast::eMessageType usedType; - switch (qtype) - { - case QueueMsg::QUEUE_WARNING: - usedType = CGUIDialogKaiToast::Warning; - withSound = true; - CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Warning Message: '{}'", __FUNCTION__, - addon->Name(), message); - break; - case QueueMsg::QUEUE_ERROR: - usedType = CGUIDialogKaiToast::Error; - withSound = true; - CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Error Message : '{}'", __FUNCTION__, - addon->Name(), message); - break; - case QueueMsg::QUEUE_INFO: - default: - usedType = CGUIDialogKaiToast::Info; - withSound = false; - CLog::Log(LOGDEBUG, "Interface_General::{} - {} - Info Message : '{}'", __FUNCTION__, - addon->Name(), message); - break; - } - - if (imageFile && strlen(imageFile) > 0) - { - CLog::Log(LOGERROR, - "Interface_General::{} - To use given image file '{}' must be type value set to " - "'QUEUE_OWN_STYLE'", - __FUNCTION__, imageFile); - } - - CGUIDialogKaiToast::QueueNotification(usedType, usedHeader, message, 3000, withSound); - } - else - { - CGUIDialogKaiToast::QueueNotification(imageFile, usedHeader, message, displayTime, withSound, messageTime); - } - return true; -} - -void Interface_General::get_md5(void* kodiBase, const char* text, char* md5) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || text == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', text='{}')", - __FUNCTION__, kodiBase, static_cast(text)); - return; - } - - std::string md5Int = CDigest::Calculate(CDigest::Type::MD5, std::string(text)); - strncpy(md5, md5Int.c_str(), 40); -} - -char* Interface_General::get_region(void* kodiBase, const char* id) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || id == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', id='{}')", __FUNCTION__, - kodiBase, static_cast(id)); - return nullptr; - } - - std::string result; - if (StringUtils::CompareNoCase(id, "datelong") == 0) - { - result = g_langInfo.GetDateFormat(true); - StringUtils::Replace(result, "DDDD", "%A"); - StringUtils::Replace(result, "MMMM", "%B"); - StringUtils::Replace(result, "D", "%d"); - StringUtils::Replace(result, "YYYY", "%Y"); - } - else if (StringUtils::CompareNoCase(id, "dateshort") == 0) - { - result = g_langInfo.GetDateFormat(false); - StringUtils::Replace(result, "MM", "%m"); - StringUtils::Replace(result, "DD", "%d"); -#ifdef TARGET_WINDOWS - StringUtils::Replace(result, "M", "%#m"); - StringUtils::Replace(result, "D", "%#d"); -#else - StringUtils::Replace(result, "M", "%-m"); - StringUtils::Replace(result, "D", "%-d"); -#endif - StringUtils::Replace(result, "YYYY", "%Y"); - } - else if (StringUtils::CompareNoCase(id, "tempunit") == 0) - result = g_langInfo.GetTemperatureUnitString(); - else if (StringUtils::CompareNoCase(id, "speedunit") == 0) - result = g_langInfo.GetSpeedUnitString(); - else if (StringUtils::CompareNoCase(id, "time") == 0) - { - result = g_langInfo.GetTimeFormat(); - StringUtils::Replace(result, "H", "%H"); - StringUtils::Replace(result, "h", "%I"); - StringUtils::Replace(result, "mm", "%M"); - StringUtils::Replace(result, "ss", "%S"); - StringUtils::Replace(result, "xx", "%p"); - } - else if (StringUtils::CompareNoCase(id, "meridiem") == 0) - result = StringUtils::Format("{}/{}", g_langInfo.GetMeridiemSymbol(MeridiemSymbolAM), - g_langInfo.GetMeridiemSymbol(MeridiemSymbolPM)); - else - { - CLog::Log(LOGERROR, "Interface_General::{} - add-on '{}' requests invalid id '{}'", - __FUNCTION__, addon->Name(), id); - return nullptr; - } - - char* buffer = strdup(result.c_str()); - return buffer; -} - -void Interface_General::get_free_mem(void* kodiBase, long* free, long* total, bool as_bytes) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || free == nullptr || total == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', free='{}', total='{}')", - __FUNCTION__, kodiBase, static_cast(free), static_cast(total)); - return; - } - - KODI::MEMORY::MemoryStatus stat; - KODI::MEMORY::GetMemoryStatus(&stat); - *free = static_cast(stat.availPhys); - *total = static_cast(stat.totalPhys); - if (!as_bytes) - { - *free = *free / ( 1024 * 1024 ); - *total = *total / ( 1024 * 1024 ); - } -} - -int Interface_General::get_global_idle_time(void* kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return -1; - } - - return g_application.GlobalIdleTime(); -} - -bool Interface_General::is_addon_avilable(void* kodiBase, - const char* id, - char** version, - bool* enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || id == nullptr || version == nullptr || enabled == nullptr) - { - CLog::Log( - LOGERROR, - "Interface_General::{} - invalid data (addon='{}', id='{}', version='{}', enabled='{}')", - __FUNCTION__, kodiBase, static_cast(id), static_cast(version), - static_cast(enabled)); - return false; - } - - AddonPtr addonInfo; - if (!CServiceBroker::GetAddonMgr().GetAddon(id, addonInfo, ADDON_UNKNOWN, OnlyEnabled::NO)) - return false; - - *version = strdup(addonInfo->Version().asString().c_str()); - *enabled = !CServiceBroker::GetAddonMgr().IsAddonDisabled(id); - return true; -} - -void Interface_General::kodi_version(void* kodiBase, char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || compile_name == nullptr || major == nullptr || minor == nullptr || - revision == nullptr || tag == nullptr || tagversion == nullptr) - { - CLog::Log(LOGERROR, - "Interface_General::{} - invalid data (addon='{}', compile_name='{}', major='{}', " - "minor='{}', revision='{}', tag='{}', tagversion='{}')", - __FUNCTION__, kodiBase, static_cast(compile_name), static_cast(major), - static_cast(minor), static_cast(revision), static_cast(tag), - static_cast(tagversion)); - return; - } - - *compile_name = strdup(CCompileInfo::GetAppName()); - *major = CCompileInfo::GetMajor(); - *minor = CCompileInfo::GetMinor(); - *revision = strdup(CCompileInfo::GetSCMID()); - std::string tagStr = CCompileInfo::GetSuffix(); - if (StringUtils::StartsWithNoCase(tagStr, "alpha")) - { - *tag = strdup("alpha"); - *tagversion = strdup(StringUtils::Mid(tagStr, 5).c_str()); - } - else if (StringUtils::StartsWithNoCase(tagStr, "beta")) - { - *tag = strdup("beta"); - *tagversion = strdup(StringUtils::Mid(tagStr, 4).c_str()); - } - else if (StringUtils::StartsWithNoCase(tagStr, "rc")) - { - *tag = strdup("releasecandidate"); - *tagversion = strdup(StringUtils::Mid(tagStr, 2).c_str()); - } - else if (tagStr.empty()) - *tag = strdup("stable"); - else - *tag = strdup("prealpha"); -} - -char* Interface_General::get_current_skin_id(void* kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return nullptr; - } - - return strdup(CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(CSettings::SETTING_LOOKANDFEEL_SKIN).c_str()); -} - -bool Interface_General::get_keyboard_layout(void* kodiBase, char** layout_name, int modifier_key, AddonKeyboardKeyTable* c_layout) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || c_layout == nullptr || layout_name == nullptr) - { - CLog::Log(LOGERROR, - "Interface_General::{} - invalid data (addon='{}', c_layout='{}', layout_name='{}')", - __FUNCTION__, kodiBase, static_cast(c_layout), - static_cast(layout_name)); - return false; - } - - std::string activeLayout = CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT); - - CKeyboardLayout layout; - if (!CKeyboardLayoutManager::GetInstance().GetLayout(activeLayout, layout)) - return false; - - *layout_name = strdup(layout.GetName().c_str()); - - unsigned int modifiers = CKeyboardLayout::ModifierKeyNone; - if (modifier_key & STD_KB_MODIFIER_KEY_SHIFT) - modifiers |= CKeyboardLayout::ModifierKeyShift; - if (modifier_key & STD_KB_MODIFIER_KEY_SYMBOL) - modifiers |= CKeyboardLayout::ModifierKeySymbol; - - for (unsigned int row = 0; row < STD_KB_BUTTONS_MAX_ROWS; row++) - { - for (unsigned int column = 0; column < STD_KB_BUTTONS_PER_ROW; column++) - { - std::string label = layout.GetCharAt(row, column, modifiers); - c_layout->keys[row][column] = strdup(label.c_str()); - } - } - - return true; -} - -bool Interface_General::change_keyboard_layout(void* kodiBase, char** layout_name) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || layout_name == nullptr) - { - CLog::Log(LOGERROR, "Interface_General::{} - invalid data (addon='{}', layout_name='{}')", - __FUNCTION__, kodiBase, static_cast(layout_name)); - return false; - } - - std::vector layouts; - unsigned int currentLayout = 0; - - const KeyboardLayouts& keyboardLayouts = CKeyboardLayoutManager::GetInstance().GetLayouts(); - const std::shared_ptr settings = CServiceBroker::GetSettingsComponent()->GetSettings(); - std::vector layoutNames = settings->GetList(CSettings::SETTING_LOCALE_KEYBOARDLAYOUTS); - std::string activeLayout = settings->GetString(CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT); - - for (const auto& layoutName : layoutNames) - { - const auto keyboardLayout = keyboardLayouts.find(layoutName.asString()); - if (keyboardLayout != keyboardLayouts.end()) - { - layouts.emplace_back(keyboardLayout->second); - if (layoutName.asString() == activeLayout) - currentLayout = layouts.size() - 1; - } - } - - currentLayout++; - if (currentLayout >= layouts.size()) - currentLayout = 0; - CKeyboardLayout layout = layouts.empty() ? CKeyboardLayout() : layouts[currentLayout]; - CServiceBroker::GetSettingsComponent()->GetSettings()->SetString(CSettings::SETTING_LOCALE_ACTIVEKEYBOARDLAYOUT, layout.GetName()); - - *layout_name = strdup(layout.GetName().c_str()); - return true; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/General.h b/xbmc/addons/interfaces/General.h deleted file mode 100644 index 6dde35618b72e..0000000000000 --- a/xbmc/addons/interfaces/General.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -extern "C" -{ - -struct AddonGlobalInterface; -struct AddonKeyboardKeyTable; - -namespace ADDON -{ - -/*! - * @brief Global general Add-on to Kodi callback functions - * - * To hold general functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/General.h" - */ -struct Interface_General -{ - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static char* unknown_to_utf8(void* kodiBase, const char* source, bool* ret, bool failOnBadChar); - static char* get_language(void* kodiBase, int format, bool region); - static bool queue_notification(void* kodiBase, - int type, - const char* header, - const char* message, - const char* imageFile, - unsigned int displayTime, - bool withSound, - unsigned int messageTime); - static void get_md5(void* kodiBase, const char* text, char* md5); - static char* get_region(void* kodiBase, const char* id); - static void get_free_mem(void* kodiInstance, long* free, long* total, bool as_bytes); - static int get_global_idle_time(void* kodiBase); - static bool is_addon_avilable(void* kodiBase, const char* id, char** version, bool* enabled); - static void kodi_version(void* kodiBase, - char** compile_name, - int* major, - int* minor, - char** revision, - char** tag, - char** tagversion); - static char* get_current_skin_id(void* kodiBase); - static bool change_keyboard_layout(void* kodiBase, char** layout_name); - static bool get_keyboard_layout(void* kodiBase, - char** layout_name, - int modifier_key, - AddonKeyboardKeyTable* c_layout); - //@} -}; - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/Network.cpp b/xbmc/addons/interfaces/Network.cpp deleted file mode 100644 index 63151f3b78c82..0000000000000 --- a/xbmc/addons/interfaces/Network.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Network.h" - -#include "ServiceBroker.h" -#include "URL.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/Network.h" -#include "network/DNSNameCache.h" -#include "network/Network.h" -#include "utils/SystemInfo.h" -#include "utils/URIUtils.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_Network::Init(AddonGlobalInterface *addonInterface) -{ - addonInterface->toKodi->kodi_network = new AddonToKodiFuncTable_kodi_network(); - - addonInterface->toKodi->kodi_network->wake_on_lan = wake_on_lan; - addonInterface->toKodi->kodi_network->get_ip_address = get_ip_address; - addonInterface->toKodi->kodi_network->get_hostname = get_hostname; - addonInterface->toKodi->kodi_network->get_user_agent = get_user_agent; - addonInterface->toKodi->kodi_network->is_local_host = is_local_host; - addonInterface->toKodi->kodi_network->is_host_on_lan = is_host_on_lan; - addonInterface->toKodi->kodi_network->dns_lookup = dns_lookup; - addonInterface->toKodi->kodi_network->url_encode = url_encode; -} - -void Interface_Network::DeInit(AddonGlobalInterface* addonInterface) -{ - if (addonInterface->toKodi) /* <-- needed as long as the old addon way is used */ - { - delete addonInterface->toKodi->kodi_network; - addonInterface->toKodi->kodi_network = nullptr; - } -} - -bool Interface_Network::wake_on_lan(void* kodiBase, const char* mac) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || mac == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}', mac='{}')", __FUNCTION__, - kodiBase, static_cast(mac)); - return false; - } - - return CServiceBroker::GetNetwork().WakeOnLan(mac); -} - -char* Interface_Network::get_ip_address(void* kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return nullptr; - } - - std::string titleIP; - CNetworkInterface* iface = CServiceBroker::GetNetwork().GetFirstConnectedInterface(); - if (iface) - titleIP = iface->GetCurrentIPAddress(); - else - titleIP = "127.0.0.1"; - - char* buffer = nullptr; - if (!titleIP.empty()) - buffer = strdup(titleIP.c_str()); - return buffer; -} - -char* Interface_Network::get_hostname(void* kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return nullptr; - } - - std::string hostname; - if (!CServiceBroker::GetNetwork().GetHostName(hostname)) - return nullptr; - - char* buffer = nullptr; - if (!hostname.empty()) - buffer = strdup(hostname.c_str()); - return buffer; -} - -char* Interface_Network::get_user_agent(void* kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}')", __FUNCTION__, - kodiBase); - return nullptr; - } - - std::string string = CSysInfo::GetUserAgent(); - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -bool Interface_Network::is_local_host(void* kodiBase, const char* hostname) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || hostname == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}', hostname='{}')", - __FUNCTION__, kodiBase, static_cast(hostname)); - return false; - } - - return CServiceBroker::GetNetwork().IsLocalHost(hostname); -} - -bool Interface_Network::is_host_on_lan(void* kodiBase, const char* hostname, bool offLineCheck) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || hostname == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}', hostname='{}')", - __FUNCTION__, kodiBase, static_cast(hostname)); - return false; - } - - return URIUtils::IsHostOnLAN(hostname, offLineCheck); -} - -char* Interface_Network::dns_lookup(void* kodiBase, const char* url, bool* ret) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr || ret == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}', url='{}', ret='{}')", - __FUNCTION__, kodiBase, static_cast(url), static_cast(ret)); - return nullptr; - } - - std::string string; - *ret = CDNSNameCache::Lookup(url, string); - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -char* Interface_Network::url_encode(void* kodiBase, const char* url) -{ - CAddonDll* addon = static_cast(kodiBase); - if (addon == nullptr || url == nullptr) - { - CLog::Log(LOGERROR, "Interface_Network::{} - invalid data (addon='{}', url='{}')", __FUNCTION__, - kodiBase, static_cast(url)); - return nullptr; - } - - std::string string = CURL::Encode(url); - char* buffer = nullptr; - if (!string.empty()) - buffer = strdup(string.c_str()); - return buffer; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/Network.h b/xbmc/addons/interfaces/Network.h deleted file mode 100644 index b704fb1579c78..0000000000000 --- a/xbmc/addons/interfaces/Network.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -struct AddonGlobalInterface; - -extern "C" -{ -namespace ADDON -{ - -/*! - * @brief Global general Add-on to Kodi callback functions - * - * To hold network functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/Network.h" - */ -struct Interface_Network -{ - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static bool wake_on_lan(void* kodiBase, const char* mac); - static char* get_ip_address(void* kodiBase); - static char* get_hostname(void* kodiBase); - static char* get_user_agent(void* kodiBase); - static bool is_local_host(void* kodiBase, const char* hostname); - static bool is_host_on_lan(void* kodiBase, const char* hostname, bool offLineCheck); - static char* dns_lookup(void* kodiBase, const char* url, bool* ret); - static char* url_encode(void* kodiBase, const char* url); - //@} -}; - -} /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/CMakeLists.txt b/xbmc/addons/interfaces/gui/CMakeLists.txt deleted file mode 100644 index 3508b82fa1e62..0000000000000 --- a/xbmc/addons/interfaces/gui/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -set(SOURCES GUITranslator.cpp - General.cpp - ListItem.cpp - Window.cpp) - -set(HEADERS GUITranslator.h - General.h - ListItem.h - Window.h) - -core_add_library(addons_interfaces_gui) diff --git a/xbmc/addons/interfaces/gui/General.cpp b/xbmc/addons/interfaces/gui/General.cpp deleted file mode 100644 index f51b12a11fdfd..0000000000000 --- a/xbmc/addons/interfaces/gui/General.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "General.h" - -#include "ListItem.h" -#include "ServiceBroker.h" -#include "Window.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/General.h" -#include "controls/Button.h" -#include "controls/Edit.h" -#include "controls/FadeLabel.h" -#include "controls/Image.h" -#include "controls/Label.h" -#include "controls/Progress.h" -#include "controls/RadioButton.h" -#include "controls/Rendering.h" -#include "controls/SettingsSlider.h" -#include "controls/Slider.h" -#include "controls/Spin.h" -#include "controls/TextBox.h" -#include "dialogs/ContextMenu.h" -#include "dialogs/ExtendedProgressBar.h" -#include "dialogs/FileBrowser.h" -#include "dialogs/Keyboard.h" -#include "dialogs/Numeric.h" -#include "dialogs/OK.h" -#include "dialogs/Progress.h" -#include "dialogs/Select.h" -#include "dialogs/TextViewer.h" -#include "dialogs/YesNo.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ -int Interface_GUIGeneral::m_iAddonGUILockRef = 0; - -void Interface_GUIGeneral::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui = new AddonToKodiFuncTable_kodi_gui(); - - Interface_GUIControlButton::Init(addonInterface); - Interface_GUIControlEdit::Init(addonInterface); - Interface_GUIControlFadeLabel::Init(addonInterface); - Interface_GUIControlImage::Init(addonInterface); - Interface_GUIControlLabel::Init(addonInterface); - Interface_GUIControlProgress::Init(addonInterface); - Interface_GUIControlRadioButton::Init(addonInterface); - Interface_GUIControlAddonRendering::Init(addonInterface); - Interface_GUIControlSettingsSlider::Init(addonInterface); - Interface_GUIControlSlider::Init(addonInterface); - Interface_GUIControlSpin::Init(addonInterface); - Interface_GUIControlTextBox::Init(addonInterface); - Interface_GUIDialogContextMenu::Init(addonInterface); - Interface_GUIDialogExtendedProgress::Init(addonInterface); - Interface_GUIDialogFileBrowser::Init(addonInterface); - Interface_GUIDialogKeyboard::Init(addonInterface); - Interface_GUIDialogNumeric::Init(addonInterface); - Interface_GUIDialogOK::Init(addonInterface); - Interface_GUIDialogProgress::Init(addonInterface); - Interface_GUIDialogSelect::Init(addonInterface); - Interface_GUIDialogTextViewer::Init(addonInterface); - Interface_GUIDialogYesNo::Init(addonInterface); - Interface_GUIListItem::Init(addonInterface); - Interface_GUIWindow::Init(addonInterface); - - addonInterface->toKodi->kodi_gui->general = new AddonToKodiFuncTable_kodi_gui_general(); - - addonInterface->toKodi->kodi_gui->general->lock = lock; - addonInterface->toKodi->kodi_gui->general->unlock = unlock; - addonInterface->toKodi->kodi_gui->general->get_screen_height = get_screen_height; - addonInterface->toKodi->kodi_gui->general->get_screen_width = get_screen_width; - addonInterface->toKodi->kodi_gui->general->get_video_resolution = get_video_resolution; - addonInterface->toKodi->kodi_gui->general->get_current_window_dialog_id = - get_current_window_dialog_id; - addonInterface->toKodi->kodi_gui->general->get_current_window_id = get_current_window_id; - addonInterface->toKodi->kodi_gui->general->get_hw_context = get_hw_context; -} - -void Interface_GUIGeneral::DeInit(AddonGlobalInterface* addonInterface) -{ - if (addonInterface->toKodi && /* <-- needed as long as the old addon way is used */ - addonInterface->toKodi->kodi_gui) - { - Interface_GUIControlButton::DeInit(addonInterface); - Interface_GUIControlEdit::DeInit(addonInterface); - Interface_GUIControlFadeLabel::DeInit(addonInterface); - Interface_GUIControlImage::DeInit(addonInterface); - Interface_GUIControlLabel::DeInit(addonInterface); - Interface_GUIControlProgress::DeInit(addonInterface); - Interface_GUIControlRadioButton::DeInit(addonInterface); - Interface_GUIControlAddonRendering::DeInit(addonInterface); - Interface_GUIControlSettingsSlider::DeInit(addonInterface); - Interface_GUIControlSlider::DeInit(addonInterface); - Interface_GUIControlSpin::DeInit(addonInterface); - Interface_GUIControlTextBox::DeInit(addonInterface); - Interface_GUIDialogContextMenu::DeInit(addonInterface); - Interface_GUIDialogExtendedProgress::DeInit(addonInterface); - Interface_GUIDialogFileBrowser::DeInit(addonInterface); - Interface_GUIDialogKeyboard::DeInit(addonInterface); - Interface_GUIDialogNumeric::DeInit(addonInterface); - Interface_GUIDialogOK::DeInit(addonInterface); - Interface_GUIDialogProgress::DeInit(addonInterface); - Interface_GUIDialogSelect::DeInit(addonInterface); - Interface_GUIDialogTextViewer::DeInit(addonInterface); - Interface_GUIDialogYesNo::DeInit(addonInterface); - Interface_GUIListItem::DeInit(addonInterface); - Interface_GUIWindow::DeInit(addonInterface); - - delete addonInterface->toKodi->kodi_gui->general; - delete addonInterface->toKodi->kodi_gui; - addonInterface->toKodi->kodi_gui = nullptr; - } -} - -//@{ -void Interface_GUIGeneral::lock() -{ - if (m_iAddonGUILockRef == 0) - CServiceBroker::GetWinSystem()->GetGfxContext().lock(); - ++m_iAddonGUILockRef; -} - -void Interface_GUIGeneral::unlock() -{ - if (m_iAddonGUILockRef > 0) - { - --m_iAddonGUILockRef; - if (m_iAddonGUILockRef == 0) - CServiceBroker::GetWinSystem()->GetGfxContext().unlock(); - } -} -//@} - -//@{ -int Interface_GUIGeneral::get_screen_height(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); - return -1; - } - - return CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight(); -} - -int Interface_GUIGeneral::get_screen_width(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); - return -1; - } - - return CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth(); -} - -int Interface_GUIGeneral::get_video_resolution(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); - return -1; - } - - return (int)CServiceBroker::GetWinSystem()->GetGfxContext().GetVideoResolution(); -} -//@} - -//@{ -int Interface_GUIGeneral::get_current_window_dialog_id(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); - return -1; - } - - CSingleLock gl(CServiceBroker::GetWinSystem()->GetGfxContext()); - return CServiceBroker::GetGUI()->GetWindowManager().GetTopmostModalDialog(); -} - -int Interface_GUIGeneral::get_current_window_id(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "kodi::gui::{} - invalid data", __func__); - return -1; - } - - CSingleLock gl(CServiceBroker::GetWinSystem()->GetGfxContext()); - return CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); -} - -ADDON_HARDWARE_CONTEXT Interface_GUIGeneral::get_hw_context(KODI_HANDLE kodiBase) -{ - return CServiceBroker::GetWinSystem()->GetHWContext(); -} - -//@} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/General.h b/xbmc/addons/interfaces/gui/General.h deleted file mode 100644 index 4ef9328c38bf2..0000000000000 --- a/xbmc/addons/interfaces/gui/General.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/general.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/General.h" - */ - struct Interface_GUIGeneral - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note For add of new functions use the "_" style to identify direct a - * add-on callback function. Everything with CamelCase is only for the - * usage in Kodi only. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void lock(); - static void unlock(); - - static int get_screen_height(KODI_HANDLE kodiBase); - static int get_screen_width(KODI_HANDLE kodiBase); - static int get_video_resolution(KODI_HANDLE kodiBase); - static int get_current_window_dialog_id(KODI_HANDLE kodiBase); - static int get_current_window_id(KODI_HANDLE kodiBase); - static ADDON_HARDWARE_CONTEXT get_hw_context(KODI_HANDLE kodiBase); - //@} - - private: - static int m_iAddonGUILockRef; - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/ListItem.cpp b/xbmc/addons/interfaces/gui/ListItem.cpp deleted file mode 100644 index c91e451f489fe..0000000000000 --- a/xbmc/addons/interfaces/gui/ListItem.cpp +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "ListItem.h" - -#include "FileItem.h" -#include "General.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/ListItem.h" -#include "utils/StringUtils.h" -#include "utils/Variant.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIListItem::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->listItem = new AddonToKodiFuncTable_kodi_gui_listItem(); - - addonInterface->toKodi->kodi_gui->listItem->create = create; - addonInterface->toKodi->kodi_gui->listItem->destroy = destroy; - addonInterface->toKodi->kodi_gui->listItem->get_label = get_label; - addonInterface->toKodi->kodi_gui->listItem->set_label = set_label; - addonInterface->toKodi->kodi_gui->listItem->get_label2 = get_label2; - addonInterface->toKodi->kodi_gui->listItem->set_label2 = set_label2; - addonInterface->toKodi->kodi_gui->listItem->get_art = get_art; - addonInterface->toKodi->kodi_gui->listItem->set_art = set_art; - addonInterface->toKodi->kodi_gui->listItem->get_path = get_path; - addonInterface->toKodi->kodi_gui->listItem->set_path = set_path; - addonInterface->toKodi->kodi_gui->listItem->get_property = get_property; - addonInterface->toKodi->kodi_gui->listItem->set_property = set_property; - addonInterface->toKodi->kodi_gui->listItem->select = select; - addonInterface->toKodi->kodi_gui->listItem->is_selected = is_selected; -} - -void Interface_GUIListItem::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->listItem; -} - -KODI_GUI_LISTITEM_HANDLE Interface_GUIListItem::create(KODI_HANDLE kodiBase, - const char* label, - const char* label2, - const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "ADDON::Interface_GUIListItem::{} - invalid data", __func__); - return nullptr; - } - - CFileItemPtr* item = new CFileItemPtr(new CFileItem()); - if (label) - item->get()->SetLabel(label); - if (label2) - item->get()->SetLabel2(label2); - if (path) - item->get()->SetPath(path); - - return item; -} - -void Interface_GUIListItem::destroy(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "ADDON::Interface_GUIListItem::{} - invalid data", __func__); - return; - } - - CFileItemPtr* item = static_cast(handle); - if (item) - delete item; -} - -char* Interface_GUIListItem::get_label(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return nullptr; - } - - char* ret; - Interface_GUIGeneral::lock(); - ret = strdup(item->get()->GetLabel().c_str()); - Interface_GUIGeneral::unlock(); - return ret; -} - -void Interface_GUIListItem::set_label(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - item->get()->SetLabel(label); - Interface_GUIGeneral::unlock(); -} - -char* Interface_GUIListItem::get_label2(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return nullptr; - } - - char* ret; - Interface_GUIGeneral::lock(); - ret = strdup(item->get()->GetLabel2().c_str()); - Interface_GUIGeneral::unlock(); - return ret; -} - -void Interface_GUIListItem::set_label2(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - item->get()->SetLabel2(label); - Interface_GUIGeneral::unlock(); -} - -char* Interface_GUIListItem::get_art(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* type) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !type) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', type='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(type), - addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return nullptr; - } - - char* ret; - Interface_GUIGeneral::lock(); - ret = strdup(item->get()->GetArt(type).c_str()); - Interface_GUIGeneral::unlock(); - return ret; -} - -void Interface_GUIListItem::set_art(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* type, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !type || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}', type= " - "'{}', label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(type), - static_cast(label), addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - item->get()->SetArt(type, label); - Interface_GUIGeneral::unlock(); -} - -char* Interface_GUIListItem::get_path(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return nullptr; - } - - char* ret; - Interface_GUIGeneral::lock(); - ret = strdup(item->get()->GetPath().c_str()); - Interface_GUIGeneral::unlock(); - return ret; -} - - -void Interface_GUIListItem::set_path(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* path) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !path) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', path='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(path), - addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - item->get()->SetPath(path); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIListItem::set_property(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* key, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !key || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}', value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - static_cast(value), addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - item->get()->SetProperty(lowerKey, CVariant(value)); - Interface_GUIGeneral::unlock(); -} - -char* Interface_GUIListItem::get_property(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return nullptr; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - char* ret = strdup(item->get()->GetProperty(lowerKey).asString().c_str()); - Interface_GUIGeneral::unlock(); - - return ret; -} - -void Interface_GUIListItem::select(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - bool select) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - item->get()->Select(select); - Interface_GUIGeneral::unlock(); -} - -bool Interface_GUIListItem::is_selected(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CFileItemPtr* item = static_cast(handle); - if (!addon || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIListItem::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return false; - } - - if (item->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIListItem::{} - empty list item called on addon '{}'", - __func__, addon->ID()); - return false; - } - - Interface_GUIGeneral::lock(); - bool ret = item->get()->IsSelected(); - Interface_GUIGeneral::unlock(); - - return ret; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/ListItem.h b/xbmc/addons/interfaces/gui/ListItem.h deleted file mode 100644 index 70e5c6a95e878..0000000000000 --- a/xbmc/addons/interfaces/gui/ListItem.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/ListItem.h" - */ - struct Interface_GUIListItem - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static KODI_GUI_LISTITEM_HANDLE create(KODI_HANDLE kodiBase, - const char* label, - const char* label2, - const char* path); - static void destroy(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - static void set_label(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* label); - static char* get_label2(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - static void set_label2(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* label); - static char* get_art(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* type); - static void set_art(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* type, - const char* image); - static char* get_path(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - static void set_path(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* path); - static char* get_property(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* key); - static void set_property(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* key, - const char* value); - static void select(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, bool select); - static bool is_selected(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/Window.cpp b/xbmc/addons/interfaces/gui/Window.cpp deleted file mode 100644 index 5cd53213ae711..0000000000000 --- a/xbmc/addons/interfaces/gui/Window.cpp +++ /dev/null @@ -1,1499 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "addons/kodi-dev-kit/include/kodi/gui/Window.h" - -#include "Application.h" -#include "FileItem.h" -#include "GUITranslator.h" -#include "General.h" -#include "ServiceBroker.h" -#include "Window.h" -#include "addons/Skin.h" -#include "addons/binary-addons/AddonDll.h" -#include "controls/Rendering.h" -#include "filesystem/File.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIRenderingControl.h" -#include "guilib/GUIWindowManager.h" -#include "guilib/TextureManager.h" -#include "input/Key.h" -#include "messaging/ApplicationMessenger.h" -#include "utils/StringUtils.h" -#include "utils/URIUtils.h" -#include "utils/Variant.h" -#include "utils/log.h" - -using namespace ADDON; -using namespace KODI::MESSAGING; - -namespace ADDON -{ - -void Interface_GUIWindow::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->window = new AddonToKodiFuncTable_kodi_gui_window(); - - /* Window creation functions */ - addonInterface->toKodi->kodi_gui->window->create = create; - addonInterface->toKodi->kodi_gui->window->destroy = destroy; - addonInterface->toKodi->kodi_gui->window->set_callbacks = set_callbacks; - addonInterface->toKodi->kodi_gui->window->show = show; - addonInterface->toKodi->kodi_gui->window->close = close; - addonInterface->toKodi->kodi_gui->window->do_modal = do_modal; - - /* Window control functions */ - addonInterface->toKodi->kodi_gui->window->set_focus_id = set_focus_id; - addonInterface->toKodi->kodi_gui->window->get_focus_id = get_focus_id; - addonInterface->toKodi->kodi_gui->window->set_control_label = set_control_label; - addonInterface->toKodi->kodi_gui->window->set_control_visible = set_control_visible; - addonInterface->toKodi->kodi_gui->window->set_control_selected = set_control_selected; - - /* Window property functions */ - addonInterface->toKodi->kodi_gui->window->set_property = set_property; - addonInterface->toKodi->kodi_gui->window->set_property_int = set_property_int; - addonInterface->toKodi->kodi_gui->window->set_property_bool = set_property_bool; - addonInterface->toKodi->kodi_gui->window->set_property_double = set_property_double; - addonInterface->toKodi->kodi_gui->window->get_property = get_property; - addonInterface->toKodi->kodi_gui->window->get_property_int = get_property_int; - addonInterface->toKodi->kodi_gui->window->get_property_bool = get_property_bool; - addonInterface->toKodi->kodi_gui->window->get_property_double = get_property_double; - addonInterface->toKodi->kodi_gui->window->clear_properties = clear_properties; - addonInterface->toKodi->kodi_gui->window->clear_property = clear_property; - - /* List item functions */ - addonInterface->toKodi->kodi_gui->window->clear_item_list = clear_item_list; - addonInterface->toKodi->kodi_gui->window->add_list_item = add_list_item; - addonInterface->toKodi->kodi_gui->window->remove_list_item_from_position = - remove_list_item_from_position; - addonInterface->toKodi->kodi_gui->window->remove_list_item = remove_list_item; - addonInterface->toKodi->kodi_gui->window->get_list_item = get_list_item; - addonInterface->toKodi->kodi_gui->window->set_current_list_position = set_current_list_position; - addonInterface->toKodi->kodi_gui->window->get_current_list_position = get_current_list_position; - addonInterface->toKodi->kodi_gui->window->get_list_size = get_list_size; - addonInterface->toKodi->kodi_gui->window->set_container_property = set_container_property; - addonInterface->toKodi->kodi_gui->window->set_container_content = set_container_content; - addonInterface->toKodi->kodi_gui->window->get_current_container_id = get_current_container_id; - - /* Various functions */ - addonInterface->toKodi->kodi_gui->window->mark_dirty_region = mark_dirty_region; - - /* GUI control access functions */ - addonInterface->toKodi->kodi_gui->window->get_control_button = get_control_button; - addonInterface->toKodi->kodi_gui->window->get_control_edit = get_control_edit; - addonInterface->toKodi->kodi_gui->window->get_control_fade_label = get_control_fade_label; - addonInterface->toKodi->kodi_gui->window->get_control_image = get_control_image; - addonInterface->toKodi->kodi_gui->window->get_control_label = get_control_label; - addonInterface->toKodi->kodi_gui->window->get_control_progress = get_control_progress; - addonInterface->toKodi->kodi_gui->window->get_control_radio_button = get_control_radio_button; - addonInterface->toKodi->kodi_gui->window->get_control_render_addon = get_control_render_addon; - addonInterface->toKodi->kodi_gui->window->get_control_settings_slider = - get_control_settings_slider; - addonInterface->toKodi->kodi_gui->window->get_control_slider = get_control_slider; - addonInterface->toKodi->kodi_gui->window->get_control_spin = get_control_spin; - addonInterface->toKodi->kodi_gui->window->get_control_text_box = get_control_text_box; -} - -void Interface_GUIWindow::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->window; -} - -/*! - * Window creation functions - */ -//@{ -KODI_GUI_WINDOW_HANDLE Interface_GUIWindow::create(KODI_HANDLE kodiBase, - const char* xml_filename, - const char* default_skin, - bool as_dialog, - bool is_media) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon || !xml_filename || !default_skin) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (xml_filename='{}', " - "default_skin='{}') on addon '{}'", - __func__, static_cast(xml_filename), - static_cast(default_skin), addon ? addon->ID() : "unknown"); - return nullptr; - } - - if (as_dialog && is_media) - { - CLog::Log(LOGWARNING, - "Interface_GUIWindow::{}: {}/{} - addon tries to create dialog as media window who " - "not allowed, contact Developer '{}' of this addon", - __func__, CAddonInfo::TranslateType(addon->Type()), addon->Name(), addon->Author()); - } - - RESOLUTION_INFO res; - std::string strSkinPath = g_SkinInfo->GetSkinPath(xml_filename, &res); - - if (!XFILE::CFile::Exists(strSkinPath)) - { - std::string str("none"); - ADDON::AddonInfoPtr addonInfo = std::make_shared(str, ADDON::ADDON_SKIN); - - // Check for the matching folder for the skin in the fallback skins folder - std::string fallbackPath = URIUtils::AddFileToFolder(addon->Path(), "resources", "skins"); - std::string basePath = URIUtils::AddFileToFolder(fallbackPath, g_SkinInfo->ID()); - - strSkinPath = g_SkinInfo->GetSkinPath(xml_filename, &res, basePath); - - // Check for the matching folder for the skin in the fallback skins folder (if it exists) - if (XFILE::CFile::Exists(basePath)) - { - addonInfo->SetPath(basePath); - const std::shared_ptr skinInfo = - std::make_shared(addonInfo, res); - skinInfo->Start(); - strSkinPath = skinInfo->GetSkinPath(xml_filename, &res); - } - - if (!XFILE::CFile::Exists(strSkinPath)) - { - // Finally fallback to the DefaultSkin as it didn't exist in either the Kodi Skin folder or the fallback skin folder - addonInfo->SetPath(URIUtils::AddFileToFolder(fallbackPath, default_skin)); - const std::shared_ptr skinInfo = - std::make_shared(addonInfo, res); - - skinInfo->Start(); - strSkinPath = skinInfo->GetSkinPath(xml_filename, &res); - if (!XFILE::CFile::Exists(strSkinPath)) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{}: {}/{} - XML File '{}' for Window is missing, contact " - "Developer '{}' of this addon", - __func__, CAddonInfo::TranslateType(addon->Type()), addon->Name(), strSkinPath, - addon->Author()); - return nullptr; - } - } - } - - int id = GetNextAvailableWindowId(); - if (id < 0) - return nullptr; - - CGUIWindow* window; - if (!as_dialog) - window = new CGUIAddonWindow(id, strSkinPath, addon, is_media); - else - window = new CGUIAddonWindowDialog(id, strSkinPath, addon); - - Interface_GUIGeneral::lock(); - CServiceBroker::GetGUI()->GetWindowManager().Add(window); - Interface_GUIGeneral::unlock(); - - if (!CServiceBroker::GetGUI()->GetWindowManager().GetWindow(id)) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - Requested window id '{}' does not exist for addon '{}'", - __func__, id, addon->ID()); - delete window; - return nullptr; - } - window->SetCoordsRes(res); - return window; -} - -void Interface_GUIWindow::destroy(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - CGUIWindow* pWindow = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow(pAddonWindow->GetID()); - if (pWindow) - { - // first change to an existing window - if (CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow() == pAddonWindow->GetID() && - !g_application.m_bStop) - { - if (CServiceBroker::GetGUI()->GetWindowManager().GetWindow(pAddonWindow->m_oldWindowId)) - CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->m_oldWindowId); - else // old window does not exist anymore, switch to home - CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(WINDOW_HOME); - } - // Free any window properties - pAddonWindow->ClearProperties(); - // free the window's resources and unload it (free all guicontrols) - pAddonWindow->FreeResources(true); - - CServiceBroker::GetGUI()->GetWindowManager().Remove(pAddonWindow->GetID()); - } - delete pAddonWindow; - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_callbacks( - KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*CBOnInit)(KODI_GUI_CLIENT_HANDLE), - bool (*CBOnFocus)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBOnClick)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBOnAction)(KODI_GUI_CLIENT_HANDLE, ADDON_ACTION), - void (*CBGetContextButtons)(KODI_GUI_CLIENT_HANDLE, int, gui_context_menu_pair*, unsigned int*), - bool (*CBOnContextButton)(KODI_GUI_CLIENT_HANDLE, int, unsigned int)) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !clienthandle) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (handle='{}', clienthandle='{}') " - "on addon '{}'", - __func__, handle, clienthandle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->m_clientHandle = clienthandle; - pAddonWindow->CBOnInit = CBOnInit; - pAddonWindow->CBOnClick = CBOnClick; - pAddonWindow->CBOnFocus = CBOnFocus; - pAddonWindow->CBOnAction = CBOnAction; - pAddonWindow->CBGetContextButtons = CBGetContextButtons; - pAddonWindow->CBOnContextButton = CBOnContextButton; - Interface_GUIGeneral::unlock(); -} - -bool Interface_GUIWindow::show(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon ? addon->ID() : "unknown"); - return false; - } - - if (pAddonWindow->m_oldWindowId != pAddonWindow->m_windowId && - pAddonWindow->m_windowId != CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) - pAddonWindow->m_oldWindowId = CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); - - Interface_GUIGeneral::lock(); - if (pAddonWindow->IsDialog()) - dynamic_cast(pAddonWindow)->Show(true, false); - else - CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->GetID()); - Interface_GUIGeneral::unlock(); - - return true; -} - -bool Interface_GUIWindow::close(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon ? addon->ID() : "unknown"); - return false; - } - - pAddonWindow->PulseActionEvent(); - - Interface_GUIGeneral::lock(); - - // if it's a dialog, we have to close it a bit different - if (pAddonWindow->IsDialog()) - dynamic_cast(pAddonWindow)->Show(false); - else - CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->m_oldWindowId); - pAddonWindow->m_oldWindowId = 0; - - Interface_GUIGeneral::unlock(); - - return true; -} - -bool Interface_GUIWindow::do_modal(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon ? addon->ID() : "unknown"); - return false; - } - - if (pAddonWindow->GetID() == CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) - return true; - - if (pAddonWindow->m_oldWindowId != pAddonWindow->m_windowId && - pAddonWindow->m_windowId != CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow()) - pAddonWindow->m_oldWindowId = CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow(); - - Interface_GUIGeneral::lock(); - if (pAddonWindow->IsDialog()) - dynamic_cast(pAddonWindow)->Show(true, true); - else - CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(pAddonWindow->GetID()); - Interface_GUIGeneral::unlock(); - - return true; -} -//@} - -/*! - * Window control functions - */ -//@{ -bool Interface_GUIWindow::set_focus_id(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return false; - } - - if (!pAddonWindow->GetControl(control_id)) - { - CLog::Log(LOGERROR, "Interface_GUIWindow - {}: {} - Control does not exist in window", __func__, - addon->Name()); - return false; - } - - Interface_GUIGeneral::lock(); - CGUIMessage msg(GUI_MSG_SETFOCUS, pAddonWindow->m_windowId, control_id); - pAddonWindow->OnMessage(msg); - Interface_GUIGeneral::unlock(); - - return true; -} - -int Interface_GUIWindow::get_focus_id(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - Interface_GUIGeneral::lock(); - int control_id = pAddonWindow->GetFocusedControlID(); - Interface_GUIGeneral::unlock(); - - if (control_id == -1) - CLog::Log(LOGERROR, "Interface_GUIWindow - {}: {} - No control in this window has focus", - __func__, addon->Name()); - - return control_id; -} - -void Interface_GUIWindow::set_control_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - CGUIMessage msg(GUI_MSG_LABEL_SET, pAddonWindow->m_windowId, control_id); - msg.SetLabel(label); - pAddonWindow->OnMessage(msg); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_control_visible(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - CGUIMessage msg(visible ? GUI_MSG_VISIBLE : GUI_MSG_HIDDEN, pAddonWindow->m_windowId, control_id); - pAddonWindow->OnMessage(msg); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_control_selected(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool selected) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - CGUIMessage msg(selected ? GUI_MSG_SET_SELECTED : GUI_MSG_SET_DESELECTED, - pAddonWindow->m_windowId, control_id); - pAddonWindow->OnMessage(msg); - Interface_GUIGeneral::unlock(); -} -//@} - -/*! - * Window property functions - */ -//@{ -void Interface_GUIWindow::set_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}', value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - static_cast(value), addon ? addon->ID() : "unknown"); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - pAddonWindow->SetProperty(lowerKey, value); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_property_int(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - int value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - pAddonWindow->SetProperty(lowerKey, value); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_property_bool(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - bool value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - pAddonWindow->SetProperty(lowerKey, value); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_property_double(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - double value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - pAddonWindow->SetProperty(lowerKey, value); - Interface_GUIGeneral::unlock(); -} - -char* Interface_GUIWindow::get_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return nullptr; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - std::string value = pAddonWindow->GetProperty(lowerKey).asString(); - Interface_GUIGeneral::unlock(); - - return strdup(value.c_str()); -} - -int Interface_GUIWindow::get_property_int(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return -1; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - int value = static_cast(pAddonWindow->GetProperty(lowerKey).asInteger()); - Interface_GUIGeneral::unlock(); - - return value; -} - -bool Interface_GUIWindow::get_property_bool(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return false; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - bool value = pAddonWindow->GetProperty(lowerKey).asBoolean(); - Interface_GUIGeneral::unlock(); - - return value; -} - -double Interface_GUIWindow::get_property_double(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return 0.0; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - double value = pAddonWindow->GetProperty(lowerKey).asDouble(); - Interface_GUIGeneral::unlock(); - - return value; -} - -void Interface_GUIWindow::clear_properties(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->ClearProperties(); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::clear_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - addon ? addon->ID() : "unknown"); - return; - } - - std::string lowerKey = key; - StringUtils::ToLower(lowerKey); - - Interface_GUIGeneral::lock(); - pAddonWindow->SetProperty(lowerKey, ""); - Interface_GUIGeneral::unlock(); -} -//@} - -/*! - * List item functions - */ -//@{ -void Interface_GUIWindow::clear_item_list(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->ClearList(); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::add_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item, - int list_position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "item='{}') on addon '{}'", - __func__, kodiBase, handle, item, addon ? addon->ID() : "unknown"); - return; - } - - CFileItemPtr* pItem(static_cast(item)); - if (pItem->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIWindow::{} - empty list item called on addon '{}'", __func__, - addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->AddItem(pItem, list_position); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::remove_list_item_from_position(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->RemoveItem(list_position); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::remove_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !item) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "item='{}') on addon '{}'", - __func__, kodiBase, handle, item, addon ? addon->ID() : "unknown"); - return; - } - - CFileItemPtr* pItem(static_cast(item)); - if (pItem->get() == nullptr) - { - CLog::Log(LOGERROR, "Interface_GUIWindow::{} - empty list item called on addon '{}'", __func__, - addon->ID()); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->RemoveItem(pItem); - Interface_GUIGeneral::unlock(); -} - -KODI_GUI_LISTITEM_HANDLE Interface_GUIWindow::get_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - Interface_GUIGeneral::lock(); - CFileItemPtr* pItem(pAddonWindow->GetListItem(list_position)); - if (pItem == nullptr || pItem->get() == nullptr) - { - CLog::Log(LOGERROR, "ADDON::Interface_GUIWindow - {}: {} - Index out of range", __func__, - addon->Name()); - - if (pItem) - { - delete pItem; - pItem = nullptr; - } - } - Interface_GUIGeneral::unlock(); - - return pItem; -} - -void Interface_GUIWindow::set_current_list_position(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->SetCurrentListPosition(list_position); - Interface_GUIGeneral::unlock(); -} - -int Interface_GUIWindow::get_current_list_position(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - Interface_GUIGeneral::lock(); - int listPos = pAddonWindow->GetCurrentListPosition(); - Interface_GUIGeneral::unlock(); - - return listPos; -} - -int Interface_GUIWindow::get_list_size(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - Interface_GUIGeneral::lock(); - int listSize = pAddonWindow->GetListSize(); - Interface_GUIGeneral::unlock(); - - return listSize; -} - -void Interface_GUIWindow::set_container_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !key || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "key='{}', value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(key), - static_cast(value), addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->SetContainerProperty(key, value); - Interface_GUIGeneral::unlock(); -} - -void Interface_GUIWindow::set_container_content(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}', " - "value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(value), - addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->SetContainerContent(value); - Interface_GUIGeneral::unlock(); -} - -int Interface_GUIWindow::get_current_container_id(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - Interface_GUIGeneral::lock(); - int id = pAddonWindow->GetCurrentContainerControlId(); - Interface_GUIGeneral::unlock(); - - return id; -} -//@} - -/*! - * Various functions - */ -//@{ -void Interface_GUIWindow::mark_dirty_region(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - pAddonWindow->MarkDirtyRegion(); - Interface_GUIGeneral::unlock(); -} -//@} - -/*! - * GUI control access functions - */ -//@{ -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_button(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_BUTTON, - "button"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_edit(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_EDIT, "edit"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_fade_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_FADELABEL, - "fade label"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_image(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_IMAGE, "image"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_LABEL, "label"); -} -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_progress(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_PROGRESS, - "progress"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_radio_button(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_RADIO, - "radio button"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_render_addon(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - CGUIControl* pGUIControl = static_cast(GetControl( - kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_RENDERADDON, "renderaddon")); - if (!pGUIControl) - return nullptr; - - CGUIAddonRenderingControl* pRenderControl = - new CGUIAddonRenderingControl(dynamic_cast(pGUIControl)); - return pRenderControl; -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_settings_slider( - KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_SETTINGS_SLIDER, - "settings slider"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_slider(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_SLIDER, - "slider"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_spin(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_SPINEX, "spin"); -} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::get_control_text_box(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id) -{ - return GetControl(kodiBase, handle, control_id, __func__, CGUIControl::GUICONTROL_TEXTBOX, - "textbox"); -} -//@} - -KODI_GUI_CONTROL_HANDLE Interface_GUIWindow::GetControl(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - const char* function, - CGUIControl::GUICONTROLTYPES type, - const std::string& typeName) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonWindow* pAddonWindow = static_cast(handle); - if (!addon || !pAddonWindow) - { - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - invalid handler data (kodiBase='{}', handle='{}') on " - "addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return pAddonWindow->GetAddonControl(control_id, type, typeName); -} - -int Interface_GUIWindow::GetNextAvailableWindowId() -{ - Interface_GUIGeneral::lock(); - - // if window WINDOW_ADDON_END is in use it means addon can't create more windows - if (CServiceBroker::GetGUI()->GetWindowManager().GetWindow(WINDOW_ADDON_END)) - { - Interface_GUIGeneral::unlock(); - CLog::Log(LOGERROR, - "Interface_GUIWindow::{} - Maximum number of windows for binary addons reached", - __func__); - return -1; - } - - // window id's WINDOW_ADDON_START - WINDOW_ADDON_END are reserved for addons - // get first window id that is not in use - int id = WINDOW_ADDON_START; - while (id < WINDOW_ADDON_END && - CServiceBroker::GetGUI()->GetWindowManager().GetWindow(id) != nullptr) - id++; - - Interface_GUIGeneral::unlock(); - return id; -} - -CGUIAddonWindow::CGUIAddonWindow(int id, const std::string& strXML, CAddonDll* addon, bool isMedia) - : CGUIMediaWindow(id, strXML.c_str()), - m_clientHandle{nullptr}, - CBOnInit{nullptr}, - CBOnFocus{nullptr}, - CBOnClick{nullptr}, - CBOnAction{nullptr}, - CBGetContextButtons{nullptr}, - CBOnContextButton{nullptr}, - m_windowId(id), - m_oldWindowId(0), - m_actionEvent(true), - m_addon(addon), - m_isMedia(isMedia) -{ - m_loadType = LOAD_ON_GUI_INIT; -} - -CGUIControl* CGUIAddonWindow::GetAddonControl(int controlId, - CGUIControl::GUICONTROLTYPES type, - const std::string& typeName) -{ - // Load window resources, if not already done, to have related xml content - // present and to let control find it - if (!m_windowLoaded) - { - if (!Initialize()) - { - CLog::Log(LOGERROR, - "CGUIAddonGUI_Window::{}: {} - Window initialize failed by control id '{}' request " - "for '{}'", - __func__, m_addon->Name(), controlId, typeName); - return nullptr; - } - } - - CGUIControl* pGUIControl = GetControl(controlId); - if (!pGUIControl) - { - CLog::Log(LOGERROR, - "CGUIAddonGUI_Window::{}: {} - Requested GUI control Id '{}' for '{}' not present!", - __func__, m_addon->Name(), controlId, typeName); - return nullptr; - } - else if (pGUIControl->GetControlType() != type) - { - CLog::Log(LOGERROR, - "CGUIAddonGUI_Window::{}: {} - Requested GUI control Id '{}' not the type '{}'!", - __func__, m_addon->Name(), controlId, typeName); - return nullptr; - } - - return pGUIControl; -} - -bool CGUIAddonWindow::OnAction(const CAction& action) -{ - // Let addon decide whether it wants to handle action first - if (CBOnAction && - CBOnAction(m_clientHandle, CAddonGUITranslator::TranslateActionIdToAddon(action.GetID()))) - return true; - - return CGUIWindow::OnAction(action); -} - -bool CGUIAddonWindow::OnMessage(CGUIMessage& message) -{ - switch (message.GetMessage()) - { - case GUI_MSG_WINDOW_DEINIT: - { - return CGUIMediaWindow::OnMessage(message); - } - break; - - case GUI_MSG_WINDOW_INIT: - { - CGUIMediaWindow::OnMessage(message); - - if (CBOnInit) - CBOnInit(m_clientHandle); - return true; - } - break; - - case GUI_MSG_FOCUSED: - { - if (m_viewControl.HasControl(message.GetControlId()) && - m_viewControl.GetCurrentControl() != message.GetControlId()) - { - m_viewControl.SetFocused(); - return true; - } - // check if our focused control is one of our category buttons - int iControl = message.GetControlId(); - if (CBOnFocus) - CBOnFocus(m_clientHandle, iControl); - } - break; - - case GUI_MSG_NOTIFY_ALL: - { - // most messages from GUI_MSG_NOTIFY_ALL break container content, whitelist working ones. - if (message.GetParam1() == GUI_MSG_PAGE_CHANGE || - message.GetParam1() == GUI_MSG_WINDOW_RESIZE) - return CGUIMediaWindow::OnMessage(message); - return true; - } - - case GUI_MSG_CLICKED: - { - int iControl = message.GetSenderId(); - if (iControl && iControl != this->GetID()) - { - CGUIControl* controlClicked = this->GetControl(iControl); - - // The old python way used to check list AND SELECITEM method or if its a button, checkmark. - // Its done this way for now to allow other controls without a python version like togglebutton to still raise a onAction event - if (controlClicked) // Will get problems if we the id is not on the window and we try to do GetControlType on it. So check to make sure it exists - { - if ((controlClicked->IsContainer() && (message.GetParam1() == ACTION_SELECT_ITEM || - message.GetParam1() == ACTION_MOUSE_LEFT_CLICK)) || - !controlClicked->IsContainer()) - { - if (CBOnClick) - return CBOnClick(m_clientHandle, iControl); - } - else if (controlClicked->IsContainer() && - (message.GetParam1() == ACTION_MOUSE_RIGHT_CLICK || - message.GetParam1() == ACTION_CONTEXT_MENU)) - { - if (CBOnAction) - { - // Check addon want to handle right click for a context menu, if - // not used from addon becomes "GetContextButtons(...)" called. - if (CBOnAction(m_clientHandle, ADDON_ACTION_CONTEXT_MENU)) - return true; - } - } - } - } - } - break; - } - - return CGUIMediaWindow::OnMessage(message); -} - -void CGUIAddonWindow::AllocResources(bool forceLoad /*= false */) -{ - std::string tmpDir = URIUtils::GetDirectory(GetProperty("xmlfile").asString()); - std::string fallbackMediaPath; - URIUtils::GetParentPath(tmpDir, fallbackMediaPath); - URIUtils::RemoveSlashAtEnd(fallbackMediaPath); - m_mediaDir = fallbackMediaPath; - - CServiceBroker::GetGUI()->GetTextureManager().AddTexturePath(m_mediaDir); - CGUIMediaWindow::AllocResources(forceLoad); - CServiceBroker::GetGUI()->GetTextureManager().RemoveTexturePath(m_mediaDir); -} - -void CGUIAddonWindow::Render() -{ - CServiceBroker::GetGUI()->GetTextureManager().AddTexturePath(m_mediaDir); - CGUIMediaWindow::Render(); - CServiceBroker::GetGUI()->GetTextureManager().RemoveTexturePath(m_mediaDir); -} - -void CGUIAddonWindow::AddItem(CFileItemPtr* fileItem, int itemPosition) -{ - if (itemPosition == -1 || itemPosition > m_vecItems->Size()) - { - m_vecItems->Add(*fileItem); - } - else if (itemPosition < -1 && !(itemPosition - 1 < m_vecItems->Size())) - { - m_vecItems->AddFront(*fileItem, 0); - } - else - { - m_vecItems->AddFront(*fileItem, itemPosition); - } - m_viewControl.SetItems(*m_vecItems); - UpdateButtons(); -} - -void CGUIAddonWindow::RemoveItem(int itemPosition) -{ - m_vecItems->Remove(itemPosition); - m_viewControl.SetItems(*m_vecItems); - UpdateButtons(); -} - -void CGUIAddonWindow::RemoveItem(CFileItemPtr* fileItem) -{ - m_vecItems->Remove(fileItem->get()); - m_viewControl.SetItems(*m_vecItems); - UpdateButtons(); -} - -int CGUIAddonWindow::GetCurrentListPosition() -{ - return m_viewControl.GetSelectedItem(); -} - -void CGUIAddonWindow::SetCurrentListPosition(int item) -{ - m_viewControl.SetSelectedItem(item); -} - -int CGUIAddonWindow::GetListSize() -{ - return m_vecItems->Size(); -} - -CFileItemPtr* CGUIAddonWindow::GetListItem(int position) -{ - if (position < 0 || position >= m_vecItems->Size()) - return nullptr; - return new CFileItemPtr(m_vecItems->Get(position)); -} - -void CGUIAddonWindow::ClearList() -{ - ClearFileItems(); - - m_viewControl.SetItems(*m_vecItems); - UpdateButtons(); -} - -void CGUIAddonWindow::SetContainerProperty(const std::string& key, const std::string& value) -{ - m_vecItems->SetProperty(key, value); -} - -void CGUIAddonWindow::SetContainerContent(const std::string& value) -{ - m_vecItems->SetContent(value); -} - -int CGUIAddonWindow::GetCurrentContainerControlId() -{ - return m_viewControl.GetCurrentControl(); -} - -void CGUIAddonWindow::GetContextButtons(int itemNumber, CContextButtons& buttons) -{ - gui_context_menu_pair c_buttons[ADDON_MAX_CONTEXT_ENTRIES] = {}; - unsigned int size = ADDON_MAX_CONTEXT_ENTRIES; - if (CBGetContextButtons) - { - CBGetContextButtons(m_clientHandle, itemNumber, c_buttons, &size); - for (unsigned int i = 0; i < size; ++i) - buttons.push_back(std::pair(c_buttons[i].id, c_buttons[i].name)); - } -} - -bool CGUIAddonWindow::OnContextButton(int itemNumber, CONTEXT_BUTTON button) -{ - if (CBOnContextButton) - return CBOnContextButton(m_clientHandle, itemNumber, static_cast(button)); - return false; -} - -void CGUIAddonWindow::WaitForActionEvent(unsigned int timeout) -{ - m_actionEvent.Wait(std::chrono::milliseconds(timeout)); - m_actionEvent.Reset(); -} - -void CGUIAddonWindow::PulseActionEvent() -{ - m_actionEvent.Set(); -} - -void CGUIAddonWindow::SetupShares() -{ - UpdateButtons(); -} - - -CGUIAddonWindowDialog::CGUIAddonWindowDialog(int id, const std::string& strXML, CAddonDll* addon) - : CGUIAddonWindow(id, strXML, addon, false), m_bRunning(false) -{ -} - -void CGUIAddonWindowDialog::Show(bool show /* = true */, bool modal /* = true*/) -{ - if (modal) - { - unsigned int count = CServiceBroker::GetWinSystem()->GetGfxContext().exit(); - CApplicationMessenger::GetInstance().SendMsg(TMSG_GUI_ADDON_DIALOG, 0, show ? 1 : 0, - static_cast(this)); - CServiceBroker::GetWinSystem()->GetGfxContext().restore(count); - } - else - CApplicationMessenger::GetInstance().PostMsg(TMSG_GUI_ADDON_DIALOG, 0, show ? 1 : 0, - static_cast(this)); -} - -void CGUIAddonWindowDialog::Show_Internal(bool show /* = true */) -{ - if (show) - { - m_bRunning = true; - CServiceBroker::GetGUI()->GetWindowManager().RegisterDialog(this); - - // activate this window... - CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, WINDOW_INVALID, GetID()); - OnMessage(msg); - - // this dialog is derived from GUIMediaWindow - // make sure it is rendered last - m_renderOrder = RENDER_ORDER_DIALOG; - while (m_bRunning) - { - if (!ProcessRenderLoop(false)) - break; - } - } - else // hide - { - m_bRunning = false; - - CGUIMessage msg(GUI_MSG_WINDOW_DEINIT, 0, 0); - OnMessage(msg); - - CServiceBroker::GetGUI()->GetWindowManager().RemoveDialog(GetID()); - } -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/Window.h b/xbmc/addons/interfaces/gui/Window.h deleted file mode 100644 index dad0737cb7478..0000000000000 --- a/xbmc/addons/interfaces/gui/Window.h +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/window.h" -#include "threads/Event.h" -#include "windows/GUIMediaWindow.h" - -extern "C" -{ - - struct AddonGlobalInterface; - struct gui_context_menu_pair; - - namespace ADDON - { - class CAddonDll; - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/Window.h" - */ - struct Interface_GUIWindow - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - /* Window creation functions */ - static KODI_GUI_WINDOW_HANDLE create(KODI_HANDLE kodiBase, - const char* xml_filename, - const char* default_skin, - bool as_dialog, - bool is_media); - static void destroy(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static void set_callbacks(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*CBInit)(KODI_GUI_CLIENT_HANDLE), - bool (*CBFocus)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBClick)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBOnAction)(KODI_GUI_CLIENT_HANDLE, ADDON_ACTION), - void (*CBGetContextButtons)(KODI_GUI_CLIENT_HANDLE, - int, - gui_context_menu_pair*, - unsigned int*), - bool (*CBOnContextButton)(KODI_GUI_CLIENT_HANDLE, int, unsigned int)); - static bool show(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static bool close(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static bool do_modal(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* Window control functions */ - static bool set_focus_id(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - static int get_focus_id(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static void set_control_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - const char* label); - static void set_control_visible(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool visible); - static void set_control_selected(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool selected); - - /* Window property functions */ - static void set_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value); - static void set_property_int(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - int value); - static void set_property_bool(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - bool value); - static void set_property_double(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - double value); - static char* get_property(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, const char* key); - static int get_property_int(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key); - static bool get_property_bool(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key); - static double get_property_double(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key); - static void clear_properties(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static void clear_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key); - - /* List item functions */ - static void clear_item_list(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static void add_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item, - int list_position); - static void remove_list_item_from_position(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position); - static void remove_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item); - static KODI_GUI_LISTITEM_HANDLE get_list_item(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position); - static void set_current_list_position(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position); - static int get_current_list_position(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static int get_list_size(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - static void set_container_property(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value); - static void set_container_content(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* value); - static int get_current_container_id(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* Various functions */ - static void mark_dirty_region(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* GUI control access functions */ - static KODI_GUI_CONTROL_HANDLE get_control_button(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_edit(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_fade_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_image(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_label(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_radio_button(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_progress(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_render_addon(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_settings_slider(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_slider(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_spin(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - static KODI_GUI_CONTROL_HANDLE get_control_text_box(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id); - //@} - - private: - static KODI_GUI_CONTROL_HANDLE GetControl(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - const char* function, - CGUIControl::GUICONTROLTYPES type, - const std::string& typeName); - static int GetNextAvailableWindowId(); - }; - - class CGUIAddonWindow : public CGUIMediaWindow - { - friend struct Interface_GUIWindow; - - public: - CGUIAddonWindow(int id, const std::string& strXML, ADDON::CAddonDll* addon, bool isMedia); - ~CGUIAddonWindow() override = default; - - bool OnMessage(CGUIMessage& message) override; - bool OnAction(const CAction& action) override; - void AllocResources(bool forceLoad = false) override; - void Render() override; - bool IsMediaWindow() const override { return m_isMedia; } - - /* Addon to Kodi call functions */ - void PulseActionEvent(); - void AddItem(CFileItemPtr* fileItem, int itemPosition); - void RemoveItem(int itemPosition); - void RemoveItem(CFileItemPtr* fileItem); - void ClearList(); - CFileItemPtr* GetListItem(int position); - int GetListSize(); - int GetCurrentListPosition(); - void SetCurrentListPosition(int item); - void SetContainerProperty(const std::string& key, const std::string& value); - void SetContainerContent(const std::string& value); - int GetCurrentContainerControlId(); - CGUIControl* GetAddonControl(int controlId, - CGUIControl::GUICONTROLTYPES type, - const std::string& typeName); - - protected: - void GetContextButtons(int itemNumber, CContextButtons& buttons) override; - bool OnContextButton(int itemNumber, CONTEXT_BUTTON button) override; - void SetupShares() override; - - /* kodi to addon callback function addresses */ - KODI_GUI_CLIENT_HANDLE m_clientHandle; - bool (*CBOnInit)(KODI_GUI_CLIENT_HANDLE cbhdl); - bool (*CBOnFocus)(KODI_GUI_CLIENT_HANDLE cbhdl, int controlId); - bool (*CBOnClick)(KODI_GUI_CLIENT_HANDLE cbhdl, int controlId); - bool (*CBOnAction)(KODI_GUI_CLIENT_HANDLE cbhdl, ADDON_ACTION actionId); - void (*CBGetContextButtons)(KODI_GUI_CLIENT_HANDLE cbhdl, - int itemNumber, - gui_context_menu_pair* buttons, - unsigned int* size); - bool (*CBOnContextButton)(KODI_GUI_CLIENT_HANDLE cbhdl, int itemNumber, unsigned int button); - - const int m_windowId; - int m_oldWindowId; - - private: - void WaitForActionEvent(unsigned int timeout); - - CEvent m_actionEvent; - ADDON::CAddonDll* m_addon; - std::string m_mediaDir; - bool m_isMedia; - }; - - class CGUIAddonWindowDialog : public CGUIAddonWindow - { - public: - CGUIAddonWindowDialog(int id, const std::string& strXML, ADDON::CAddonDll* addon); - - bool IsDialogRunning() const override { return m_bRunning; } - bool IsDialog() const override { return true; } - bool IsModalDialog() const override { return true; } - - void Show(bool show = true, bool modal = true); - void Show_Internal(bool show = true); - - private: - bool m_bRunning; - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Button.cpp b/xbmc/addons/interfaces/gui/controls/Button.cpp deleted file mode 100644 index 24a99946b04fe..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Button.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Button.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Button.h" -#include "guilib/GUIButtonControl.h" -#include "utils/StringUtils.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlButton::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_button = - new AddonToKodiFuncTable_kodi_gui_control_button(); - - addonInterface->toKodi->kodi_gui->control_button->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_button->set_enabled = set_enabled; - - addonInterface->toKodi->kodi_gui->control_button->set_label = set_label; - addonInterface->toKodi->kodi_gui->control_button->get_label = get_label; - - addonInterface->toKodi->kodi_gui->control_button->set_label2 = set_label2; - addonInterface->toKodi->kodi_gui->control_button->get_label2 = get_label2; -} - -void Interface_GUIControlButton::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_button; -} - -void Interface_GUIControlButton::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlButton::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enabled); -} - -void Interface_GUIControlButton::set_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetLabel(label); -} - -char* Interface_GUIControlButton::get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetLabel().c_str()); -} - -void Interface_GUIControlButton::set_label2(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetLabel2(label); -} - -char* Interface_GUIControlButton::get_label2(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlButton::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetLabel2().c_str()); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Button.h b/xbmc/addons/interfaces/gui/controls/Button.h deleted file mode 100644 index 221ae4ea6641a..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Button.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Button.h" - */ - struct Interface_GUIControlButton - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void set_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_label2(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label2(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/CMakeLists.txt b/xbmc/addons/interfaces/gui/controls/CMakeLists.txt deleted file mode 100644 index 0a708c662ee91..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -set(SOURCES Button.cpp - Edit.cpp - FadeLabel.cpp - Image.cpp - Label.cpp - Progress.cpp - RadioButton.cpp - Rendering.cpp - SettingsSlider.cpp - Slider.cpp - Spin.cpp - TextBox.cpp) - -set(HEADERS Button.h - Edit.h - FadeLabel.h - Image.h - Label.h - Progress.h - RadioButton.h - Rendering.h - SettingsSlider.h - Slider.h - Spin.h - TextBox.h) - -core_add_library(addons_interfaces_gui_controls) diff --git a/xbmc/addons/interfaces/gui/controls/Edit.cpp b/xbmc/addons/interfaces/gui/controls/Edit.cpp deleted file mode 100644 index b537279764602..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Edit.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Edit.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Edit.h" -#include "guilib/GUIEditControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlEdit::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_edit = new AddonToKodiFuncTable_kodi_gui_control_edit(); - - addonInterface->toKodi->kodi_gui->control_edit->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_edit->set_enabled = set_enabled; - addonInterface->toKodi->kodi_gui->control_edit->set_input_type = set_input_type; - addonInterface->toKodi->kodi_gui->control_edit->set_label = set_label; - addonInterface->toKodi->kodi_gui->control_edit->get_label = get_label; - addonInterface->toKodi->kodi_gui->control_edit->set_text = set_text; - addonInterface->toKodi->kodi_gui->control_edit->get_text = get_text; - addonInterface->toKodi->kodi_gui->control_edit->set_cursor_position = set_cursor_position; - addonInterface->toKodi->kodi_gui->control_edit->get_cursor_position = get_cursor_position; -} - -void Interface_GUIControlEdit::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_edit; -} - -void Interface_GUIControlEdit::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlEdit::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enable) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enable); -} - -void Interface_GUIControlEdit::set_input_type(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int type, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}', " - "heading='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(heading), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIEditControl::INPUT_TYPE kodiType; - switch (static_cast(type)) - { - case ADDON_INPUT_TYPE_TEXT: - kodiType = CGUIEditControl::INPUT_TYPE_TEXT; - break; - case ADDON_INPUT_TYPE_NUMBER: - kodiType = CGUIEditControl::INPUT_TYPE_NUMBER; - break; - case ADDON_INPUT_TYPE_SECONDS: - kodiType = CGUIEditControl::INPUT_TYPE_SECONDS; - break; - case ADDON_INPUT_TYPE_TIME: - kodiType = CGUIEditControl::INPUT_TYPE_TIME; - break; - case ADDON_INPUT_TYPE_DATE: - kodiType = CGUIEditControl::INPUT_TYPE_DATE; - break; - case ADDON_INPUT_TYPE_IPADDRESS: - kodiType = CGUIEditControl::INPUT_TYPE_IPADDRESS; - break; - case ADDON_INPUT_TYPE_PASSWORD: - kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD; - break; - case ADDON_INPUT_TYPE_PASSWORD_MD5: - kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD_MD5; - break; - case ADDON_INPUT_TYPE_SEARCH: - kodiType = CGUIEditControl::INPUT_TYPE_SEARCH; - break; - case ADDON_INPUT_TYPE_FILTER: - kodiType = CGUIEditControl::INPUT_TYPE_FILTER; - break; - case ADDON_INPUT_TYPE_READONLY: - default: - kodiType = CGUIEditControl::INPUT_TYPE_PASSWORD_NUMBER_VERIFY_NEW; - } - - control->SetInputType(kodiType, heading); -} - -void Interface_GUIControlEdit::set_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetLabel(label); -} - -char* Interface_GUIControlEdit::get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetLabel().c_str()); -} - -void Interface_GUIControlEdit::set_text(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}', " - "text='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(text), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetLabel2(text); -} - -char* Interface_GUIControlEdit::get_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetLabel2().c_str()); -} - -void Interface_GUIControlEdit::set_cursor_position(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - unsigned int position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetCursorPosition(position); -} - -unsigned int Interface_GUIControlEdit::get_cursor_position(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIEditControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlEdit::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0; - } - - return control->GetCursorPosition(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Edit.h b/xbmc/addons/interfaces/gui/controls/Edit.h deleted file mode 100644 index 9dda1e2046681..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Edit.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Edit.h" - */ - struct Interface_GUIControlEdit - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void set_input_type(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int type, - const char* heading); - - static void set_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - static char* get_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_cursor_position(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - unsigned int position); - static unsigned int get_cursor_position(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/FadeLabel.cpp b/xbmc/addons/interfaces/gui/controls/FadeLabel.cpp deleted file mode 100644 index 13c560442ce3b..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/FadeLabel.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "FadeLabel.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/FadeLabel.h" -#include "guilib/GUIFadeLabelControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlFadeLabel::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_fade_label = - new AddonToKodiFuncTable_kodi_gui_control_fade_label(); - - addonInterface->toKodi->kodi_gui->control_fade_label->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_fade_label->add_label = add_label; - addonInterface->toKodi->kodi_gui->control_fade_label->get_label = get_label; - addonInterface->toKodi->kodi_gui->control_fade_label->set_scrolling = set_scrolling; - addonInterface->toKodi->kodi_gui->control_fade_label->reset = reset; -} - -void Interface_GUIControlFadeLabel::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_fade_label; -} - -void Interface_GUIControlFadeLabel::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIFadeLabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlFadeLabel::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlFadeLabel::add_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIFadeLabelControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlFadeLabel::{} - invalid handler data (kodiBase='{}', " - "handle='{}', label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_ADD, control->GetParentID(), control->GetID()); - msg.SetLabel(label); - control->OnMessage(msg); -} - -char* Interface_GUIControlFadeLabel::get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIFadeLabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlFadeLabel::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - CGUIMessage msg(GUI_MSG_ITEM_SELECTED, control->GetParentID(), control->GetID()); - control->OnMessage(msg); - std::string text = msg.GetLabel(); - return strdup(text.c_str()); -} - -void Interface_GUIControlFadeLabel::set_scrolling(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool scroll) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIFadeLabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlFadeLabel::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetScrolling(scroll); -} - -void Interface_GUIControlFadeLabel::reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIFadeLabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlFadeLabel::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); - control->OnMessage(msg); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/FadeLabel.h b/xbmc/addons/interfaces/gui/controls/FadeLabel.h deleted file mode 100644 index 2c3cd6803735c..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/FadeLabel.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/FadeLabel.h" - */ - struct Interface_GUIControlFadeLabel - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - static void set_selected(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool selected); - - static void add_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_scrolling(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool scroll); - static void reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Image.cpp b/xbmc/addons/interfaces/gui/controls/Image.cpp deleted file mode 100644 index 88f368c628a98..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Image.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Image.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Image.h" -#include "guilib/GUIImage.h" -#include "utils/log.h" - -using namespace KODI; - -namespace ADDON -{ - -void Interface_GUIControlImage::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_image = - new AddonToKodiFuncTable_kodi_gui_control_image(); - - addonInterface->toKodi->kodi_gui->control_image->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_image->set_filename = set_filename; - addonInterface->toKodi->kodi_gui->control_image->set_color_diffuse = set_color_diffuse; -} - -void Interface_GUIControlImage::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_image; -} - -void Interface_GUIControlImage::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIImage* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlImage::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlImage::set_filename(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* filename, - bool use_cache) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIImage* control = static_cast(handle); - if (!addon || !control || !filename) - { - CLog::Log(LOGERROR, - "Interface_GUIControlImage::{} - invalid handler data (kodiBase='{}', handle='{}', " - "filename='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(filename), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetFileName(filename, false, use_cache); -} - -void Interface_GUIControlImage::set_color_diffuse(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - uint32_t colorDiffuse) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIImage* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlImage::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetColorDiffuse(GUILIB::GUIINFO::CGUIInfoColor(colorDiffuse)); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Image.h b/xbmc/addons/interfaces/gui/controls/Image.h deleted file mode 100644 index b12becea3056d..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Image.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Image.h" - */ - struct Interface_GUIControlImage - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_filename(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* filename, - bool use_cache); - static void set_color_diffuse(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - uint32_t color_diffuse); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Label.cpp b/xbmc/addons/interfaces/gui/controls/Label.cpp deleted file mode 100644 index 3922e3f81506e..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Label.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Label.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Label.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUILabelControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlLabel::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_label = - new AddonToKodiFuncTable_kodi_gui_control_label(); - - addonInterface->toKodi->kodi_gui->control_label->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_label->set_label = set_label; - addonInterface->toKodi->kodi_gui->control_label->get_label = get_label; -} - -void Interface_GUIControlLabel::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_label; -} - -void Interface_GUIControlLabel::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUILabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlLabel::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlLabel::set_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUILabelControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlLabel::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); - msg.SetLabel(label); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -char* Interface_GUIControlLabel::get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUILabelControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlLabel::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetDescription().c_str()); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Label.h b/xbmc/addons/interfaces/gui/controls/Label.h deleted file mode 100644 index 020c3d5d3ec90..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Label.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Label.h" - */ - struct Interface_GUIControlLabel - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - - static void set_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Progress.cpp b/xbmc/addons/interfaces/gui/controls/Progress.cpp deleted file mode 100644 index 639d079d4e813..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Progress.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Progress.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Progress.h" -#include "guilib/GUIProgressControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlProgress::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_progress = - new AddonToKodiFuncTable_kodi_gui_control_progress(); - - addonInterface->toKodi->kodi_gui->control_progress->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_progress->set_percentage = set_percentage; - addonInterface->toKodi->kodi_gui->control_progress->get_percentage = get_percentage; -} - -void Interface_GUIControlProgress::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_progress; -} - -void Interface_GUIControlProgress::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIProgressControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlProgress::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlProgress::set_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float percent) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIProgressControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlProgress::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetPercentage(percent); -} - -float Interface_GUIControlProgress::get_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIProgressControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlProgress::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetPercentage(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Progress.h b/xbmc/addons/interfaces/gui/controls/Progress.h deleted file mode 100644 index c3368fa105fc6..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Progress.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Progress.h" - */ - struct Interface_GUIControlProgress - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - - static void set_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - static float get_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/RadioButton.cpp b/xbmc/addons/interfaces/gui/controls/RadioButton.cpp deleted file mode 100644 index 9d3b82619b368..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/RadioButton.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "RadioButton.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/RadioButton.h" -#include "guilib/GUIRadioButtonControl.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlRadioButton::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_radio_button = - new AddonToKodiFuncTable_kodi_gui_control_radio_button(); - - addonInterface->toKodi->kodi_gui->control_radio_button->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_radio_button->set_enabled = set_enabled; - - addonInterface->toKodi->kodi_gui->control_radio_button->set_label = set_label; - addonInterface->toKodi->kodi_gui->control_radio_button->get_label = get_label; - - addonInterface->toKodi->kodi_gui->control_radio_button->set_selected = set_selected; - addonInterface->toKodi->kodi_gui->control_radio_button->is_selected = is_selected; -} - -void Interface_GUIControlRadioButton::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_radio_button; -} - -void Interface_GUIControlRadioButton::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlRadioButton::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enabled); -} - -void Interface_GUIControlRadioButton::set_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}', label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetLabel(label); -} - -char* Interface_GUIControlRadioButton::get_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetLabel().c_str()); -} - -void Interface_GUIControlRadioButton::set_selected(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool selected) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetSelected(selected); -} - -bool Interface_GUIControlRadioButton::is_selected(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIRadioButtonControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlRadioButton::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return false; - } - - return control->IsSelected(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/RadioButton.h b/xbmc/addons/interfaces/gui/controls/RadioButton.h deleted file mode 100644 index dd7ed4e9e3aa9..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/RadioButton.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/RadioButton.h" - */ - struct Interface_GUIControlRadioButton - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void set_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - static char* get_label(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_selected(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool selected); - static bool is_selected(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Rendering.cpp b/xbmc/addons/interfaces/gui/controls/Rendering.cpp deleted file mode 100644 index a26a27f9c3aeb..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Rendering.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Rendering.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/interfaces/gui/General.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Rendering.h" -#include "guilib/GUIRenderingControl.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlAddonRendering::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_rendering = - new AddonToKodiFuncTable_kodi_gui_control_rendering(); - - addonInterface->toKodi->kodi_gui->control_rendering->set_callbacks = set_callbacks; - addonInterface->toKodi->kodi_gui->control_rendering->destroy = destroy; -} - -void Interface_GUIControlAddonRendering::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_rendering; -} - -void Interface_GUIControlAddonRendering::set_callbacks( - KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*createCB)(KODI_GUI_CLIENT_HANDLE, int, int, int, int, ADDON_HARDWARE_CONTEXT), - void (*renderCB)(KODI_GUI_CLIENT_HANDLE), - void (*stopCB)(KODI_GUI_CLIENT_HANDLE), - bool (*dirtyCB)(KODI_GUI_CLIENT_HANDLE)) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonRenderingControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlAddonRendering::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - control->m_clientHandle = clienthandle; - control->CBCreate = createCB; - control->CBRender = renderCB; - control->CBStop = stopCB; - control->CBDirty = dirtyCB; - control->m_addon = addon; - Interface_GUIGeneral::unlock(); - - control->m_control->InitCallback(control); -} - -void Interface_GUIControlAddonRendering::destroy(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUIAddonRenderingControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlAddonRendering::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - Interface_GUIGeneral::lock(); - static_cast(handle)->Delete(); - Interface_GUIGeneral::unlock(); -} - - -CGUIAddonRenderingControl::CGUIAddonRenderingControl(CGUIRenderingControl* control) - : CBCreate{nullptr}, - CBRender{nullptr}, - CBStop{nullptr}, - CBDirty{nullptr}, - m_clientHandle{nullptr}, - m_addon{nullptr}, - m_control{control}, - m_refCount{1} -{ -} - -bool CGUIAddonRenderingControl::Create(int x, int y, int w, int h, void* device) -{ - if (CBCreate) - { - if (CBCreate(m_clientHandle, x, y, w, h, device)) - { - ++m_refCount; - return true; - } - } - return false; -} - -void CGUIAddonRenderingControl::Render() -{ - if (CBRender) - { - CBRender(m_clientHandle); - } -} - -void CGUIAddonRenderingControl::Stop() -{ - if (CBStop) - { - CBStop(m_clientHandle); - } - - --m_refCount; - if (m_refCount <= 0) - delete this; -} - -void CGUIAddonRenderingControl::Delete() -{ - --m_refCount; - if (m_refCount <= 0) - delete this; -} - -bool CGUIAddonRenderingControl::IsDirty() -{ - bool ret = true; - if (CBDirty) - { - ret = CBDirty(m_clientHandle); - } - return ret; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Rendering.h b/xbmc/addons/interfaces/gui/controls/Rendering.h deleted file mode 100644 index dbd82d86023b2..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Rendering.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h" -#include "guilib/IRenderingCallback.h" - -class CGUIRenderingControl; - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - class CAddonDll; - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Rendering.h" - */ - struct Interface_GUIControlAddonRendering - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_callbacks( - KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*createCB)(KODI_GUI_CLIENT_HANDLE, int, int, int, int, ADDON_HARDWARE_CONTEXT), - void (*renderCB)(KODI_GUI_CLIENT_HANDLE), - void (*stopCB)(KODI_GUI_CLIENT_HANDLE), - bool (*dirtyCB)(KODI_GUI_CLIENT_HANDLE)); - static void destroy(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - //@} - }; - - class CGUIAddonRenderingControl : public IRenderingCallback - { - friend struct Interface_GUIControlAddonRendering; - - public: - explicit CGUIAddonRenderingControl(CGUIRenderingControl* pControl); - ~CGUIAddonRenderingControl() override = default; - - bool Create(int x, int y, int w, int h, void* device) override; - void Render() override; - void Stop() override; - bool IsDirty() override; - virtual void Delete(); - - protected: - bool (*CBCreate)(KODI_GUI_CLIENT_HANDLE cbhdl, int x, int y, int w, int h, void* device); - void (*CBRender)(KODI_GUI_CLIENT_HANDLE cbhdl); - void (*CBStop)(KODI_GUI_CLIENT_HANDLE cbhdl); - bool (*CBDirty)(KODI_GUI_CLIENT_HANDLE cbhdl); - - KODI_GUI_CLIENT_HANDLE m_clientHandle; - CAddonDll* m_addon; - CGUIRenderingControl* m_control; - int m_refCount; - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/SettingsSlider.cpp b/xbmc/addons/interfaces/gui/controls/SettingsSlider.cpp deleted file mode 100644 index c847a642dd94b..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/SettingsSlider.cpp +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "SettingsSlider.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/SettingsSlider.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUISettingsSliderControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlSettingsSlider::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_settings_slider = - new AddonToKodiFuncTable_kodi_gui_control_settings_slider(); - - addonInterface->toKodi->kodi_gui->control_settings_slider->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_settings_slider->set_enabled = set_enabled; - - addonInterface->toKodi->kodi_gui->control_settings_slider->set_text = set_text; - addonInterface->toKodi->kodi_gui->control_settings_slider->reset = reset; - - addonInterface->toKodi->kodi_gui->control_settings_slider->set_int_range = set_int_range; - addonInterface->toKodi->kodi_gui->control_settings_slider->set_int_value = set_int_value; - addonInterface->toKodi->kodi_gui->control_settings_slider->get_int_value = get_int_value; - addonInterface->toKodi->kodi_gui->control_settings_slider->set_int_interval = set_int_interval; - - addonInterface->toKodi->kodi_gui->control_settings_slider->set_percentage = set_percentage; - addonInterface->toKodi->kodi_gui->control_settings_slider->get_percentage = get_percentage; - - addonInterface->toKodi->kodi_gui->control_settings_slider->set_float_range = set_float_range; - addonInterface->toKodi->kodi_gui->control_settings_slider->set_float_value = set_float_value; - addonInterface->toKodi->kodi_gui->control_settings_slider->get_float_value = get_float_value; - addonInterface->toKodi->kodi_gui->control_settings_slider->set_float_interval = - set_float_interval; -} - -void Interface_GUIControlSettingsSlider::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_settings_slider; -} - -void Interface_GUIControlSettingsSlider::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlSettingsSlider::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enabled); -} - -void Interface_GUIControlSettingsSlider::set_text(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}', text='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(text), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); - msg.SetLabel(text); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -void Interface_GUIControlSettingsSlider::reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -void Interface_GUIControlSettingsSlider::set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_INT); - control->SetRange(start, end); -} - -void Interface_GUIControlSettingsSlider::set_int_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_INT); - control->SetIntValue(value); -} - -int Interface_GUIControlSettingsSlider::get_int_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - return control->GetIntValue(); -} - -void Interface_GUIControlSettingsSlider::set_int_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int interval) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetIntInterval(interval); -} - -void Interface_GUIControlSettingsSlider::set_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float percent) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_PERCENTAGE); - control->SetPercentage(percent); -} - -float Interface_GUIControlSettingsSlider::get_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetPercentage(); -} - -void Interface_GUIControlSettingsSlider::set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_FLOAT); - control->SetFloatRange(start, end); -} - -void Interface_GUIControlSettingsSlider::set_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_FLOAT); - control->SetFloatValue(value); -} - -float Interface_GUIControlSettingsSlider::get_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetFloatValue(); -} - -void Interface_GUIControlSettingsSlider::set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISettingsSliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSettingsSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetFloatInterval(interval); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/SettingsSlider.h b/xbmc/addons/interfaces/gui/controls/SettingsSlider.h deleted file mode 100644 index 425c27564f181..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/SettingsSlider.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/SettingsSlider.h" - */ - struct Interface_GUIControlSettingsSlider - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void set_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - static void reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end); - static void set_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - static int get_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_int_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int interval); - - static void set_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - static float get_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - static void set_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - static float get_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Slider.cpp b/xbmc/addons/interfaces/gui/controls/Slider.cpp deleted file mode 100644 index 73502d87e08ef..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Slider.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Slider.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Slider.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUISliderControl.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlSlider::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_slider = - new AddonToKodiFuncTable_kodi_gui_control_slider(); - - addonInterface->toKodi->kodi_gui->control_slider->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_slider->set_enabled = set_enabled; - - addonInterface->toKodi->kodi_gui->control_slider->reset = reset; - addonInterface->toKodi->kodi_gui->control_slider->get_description = get_description; - - addonInterface->toKodi->kodi_gui->control_slider->set_int_range = set_int_range; - addonInterface->toKodi->kodi_gui->control_slider->set_int_value = set_int_value; - addonInterface->toKodi->kodi_gui->control_slider->get_int_value = get_int_value; - addonInterface->toKodi->kodi_gui->control_slider->set_int_interval = set_int_interval; - - addonInterface->toKodi->kodi_gui->control_slider->set_percentage = set_percentage; - addonInterface->toKodi->kodi_gui->control_slider->get_percentage = get_percentage; - - addonInterface->toKodi->kodi_gui->control_slider->set_float_range = set_float_range; - addonInterface->toKodi->kodi_gui->control_slider->set_float_value = set_float_value; - addonInterface->toKodi->kodi_gui->control_slider->get_float_value = get_float_value; - addonInterface->toKodi->kodi_gui->control_slider->set_float_interval = set_float_interval; -} - -void Interface_GUIControlSlider::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_slider; -} - -void Interface_GUIControlSlider::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlSlider::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enabled); -} - -void Interface_GUIControlSlider::reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -char* Interface_GUIControlSlider::get_description(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetDescription().c_str()); -} - -void Interface_GUIControlSlider::set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_INT); - control->SetRange(start, end); -} - -void Interface_GUIControlSlider::set_int_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_INT); - control->SetIntValue(value); -} - -int Interface_GUIControlSlider::get_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - return control->GetIntValue(); -} - -void Interface_GUIControlSlider::set_int_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int interval) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetIntInterval(interval); -} - -void Interface_GUIControlSlider::set_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float percent) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_PERCENTAGE); - control->SetPercentage(percent); -} - -float Interface_GUIControlSlider::get_percentage(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetPercentage(); -} - -void Interface_GUIControlSlider::set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_FLOAT); - control->SetFloatRange(start, end); -} - -void Interface_GUIControlSlider::set_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(SLIDER_CONTROL_TYPE_FLOAT); - control->SetFloatValue(value); -} - -float Interface_GUIControlSlider::get_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetFloatValue(); -} - -void Interface_GUIControlSlider::set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISliderControl* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSlider::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetFloatInterval(interval); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Slider.h b/xbmc/addons/interfaces/gui/controls/Slider.h deleted file mode 100644 index 30afbafadd775..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Slider.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Slider.h" - */ - struct Interface_GUIControlSlider - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static char* get_description(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end); - static void set_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - static int get_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_int_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int interval); - - static void set_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - static float get_percentage(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - static void set_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - static float get_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/Spin.cpp b/xbmc/addons/interfaces/gui/controls/Spin.cpp deleted file mode 100644 index b9eb6ea3fc559..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Spin.cpp +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Spin.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/Spin.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUISpinControlEx.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlSpin::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_spin = new AddonToKodiFuncTable_kodi_gui_control_spin(); - - addonInterface->toKodi->kodi_gui->control_spin->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_spin->set_enabled = set_enabled; - - addonInterface->toKodi->kodi_gui->control_spin->set_text = set_text; - addonInterface->toKodi->kodi_gui->control_spin->reset = reset; - addonInterface->toKodi->kodi_gui->control_spin->set_type = set_type; - - addonInterface->toKodi->kodi_gui->control_spin->add_string_label = add_string_label; - addonInterface->toKodi->kodi_gui->control_spin->set_string_value = set_string_value; - addonInterface->toKodi->kodi_gui->control_spin->get_string_value = get_string_value; - - addonInterface->toKodi->kodi_gui->control_spin->add_int_label = add_int_label; - addonInterface->toKodi->kodi_gui->control_spin->set_int_range = set_int_range; - addonInterface->toKodi->kodi_gui->control_spin->set_int_value = set_int_value; - addonInterface->toKodi->kodi_gui->control_spin->get_int_value = get_int_value; - - addonInterface->toKodi->kodi_gui->control_spin->set_float_range = set_float_range; - addonInterface->toKodi->kodi_gui->control_spin->set_float_value = set_float_value; - addonInterface->toKodi->kodi_gui->control_spin->get_float_value = get_float_value; - addonInterface->toKodi->kodi_gui->control_spin->set_float_interval = set_float_interval; -} - -void Interface_GUIControlSpin::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_spin; -} - -void Interface_GUIControlSpin::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlSpin::set_enabled(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool enabled) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetEnabled(enabled); -} - -void Interface_GUIControlSpin::set_text(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}', " - "text='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(text), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); - msg.SetLabel(text); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -void Interface_GUIControlSpin::reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -void Interface_GUIControlSpin::set_type(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int type) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetType(type); -} - -void Interface_GUIControlSpin::add_string_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control || !label || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}', value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - static_cast(value), addon ? addon->ID() : "unknown"); - return; - } - - control->AddLabel(std::string(label), std::string(value)); -} - -void Interface_GUIControlSpin::set_string_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control || !value) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}', " - "value='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(value), - addon ? addon->ID() : "unknown"); - return; - } - - control->SetStringValue(std::string(value)); -} - -char* Interface_GUIControlSpin::get_string_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetStringValue().c_str()); -} - -void Interface_GUIControlSpin::add_int_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - int value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control || !label) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}', " - "label='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(label), - addon ? addon->ID() : "unknown"); - return; - } - - control->AddLabel(std::string(label), value); -} - -void Interface_GUIControlSpin::set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetRange(start, end); -} - -void Interface_GUIControlSpin::set_int_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetValue(value); -} - -int Interface_GUIControlSpin::get_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return -1; - } - - return control->GetValue(); -} - -void Interface_GUIControlSpin::set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetFloatRange(start, end); -} - -void Interface_GUIControlSpin::set_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float value) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetFloatValue(value); -} - -float Interface_GUIControlSpin::get_float_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return 0.0f; - } - - return control->GetFloatValue(); -} - -void Interface_GUIControlSpin::set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUISpinControlEx* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlSpin::{} - invalid handler data (kodiBase='{}', handle='{}') " - "on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetFloatInterval(interval); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/Spin.h b/xbmc/addons/interfaces/gui/controls/Spin.h deleted file mode 100644 index 1c7102ea44e03..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/Spin.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/Spin.h" - */ - struct Interface_GUIControlSpin - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void set_enabled(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - - static void set_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - static void reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_type(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int type); - - static void add_string_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - const char* value); - static void add_int_label(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - int value); - - static void set_string_value(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* value); - static char* get_string_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_int_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int start, - int end); - static void set_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - static int get_int_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - - static void set_float_range(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - static void set_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - static float get_float_value(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_float_interval(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/controls/TextBox.cpp b/xbmc/addons/interfaces/gui/controls/TextBox.cpp deleted file mode 100644 index 44c5f893d2656..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/TextBox.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "TextBox.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/controls/TextBox.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUITextBox.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIControlTextBox::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->control_text_box = - new AddonToKodiFuncTable_kodi_gui_control_text_box(); - - addonInterface->toKodi->kodi_gui->control_text_box->set_visible = set_visible; - addonInterface->toKodi->kodi_gui->control_text_box->reset = reset; - addonInterface->toKodi->kodi_gui->control_text_box->set_text = set_text; - addonInterface->toKodi->kodi_gui->control_text_box->get_text = get_text; - addonInterface->toKodi->kodi_gui->control_text_box->scroll = scroll; - addonInterface->toKodi->kodi_gui->control_text_box->set_auto_scrolling = set_auto_scrolling; -} - -void Interface_GUIControlTextBox::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->control_text_box; -} - -void Interface_GUIControlTextBox::set_visible(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - bool visible) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetVisible(visible); -} - -void Interface_GUIControlTextBox::reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_RESET, control->GetParentID(), control->GetID()); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -void Interface_GUIControlTextBox::set_text(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}', text='{}') on addon '{}'", - __func__, kodiBase, handle, static_cast(text), - addon ? addon->ID() : "unknown"); - return; - } - - CGUIMessage msg(GUI_MSG_LABEL_SET, control->GetParentID(), control->GetID()); - msg.SetLabel(text); - CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, control->GetParentID()); -} - -char* Interface_GUIControlTextBox::get_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return nullptr; - } - - return strdup(control->GetDescription().c_str()); -} - -void Interface_GUIControlTextBox::scroll(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - unsigned int position) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->Scroll(position); -} - -void Interface_GUIControlTextBox::set_auto_scrolling( - KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat) -{ - CAddonDll* addon = static_cast(kodiBase); - CGUITextBox* control = static_cast(handle); - if (!addon || !control) - { - CLog::Log(LOGERROR, - "Interface_GUIControlTextBox::{} - invalid handler data (kodiBase='{}', " - "handle='{}') on addon '{}'", - __func__, kodiBase, handle, addon ? addon->ID() : "unknown"); - return; - } - - control->SetAutoScrolling(delay, time, repeat); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/controls/TextBox.h b/xbmc/addons/interfaces/gui/controls/TextBox.h deleted file mode 100644 index 09c2ff4e6152b..0000000000000 --- a/xbmc/addons/interfaces/gui/controls/TextBox.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold general gui functions and initialize also all other gui related types not - * related to a instance type and usable for every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/controls/TextBox.h" - */ - struct Interface_GUIControlTextBox - { - - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void set_visible(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - static void reset(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void set_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - static char* get_text(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - static void scroll(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, unsigned int position); - static void set_auto_scrolling( - KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/CMakeLists.txt b/xbmc/addons/interfaces/gui/dialogs/CMakeLists.txt deleted file mode 100644 index 4dad4e9b73fa5..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -set(SOURCES ContextMenu.cpp - ExtendedProgressBar.cpp - FileBrowser.cpp - Keyboard.cpp - Numeric.cpp - OK.cpp - Progress.cpp - Select.cpp - TextViewer.cpp - YesNo.cpp) - -set(HEADERS ContextMenu.h - ExtendedProgressBar.h - FileBrowser.h - Keyboard.h - Numeric.h - OK.h - Progress.h - Select.h - TextViewer.h - YesNo.h) - -core_add_library(addons_interfaces_gui_dialogs) diff --git a/xbmc/addons/interfaces/gui/dialogs/ContextMenu.cpp b/xbmc/addons/interfaces/gui/dialogs/ContextMenu.cpp deleted file mode 100644 index e0e5684652ff6..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/ContextMenu.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "ContextMenu.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h" -#include "dialogs/GUIDialogContextMenu.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogContextMenu::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogContextMenu = - new AddonToKodiFuncTable_kodi_gui_dialogContextMenu(); - - addonInterface->toKodi->kodi_gui->dialogContextMenu->open = open; -} - -void Interface_GUIDialogContextMenu::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogContextMenu; -} - -int Interface_GUIDialogContextMenu::open(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogContextMenu::{} - invalid data", __func__); - return -1; - } - - CGUIDialogContextMenu* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_CONTEXT_MENU); - if (!heading || !entries || !dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogContextMenu::{} - invalid handler data (heading='{}', " - "entries='{}', dialog='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(entries), - kodiBase, addon->ID()); - return -1; - } - - CContextButtons choices; - for (unsigned int i = 0; i < size; ++i) - choices.Add(i, entries[i]); - - return dialog->Show(choices); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/ContextMenu.h b/xbmc/addons/interfaces/gui/dialogs/ContextMenu.h deleted file mode 100644 index 7b41a28fbceb8..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/ContextMenu.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h" - */ - struct Interface_GUIDialogContextMenu - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static int open(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.cpp b/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.cpp deleted file mode 100644 index 9e7f7a7e69083..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "ExtendedProgressBar.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h" -#include "dialogs/GUIDialogExtendedProgressBar.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogExtendedProgress::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogExtendedProgress = - new AddonToKodiFuncTable_kodi_gui_dialogExtendedProgress(); - - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->new_dialog = new_dialog; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->delete_dialog = delete_dialog; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->get_title = get_title; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->set_title = set_title; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->get_text = get_text; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->set_text = set_text; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->is_finished = is_finished; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->mark_finished = mark_finished; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->get_percentage = get_percentage; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->set_percentage = set_percentage; - addonInterface->toKodi->kodi_gui->dialogExtendedProgress->set_progress = set_progress; -} - -void Interface_GUIDialogExtendedProgress::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogExtendedProgress; -} - -KODI_GUI_HANDLE Interface_GUIDialogExtendedProgress::new_dialog(KODI_HANDLE kodiBase, - const char* title) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return nullptr; - } - - // setup the progress dialog - CGUIDialogExtendedProgressBar* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_EXT_PROGRESS); - if (!title || !dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid handler data (title='{}', " - "dialog='{}') on addon '{}'", - __func__, static_cast(title), static_cast(dialog), addon->ID()); - return nullptr; - } - - CGUIDialogProgressBarHandle* dlgProgressHandle = dialog->GetHandle(title); - return dlgProgressHandle; -} - -void Interface_GUIDialogExtendedProgress::delete_dialog(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid handler data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->MarkFinished(); -} - -char* Interface_GUIDialogExtendedProgress::get_title(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return nullptr; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid handler data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return nullptr; - } - - return strdup(static_cast(handle)->Title().c_str()); -} - -void Interface_GUIDialogExtendedProgress::set_title(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - const char* title) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle || !title) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid handler data (handle='{}', " - "title='{}') on addon '{}'", - __func__, handle, static_cast(title), addon->ID()); - return; - } - - static_cast(handle)->SetTitle(title); -} - -char* Interface_GUIDialogExtendedProgress::get_text(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return nullptr; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return nullptr; - } - - return strdup(static_cast(handle)->Text().c_str()); -} - -void Interface_GUIDialogExtendedProgress::set_text(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid handler data (handle='{}', " - "text='{}') on addon '{}'", - __func__, handle, static_cast(text), addon->ID()); - return; - } - - static_cast(handle)->SetText(text); -} - -bool Interface_GUIDialogExtendedProgress::is_finished(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return false; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return false; - } - - return static_cast(handle)->IsFinished(); -} - -void Interface_GUIDialogExtendedProgress::mark_finished(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->MarkFinished(); -} - -float Interface_GUIDialogExtendedProgress::get_percentage(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return 0.0f; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return 0.0f; - } - - return static_cast(handle)->Percentage(); -} - -void Interface_GUIDialogExtendedProgress::set_percentage(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - float percentage) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetPercentage(percentage); -} - -void Interface_GUIDialogExtendedProgress::set_progress(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int currentItem, - int itemCount) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogExtendedProgress::{} - invalid kodi base data", - __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogExtendedProgress::{} - invalid add-on data (handle='{}') on " - "addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetProgress(currentItem, itemCount); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.h b/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.h deleted file mode 100644 index 66ccb49e6b0dd..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/ExtendedProgressBar.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h" - */ - struct Interface_GUIDialogExtendedProgress - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static KODI_GUI_HANDLE new_dialog(KODI_HANDLE kodiBase, const char* title); - static void delete_dialog(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static char* get_title(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void set_title(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* title); - static char* get_text(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void set_text(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* text); - static bool is_finished(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void mark_finished(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static float get_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void set_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, float percentage); - static void set_progress(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int currentItem, - int itemCount); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/FileBrowser.cpp b/xbmc/addons/interfaces/gui/dialogs/FileBrowser.cpp deleted file mode 100644 index 84d64432326ea..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/FileBrowser.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "FileBrowser.h" - -#include "URL.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h" -#include "dialogs/GUIDialogFileBrowser.h" -#include "settings/MediaSourceSettings.h" -#include "storage/MediaManager.h" -#include "utils/URIUtils.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogFileBrowser::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogFileBrowser = - new AddonToKodiFuncTable_kodi_gui_dialogFileBrowser(); - - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_directory = - show_and_get_directory; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file = show_and_get_file; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_from_dir = - show_and_get_file_from_dir; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_list = - show_and_get_file_list; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_source = show_and_get_source; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image = show_and_get_image; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image_list = - show_and_get_image_list; - addonInterface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list = clear_file_list; -} - -void Interface_GUIDialogFileBrowser::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogFileBrowser; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_directory(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out, - bool write_only) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!shares || !heading || !path_in || !path_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (shares='{}', " - "heading='{}', path_in='{}', path_out='{}') on addon '{}'", - __func__, static_cast(shares), static_cast(heading), - static_cast(path_in), static_cast(path_out), addon->ID()); - return false; - } - - std::string strPath = path_in; - - VECSOURCES vecShares; - GetVECShares(vecShares, shares, strPath); - bool bRet = CGUIDialogFileBrowser::ShowAndGetDirectory(vecShares, heading, strPath, write_only); - if (bRet) - *path_out = strdup(strPath.c_str()); - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_file(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!shares || !mask || !heading || !path_in || !path_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (shares='{}', mask='{}', " - "heading='{}', path_in='{}', path_out='{}') on addon '{}'", - __func__, static_cast(shares), static_cast(mask), - static_cast(heading), static_cast(path_in), - static_cast(path_out), addon->ID()); - return false; - } - - std::string strPath = path_in; - - VECSOURCES vecShares; - GetVECShares(vecShares, shares, strPath); - bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(vecShares, mask, heading, strPath, use_thumbs, - use_file_directories); - if (bRet) - *path_out = strdup(strPath.c_str()); - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_file_from_dir(KODI_HANDLE kodiBase, - const char* directory, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories, - bool single_list) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!directory || !mask || !heading || !path_in || !path_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (directory='{}', " - "mask='{}', heading='{}', path_in='{}', path_out='{}') on addon '{}'", - __func__, static_cast(directory), static_cast(mask), - static_cast(heading), static_cast(path_in), - static_cast(path_out), addon->ID()); - return false; - } - - std::string strPath = path_in; - bool bRet = CGUIDialogFileBrowser::ShowAndGetFile(directory, mask, heading, strPath, use_thumbs, - use_file_directories, single_list); - if (bRet) - *path_out = strdup(strPath.c_str()); - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_file_list(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - char*** file_list, - unsigned int* entries, - bool use_thumbs, - bool use_file_directories) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!shares || !mask || !heading || !file_list || !entries) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (shares='{}', mask='{}', " - "heading='{}', file_list='{}', entries='{}') on addon '{}'", - __func__, static_cast(shares), static_cast(mask), - static_cast(heading), static_cast(file_list), - static_cast(entries), addon->ID()); - return false; - } - - VECSOURCES vecShares; - GetVECShares(vecShares, shares, ""); - - std::vector pathsInt; - bool bRet = CGUIDialogFileBrowser::ShowAndGetFileList(vecShares, mask, heading, pathsInt, - use_thumbs, use_file_directories); - if (bRet) - { - *entries = pathsInt.size(); - *file_list = static_cast(malloc(*entries * sizeof(char*))); - for (unsigned int i = 0; i < *entries; ++i) - (*file_list)[i] = strdup(pathsInt[i].c_str()); - } - else - *entries = 0; - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_source(KODI_HANDLE kodiBase, - const char* path_in, - char** path_out, - bool allowNetworkShares, - const char* additionalShare, - const char* strType) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!strType || !additionalShare || !path_in || !path_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (additionalShare='{}', " - "strType='{}', path_in='{}', path_out='{}') on addon '{}'", - __func__, static_cast(additionalShare), - static_cast(strType), static_cast(path_in), - static_cast(path_out), addon->ID()); - return false; - } - - std::string strPath = path_in; - - VECSOURCES vecShares; - if (additionalShare) - GetVECShares(vecShares, additionalShare, strPath); - bool bRet = - CGUIDialogFileBrowser::ShowAndGetSource(strPath, allowNetworkShares, &vecShares, strType); - if (bRet) - *path_out = strdup(strPath.c_str()); - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_image(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!shares || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (shares='{}', " - "heading='{}') on addon '{}'", - __func__, static_cast(shares), static_cast(heading), - addon->ID()); - return false; - } - - std::string strPath = path_in; - - VECSOURCES vecShares; - GetVECShares(vecShares, shares, strPath); - bool bRet = CGUIDialogFileBrowser::ShowAndGetImage(vecShares, heading, strPath); - if (bRet) - *path_out = strdup(strPath.c_str()); - return bRet; -} - -bool Interface_GUIDialogFileBrowser::show_and_get_image_list(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - char*** file_list, - unsigned int* entries) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return false; - } - - if (!shares || !heading || !file_list || !entries) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (shares='{}', " - "heading='{}', file_list='{}', entries='{}') on addon '{}'", - __func__, static_cast(shares), static_cast(heading), - static_cast(file_list), static_cast(entries), addon->ID()); - return false; - } - - VECSOURCES vecShares; - GetVECShares(vecShares, shares, ""); - - std::vector pathsInt; - bool bRet = CGUIDialogFileBrowser::ShowAndGetImageList(vecShares, heading, pathsInt); - if (bRet) - { - *entries = pathsInt.size(); - *file_list = static_cast(malloc(*entries * sizeof(char*))); - for (unsigned int i = 0; i < *entries; ++i) - (*file_list)[i] = strdup(pathsInt[i].c_str()); - } - else - *entries = 0; - return bRet; -} - -void Interface_GUIDialogFileBrowser::clear_file_list(KODI_HANDLE kodiBase, - char*** file_list, - unsigned int entries) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogFileBrowser::{} - invalid data", __func__); - return; - } - - if (*file_list) - { - for (unsigned int i = 0; i < entries; ++i) - free((*file_list)[i]); - free(*file_list); - *file_list = nullptr; - } - else - { - - CLog::Log(LOGERROR, - "Interface_GUIDialogFileBrowser::{} - invalid handler data (file_list='{}') on " - "addon '{}'", - __func__, static_cast(file_list), addon->ID()); - } -} - -void Interface_GUIDialogFileBrowser::GetVECShares(VECSOURCES& vecShares, - const std::string& strShares, - const std::string& strPath) -{ - std::size_t found; - found = strShares.find("local"); - if (found != std::string::npos) - CServiceBroker::GetMediaManager().GetLocalDrives(vecShares); - found = strShares.find("network"); - if (found != std::string::npos) - CServiceBroker::GetMediaManager().GetNetworkLocations(vecShares); - found = strShares.find("removable"); - if (found != std::string::npos) - CServiceBroker::GetMediaManager().GetRemovableDrives(vecShares); - found = strShares.find("programs"); - if (found != std::string::npos) - { - VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("programs"); - if (sources != nullptr) - vecShares.insert(vecShares.end(), sources->begin(), sources->end()); - } - found = strShares.find("files"); - if (found != std::string::npos) - { - VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("files"); - if (sources != nullptr) - vecShares.insert(vecShares.end(), sources->begin(), sources->end()); - } - found = strShares.find("music"); - if (found != std::string::npos) - { - VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("music"); - if (sources != nullptr) - vecShares.insert(vecShares.end(), sources->begin(), sources->end()); - } - found = strShares.find("video"); - if (found != std::string::npos) - { - VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("video"); - if (sources != nullptr) - vecShares.insert(vecShares.end(), sources->begin(), sources->end()); - } - found = strShares.find("pictures"); - if (found != std::string::npos) - { - VECSOURCES* sources = CMediaSourceSettings::GetInstance().GetSources("pictures"); - if (sources != nullptr) - vecShares.insert(vecShares.end(), sources->begin(), sources->end()); - } - - if (vecShares.empty()) - { - CMediaSource share; - std::string basePath = strPath; - std::string tempPath; - while (URIUtils::GetParentPath(basePath, tempPath)) - basePath = tempPath; - share.strPath = basePath; - // don't include the user details in the share name - CURL url(share.strPath); - share.strName = url.GetWithoutUserDetails(); - vecShares.push_back(share); - } -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/FileBrowser.h b/xbmc/addons/interfaces/gui/dialogs/FileBrowser.h deleted file mode 100644 index c2193f3f72ce3..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/FileBrowser.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h" - -#include -#include - -class CMediaSource; - -typedef std::vector VECSOURCES; - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h" - */ - struct Interface_GUIDialogFileBrowser - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static bool show_and_get_directory(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out, - bool write_only); - - static bool show_and_get_file(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories); - - static bool show_and_get_file_from_dir(KODI_HANDLE kodiBase, - const char* directory, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories, - bool singleList); - - static bool show_and_get_file_list(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - char*** file_list, - unsigned int* entries, - bool use_thumbs, - bool use_file_directories); - - static bool show_and_get_source(KODI_HANDLE kodiBase, - const char* path_in, - char** path_out, - bool allow_network_shares, - const char* additional_share, - const char* type); - - static bool show_and_get_image(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out); - - static bool show_and_get_image_list(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - char*** file_list, - unsigned int* entries); - - static void clear_file_list(KODI_HANDLE kodiBase, char*** file_list, unsigned int entries); - //@} - - private: - static void GetVECShares(VECSOURCES& vecShares, - const std::string& strShares, - const std::string& strPath); - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Keyboard.cpp b/xbmc/addons/interfaces/gui/dialogs/Keyboard.cpp deleted file mode 100644 index 7ec56ab18b605..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Keyboard.cpp +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Keyboard.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h" -#include "guilib/GUIKeyboardFactory.h" -#include "utils/Variant.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogKeyboard::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogKeyboard = - new AddonToKodiFuncTable_kodi_gui_dialogKeyboard(); - - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input_with_head = - show_and_get_input_with_head; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input = show_and_get_input; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_get_new_password_with_head = - show_and_get_new_password_with_head; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_get_new_password = - show_and_get_new_password; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_new_password_with_head = - show_and_verify_new_password_with_head; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_new_password = - show_and_verify_new_password; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_password = - show_and_verify_password; - addonInterface->toKodi->kodi_gui->dialogKeyboard->show_and_get_filter = show_and_get_filter; - addonInterface->toKodi->kodi_gui->dialogKeyboard->send_text_to_active_keyboard = - send_text_to_active_keyboard; - addonInterface->toKodi->kodi_gui->dialogKeyboard->is_keyboard_activated = is_keyboard_activated; -} - -void Interface_GUIDialogKeyboard::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogKeyboard; -} - -bool Interface_GUIDialogKeyboard::show_and_get_input_with_head(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - const char* heading, - bool allow_empty_result, - bool hidden_input, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!text_in || !text_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (text_in='{}', " - "text_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(text_in), static_cast(text_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = text_in; - bool bRet = CGUIKeyboardFactory::ShowAndGetInput(str, CVariant{heading}, allow_empty_result, - hidden_input, auto_close_ms); - if (bRet) - *text_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::show_and_get_input(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool allow_empty_result, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!text_in || !text_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (text_in='{}', " - "text_out='{}') on addon '{}'", - __func__, static_cast(text_in), static_cast(text_out), - addon->ID()); - return false; - } - - std::string str = text_in; - bool bRet = CGUIKeyboardFactory::ShowAndGetInput(str, allow_empty_result, auto_close_ms); - if (bRet) - *text_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::show_and_get_new_password_with_head(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - bool allow_empty_result, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!password_in || !password_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (password_in='{}', " - "password_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(password_in), static_cast(password_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = password_in; - bool bRet = - CGUIKeyboardFactory::ShowAndGetNewPassword(str, heading, allow_empty_result, auto_close_ms); - if (bRet) - *password_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::show_and_get_new_password(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!password_in || !password_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (password_in='{}', " - "password_out='{}') on addon '{}'", - __func__, static_cast(password_in), static_cast(password_out), - addon->ID()); - return false; - } - - std::string str = password_in; - bool bRet = CGUIKeyboardFactory::ShowAndGetNewPassword(str, auto_close_ms); - if (bRet) - *password_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::show_and_verify_new_password_with_head(KODI_HANDLE kodiBase, - char** password_out, - const char* heading, - bool allowEmpty, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!password_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (password_out='{}', " - "heading='{}') on addon '{}'", - __func__, static_cast(password_out), static_cast(heading), - addon->ID()); - return false; - } - - std::string str; - bool bRet = - CGUIKeyboardFactory::ShowAndVerifyNewPassword(str, heading, allowEmpty, auto_close_ms); - if (bRet) - *password_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::show_and_verify_new_password(KODI_HANDLE kodiBase, - char** password_out, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!password_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (password_out='{}') on " - "addon '{}'", - __func__, static_cast(password_out), addon->ID()); - return false; - } - - std::string str; - bool bRet = CGUIKeyboardFactory::ShowAndVerifyNewPassword(str, auto_close_ms); - if (bRet) - *password_out = strdup(str.c_str()); - return bRet; -} - -int Interface_GUIDialogKeyboard::show_and_verify_password(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - int retries, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!password_in || !password_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (password_in='{}', " - "password_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(password_in), static_cast(password_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = password_in; - int iRet = CGUIKeyboardFactory::ShowAndVerifyPassword(str, heading, retries, auto_close_ms); - if (iRet) - *password_out = strdup(str.c_str()); - return iRet; -} - -bool Interface_GUIDialogKeyboard::show_and_get_filter(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool searching, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - if (!text_in || !text_out) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogKeyboard::{} - invalid handler data (text_in='{}', " - "text_out='{}') on addon '{}'", - __func__, static_cast(text_in), static_cast(text_out), - addon->ID()); - return false; - } - - - std::string str = text_in; - bool bRet = CGUIKeyboardFactory::ShowAndGetFilter(str, searching, auto_close_ms); - if (bRet) - *text_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogKeyboard::send_text_to_active_keyboard(KODI_HANDLE kodiBase, - const char* text, - bool close_keyboard) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - return CGUIKeyboardFactory::SendTextToActiveKeyboard(text, close_keyboard); -} - -bool Interface_GUIDialogKeyboard::is_keyboard_activated(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogKeyboard::{} - invalid data", __func__); - return false; - } - - return CGUIKeyboardFactory::isKeyboardActivated(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Keyboard.h b/xbmc/addons/interfaces/gui/dialogs/Keyboard.h deleted file mode 100644 index fb7d6b9d595ad..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Keyboard.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h" - */ - struct Interface_GUIDialogKeyboard - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static bool show_and_get_input_with_head(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - const char* heading, - bool allow_empty_result, - bool hidden_input, - unsigned int auto_close_ms); - static bool show_and_get_input(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool allow_empty_result, - unsigned int auto_close_ms); - static bool show_and_get_new_password_with_head(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - bool allow_empty_result, - unsigned int auto_close_ms); - static bool show_and_get_new_password(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - unsigned int auto_close_ms); - static bool show_and_verify_new_password_with_head(KODI_HANDLE kodiBase, - char** password_out, - const char* heading, - bool allowEmpty, - unsigned int auto_close_ms); - static bool show_and_verify_new_password(KODI_HANDLE kodiBase, - char** password_out, - unsigned int auto_close_ms); - static int show_and_verify_password(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - int retries, - unsigned int auto_close_ms); - static bool show_and_get_filter(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool searching, - unsigned int auto_close_ms); - static bool send_text_to_active_keyboard(KODI_HANDLE kodiBase, - const char* text, - bool close_keyboard); - static bool is_keyboard_activated(KODI_HANDLE kodiBase); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Numeric.cpp b/xbmc/addons/interfaces/gui/dialogs/Numeric.cpp deleted file mode 100644 index a78aa4af607af..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Numeric.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Numeric.h" - -#include "XBDateTime.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h" -#include "dialogs/GUIDialogNumeric.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogNumeric::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogNumeric = - new AddonToKodiFuncTable_kodi_gui_dialogNumeric(); - - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_verify_new_password = - show_and_verify_new_password; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_verify_password = - show_and_verify_password; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_verify_input = show_and_verify_input; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_get_time = show_and_get_time; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_get_date = show_and_get_date; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_get_ip_address = - show_and_get_ip_address; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_get_number = show_and_get_number; - addonInterface->toKodi->kodi_gui->dialogNumeric->show_and_get_seconds = show_and_get_seconds; -} - -void Interface_GUIDialogNumeric::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogNumeric; -} - -bool Interface_GUIDialogNumeric::show_and_verify_new_password(KODI_HANDLE kodiBase, char** password) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - std::string str; - bool bRet = CGUIDialogNumeric::ShowAndVerifyNewPassword(str); - if (bRet) - *password = strdup(str.c_str()); - return bRet; -} - -int Interface_GUIDialogNumeric::show_and_verify_password(KODI_HANDLE kodiBase, - const char* password, - const char* heading, - int retries) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return -1; - } - - if (!password || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (password='{}', heading='{}') " - "on addon '{}'", - __func__, static_cast(password), static_cast(heading), - addon->ID()); - return -1; - } - - std::string pw(password); - return CGUIDialogNumeric::ShowAndVerifyPassword(pw, heading, retries); -} - -bool Interface_GUIDialogNumeric::show_and_verify_input(KODI_HANDLE kodiBase, - const char* verify_in, - char** verify_out, - const char* heading, - bool verify_input) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!verify_in || !verify_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (verify_in='{}', " - "verify_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(verify_in), static_cast(verify_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = verify_in; - if (CGUIDialogNumeric::ShowAndVerifyInput(str, heading, verify_input) == - InputVerificationResult::SUCCESS) - { - *verify_out = strdup(str.c_str()); - return true; - } - return false; -} - -bool Interface_GUIDialogNumeric::show_and_get_time(KODI_HANDLE kodiBase, - tm* time, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!time || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (time='{}', heading='{}') on " - "addon '{}'", - __func__, static_cast(time), static_cast(heading), addon->ID()); - return false; - } - - KODI::TIME::SystemTime systemTime; - CDateTime dateTime(*time); - dateTime.GetAsSystemTime(systemTime); - if (CGUIDialogNumeric::ShowAndGetTime(systemTime, heading)) - { - dateTime = systemTime; - dateTime.GetAsTm(*time); - return true; - } - return false; -} - -bool Interface_GUIDialogNumeric::show_and_get_date(KODI_HANDLE kodiBase, - tm* date, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!date || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (date='{}', heading='{}') on " - "addon '{}'", - __func__, static_cast(date), static_cast(heading), addon->ID()); - return false; - } - - KODI::TIME::SystemTime systemTime; - CDateTime dateTime(*date); - dateTime.GetAsSystemTime(systemTime); - if (CGUIDialogNumeric::ShowAndGetDate(systemTime, heading)) - { - dateTime = systemTime; - dateTime.GetAsTm(*date); - return true; - } - return false; -} - -bool Interface_GUIDialogNumeric::show_and_get_ip_address(KODI_HANDLE kodiBase, - const char* ip_address_in, - char** ip_address_out, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!ip_address_in || !ip_address_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (ip_address_in='{}', " - "ip_address_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(ip_address_in), static_cast(ip_address_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string strIP = ip_address_in; - bool bRet = CGUIDialogNumeric::ShowAndGetIPAddress(strIP, heading); - if (bRet) - *ip_address_out = strdup(strIP.c_str()); - return bRet; -} - -bool Interface_GUIDialogNumeric::show_and_get_number(KODI_HANDLE kodiBase, - const char* number_in, - char** number_out, - const char* heading, - unsigned int auto_close_ms) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!number_in || !number_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (number_in='{}', " - "number_out='{}', heading='{}') on addon '{}'", - __func__, static_cast(number_in), static_cast(number_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = number_in; - bool bRet = CGUIDialogNumeric::ShowAndGetNumber(str, heading, auto_close_ms); - if (bRet) - *number_out = strdup(str.c_str()); - return bRet; -} - -bool Interface_GUIDialogNumeric::show_and_get_seconds(KODI_HANDLE kodiBase, - const char* time_in, - char** time_out, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogNumeric::{} - invalid data", __func__); - return false; - } - - if (!time_in || !time_out || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogNumeric::{} - invalid handler data (time_in='{}', time_out='{}', " - "heading='{}') on addon '{}'", - __func__, static_cast(time_in), static_cast(time_out), - static_cast(heading), addon->ID()); - return false; - } - - std::string str = time_in; - bool bRet = CGUIDialogNumeric::ShowAndGetSeconds(str, heading); - if (bRet) - *time_out = strdup(str.c_str()); - return bRet; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Numeric.h b/xbmc/addons/interfaces/gui/dialogs/Numeric.h deleted file mode 100644 index a54ad525b5d6f..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Numeric.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h" - */ - struct Interface_GUIDialogNumeric - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static bool show_and_verify_new_password(KODI_HANDLE kodiBase, char** password); - static int show_and_verify_password(KODI_HANDLE kodiBase, - const char* password, - const char* heading, - int retries); - static bool show_and_verify_input(KODI_HANDLE kodiBase, - const char* verify_in, - char** verify_out, - const char* heading, - bool verify_input); - static bool show_and_get_time(KODI_HANDLE kodiBase, tm* time, const char* heading); - static bool show_and_get_date(KODI_HANDLE kodiBase, tm* date, const char* heading); - static bool show_and_get_ip_address(KODI_HANDLE kodiBase, - const char* ip_address_in, - char** ip_address_out, - const char* heading); - static bool show_and_get_number(KODI_HANDLE kodiBase, - const char* number_in, - char** number_out, - const char* heading, - unsigned int auto_close_ms); - static bool show_and_get_seconds(KODI_HANDLE kodiBase, - const char* time_in, - char** time_out, - const char* heading); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/OK.cpp b/xbmc/addons/interfaces/gui/dialogs/OK.cpp deleted file mode 100644 index 90e9d6999b8f6..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/OK.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "OK.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h" -#include "messaging/helpers/DialogOKHelper.h" -#include "utils/Variant.h" -#include "utils/log.h" - -using namespace KODI::MESSAGING; - -namespace ADDON -{ - -void Interface_GUIDialogOK::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogOK = new AddonToKodiFuncTable_kodi_gui_dialogOK(); - - addonInterface->toKodi->kodi_gui->dialogOK->show_and_get_input_single_text = - show_and_get_input_single_text; - addonInterface->toKodi->kodi_gui->dialogOK->show_and_get_input_line_text = - show_and_get_input_line_text; -} - -void Interface_GUIDialogOK::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogOK; -} - -void Interface_GUIDialogOK::show_and_get_input_single_text(KODI_HANDLE kodiBase, - const char* heading, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon || !heading || !text) - { - CLog::Log( - LOGERROR, "Interface_GUIDialogOK:{} - invalid data (addon='{}', heading='{}', text='{}')", - __func__, kodiBase, static_cast(heading), static_cast(text)); - return; - } - - HELPERS::ShowOKDialogText(CVariant{heading}, CVariant{text}); -} - -void Interface_GUIDialogOK::show_and_get_input_line_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon || !heading || !line0 || !line1 || !line2) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogOK::{} - invalid data (addon='{}', heading='{}', line0='{}', " - "line1='{}', line2='{}')", - __func__, kodiBase, static_cast(heading), - static_cast(line0), static_cast(line1), - static_cast(line2)); - return; - } - HELPERS::ShowOKDialogLines(CVariant{heading}, CVariant{line0}, CVariant{line1}, CVariant{line2}); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/OK.h b/xbmc/addons/interfaces/gui/dialogs/OK.h deleted file mode 100644 index fd13719a99abd..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/OK.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h" - */ - struct Interface_GUIDialogOK - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note For add of new functions use the "_" style to identify direct a - * add-on callback function. Everything with CamelCase is only for the - * usage in Kodi only. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void show_and_get_input_single_text(KODI_HANDLE kodiBase, - const char* heading, - const char* text); - static void show_and_get_input_line_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Progress.cpp b/xbmc/addons/interfaces/gui/dialogs/Progress.cpp deleted file mode 100644 index ff6c7424ba81f..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Progress.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (C) 2015-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Progress.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h" -#include "dialogs/GUIDialogProgress.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/Variant.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogProgress::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogProgress = - new AddonToKodiFuncTable_kodi_gui_dialogProgress(); - - addonInterface->toKodi->kodi_gui->dialogProgress->new_dialog = new_dialog; - addonInterface->toKodi->kodi_gui->dialogProgress->delete_dialog = delete_dialog; - addonInterface->toKodi->kodi_gui->dialogProgress->open = open; - addonInterface->toKodi->kodi_gui->dialogProgress->set_heading = set_heading; - addonInterface->toKodi->kodi_gui->dialogProgress->set_line = set_line; - addonInterface->toKodi->kodi_gui->dialogProgress->set_can_cancel = set_can_cancel; - addonInterface->toKodi->kodi_gui->dialogProgress->is_canceled = is_canceled; - addonInterface->toKodi->kodi_gui->dialogProgress->set_percentage = set_percentage; - addonInterface->toKodi->kodi_gui->dialogProgress->get_percentage = get_percentage; - addonInterface->toKodi->kodi_gui->dialogProgress->show_progress_bar = show_progress_bar; - addonInterface->toKodi->kodi_gui->dialogProgress->set_progress_max = set_progress_max; - addonInterface->toKodi->kodi_gui->dialogProgress->set_progress_advance = set_progress_advance; - addonInterface->toKodi->kodi_gui->dialogProgress->abort = abort; -} - -void Interface_GUIDialogProgress::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogProgress; -} - -KODI_GUI_HANDLE Interface_GUIDialogProgress::new_dialog(KODI_HANDLE kodiBase) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return nullptr; - } - - CGUIDialogProgress* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_PROGRESS); - if (!dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (dialog='{}') on addon '{}'", - __func__, static_cast(dialog), addon->ID()); - return nullptr; - } - - return dialog; -} - -void Interface_GUIDialogProgress::delete_dialog(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->Close(); -} - -void Interface_GUIDialogProgress::open(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->Open(); -} - -void Interface_GUIDialogProgress::set_heading(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - const char* heading) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle || !heading) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}', heading='{}') " - "on addon '{}'", - __func__, handle, static_cast(heading), addon->ID()); - return; - } - - static_cast(handle)->SetHeading(heading); -} - -void Interface_GUIDialogProgress::set_line(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - unsigned int line, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle || !text) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}', text='{}') on " - "addon '{}'", - __func__, handle, static_cast(text), addon->ID()); - return; - } - - static_cast(handle)->SetLine(line, text); -} - -void Interface_GUIDialogProgress::set_can_cancel(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - bool canCancel) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetCanCancel(canCancel); -} - -bool Interface_GUIDialogProgress::is_canceled(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return false; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return false; - } - - return static_cast(handle)->IsCanceled(); -} - -void Interface_GUIDialogProgress::set_percentage(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int percentage) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetPercentage(percentage); -} - -int Interface_GUIDialogProgress::get_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return 0; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return 0; - } - - return static_cast(handle)->GetPercentage(); -} - -void Interface_GUIDialogProgress::show_progress_bar(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - bool onOff) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->ShowProgressBar(onOff); -} - -void Interface_GUIDialogProgress::set_progress_max(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int max) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetProgressMax(max); -} - -void Interface_GUIDialogProgress::set_progress_advance(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int nSteps) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return; - } - - static_cast(handle)->SetProgressAdvance(nSteps); -} - -bool Interface_GUIDialogProgress::abort(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogProgress::{} - invalid data", __func__); - return false; - } - - if (!handle) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogProgress::{} - invalid handler data (handle='{}') on addon '{}'", - __func__, handle, addon->ID()); - return false; - } - - return static_cast(handle)->Abort(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Progress.h b/xbmc/addons/interfaces/gui/dialogs/Progress.h deleted file mode 100644 index ba31f3c74c1ec..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Progress.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h" - */ - struct Interface_GUIDialogProgress - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static KODI_GUI_HANDLE new_dialog(KODI_HANDLE kodiBase); - static void delete_dialog(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void open(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void set_heading(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* heading); - static void set_line(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - unsigned int line, - const char* text); - static void set_can_cancel(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, bool canCancel); - static bool is_canceled(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void set_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int percentage); - static int get_percentage(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - static void show_progress_bar(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, bool bOnOff); - static void set_progress_max(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int max); - static void set_progress_advance(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int nSteps); - static bool abort(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Select.cpp b/xbmc/addons/interfaces/gui/dialogs/Select.cpp deleted file mode 100644 index 7ad6ed667fd2e..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Select.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "Select.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h" -#include "dialogs/GUIDialogSelect.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/Variant.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogSelect::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogSelect = new AddonToKodiFuncTable_kodi_gui_dialogSelect(); - - addonInterface->toKodi->kodi_gui->dialogSelect->open = open; - addonInterface->toKodi->kodi_gui->dialogSelect->open_multi_select = open_multi_select; -} - -void Interface_GUIDialogSelect::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogSelect; -} - -int Interface_GUIDialogSelect::open(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size, - int selected, - unsigned int autoclose) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogSelect::{} - invalid data", __func__); - return -1; - } - - CGUIDialogSelect* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_SELECT); - if (!heading || !entries || !dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogSelect::{} - invalid handler data (heading='{}', entries='{}', " - "dialog='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(entries), - static_cast(dialog), addon->ID()); - return -1; - } - - dialog->Reset(); - dialog->SetHeading(CVariant{heading}); - - for (unsigned int i = 0; i < size; ++i) - dialog->Add(entries[i]); - - if (selected > 0) - dialog->SetSelected(selected); - if (autoclose > 0) - dialog->SetAutoClose(autoclose); - - dialog->Open(); - return dialog->GetSelectedItem(); -} - - -bool Interface_GUIDialogSelect::open_multi_select(KODI_HANDLE kodiBase, - const char* heading, - const char* entryIDs[], - const char* entryNames[], - bool entriesSelected[], - unsigned int size, - unsigned int autoclose) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogMultiSelect::{} - invalid data", __func__); - return false; - } - - CGUIDialogSelect* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_SELECT); - if (!heading || !entryIDs || !entryNames || !entriesSelected || !dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogMultiSelect::{} - invalid handler data (heading='{}', " - "entryIDs='{}', entryNames='{}', entriesSelected='{}', dialog='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(entryIDs), - static_cast(entryNames), static_cast(entriesSelected), - static_cast(dialog), addon->ID()); - return false; - } - - dialog->Reset(); - dialog->SetMultiSelection(true); - dialog->SetHeading(CVariant{heading}); - - std::vector selectedIndexes; - - for (unsigned int i = 0; i < size; ++i) - { - dialog->Add(entryNames[i]); - if (entriesSelected[i]) - selectedIndexes.push_back(i); - } - - dialog->SetSelected(selectedIndexes); - if (autoclose > 0) - dialog->SetAutoClose(autoclose); - - dialog->Open(); - if (dialog->IsConfirmed()) - { - for (unsigned int i = 0; i < size; ++i) - entriesSelected[i] = false; - - selectedIndexes = dialog->GetSelectedItems(); - - for (unsigned int i = 0; i < selectedIndexes.size(); ++i) - { - if (selectedIndexes[i]) - entriesSelected[selectedIndexes[i]] = true; - } - } - - return true; -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/Select.h b/xbmc/addons/interfaces/gui/dialogs/Select.h deleted file mode 100644 index 5f2d0ef6aa72c..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/Select.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h" - */ - struct Interface_GUIDialogSelect - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static int open(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size, - int selected, - unsigned int autoclose); - static bool open_multi_select(KODI_HANDLE kodiBase, - const char* heading, - const char* entryIDs[], - const char* entryNames[], - bool entriesSelected[], - unsigned int size, - unsigned int autoclose); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/TextViewer.cpp b/xbmc/addons/interfaces/gui/dialogs/TextViewer.cpp deleted file mode 100644 index 637975a73b6cb..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/TextViewer.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "TextViewer.h" - -#include "ServiceBroker.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h" -#include "dialogs/GUIDialogTextViewer.h" -#include "guilib/GUIComponent.h" -#include "guilib/GUIWindowManager.h" -#include "utils/log.h" - -namespace ADDON -{ - -void Interface_GUIDialogTextViewer::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogTextViewer = - new AddonToKodiFuncTable_kodi_gui_dialogTextViewer(); - - addonInterface->toKodi->kodi_gui->dialogTextViewer->open = open; -} - -void Interface_GUIDialogTextViewer::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogTextViewer; -} - -void Interface_GUIDialogTextViewer::open(KODI_HANDLE kodiBase, - const char* heading, - const char* text) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogTextViewer::{} - invalid data", __func__); - return; - } - - CGUIDialogTextViewer* dialog = - CServiceBroker::GetGUI()->GetWindowManager().GetWindow( - WINDOW_DIALOG_TEXT_VIEWER); - if (!heading || !text || !dialog) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogTextViewer::{} - invalid handler data (heading='{}', text='{}', " - "dialog='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(text), - static_cast(dialog), addon->ID()); - return; - } - - dialog->SetHeading(heading); - dialog->SetText(text); - dialog->Open(); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/TextViewer.h b/xbmc/addons/interfaces/gui/dialogs/TextViewer.h deleted file mode 100644 index 873dbbba4e0cd..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/TextViewer.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h" - */ - struct Interface_GUIDialogTextViewer - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static void open(KODI_HANDLE kodiBase, const char* heading, const char* text); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/gui/dialogs/YesNo.cpp b/xbmc/addons/interfaces/gui/dialogs/YesNo.cpp deleted file mode 100644 index 2c635fb1f94bc..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/YesNo.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "YesNo.h" - -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h" -#include "dialogs/GUIDialogYesNo.h" -#include "messaging/helpers/DialogHelper.h" -#include "utils/log.h" - -using namespace KODI::MESSAGING; -using KODI::MESSAGING::HELPERS::DialogResponse; - -namespace ADDON -{ - -void Interface_GUIDialogYesNo::Init(AddonGlobalInterface* addonInterface) -{ - addonInterface->toKodi->kodi_gui->dialogYesNo = new AddonToKodiFuncTable_kodi_gui_dialogYesNo(); - - addonInterface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_single_text = - show_and_get_input_single_text; - addonInterface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_line_text = - show_and_get_input_line_text; - addonInterface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_line_button_text = - show_and_get_input_line_button_text; -} - -void Interface_GUIDialogYesNo::DeInit(AddonGlobalInterface* addonInterface) -{ - delete addonInterface->toKodi->kodi_gui->dialogYesNo; -} - -bool Interface_GUIDialogYesNo::show_and_get_input_single_text(KODI_HANDLE kodiBase, - const char* heading, - const char* text, - bool* canceled, - const char* noLabel, - const char* yesLabel) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogYesNo::{} - invalid data", __func__); - return false; - } - - if (!heading || !text || !canceled || !noLabel || !yesLabel) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogYesNo::{} - invalid handler data (heading='{}', text='{}', " - "canceled='{}', noLabel='{}', yesLabel='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(text), - static_cast(canceled), static_cast(noLabel), - static_cast(yesLabel), addon->ID()); - return false; - } - - DialogResponse result = HELPERS::ShowYesNoDialogText(heading, text, noLabel, yesLabel); - *canceled = (result == DialogResponse::CANCELLED); - return (result == DialogResponse::YES); -} - -bool Interface_GUIDialogYesNo::show_and_get_input_line_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - const char* noLabel, - const char* yesLabel) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogYesNo::{} - invalid data", __func__); - return false; - } - - if (!heading || !line0 || !line1 || !line2 || !noLabel || !yesLabel) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogYesNo::{} - invalid handler data (heading='{}', line0='{}', " - "line1='{}', line2='{}', " - "noLabel='{}', yesLabel='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(line0), - static_cast(line1), static_cast(line2), - static_cast(noLabel), static_cast(yesLabel), addon->ID()); - return false; - } - - return HELPERS::ShowYesNoDialogLines(heading, line0, line1, line2, noLabel, yesLabel) == - DialogResponse::YES; -} - -bool Interface_GUIDialogYesNo::show_and_get_input_line_button_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - bool* canceled, - const char* noLabel, - const char* yesLabel) -{ - CAddonDll* addon = static_cast(kodiBase); - if (!addon) - { - CLog::Log(LOGERROR, "Interface_GUIDialogYesNo::{} - invalid data", __func__); - return false; - } - - if (!heading || !line0 || !line1 || !line2 || !canceled || !noLabel || !yesLabel) - { - CLog::Log(LOGERROR, - "Interface_GUIDialogYesNo::{} - invalid handler data (heading='{}', line0='{}', " - "line1='{}', line2='{}', " - "canceled='{}', noLabel='{}', yesLabel='{}') on addon '{}'", - __func__, static_cast(heading), static_cast(line0), - static_cast(line1), static_cast(line2), - static_cast(canceled), static_cast(noLabel), - static_cast(yesLabel), addon->ID()); - return false; - } - - DialogResponse result = - HELPERS::ShowYesNoDialogLines(heading, line0, line1, line2, noLabel, yesLabel); - *canceled = (result == DialogResponse::CANCELLED); - return (result == DialogResponse::YES); -} - -} /* namespace ADDON */ diff --git a/xbmc/addons/interfaces/gui/dialogs/YesNo.h b/xbmc/addons/interfaces/gui/dialogs/YesNo.h deleted file mode 100644 index 84e5d73bb77f0..0000000000000 --- a/xbmc/addons/interfaces/gui/dialogs/YesNo.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h" - -extern "C" -{ - - struct AddonGlobalInterface; - - namespace ADDON - { - - /*! - * @brief Global gui Add-on to Kodi callback functions - * - * To hold functions not related to a instance type and usable for - * every add-on type. - * - * Related add-on header is "./xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h" - */ - struct Interface_GUIDialogYesNo - { - static void Init(AddonGlobalInterface* addonInterface); - static void DeInit(AddonGlobalInterface* addonInterface); - - /*! - * @brief callback functions from add-on to kodi - * - * @note To add a new function use the "_" style to directly identify an - * add-on callback function. Everything with CamelCase is only to be used - * in Kodi. - * - * The parameter `kodiBase` is used to become the pointer for a `CAddonDll` - * class. - */ - //@{ - static bool show_and_get_input_single_text(KODI_HANDLE kodiBase, - const char* heading, - const char* text, - bool* canceled, - const char* noLabel, - const char* yesLabel); - - static bool show_and_get_input_line_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - const char* noLabel, - const char* yesLabel); - - static bool show_and_get_input_line_button_text(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - bool* canceled, - const char* noLabel, - const char* yesLabel); - //@} - }; - - } /* namespace ADDON */ -} /* extern "C" */ diff --git a/xbmc/addons/interfaces/platform/android/System.cpp b/xbmc/addons/interfaces/platform/android/System.cpp deleted file mode 100644 index 6b11b15def878..0000000000000 --- a/xbmc/addons/interfaces/platform/android/System.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#include "System.h" - -#include "CompileInfo.h" -#include "addons/binary-addons/AddonDll.h" -#include "addons/kodi-dev-kit/include/kodi/platform/android/System.h" - -#include "platform/android/activity/XBMCApp.h" - -static AddonToKodiFuncTable_android_system function_table; - -namespace ADDON -{ - -void Interface_Android::Register() -{ - function_table.get_jni_env = get_jni_env; - function_table.get_sdk_version = get_sdk_version; - function_table.get_class_name = get_class_name; - Interface_Base::RegisterInterface(Get); -} - -void* Interface_Android::Get(const std::string &name, const std::string &version) -{ - if (name == INTERFACE_ANDROID_SYSTEM_NAME - && version >= INTERFACE_ANDROID_SYSTEM_VERSION_MIN - && version <= INTERFACE_ANDROID_SYSTEM_VERSION) - return &function_table; - - return nullptr; -}; - -void* Interface_Android::get_jni_env() -{ - return xbmc_jnienv(); -} - -int Interface_Android::get_sdk_version() -{ - return CXBMCApp::get()->getActivity()->sdkVersion; -} - -const char *Interface_Android::get_class_name() -{ - return CCompileInfo::GetClass(); -} - - -} //namespace ADDON diff --git a/xbmc/addons/interfaces/platform/android/System.h b/xbmc/addons/interfaces/platform/android/System.h deleted file mode 100644 index 59805abcbbcf8..0000000000000 --- a/xbmc/addons/interfaces/platform/android/System.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include - -namespace ADDON -{ - -struct Interface_Android -{ - static void Register(); - static void* Get(const std::string &name, const std::string &version); - - static void* get_jni_env(); - static int get_sdk_version(); - static const char *get_class_name(); -}; - -} //namespace ADDON diff --git a/xbmc/addons/kodi-dev-kit/.gitignore b/xbmc/addons/kodi-dev-kit/.gitignore index 0256029dbb3ee..ae448b83ec11a 100644 --- a/xbmc/addons/kodi-dev-kit/.gitignore +++ b/xbmc/addons/kodi-dev-kit/.gitignore @@ -34,3 +34,4 @@ /include/groups.dox /tools/code-generator/creation_log.txt /tools/code-generator/creation_log.txt.old +/tools/code-generator/tmp diff --git a/xbmc/addons/kodi-dev-kit/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/CMakeLists.txt index 4b539b24f62a8..c8ac327eda09c 100644 --- a/xbmc/addons/kodi-dev-kit/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/CMakeLists.txt @@ -1,4 +1,8 @@ cmake_minimum_required(VERSION 3.5) project(kodi-dev-kit) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + include(cmake/test/abi-interface-test.cmake) + +#add_subdirectory(src) diff --git a/xbmc/addons/kodi-dev-kit/cmake/Macros.cmake b/xbmc/addons/kodi-dev-kit/cmake/Macros.cmake new file mode 100644 index 0000000000000..d7c40344dbb3c --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/cmake/Macros.cmake @@ -0,0 +1,10 @@ +include(../../../../../cmake/scripts/common/Macros.cmake) + +macro(devkit_add_object name) + add_library(${name} OBJECT ${SOURCES} ${HEADERS}) + set_target_properties(${name} PROPERTIES C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + POSITION_INDEPENDENT_CODE ON) + set(DEVKIT_OBJECTS $ ${DEVKIT_OBJECTS} PARENT_SCOPE) +endmacro() diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/AddonBase.h b/xbmc/addons/kodi-dev-kit/include/kodi/AddonBase.h index 7cae9b98e1570..3f8d90f921c9a 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/AddonBase.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/AddonBase.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2018 Team Kodi + * Copyright (C) 2005-2021 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,22 +9,17 @@ #pragma once #include "c-api/addon_base.h" -#include "versions.h" - -#include /* assert */ -#include /* va_list, va_start, va_arg, va_end */ +#include "c-api/dl/kodi_api_1.h" #ifdef __cplusplus -#include +#include #include -#include #include -#include #include -#include -#include "tools/StringUtils.h" +#include +#include namespace kodi { @@ -62,19 +57,67 @@ using HardwareContext = ADDON_HARDWARE_CONTEXT; ///@} //------------------------------------------------------------------------------ -namespace addon +class ATTR_DLL_LOCAL dl { +public: + static inline std::string get_kodi_lib_path(int argc, char* argv[]) + { + std::string main_shared; -/*! - * @brief Internal used structure to have stored C API data above and - * available for everything below. - */ -struct ATTR_DLL_LOCAL CPrivateBase -{ - // Interface function table to hold addresses on add-on and from kodi - static AddonGlobalInterface* m_interface; + for (int i = 1; i < argc; ++i) + { + if (argv[i] == nullptr) + break; + + std::string arg = argv[i]; + if (arg.rfind("--dl=", 0) == 0) + { + main_shared = arg.substr(strlen("--dl=")); + break; + } + else if ((arg == "-l") || (arg == "--dl")) + { + if (i + 1 < argc) // Make sure we aren't at the end of argv! + { + main_shared = + argv[++i]; // Increment 'i' so we don't get the argument as the next argv[i]. + break; + } + } + } + + return main_shared; + } + + static inline bool LoadDll(int argc, char** argv) + { + const std::string libPath = get_kodi_lib_path(argc, argv); + dll = dlopen(libPath.c_str(), RTLD_LAZY | RTLD_GLOBAL); + if (dll == nullptr) + return false; + + bool (*load_kodi_api_1)(struct kodi_api_1*) = + reinterpret_cast(dlsym(dll, "load_kodi_api_1")); + if (!load_kodi_api_1 || !load_kodi_api_1(&api)) + { + fprintf(stderr, "FATAL: Failed to load required kodi dev kit lib '%s'!\n", libPath.c_str()); + dlclose(dll); + return false; + } + + return true; + } + + static inline void UnloadDll() { dlclose(dll); } + + static kodi_api_1 api; + static KODI_IFC_HDL hdl; + static KODI_DLL_HDL dll; }; +namespace addon +{ + /* * Internally used helper class to manage processing of a "C" structure in "CPP" * class. @@ -281,12 +324,9 @@ class ATTR_DLL_LOCAL CSettingValue return static_cast(GetInt()); } - ///@} - private: const std::string str; }; -///@} //------------------------------------------------------------------------------ //============================================================================== @@ -299,7 +339,15 @@ class ATTR_DLL_LOCAL CSettingValue class ATTR_DLL_LOCAL IInstanceInfo { public: - explicit IInstanceInfo(KODI_ADDON_INSTANCE_STRUCT* instance) : m_instance(instance) {} + explicit IInstanceInfo(const KODI_ADDON_INSTANCE_INFO* instance) + : m_type(instance->type), + m_instance_id(instance->instance_id), + m_unique_work_id(instance->unique_work_id), + m_kodi(instance->kodi), + m_parent(instance->parent), + m_first_instance(instance->first_instance) + { + } /// @defgroup cpp_kodi_addon_addonbase_Defs_IInstanceInfo_Help Value Help /// @ingroup cpp_kodi_addon_addonbase_Defs_IInstanceInfo @@ -318,38 +366,52 @@ class ATTR_DLL_LOCAL IInstanceInfo ///@{ /// @brief To get settings value as string. - KODI_ADDON_INSTANCE_TYPE GetType() const { return m_instance->info->type; } + KODI_ADDON_INSTANCE_TYPE GetType() const { return m_type; } /// @brief Check asked type used on this class. /// /// @param[in] type Type identifier to check /// @return True if type matches - bool IsType(KODI_ADDON_INSTANCE_TYPE type) const { return m_instance->info->type == type; } + bool IsType(KODI_ADDON_INSTANCE_TYPE type) const { return m_type == type; } /// @brief Get optional identification number (usage relate to addon type). - uint32_t GetNumber() const { return m_instance->info->number; } + uint32_t GetInstanceID() const { return m_instance_id; } /// @brief Get optional identification string (usage relate to addon type). - std::string GetID() const { return m_instance->info->id; } + std::string GetUniqueWorkID() const { return m_unique_work_id; } - /// @brief Get API version from Kodi about instance. - std::string GetAPIVersion() const { return m_instance->info->version; } + KODI_ADDON_INSTANCE_BACKEND_HDL GetKodiHdl() const { return m_kodi; } + KODI_ADDON_INSTANCE_HDL GetParentHdl() const { return m_parent; } /// @brief Check this is first created instance by Kodi. - bool FirstInstance() const { return m_instance->info->first_instance; } + bool FirstInstance() const { return m_first_instance; } ///@} - operator KODI_ADDON_INSTANCE_STRUCT*() { return m_instance; } +private: + friend class CAddonBase; + IInstanceInfo() = default; - operator KODI_ADDON_INSTANCE_STRUCT*() const { return m_instance; } + const IInstanceInfo& operator=(const KODI_ADDON_INSTANCE_INFO* right) + { + assert(right); -private: - IInstanceInfo() = delete; - IInstanceInfo(IInstanceInfo&) = delete; - IInstanceInfo(const IInstanceInfo&) = delete; + m_type = right->type; + m_instance_id = right->instance_id; + m_unique_work_id = right->unique_work_id; + m_kodi = right->kodi; + m_parent = right->parent; + m_first_instance = right->first_instance; - KODI_ADDON_INSTANCE_STRUCT* m_instance; + return *this; + } + + KODI_ADDON_INSTANCE_TYPE m_type{ADDON_INSTANCE_UNKNOWN}; + uint32_t m_instance_id{0}; + std::string m_unique_work_id; + KODI_ADDON_INSTANCE_BACKEND_HDL m_kodi{nullptr}; + KODI_ADDON_INSTANCE_HDL m_parent{nullptr}; + bool m_first_instance{false}; }; ///@} //------------------------------------------------------------------------------ @@ -367,14 +429,9 @@ class ATTR_DLL_LOCAL IInstanceInfo class ATTR_DLL_LOCAL IAddonInstance { public: - explicit IAddonInstance(const kodi::addon::IInstanceInfo& instance) : m_instance(instance) + explicit IAddonInstance(const kodi::addon::IInstanceInfo& instance) + : m_instanceInfo(instance), m_instanceHdl(instance.GetKodiHdl()) { - m_instance->functions->instance_setting_change_string = INSTANCE_instance_setting_change_string; - m_instance->functions->instance_setting_change_integer = - INSTANCE_instance_setting_change_integer; - m_instance->functions->instance_setting_change_boolean = - INSTANCE_instance_setting_change_boolean; - m_instance->functions->instance_setting_change_float = INSTANCE_instance_setting_change_float; } virtual ~IAddonInstance() = default; @@ -384,7 +441,7 @@ class ATTR_DLL_LOCAL IAddonInstance return ADDON_STATUS_NOT_IMPLEMENTED; } - std::string GetInstanceAPIVersion() const { return m_instance->info->version; } + virtual void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) = 0; virtual ADDON_STATUS SetInstanceSetting(const std::string& settingName, const kodi::addon::CSettingValue& settingValue) @@ -394,19 +451,18 @@ class ATTR_DLL_LOCAL IAddonInstance inline bool IsInstanceSettingUsingDefault(const std::string& settingName) { - return m_instance->info->functions->is_instance_setting_using_default(m_instance->info->kodi, - settingName.c_str()); + return kodi::dl::api.kodi_addon_instance_is_setting_using_default(m_instanceHdl, settingName.c_str()); } inline std::string GetInstanceUserPath(const std::string& append = "") { - using namespace kodi::addon; + char* str = kodi::dl::api.kodi_addon_instance_get_user_path(m_instanceHdl); + if (!str) + return ""; - char* str = m_instance->info->functions->get_instance_user_path( - CPrivateBase::m_interface->toKodi->kodiBase); std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - str); + free(str); + if (!append.empty()) { if (append.at(0) != '\\' && append.at(0) != '/') @@ -423,8 +479,7 @@ class ATTR_DLL_LOCAL IAddonInstance inline bool CheckInstanceSettingString(const std::string& settingName, std::string& settingValue) { char* buffer = nullptr; - bool ret = m_instance->info->functions->get_instance_setting_string( - m_instance->info->kodi, settingName.c_str(), &buffer); + bool ret = kodi::dl::api.kodi_addon_instance_get_setting_string(m_instanceHdl, settingName.c_str(), &buffer); if (buffer) { if (ret) @@ -445,14 +500,13 @@ class ATTR_DLL_LOCAL IAddonInstance inline void SetInstanceSettingString(const std::string& settingName, const std::string& settingValue) { - m_instance->info->functions->set_instance_setting_string( - m_instance->info->kodi, settingName.c_str(), settingValue.c_str()); + kodi::dl::api.kodi_addon_instance_set_setting_string(m_instanceHdl, settingName.c_str(), + settingValue.c_str()); } inline bool CheckInstanceSettingInt(const std::string& settingName, int& settingValue) { - KODI_ADDON_INSTANCE_FUNC_CB* cb = m_instance->info->functions; - return cb->get_instance_setting_int(m_instance->info->kodi, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_instance_get_setting_int(m_instanceHdl, settingName.c_str(), &settingValue); } inline int GetInstanceSettingInt(const std::string& settingName, int defaultValue = 0) @@ -464,14 +518,12 @@ class ATTR_DLL_LOCAL IAddonInstance inline void SetInstanceSettingInt(const std::string& settingName, int settingValue) { - m_instance->info->functions->set_instance_setting_int(m_instance->info->kodi, - settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_instance_set_setting_int(m_instanceHdl, settingName.c_str(), settingValue); } inline bool CheckInstanceSettingBoolean(const std::string& settingName, bool& settingValue) { - return m_instance->info->functions->get_instance_setting_bool( - m_instance->info->kodi, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_instance_get_setting_bool(m_instanceHdl, settingName.c_str(), &settingValue); } inline bool GetInstanceSettingBoolean(const std::string& settingName, bool defaultValue = false) @@ -483,27 +535,24 @@ class ATTR_DLL_LOCAL IAddonInstance inline void SetInstanceSettingBoolean(const std::string& settingName, bool settingValue) { - m_instance->info->functions->set_instance_setting_bool(m_instance->info->kodi, - settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_instance_set_setting_bool(m_instanceHdl, settingName.c_str(), settingValue); } - inline bool CheckInstanceSettingFloat(const std::string& settingName, float& settingValue) + inline bool CheckInstanceSettingFloat(const std::string& settingName, double& settingValue) { - return m_instance->info->functions->get_instance_setting_float( - m_instance->info->kodi, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_instance_get_setting_float(m_instanceHdl, settingName.c_str(), &settingValue); } - inline float GetInstanceSettingFloat(const std::string& settingName, float defaultValue = 0.0f) + inline double GetInstanceSettingFloat(const std::string& settingName, double defaultValue = 0.0) { - float settingValue = defaultValue; + double settingValue = defaultValue; CheckInstanceSettingFloat(settingName, settingValue); return settingValue; } - inline void SetInstanceSettingFloat(const std::string& settingName, float settingValue) + inline void SetInstanceSettingFloat(const std::string& settingName, double settingValue) { - m_instance->info->functions->set_instance_setting_float(m_instance->info->kodi, - settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_instance_set_setting_float(m_instanceHdl, settingName.c_str(), settingValue); } template @@ -512,8 +561,8 @@ class ATTR_DLL_LOCAL IAddonInstance using namespace kodi::addon; int settingValueInt = static_cast(settingValue); - bool ret = m_instance->info->functions->get_instance_setting_int( - m_instance->info->kodi, settingName.c_str(), &settingValueInt); + bool ret = + kodi::dl::api.kodi_addon_instance_get_setting_int(m_instanceHdl, settingName.c_str(), &settingValueInt); if (ret) settingValue = static_cast(settingValueInt); return ret; @@ -531,41 +580,56 @@ class ATTR_DLL_LOCAL IAddonInstance template inline void SetInstanceSettingEnum(const std::string& settingName, enumType settingValue) { - m_instance->info->functions->set_instance_setting_int( - m_instance->info->kodi, settingName.c_str(), static_cast(settingValue)); + kodi::dl::api.kodi_addon_instance_set_setting_int(m_instanceHdl, settingName.c_str(), + static_cast(settingValue)); } + const kodi::addon::IInstanceInfo& GetInfo() const { return m_instanceInfo; } + private: + friend class CAddonBase; + static inline ADDON_STATUS INSTANCE_instance_setting_change_string( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, const char* value) + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value) { return static_cast(hdl)->SetInstanceSetting(name, CSettingValue(value)); } static inline ADDON_STATUS INSTANCE_instance_setting_change_boolean( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, bool value) + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value) { return static_cast(hdl)->SetInstanceSetting(name, CSettingValue(value ? "1" : "0")); } static inline ADDON_STATUS INSTANCE_instance_setting_change_integer( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, int value) + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value) { return static_cast(hdl)->SetInstanceSetting( name, CSettingValue(std::to_string(value))); } static inline ADDON_STATUS INSTANCE_instance_setting_change_float( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, float value) + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value) { return static_cast(hdl)->SetInstanceSetting( name, CSettingValue(std::to_string(value))); } - friend class CAddonBase; - - const KODI_ADDON_INSTANCE_STRUCT* m_instance; + const kodi::addon::IInstanceInfo m_instanceInfo; + const KODI_ADDON_INSTANCE_BACKEND_HDL m_instanceHdl; }; //============================================================================ @@ -581,17 +645,7 @@ class ATTR_DLL_LOCAL CAddonBase /// @ingroup cpp_kodi_addon_addonbase /// @brief Addon base class constructor. /// - CAddonBase() - { - CPrivateBase::m_interface->toAddon->create = nullptr; - CPrivateBase::m_interface->toAddon->destroy = ADDONBASE_Destroy; - CPrivateBase::m_interface->toAddon->create_instance = ADDONBASE_CreateInstance; - CPrivateBase::m_interface->toAddon->destroy_instance = ADDONBASE_DestroyInstance; - CPrivateBase::m_interface->toAddon->setting_change_string = ADDONBASE_setting_change_string; - CPrivateBase::m_interface->toAddon->setting_change_boolean = ADDONBASE_setting_change_boolean; - CPrivateBase::m_interface->toAddon->setting_change_integer = ADDONBASE_setting_change_integer; - CPrivateBase::m_interface->toAddon->setting_change_float = ADDONBASE_setting_change_float; - } + CAddonBase() = default; //---------------------------------------------------------------------------- //============================================================================ @@ -749,34 +803,70 @@ class ATTR_DLL_LOCAL CAddonBase /* Background helper for GUI render systems, e.g. Screensaver or Visualization */ std::shared_ptr m_renderHelper; + kodi::addon::IInstanceInfo m_firstInstance; + KODI_ADDON_HDL m_globalSingleInstance{nullptr}; + + static KODI_ADDON_FUNC GetAddonFunctions() + { + KODI_ADDON_FUNC func = {ADDONBASE_create, + ADDONBASE_destroy, + + ADDONBASE_setting_change_string, + ADDONBASE_setting_change_boolean, + ADDONBASE_setting_change_integer, + ADDONBASE_setting_change_float, + + ADDONBASE_create_instance, + ADDONBASE_destroy_instance, + + IAddonInstance::INSTANCE_instance_setting_change_string, + IAddonInstance::INSTANCE_instance_setting_change_boolean, + IAddonInstance::INSTANCE_instance_setting_change_integer, + IAddonInstance::INSTANCE_instance_setting_change_float}; + return func; + } + + // Interface function table to hold addresses on add-on and from kodi + static CAddonBase* addonBase; private: - static inline void ADDONBASE_Destroy(const KODI_ADDON_HDL hdl) + static ADDON_STATUS ADDONBASE_create(const struct KODI_ADDON_INSTANCE_INFO* first_instance, + KODI_ADDON_HDL* hdl); + + static inline void ADDONBASE_destroy(const KODI_ADDON_HDL hdl) { delete static_cast(hdl); } - static inline ADDON_STATUS ADDONBASE_CreateInstance(const KODI_ADDON_HDL hdl, - struct KODI_ADDON_INSTANCE_STRUCT* instance) + static inline ADDON_STATUS ADDONBASE_create_instance(const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + struct KODI_ADDON_INSTANCE_STRUCT* instance) { CAddonBase* base = static_cast(hdl); ADDON_STATUS status = ADDON_STATUS_NOT_IMPLEMENTED; + if (info == nullptr || instance == nullptr) + { + kodi::dl::api.kodi_log( + ADDON_LOG_FATAL, + "kodi::addon::CAddonBase CreateInstance called with empty instance memory"); + return ADDON_STATUS_PERMANENT_FAILURE; + } + /* Check about single instance usage: * 1. The kodi side instance pointer must be equal to first one * 2. The addon side instance pointer must be set * 3. And the requested type must be equal with used add-on class */ - if (CPrivateBase::m_interface->firstKodiInstance == instance && - CPrivateBase::m_interface->globalSingleInstance && - static_cast(CPrivateBase::m_interface->globalSingleInstance) - ->m_instance->info->type == instance->info->type) + if (addonBase->m_firstInstance.GetKodiHdl() == info->kodi && + addonBase->m_globalSingleInstance && + static_cast(addonBase->m_globalSingleInstance)->GetInfo().GetType() == + info->type) { /* The handling here is intended for the case of the add-on only one * instance and this is integrated in the add-on base class. */ - instance->hdl = CPrivateBase::m_interface->globalSingleInstance; status = ADDON_STATUS_OK; } else @@ -785,28 +875,40 @@ class ATTR_DLL_LOCAL CAddonBase * creation of several on one addon. */ - IInstanceInfo instanceInfo(instance); + IInstanceInfo instanceInfo(info); /* Check first a parent is defined about (e.g. Codec within inputstream) */ - if (instance->info->parent != nullptr) - status = static_cast(instance->info->parent) - ->CreateInstance(instanceInfo, instance->hdl); + if (info->parent != nullptr) + status = + static_cast(info->parent)->CreateInstance(instanceInfo, instance->hdl); /* if no parent call the main instance creation function to get it */ if (status == ADDON_STATUS_NOT_IMPLEMENTED) { + if (CAddonBase::addonBase->m_globalSingleInstance != nullptr) + { + kodi::dl::api.kodi_log(ADDON_LOG_FATAL, + "kodi::addon::CAddonBase Creation of multiple together with " + "single instance way is not allowed!"); + return ADDON_STATUS_PERMANENT_FAILURE; + } status = base->CreateInstance(instanceInfo, instance->hdl); } } - if (instance->hdl == nullptr) + IAddonInstance* instanceHdl = static_cast(instance->hdl); + + if (instanceHdl != nullptr) + { + instanceHdl->SetAddonStruct(instance); + } + else { if (status == ADDON_STATUS_OK) { - CPrivateBase::m_interface->toKodi->addon_log_msg( - CPrivateBase::m_interface->toKodi->kodiBase, ADDON_LOG_FATAL, - "kodi::addon::CAddonBase CreateInstance returned an " - "empty instance pointer, but reported OK!"); + kodi::dl::api.kodi_log(ADDON_LOG_FATAL, + "kodi::addon::CAddonBase CreateInstance returned an " + "empty instance pointer, but reported OK!"); return ADDON_STATUS_PERMANENT_FAILURE; } else @@ -815,10 +917,10 @@ class ATTR_DLL_LOCAL CAddonBase } } - if (static_cast(instance->hdl)->m_instance->info->type != instance->info->type) + if (instanceHdl->GetInfo().GetType() != info->type) { - CPrivateBase::m_interface->toKodi->addon_log_msg( - CPrivateBase::m_interface->toKodi->kodiBase, ADDON_LOG_FATAL, + kodi::dl::api.kodi_log( + ADDON_LOG_FATAL, "kodi::addon::CAddonBase CreateInstance difference between given and returned"); delete static_cast(instance->hdl); instance->hdl = nullptr; @@ -828,16 +930,17 @@ class ATTR_DLL_LOCAL CAddonBase return status; } - static inline void ADDONBASE_DestroyInstance(const KODI_ADDON_HDL hdl, - struct KODI_ADDON_INSTANCE_STRUCT* instance) + static inline void ADDONBASE_destroy_instance(const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_ADDON_INSTANCE_HDL instance_hdl) { CAddonBase* base = static_cast(hdl); - if (CPrivateBase::m_interface->globalSingleInstance == nullptr && instance->hdl != base) + if (addonBase->m_globalSingleInstance == nullptr && instance_hdl != base) { - IInstanceInfo instanceInfo(instance); - base->DestroyInstance(instanceInfo, instance->hdl); - delete static_cast(instance->hdl); + IInstanceInfo instanceInfo(info); + base->DestroyInstance(instanceInfo, instance_hdl); + delete static_cast(instance_hdl); } } @@ -864,7 +967,7 @@ class ATTR_DLL_LOCAL CAddonBase static inline ADDON_STATUS ADDONBASE_setting_change_float(const KODI_ADDON_HDL hdl, const char* name, - float value) + double value) { return static_cast(hdl)->SetSetting(name, CSettingValue(std::to_string(value))); } @@ -879,12 +982,9 @@ class ATTR_DLL_LOCAL CAddonBase /// inline std::string ATTR_DLL_LOCAL GetAddonPath(const std::string& append = "") { - using namespace kodi::addon; - - char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_addon_path( - CPrivateBase::m_interface->toKodi->kodiBase); + char* str = kodi::dl::api.kodi_addon_get_addon_path(); std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str); + free(str); if (!append.empty()) { if (append.at(0) != '\\' && append.at(0) != '/') @@ -916,12 +1016,9 @@ inline std::string ATTR_DLL_LOCAL GetAddonPath(const std::string& append = "") /// inline std::string ATTR_DLL_LOCAL GetLibPath(const std::string& append = "") { - using namespace kodi::addon; - - char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_lib_path( - CPrivateBase::m_interface->toKodi->kodiBase); + char* str = kodi_addon_get_lib_path(); std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str); + free(str); if (!append.empty()) { if (append.at(0) != '\\' && append.at(0) != '/') @@ -948,12 +1045,9 @@ inline std::string ATTR_DLL_LOCAL GetLibPath(const std::string& append = "") /// inline std::string ATTR_DLL_LOCAL GetUserPath(const std::string& append = "") { - using namespace kodi::addon; - - char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_user_path( - CPrivateBase::m_interface->toKodi->kodiBase); + char* str = kodi::dl::api.kodi_addon_get_user_path(); std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str); + free(str); if (!append.empty()) { if (append.at(0) != '\\' && append.at(0) != '/') @@ -981,12 +1075,9 @@ inline std::string ATTR_DLL_LOCAL GetUserPath(const std::string& append = "") /// inline std::string ATTR_DLL_LOCAL GetTempPath(const std::string& append = "") { - using namespace kodi::addon; - - char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_temp_path( - CPrivateBase::m_interface->toKodi->kodiBase); + char* str = kodi::dl::api.kodi_addon_get_temp_path(); std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str); + free(str); if (!append.empty()) { if (append.at(0) != '\\' && append.at(0) != '/') @@ -1031,23 +1122,18 @@ inline std::string ATTR_DLL_LOCAL GetTempPath(const std::string& append = "") inline std::string ATTR_DLL_LOCAL GetLocalizedString(uint32_t labelId, const std::string& defaultStr = "") { - using namespace kodi::addon; - std::string retString = defaultStr; - char* strMsg = CPrivateBase::m_interface->toKodi->kodi_addon->get_localized_string( - CPrivateBase::m_interface->toKodi->kodiBase, labelId); + char* strMsg = kodi::dl::api.kodi_get_localized_string(labelId); if (strMsg != nullptr) { if (std::strlen(strMsg)) retString = strMsg; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strMsg); + free(strMsg); } return retString; } //------------------------------------------------------------------------------ - //############################################################################## /// @ingroup cpp_kodi_addon /// @defgroup cpp_kodi_settings 1. Setting control @@ -1080,9 +1166,7 @@ inline std::string ATTR_DLL_LOCAL GetLocalizedString(uint32_t labelId, /// inline bool ATTR_DLL_LOCAL OpenSettings() { - using namespace kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_addon->open_settings_dialog( - CPrivateBase::m_interface->toKodi->kodiBase); + return kodi::dl::api.kodi_addon_open_settings_dialog(); } //------------------------------------------------------------------------------ @@ -1096,9 +1180,7 @@ inline bool ATTR_DLL_LOCAL OpenSettings() /// inline bool ATTR_DLL_LOCAL IsSettingUsingDefault(const std::string& settingName) { - using namespace kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_addon->is_setting_using_default( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str()); + return kodi::dl::api.kodi_addon_is_setting_using_default(settingName.c_str()); } //------------------------------------------------------------------------------ @@ -1128,17 +1210,13 @@ inline bool ATTR_DLL_LOCAL IsSettingUsingDefault(const std::string& settingName) inline bool ATTR_DLL_LOCAL CheckSettingString(const std::string& settingName, std::string& settingValue) { - using namespace kodi::addon; - char* buffer = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_string( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &buffer); + bool ret = kodi::dl::api.kodi_addon_get_setting_string(settingName.c_str(), &buffer); if (buffer) { if (ret) settingValue = buffer; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - buffer); + free(buffer); } return ret; } @@ -1194,10 +1272,7 @@ inline std::string ATTR_DLL_LOCAL GetSettingString(const std::string& settingNam inline void ATTR_DLL_LOCAL SetSettingString(const std::string& settingName, const std::string& settingValue) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_string( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue.c_str()); + kodi::dl::api.kodi_addon_set_setting_string(settingName.c_str(), settingValue.c_str()); } //------------------------------------------------------------------------------ @@ -1226,10 +1301,7 @@ inline void ATTR_DLL_LOCAL SetSettingString(const std::string& settingName, /// inline bool ATTR_DLL_LOCAL CheckSettingInt(const std::string& settingName, int& settingValue) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_int( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_get_setting_int(settingName.c_str(), &settingValue); } //------------------------------------------------------------------------------ @@ -1281,10 +1353,7 @@ inline int ATTR_DLL_LOCAL GetSettingInt(const std::string& settingName, int defa /// inline void ATTR_DLL_LOCAL SetSettingInt(const std::string& settingName, int settingValue) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_int( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_set_setting_int(settingName.c_str(), settingValue); } //------------------------------------------------------------------------------ @@ -1313,10 +1382,7 @@ inline void ATTR_DLL_LOCAL SetSettingInt(const std::string& settingName, int set /// inline bool ATTR_DLL_LOCAL CheckSettingBoolean(const std::string& settingName, bool& settingValue) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_bool( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_get_setting_bool(settingName.c_str(), &settingValue); } //------------------------------------------------------------------------------ @@ -1369,10 +1435,7 @@ inline bool ATTR_DLL_LOCAL GetSettingBoolean(const std::string& settingName, /// inline void ATTR_DLL_LOCAL SetSettingBoolean(const std::string& settingName, bool settingValue) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_bool( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_set_setting_bool(settingName.c_str(), settingValue); } //------------------------------------------------------------------------------ @@ -1399,12 +1462,9 @@ inline void ATTR_DLL_LOCAL SetSettingBoolean(const std::string& settingName, boo /// value = 1.0f; // My default of them /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL CheckSettingFloat(const std::string& settingName, float& settingValue) +inline bool ATTR_DLL_LOCAL CheckSettingFloat(const std::string& settingName, double& settingValue) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_float( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValue); + return kodi::dl::api.kodi_addon_get_setting_float(settingName.c_str(), &settingValue); } //------------------------------------------------------------------------------ @@ -1424,13 +1484,13 @@ inline bool ATTR_DLL_LOCAL CheckSettingFloat(const std::string& settingName, flo /// ~~~~~~~~~~~~~{.cpp} /// #include /// -/// float value = kodi::GetSettingFloat("my_float_value"); +/// double value = kodi::GetSettingFloat("my_float_value"); /// ~~~~~~~~~~~~~ /// inline float ATTR_DLL_LOCAL GetSettingFloat(const std::string& settingName, - float defaultValue = 0.0f) + double defaultValue = 0.0f) { - float settingValue = defaultValue; + double settingValue = defaultValue; CheckSettingFloat(settingName, settingValue); return settingValue; } @@ -1451,16 +1511,13 @@ inline float ATTR_DLL_LOCAL GetSettingFloat(const std::string& settingName, /// ~~~~~~~~~~~~~{.cpp} /// #include /// -/// float value = 1.0f; +/// double value = 1.0f; /// kodi::SetSettingFloat("my_float_value", value); /// ~~~~~~~~~~~~~ /// -inline void ATTR_DLL_LOCAL SetSettingFloat(const std::string& settingName, float settingValue) +inline void ATTR_DLL_LOCAL SetSettingFloat(const std::string& settingName, double settingValue) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_float( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), settingValue); + kodi::dl::api.kodi_addon_set_setting_float(settingName.c_str(), settingValue); } //------------------------------------------------------------------------------ @@ -1498,11 +1555,8 @@ inline void ATTR_DLL_LOCAL SetSettingFloat(const std::string& settingName, float template inline bool ATTR_DLL_LOCAL CheckSettingEnum(const std::string& settingName, enumType& settingValue) { - using namespace kodi::addon; - int settingValueInt = static_cast(settingValue); - bool ret = CPrivateBase::m_interface->toKodi->kodi_addon->get_setting_int( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), &settingValueInt); + bool ret = kodi::dl::api.kodi_addon_get_setting_int(settingName.c_str(), &settingValueInt); if (ret) settingValue = static_cast(settingValueInt); return ret; @@ -1578,11 +1632,7 @@ inline enumType ATTR_DLL_LOCAL GetSettingEnum(const std::string& settingName, template inline void ATTR_DLL_LOCAL SetSettingEnum(const std::string& settingName, enumType settingValue) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_addon->set_setting_int( - CPrivateBase::m_interface->toKodi->kodiBase, settingName.c_str(), - static_cast(settingValue)); + kodi::dl::api.kodi_addon_set_setting_int(settingName.c_str(), static_cast(settingValue)); } //------------------------------------------------------------------------------ @@ -1616,72 +1666,18 @@ inline void ATTR_DLL_LOCAL SetSettingEnum(const std::string& settingName, enumTy /// inline std::string ATTR_DLL_LOCAL GetAddonInfo(const std::string& id) { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - std::string strReturn; - char* strMsg = toKodi->kodi_addon->get_addon_info(toKodi->kodiBase, id.c_str()); + char* strMsg = kodi::dl::api.kodi_addon_get_info(id.c_str()); if (strMsg != nullptr) { if (std::strlen(strMsg)) strReturn = strMsg; - toKodi->free_string(toKodi->kodiBase, strMsg); + free(strMsg); } return strReturn; } //------------------------------------------------------------------------------ -//============================================================================== -/// @ingroup cpp_kodi_addon -/// @brief Returns a function table to a named interface -/// -/// @return pointer to struct containing interface functions -/// -/// -/// ------------------------------------------------------------------------ -/// -/// **Example:** -/// ~~~~~~~~~~~~~{.cpp} -/// #include -/// #include -/// ... -/// FuncTable_foo *table = kodi::GetPlatformInfo(foo_name, foo_version); -/// ... -/// ~~~~~~~~~~~~~ -/// -inline void* GetInterface(const std::string& name, const std::string& version) -{ - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - - return toKodi->kodi_addon->get_interface(toKodi->kodiBase, name.c_str(), version.c_str()); -} -//---------------------------------------------------------------------------- - -//============================================================================== -/// @ingroup cpp_kodi_addon -/// @brief To get used version inside Kodi itself about asked type. -/// -/// This thought to allow a addon a handling of newer addon versions within -/// older Kodi until the type min version not changed. -/// -/// @param[in] type The wanted type of @ref ADDON_TYPE to ask -/// @return The version string about type in MAJOR.MINOR.PATCH style. -/// -inline std::string ATTR_DLL_LOCAL GetKodiTypeVersion(int type) -{ - using namespace kodi::addon; - - char* str = CPrivateBase::m_interface->toKodi->kodi_addon->get_type_version( - CPrivateBase::m_interface->toKodi->kodiBase, type); - std::string ret = str; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, str); - return ret; -} -//------------------------------------------------------------------------------ - //============================================================================ /// @ingroup cpp_kodi_addon /// @brief Get to related @ref ADDON_STATUS a human readable text. @@ -1724,7 +1720,6 @@ inline std::string ATTR_DLL_LOCAL TranslateAddonStatus(ADDON_STATUS status) /// @param[in] format The format of the message to pass to Kodi. /// @param[in] ... Additional text to insert in format text /// -/// /// @note This method uses limited buffer (16k) for the formatted output. /// So data, which will not fit into it, will be silently discarded. /// @@ -1739,19 +1734,34 @@ inline std::string ATTR_DLL_LOCAL TranslateAddonStatus(ADDON_STATUS status) /// /// ~~~~~~~~~~~~~ /// -inline void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char* format, ...) +template +inline void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const std::string& fmt, Args&&... args) { - using namespace kodi::addon; - - va_list args; - va_start(args, format); - const std::string str = kodi::tools::StringUtils::FormatV(format, args); - va_end(args); - CPrivateBase::m_interface->toKodi->addon_log_msg(CPrivateBase::m_interface->toKodi->kodiBase, - loglevel, str.c_str()); + kodi::dl::api.kodi_log(loglevel, fmt.c_str(), args...); } //------------------------------------------------------------------------------ +inline bool ATTR_DLL_LOCAL Init( + unsigned int api, int argc, char* argv[], KODI_ADDON_FUNC& func, bool via_main, bool no_receive) +{ + if (!kodi::dl::LoadDll(argc, argv)) + return false; + + KODI_IFC_HDL hdl = kodi::dl::api.kodi_init(api, argc, argv, &func, via_main, no_receive); + if (!hdl) + return false; + + kodi::dl::hdl = hdl; + + return true; +} + +inline void ATTR_DLL_LOCAL Deinit() +{ + kodi::dl::api.kodi_deinit(kodi::dl::hdl); + kodi::dl::UnloadDll(); +} + } /* namespace kodi */ //============================================================================== @@ -1848,23 +1858,48 @@ inline void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char* format, ... /// } /// \table_end /// + +#define KODI_STARTER \ + kodi_api_1 kodi::dl::api{0}; \ + KODI_IFC_HDL kodi::dl::hdl{nullptr}; \ + KODI_DLL_HDL kodi::dl::dll{nullptr}; #define ADDONCREATOR(AddonClass) \ - extern "C" ATTR_DLL_EXPORT ADDON_STATUS ADDON_Create(KODI_HANDLE addonInterface) \ + KODI_STARTER \ + kodi::addon::CAddonBase* kodi::addon::CAddonBase::addonBase; \ + ADDON_STATUS kodi::addon::CAddonBase::ADDONBASE_create( \ + const struct KODI_ADDON_INSTANCE_INFO* first_instance, KODI_ADDON_HDL* hdl) \ { \ - using namespace kodi::addon; \ - CPrivateBase::m_interface = static_cast(addonInterface); \ - CPrivateBase::m_interface->addonBase = new AddonClass; \ - return static_cast(CPrivateBase::m_interface->addonBase)->Create(); \ + using namespace ::kodi::addon; \ + CAddonBase::addonBase = new AddonClass; \ + CAddonBase::addonBase->m_firstInstance = first_instance; \ + *hdl = CAddonBase::addonBase; \ + return static_cast(*hdl)->Create(); \ } \ - extern "C" ATTR_DLL_EXPORT const char* ADDON_GetTypeVersion(int type) \ + extern "C" ATTR_DLL_EXPORT int main(int argc, char** argv) \ { \ - return kodi::addon::GetTypeVersion(type); \ + using namespace ::kodi::addon; \ + fprintf(stderr, "TEMP DEBUG: Addon main started, PID %i\n", getpid()); \ + /*sleep(10);*/ \ + KODI_ADDON_FUNC func = CAddonBase::GetAddonFunctions(); \ + if (!kodi::Init(__KODI_API__, argc, argv, func, true, false)) \ + { \ + fprintf(stderr, "TEMP DEBUG: Addon main start failed!!! PID %i\n", getpid()); \ + return -1; \ + } \ + while (1) \ + { \ + if (!kodi::dl::api.kodi_process(kodi::dl::hdl)) \ + break; \ + } \ + kodi::Deinit(); \ + return 0; \ } \ - extern "C" ATTR_DLL_EXPORT const char* ADDON_GetTypeMinVersion(int type) \ + extern "C" ATTR_DLL_EXPORT int non_blocking_main_start(int argc, char** argv) \ { \ - return kodi::addon::GetTypeMinVersion(type); \ + using namespace ::kodi::addon; \ + KODI_ADDON_FUNC func = CAddonBase::GetAddonFunctions(); \ + return kodi::Init(__KODI_API__, argc, argv, func, true, false) ? 0 : -1; \ } \ - AddonGlobalInterface* kodi::addon::CPrivateBase::m_interface = nullptr; -//------------------------------------------------------------------------------ + extern "C" ATTR_DLL_EXPORT void non_blocking_main_stop() { kodi::Deinit(); } #endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/AudioEngine.h b/xbmc/addons/kodi-dev-kit/include/kodi/AudioEngine.h index 2afe351e69ba3..10d96ed5fd4ef 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/AudioEngine.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/AudioEngine.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2019 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,10 +9,13 @@ #pragma once #include "AddonBase.h" +#include "General.h" #include "c-api/audio_engine.h" #ifdef __cplusplus +#include + namespace kodi { namespace audioengine @@ -100,107 +103,65 @@ namespace audioengine /// ///@{ class ATTR_DLL_LOCAL AudioEngineFormat - : public addon::CStructHdl + : public addon::CStructHdl { public: - /*! \cond PRIVATE */ AudioEngineFormat() { - m_cStructure->m_dataFormat = AUDIOENGINE_FMT_INVALID; - m_cStructure->m_sampleRate = 0; - m_cStructure->m_encodedRate = 0; - m_cStructure->m_frames = 0; - m_cStructure->m_frameSize = 0; - m_cStructure->m_channelCount = 0; + m_cStructure->data_format = AUDIOENGINE_FMT_INVALID; + m_cStructure->sample_rate = 0; + m_cStructure->frames = 0; + m_cStructure->frame_size = 0; + m_cStructure->channel_count = 0; for (size_t ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) - m_cStructure->m_channels[ch] = AUDIOENGINE_CH_NULL; + m_cStructure->channels[ch] = AUDIOENGINE_CH_NULL; } AudioEngineFormat(const AudioEngineFormat& channel) : CStructHdl(channel) {} - AudioEngineFormat(const AUDIO_ENGINE_FORMAT* channel) : CStructHdl(channel) {} - AudioEngineFormat(AUDIO_ENGINE_FORMAT* channel) : CStructHdl(channel) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_audioengine_Defs_AudioEngineFormat_Help *Value Help* - /// @ingroup cpp_kodi_audioengine_Defs_AudioEngineFormat - /// - /// The following table contains values that can be set with @ref cpp_kodi_audioengine_Defs_AudioEngineFormat : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Data format**, see @ref AudioEngineDataFormat for available types | enum | @ref AudioEngineFormat::SetDataFormat "SetDataFormat" | @ref AudioEngineFormat::GetDataFormat "GetDataFormat" - /// | **Sample rate** | unsigned int | @ref AudioEngineFormat::SetSampleRate "SetSampleRate" | @ref AudioEngineFormat::GetSampleRate "GetSampleRate" - /// | **Encoded rate** | unsigned int | @ref AudioEngineFormat::SetEncodedRate "SetEncodedRate" | @ref AudioEngineFormat::GetEncodedRate "GetEncodedRate" - /// | **Channel layout**, see @ref AudioEngineChannel for available types | std::vector | @ref AudioEngineFormat::SetChannelLayout "SetChannelLayout" | @ref AudioEngineFormat::GetChannelLayout "GetChannelLayout" - /// | **Frames amount** | unsigned int | @ref AudioEngineFormat::SetFramesAmount "SetFramesAmount" | @ref AudioEngineFormat::GetFramesAmount "GetFramesAmount" - /// | **Frame size** | unsigned int | @ref AudioEngineFormat::SetFrameSize "SetFrameSize" | @ref AudioEngineFormat::GetFrameSize "GetFrameSize" - /// - /// Further is @ref AudioEngineFormat::CompareFormat "CompareFormat" included to compare this class with another. - /// - - /// @addtogroup cpp_kodi_audioengine_Defs_AudioEngineFormat - /// @copydetails cpp_kodi_audioengine_Defs_AudioEngineFormat_Help - ///@{ - - /// @brief The stream's data format (eg, AUDIOENGINE_FMT_S16LE) - void SetDataFormat(enum AudioEngineDataFormat format) { m_cStructure->m_dataFormat = format; } + AudioEngineFormat(const AUDIO_ENGINE_FMT* channel) : CStructHdl(channel) {} + AudioEngineFormat(AUDIO_ENGINE_FMT* channel) : CStructHdl(channel) {} - /// @brief To get with @ref SetDataFormat changed values. - enum AudioEngineDataFormat GetDataFormat() const { return m_cStructure->m_dataFormat; } + void SetDataFormat(AudioEngineDataFormat format) { m_cStructure->data_format = format; } + AudioEngineDataFormat GetDataFormat() const { return m_cStructure->data_format; } - /// @brief The stream's sample rate (eg, 48000) - void SetSampleRate(unsigned int rate) { m_cStructure->m_sampleRate = rate; } + void SetSampleRate(unsigned int rate) { m_cStructure->sample_rate = rate; } + unsigned int GetSampleRate() const { return m_cStructure->sample_rate; } - /// @brief To get with @ref SetSampleRate changed values. - unsigned int GetSampleRate() const { return m_cStructure->m_sampleRate; } - - /// @brief The encoded streams sample rate if a bitstream, otherwise undefined - void SetEncodedRate(unsigned int rate) { m_cStructure->m_encodedRate = rate; } - - /// @brief To get with @ref SetEncodedRate changed values. - unsigned int GetEncodedRate() const { return m_cStructure->m_encodedRate; } - - /// @brief The stream's channel layout - void SetChannelLayout(const std::vector& layout) + void SetChannelLayout(const std::vector& layout) { // Reset first all to empty values to AUDIOENGINE_CH_NULL, in case given list is empty - m_cStructure->m_channelCount = 0; + m_cStructure->channel_count = 0; for (size_t ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) - m_cStructure->m_channels[ch] = AUDIOENGINE_CH_NULL; + m_cStructure->channels[ch] = AUDIOENGINE_CH_NULL; for (size_t ch = 0; ch < layout.size() && ch < AUDIOENGINE_CH_MAX; ++ch) { - m_cStructure->m_channels[ch] = layout[ch]; - m_cStructure->m_channelCount++; + m_cStructure->channels[ch] = layout[ch]; + m_cStructure->channel_count++; } } - /// @brief To get with @ref SetChannelLayout changed values. - std::vector GetChannelLayout() const + std::vector GetChannelLayout() const { - std::vector channels; + std::vector channels; for (size_t ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) { - if (m_cStructure->m_channels[ch] == AUDIOENGINE_CH_NULL) + if (m_cStructure->channels[ch] == AUDIOENGINE_CH_NULL) break; - channels.push_back(m_cStructure->m_channels[ch]); + channels.push_back(m_cStructure->channels[ch]); } return channels; } - /// @brief The number of frames per period - void SetFramesAmount(unsigned int frames) { m_cStructure->m_frames = frames; } - - /// @brief To get with @ref SetFramesAmount changed values. - unsigned int GetFramesAmount() const { return m_cStructure->m_frames; } + unsigned int GetChannelCount() { return m_cStructure->channel_count; } - /// @brief The size of one frame in bytes - void SetFrameSize(unsigned int frameSize) { m_cStructure->m_frameSize = frameSize; } + void SetFramesAmount(unsigned int frames) { m_cStructure->frames = frames; } + unsigned int GetFramesAmount() const { return m_cStructure->frames; } - /// @brief To get with @ref SetFrameSize changed values. - unsigned int GetFrameSize() const { return m_cStructure->m_frameSize; } + void SetFrameSize(unsigned int frameSize) { m_cStructure->frame_size = frameSize; } + unsigned int GetFrameSize() const { return m_cStructure->frame_size; } - /// @brief Function to compare the format structure with another bool CompareFormat(const AudioEngineFormat* fmt) { if (!fmt) @@ -208,19 +169,18 @@ class ATTR_DLL_LOCAL AudioEngineFormat return false; } - if (m_cStructure->m_dataFormat != fmt->m_cStructure->m_dataFormat || - m_cStructure->m_sampleRate != fmt->m_cStructure->m_sampleRate || - m_cStructure->m_encodedRate != fmt->m_cStructure->m_encodedRate || - m_cStructure->m_frames != fmt->m_cStructure->m_frames || - m_cStructure->m_frameSize != fmt->m_cStructure->m_frameSize || - m_cStructure->m_channelCount != fmt->m_cStructure->m_channelCount) + if (m_cStructure->data_format != fmt->m_cStructure->data_format || + m_cStructure->sample_rate != fmt->m_cStructure->sample_rate || + m_cStructure->frames != fmt->m_cStructure->frames || + m_cStructure->frame_size != fmt->m_cStructure->frame_size || + m_cStructure->channel_count != fmt->m_cStructure->channel_count) { return false; } for (unsigned int ch = 0; ch < AUDIOENGINE_CH_MAX; ++ch) { - if (fmt->m_cStructure->m_channels[ch] != m_cStructure->m_channels[ch]) + if (fmt->m_cStructure->channels[ch] != m_cStructure->channels[ch]) { return false; } @@ -228,7 +188,6 @@ class ATTR_DLL_LOCAL AudioEngineFormat return true; } - ///@} }; ///@} //---------------------------------------------------------------------------- @@ -302,53 +261,35 @@ class ATTR_DLL_LOCAL CAEStream /// /// ~~~~~~~~~~~~~ /// - CAEStream(AudioEngineFormat& format, unsigned int options = 0) - : m_kodiBase(::kodi::addon::CPrivateBase::m_interface->toKodi->kodiBase), - m_cb(::kodi::addon::CPrivateBase::m_interface->toKodi->kodi_audioengine) + CAEStream(AudioEngineFormat& format, unsigned int options = 0) : m_format(format) { - m_StreamHandle = m_cb->make_stream(m_kodiBase, format, options); - if (m_StreamHandle == nullptr) + m_streamHandle = kodi::dl::api.kodi_audioengine_stream_make(m_format, options); + if (m_streamHandle == nullptr) { kodi::Log(ADDON_LOG_FATAL, "CAEStream: make_stream failed!"); + return; } + + m_planes = kodi::dl::api.kodi_audioengine_is_planar_format(format.GetDataFormat()) + ? format.GetChannelCount() + : 1; } - //-------------------------------------------------------------------------- + //------------------------------------------------------------------------------ - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Class destructor. - /// ~CAEStream() { - if (m_StreamHandle) + if (m_streamHandle) { - m_cb->free_stream(m_kodiBase, m_StreamHandle); - m_StreamHandle = nullptr; + kodi::dl::api.kodi_audioengine_stream_free(m_streamHandle); + m_streamHandle = nullptr; } } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the amount of space available in the stream. - /// - /// @return The number of bytes AddData will consume - /// - unsigned int GetSpace() { return m_cb->aestream_get_space(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + unsigned int GetSpace() + { + return kodi::dl::api.kodi_audioengine_stream_get_space(m_streamHandle); + } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Add planar or interleaved PCM data to the stream. - /// - /// @param[in] data array of pointers to the planes - /// @param[in] offset to frame in frames - /// @param[in] frames number of frames - /// @param[in] pts [opt] presentation timestamp, default is 0 - /// @param[in] hasDownmix [opt] set true if downmix is present, default is false - /// @param[in] centerMixLevel [opt] level to mix left and right to center default is 1.0 - /// @return The number of frames consumed - /// unsigned int AddData(uint8_t* const* data, unsigned int offset, unsigned int frames, @@ -356,222 +297,91 @@ class ATTR_DLL_LOCAL CAEStream bool hasDownmix = false, double centerMixLevel = 1.0) { - return m_cb->aestream_add_data(m_kodiBase, m_StreamHandle, data, offset, frames, pts, - hasDownmix, centerMixLevel); + return kodi::dl::api.kodi_audioengine_stream_add_data( + m_streamHandle, data, m_planes, frames * m_format.GetFrameSize(), offset, frames, + m_format.GetFrameSize(), pts, hasDownmix, centerMixLevel); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the time in seconds that it will take for the next added - /// packet to be heard from the speakers. - /// - /// @return seconds - /// - double GetDelay() { return m_cb->aestream_get_delay(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + double GetDelay() { return kodi::dl::api.kodi_audioengine_stream_get_delay(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns if the stream is buffering. - /// - /// @return True if the stream is buffering - /// - bool IsBuffering() { return m_cb->aestream_is_buffering(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + bool IsBuffering() { return kodi::dl::api.kodi_audioengine_stream_is_buffering(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the time in seconds of the stream's cached audio samples. - /// Engine buffers excluded. - /// - /// @return seconds - /// - double GetCacheTime() { return m_cb->aestream_get_cache_time(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + double GetCacheTime() + { + return kodi::dl::api.kodi_audioengine_stream_get_cache_time(m_streamHandle); + } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the total time in seconds of the cache. - /// - /// @return seconds - /// - double GetCacheTotal() { return m_cb->aestream_get_cache_total(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + double GetCacheTotal() + { + return kodi::dl::api.kodi_audioengine_stream_get_cache_total(m_streamHandle); + } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Pauses the stream playback. - /// - void Pause() { return m_cb->aestream_pause(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + void Pause() { return kodi::dl::api.kodi_audioengine_stream_pause(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Resumes the stream after pausing - /// - void Resume() { return m_cb->aestream_resume(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + void Resume() { return kodi::dl::api.kodi_audioengine_stream_resume(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Start draining the stream. - /// - /// @param[in] wait [opt] Wait until drain is finished if set to true, - /// otherwise it returns direct - /// - /// @note Once called AddData will not consume more data. - /// - void Drain(bool wait = true) { return m_cb->aestream_drain(m_kodiBase, m_StreamHandle, wait); } - //-------------------------------------------------------------------------- + void Drain(bool wait = true) + { + return kodi::dl::api.kodi_audioengine_stream_drain(m_streamHandle, wait); + } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns true if the is stream draining. - /// - bool IsDraining() { return m_cb->aestream_is_draining(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + bool IsDraining() { return kodi::dl::api.kodi_audioengine_stream_is_draining(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns true if the is stream has finished draining. - /// - bool IsDrained() { return m_cb->aestream_is_drained(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + bool IsDrained() { return kodi::dl::api.kodi_audioengine_stream_is_drained(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Flush all buffers dropping the audio data. - /// - void Flush() { return m_cb->aestream_flush(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + void Flush() { return kodi::dl::api.kodi_audioengine_stream_flush(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Return the stream's current volume level. - /// - /// @return The volume level between 0.0 and 1.0 - /// - float GetVolume() { return m_cb->aestream_get_volume(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + float GetVolume() { return kodi::dl::api.kodi_audioengine_stream_get_volume(m_streamHandle); } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Set the stream's volume level. - /// - /// @param[in] volume The new volume level between 0.0 and 1.0 - /// void SetVolume(float volume) { - return m_cb->aestream_set_volume(m_kodiBase, m_StreamHandle, volume); + return kodi::dl::api.kodi_audioengine_stream_set_volume(m_streamHandle, volume); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Gets the stream's volume amplification in linear units. - /// - /// @return The volume amplification factor between 1.0 and 1000.0 - /// - float GetAmplification() { return m_cb->aestream_get_amplification(m_kodiBase, m_StreamHandle); } - //-------------------------------------------------------------------------- + float GetAmplification() + { + return kodi::dl::api.kodi_audioengine_stream_get_amplification(m_streamHandle); + } - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Sets the stream's volume amplification in linear units. - /// - /// @param[in] amplify The volume amplification factor between 1.0 and 1000.0 - /// void SetAmplification(float amplify) { - return m_cb->aestream_set_amplification(m_kodiBase, m_StreamHandle, amplify); + return kodi::dl::api.kodi_audioengine_stream_set_amplification(m_streamHandle, amplify); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the size of one audio frame in bytes (channelCount * resolution). - /// - /// @return The size in bytes of one frame - /// unsigned int GetFrameSize() const { - return m_cb->aestream_get_frame_size(m_kodiBase, m_StreamHandle); + return kodi::dl::api.kodi_audioengine_stream_get_frame_size(m_streamHandle); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the number of channels the stream is configured to accept. - /// - /// @return The channel count - /// unsigned int GetChannelCount() const { - return m_cb->aestream_get_channel_count(m_kodiBase, m_StreamHandle); + return kodi::dl::api.kodi_audioengine_stream_get_channel_count(m_streamHandle); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Returns the stream's sample rate, if the stream is using a dynamic - /// sample rate, this value will NOT reflect any changes made by calls to - /// SetResampleRatio(). - /// - /// @return The stream's sample rate (eg, 48000) - /// unsigned int GetSampleRate() const { - return m_cb->aestream_get_sample_rate(m_kodiBase, m_StreamHandle); + return kodi::dl::api.kodi_audioengine_stream_get_sample_rate(m_streamHandle); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Return the data format the stream has been configured with. - /// - /// @return The stream's data format (eg, AUDIOENGINE_FMT_S16LE) - /// AudioEngineDataFormat GetDataFormat() const { - return m_cb->aestream_get_data_format(m_kodiBase, m_StreamHandle); + return kodi::dl::api.kodi_audioengine_stream_get_data_format(m_streamHandle); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Return the resample ratio. - /// - /// @note This will return an undefined value if the stream is not resampling. - /// - /// @return the current resample ratio or undefined if the stream is not resampling - /// double GetResampleRatio() { - return m_cb->aestream_get_resample_ratio(m_kodiBase, m_StreamHandle); + return kodi::dl::api.kodi_audioengine_stream_get_resample_ratio(m_streamHandle); } - //-------------------------------------------------------------------------- - //========================================================================== - /// @ingroup cpp_kodi_audioengine_CAEStream - /// @brief Sets the resample ratio. - /// - /// @note This function may return false if the stream is not resampling, if - /// you wish to use this be sure to set the AESTREAM_FORCE_RESAMPLE option. - /// - /// @param[in] ratio the new sample rate ratio, calculated by - /// ((double)desiredRate / (double)GetSampleRate()) - /// void SetResampleRatio(double ratio) { - m_cb->aestream_set_resample_ratio(m_kodiBase, m_StreamHandle, ratio); + kodi::dl::api.kodi_audioengine_stream_set_resample_ratio(m_streamHandle, ratio); } - //-------------------------------------------------------------------------- private: - void* m_kodiBase; - AddonToKodiFuncTable_kodi_audioengine* m_cb; - AEStreamHandle* m_StreamHandle; + const AudioEngineFormat m_format; + int m_planes = 1; + KODI_AE_HDL m_streamHandle; }; //---------------------------------------------------------------------------- @@ -605,13 +415,13 @@ class ATTR_DLL_LOCAL CAEStream /// inline bool ATTR_DLL_LOCAL GetCurrentSinkFormat(AudioEngineFormat& format) { - using namespace kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_audioengine->get_current_sink_format( - CPrivateBase::m_interface->toKodi->kodiBase, format); + return kodi::dl::api.kodi_audioengine_get_current_sink_format(format); } -//---------------------------------------------------------------------------- -//}}} +inline bool IsPlanarFormat(AudioEngineDataFormat format) +{ + return kodi::dl::api.kodi_audioengine_is_planar_format(format); +} } // namespace audioengine } // namespace kodi diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/CMakeLists.txt index 5e396b945f170..12e49ce44cea8 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/CMakeLists.txt @@ -6,8 +6,8 @@ set(HEADERS AudioEngine.h Filesystem.h General.h + Monitor.h Network.h - versions.h ) if(HEADERS) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/Filesystem.h b/xbmc/addons/kodi-dev-kit/include/kodi/Filesystem.h index 7cd35bd4f726a..3d1ee0b42e5e1 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/Filesystem.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/Filesystem.h @@ -92,14 +92,14 @@ namespace vfs /// Used on kodi::vfs::StatFile() to get detailed information about a file. /// ///@{ -class ATTR_DLL_LOCAL FileStatus : public kodi::addon::CStructHdl +class FileStatus : public kodi::addon::CStructHdl { public: /*! \cond PRIVATE */ - FileStatus() { memset(m_cStructure, 0, sizeof(STAT_STRUCTURE)); } + FileStatus() { memset(m_cStructure, 0, sizeof(VFS_STAT_STRUCTURE)); } FileStatus(const FileStatus& channel) : CStructHdl(channel) {} - FileStatus(const STAT_STRUCTURE* channel) : CStructHdl(channel) {} - FileStatus(STAT_STRUCTURE* channel) : CStructHdl(channel) {} + FileStatus(const VFS_STAT_STRUCTURE* channel) : CStructHdl(channel) {} + FileStatus(VFS_STAT_STRUCTURE* channel) : CStructHdl(channel) {} /*! \endcond */ /// @defgroup cpp_kodi_vfs_Defs_FileStatus_Help Value Help @@ -128,6 +128,8 @@ class ATTR_DLL_LOCAL FileStatus : public kodi::addon::CStructHdldeviceId = deviceId; } @@ -221,15 +223,13 @@ class ATTR_DLL_LOCAL FileStatus : public kodi::addon::CStructHdl +class CacheStatus : public kodi::addon::CStructHdl { public: - /*! \cond PRIVATE */ - CacheStatus() { memset(m_cStructure, 0, sizeof(VFS_CACHE_STATUS_DATA)); } + CacheStatus() { memset(m_cStructure, 0, sizeof(VFS_CACHE_STATUS)); } CacheStatus(const CacheStatus& channel) : CStructHdl(channel) {} - CacheStatus(const VFS_CACHE_STATUS_DATA* channel) : CStructHdl(channel) {} - CacheStatus(VFS_CACHE_STATUS_DATA* channel) : CStructHdl(channel) {} + CacheStatus(const VFS_CACHE_STATUS* channel) : CStructHdl(channel) {} + CacheStatus(VFS_CACHE_STATUS* channel) : CStructHdl(channel) {} /*! \endcond */ /// @defgroup cpp_kodi_vfs_Defs_CacheStatus_Help Value Help @@ -291,7 +291,7 @@ class ATTR_DLL_LOCAL CacheStatus /// @copydetails cpp_kodi_vfs_Defs_HttpHeader_Help /// ///@{ -class ATTR_DLL_LOCAL HttpHeader +class HttpHeader { public: //========================================================================== @@ -299,23 +299,13 @@ class ATTR_DLL_LOCAL HttpHeader /// HttpHeader() { - using namespace ::kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_filesystem->http_header_create( - CPrivateBase::m_interface->toKodi->kodiBase, &m_handle); } //-------------------------------------------------------------------------- //========================================================================== /// @brief Class destructor. /// - ~HttpHeader() - { - using namespace ::kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi_filesystem->http_header_free( - CPrivateBase::m_interface->toKodi->kodiBase, &m_handle); - } + ~HttpHeader() { kodi::dl::api.kodi_vfs_http_header_close(m_handle); } //-------------------------------------------------------------------------- /// @defgroup cpp_kodi_vfs_Defs_HttpHeader_Help Value Help @@ -344,19 +334,15 @@ class ATTR_DLL_LOCAL HttpHeader /// std::string GetValue(const std::string& param) const { - using namespace ::kodi::addon; - - if (!m_handle.handle) + if (!m_handle) return ""; std::string protoLine; - char* string = m_handle.get_value(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle, - param.c_str()); + char* string = kodi::dl::api.kodi_vfs_http_header_get_value(m_handle, param.c_str()); if (string != nullptr) { protoLine = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + free(string); } return protoLine; } @@ -371,24 +357,22 @@ class ATTR_DLL_LOCAL HttpHeader /// std::vector GetValues(const std::string& param) const { - using namespace kodi::addon; - - if (!m_handle.handle) + if (!m_handle) return std::vector(); - int numValues = 0; - char** res(m_handle.get_values(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle, - param.c_str(), &numValues)); + size_t numValues = 0; + char** res(kodi::dl::api.kodi_vfs_http_header_get_values(m_handle, param.c_str(), &numValues)); if (res) { std::vector vecReturn; vecReturn.reserve(numValues); - for (int i = 0; i < numValues; ++i) + for (size_t i = 0; i < numValues; ++i) { vecReturn.emplace_back(res[i]); + free(res[i]); } - CPrivateBase::m_interface->toKodi->free_string_array( - CPrivateBase::m_interface->toKodi->kodiBase, res, numValues); + free(res); + return vecReturn; } return std::vector(); @@ -404,17 +388,15 @@ class ATTR_DLL_LOCAL HttpHeader { using namespace ::kodi::addon; - if (!m_handle.handle) + if (!m_handle) return ""; std::string header; - char* string = - m_handle.get_header(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle); + char* string = kodi::dl::api.kodi_vfs_http_header_get_header(m_handle); if (string != nullptr) { header = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + free(string); } return header; } @@ -429,17 +411,15 @@ class ATTR_DLL_LOCAL HttpHeader { using namespace ::kodi::addon; - if (!m_handle.handle) + if (!m_handle) return ""; std::string protoLine; - char* string = - m_handle.get_mime_type(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle); + char* string = kodi::dl::api.kodi_vfs_http_header_get_mime_type(m_handle); if (string != nullptr) { protoLine = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + free(string); } return protoLine; } @@ -454,17 +434,15 @@ class ATTR_DLL_LOCAL HttpHeader { using namespace ::kodi::addon; - if (!m_handle.handle) + if (!m_handle) return ""; std::string protoLine; - char* string = - m_handle.get_charset(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle); + char* string = kodi::dl::api.kodi_vfs_http_header_get_charset(m_handle); if (string != nullptr) { protoLine = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + free(string); } return protoLine; } @@ -479,17 +457,15 @@ class ATTR_DLL_LOCAL HttpHeader { using namespace ::kodi::addon; - if (!m_handle.handle) + if (!m_handle) return ""; std::string protoLine; - char* string = - m_handle.get_proto_line(CPrivateBase::m_interface->toKodi->kodiBase, m_handle.handle); + char* string = kodi::dl::api.kodi_vfs_http_header_get_proto_line(m_handle); if (string != nullptr) { protoLine = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + free(string); } return protoLine; } @@ -497,7 +473,7 @@ class ATTR_DLL_LOCAL HttpHeader ///@} - KODI_HTTP_HEADER m_handle; + KODI_HTTP_HEADER_HDL m_handle; }; ///@} //---------------------------------------------------------------------------- @@ -541,7 +517,7 @@ class ATTR_DLL_LOCAL HttpHeader /// to enjoy it. /// ///@{ -class ATTR_DLL_LOCAL CDirEntry +class CDirEntry { public: //============================================================================ @@ -573,7 +549,7 @@ class ATTR_DLL_LOCAL CDirEntry // // @param[in] dirEntry pointer to own class type // - explicit CDirEntry(const VFSDirEntry& dirEntry) + explicit CDirEntry(const VFS_DIR_ENTRY& dirEntry) : m_label(dirEntry.label ? dirEntry.label : ""), m_path(dirEntry.path ? dirEntry.path : ""), m_folder(dirEntry.folder), @@ -581,6 +557,8 @@ class ATTR_DLL_LOCAL CDirEntry m_dateTime(dirEntry.date_time) { } + + //---------------------------------------------------------------------------- /// @defgroup cpp_kodi_vfs_CDirEntry_Help Value Help @@ -772,12 +750,9 @@ class ATTR_DLL_LOCAL CDirEntry /// ... /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL CreateDirectory(const std::string& path) +inline bool CreateDirectory(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->create_directory( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_create_directory(path.c_str()); } //------------------------------------------------------------------------------ @@ -804,12 +779,9 @@ inline bool ATTR_DLL_LOCAL CreateDirectory(const std::string& path) /// ... /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL DirectoryExists(const std::string& path) +inline bool DirectoryExists(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->directory_exists( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_directory_exists(path.c_str()); } //------------------------------------------------------------------------------ @@ -838,16 +810,12 @@ inline bool ATTR_DLL_LOCAL DirectoryExists(const std::string& path) /// ... /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL RemoveDirectory(const std::string& path, bool recursive = false) +inline bool RemoveDirectory(const std::string& path, bool recursive = false) { - using namespace kodi::addon; - if (!recursive) - return CPrivateBase::m_interface->toKodi->kodi_filesystem->remove_directory( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_remove_directory(path.c_str()); else - return CPrivateBase::m_interface->toKodi->kodi_filesystem->remove_directory_recursive( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_remove_directory_recursive(path.c_str()); } //------------------------------------------------------------------------------ @@ -887,25 +855,20 @@ inline bool ATTR_DLL_LOCAL RemoveDirectory(const std::string& path, bool recursi /// items[i].Path().c_str()); /// } /// ~~~~~~~~~~~~~ -inline bool ATTR_DLL_LOCAL GetDirectory(const std::string& path, - const std::string& mask, - std::vector& items) +inline bool GetDirectory(const std::string& path, + const std::string& mask, + std::vector& items) { - using namespace kodi::addon; - - VFSDirEntry* dir_list = nullptr; - unsigned int num_items = 0; - if (CPrivateBase::m_interface->toKodi->kodi_filesystem->get_directory( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str(), mask.c_str(), &dir_list, - &num_items)) + VFS_DIR_ENTRY* dir_list = nullptr; + size_t num_items = 0; + if (kodi::dl::api.kodi_vfs_get_directory(path.c_str(), mask.c_str(), &dir_list, &num_items)) { if (dir_list) { - for (unsigned int i = 0; i < num_items; ++i) + for (size_t i = 0; i < num_items; ++i) items.emplace_back(dir_list[i]); - CPrivateBase::m_interface->toKodi->kodi_filesystem->free_directory( - CPrivateBase::m_interface->toKodi->kodiBase, dir_list, num_items); + kodi::dl::api.kodi_vfs_free_directory(dir_list, num_items); } return true; @@ -914,8 +877,6 @@ inline bool ATTR_DLL_LOCAL GetDirectory(const std::string& path, } //------------------------------------------------------------------------------ -//}}} - //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ // "C++" File related functions //{{{ @@ -939,12 +900,9 @@ inline bool ATTR_DLL_LOCAL GetDirectory(const std::string& path, /// fprintf(stderr, "Log file should be always present, is it present? %s\n", exists ? "yes" : "no"); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL FileExists(const std::string& filename, bool usecache = false) +inline bool FileExists(const std::string& filename, bool usecache = false) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->file_exists( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), usecache); + return kodi::dl::api.kodi_vfs_file_exists(filename.c_str(), usecache); } //------------------------------------------------------------------------------ @@ -994,12 +952,9 @@ inline bool ATTR_DLL_LOCAL FileExists(const std::string& filename, bool usecache /// ret); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL StatFile(const std::string& filename, kodi::vfs::FileStatus& buffer) +inline bool StatFile(const std::string& filename, kodi::vfs::FileStatus& buffer) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->stat_file( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), buffer); + return kodi::dl::api.kodi_vfs_stat_file(filename.c_str(), buffer); } //------------------------------------------------------------------------------ @@ -1032,12 +987,9 @@ inline bool ATTR_DLL_LOCAL StatFile(const std::string& filename, kodi::vfs::File /// } /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL DeleteFile(const std::string& filename) +inline bool DeleteFile(const std::string& filename) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->delete_file( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str()); + return kodi::dl::api.kodi_vfs_delete_file(filename.c_str()); } //------------------------------------------------------------------------------ @@ -1050,12 +1002,9 @@ inline bool ATTR_DLL_LOCAL DeleteFile(const std::string& filename) /// @return true if successfully renamed /// /// -inline bool ATTR_DLL_LOCAL RenameFile(const std::string& filename, const std::string& newFileName) +inline bool RenameFile(const std::string& filename, const std::string& newFileName) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->rename_file( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), newFileName.c_str()); + return kodi::dl::api.kodi_vfs_rename_file(filename.c_str(), newFileName.c_str()); } //------------------------------------------------------------------------------ @@ -1068,17 +1017,12 @@ inline bool ATTR_DLL_LOCAL RenameFile(const std::string& filename, const std::st /// @return true if successfully copied /// /// -inline bool ATTR_DLL_LOCAL CopyFile(const std::string& filename, const std::string& destination) +inline bool CopyFile(const std::string& filename, const std::string& destination) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->copy_file( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), destination.c_str()); + return kodi::dl::api.kodi_vfs_copy_file(filename.c_str(), destination.c_str()); } //------------------------------------------------------------------------------ -//}}} - //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ // "C++" General filesystem functions //{{{ @@ -1109,19 +1053,16 @@ inline bool ATTR_DLL_LOCAL CopyFile(const std::string& filename, const std::stri /// } /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL GetFileMD5(const std::string& path) +inline std::string GetFileMD5(const std::string& path) { - using namespace kodi::addon; std::string strReturn; - char* strMd5 = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_md5( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + char* strMd5 = kodi::dl::api.kodi_vfs_get_file_md5(path.c_str()); if (strMd5 != nullptr) { if (std::strlen(strMd5)) strReturn = strMd5; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strMd5); + free(strMd5); } return strReturn; } @@ -1153,19 +1094,15 @@ inline std::string ATTR_DLL_LOCAL GetFileMD5(const std::string& path) /// } /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL GetCacheThumbName(const std::string& filename) +inline std::string GetCacheThumbName(const std::string& filename) { - using namespace kodi::addon; - std::string strReturn; - char* strThumbName = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_cache_thumb_name( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str()); + char* strThumbName = kodi::dl::api.kodi_vfs_get_cache_thumb_name(filename.c_str()); if (strThumbName != nullptr) { if (std::strlen(strThumbName)) strReturn = strThumbName; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strThumbName); + free(strThumbName); } return strReturn; } @@ -1196,19 +1133,15 @@ inline std::string ATTR_DLL_LOCAL GetCacheThumbName(const std::string& filename) /// /* Returns as legal: 'jk___lj____.mpg' */ /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL MakeLegalFileName(const std::string& filename) +inline std::string MakeLegalFileName(const std::string& filename) { - using namespace kodi::addon; - std::string strReturn; - char* strLegalFileName = CPrivateBase::m_interface->toKodi->kodi_filesystem->make_legal_filename( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str()); + char* strLegalFileName = kodi::dl::api.kodi_vfs_make_legal_filename(filename.c_str()); if (strLegalFileName != nullptr) { if (std::strlen(strLegalFileName)) strReturn = strLegalFileName; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strLegalFileName); + free(strLegalFileName); } return strReturn; } @@ -1239,19 +1172,15 @@ inline std::string ATTR_DLL_LOCAL MakeLegalFileName(const std::string& filename) /// /* Returns as legal: '/jk___lj____/hgjkg' */ /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL MakeLegalPath(const std::string& path) +inline std::string MakeLegalPath(const std::string& path) { - using namespace kodi::addon; - std::string strReturn; - char* strLegalPath = CPrivateBase::m_interface->toKodi->kodi_filesystem->make_legal_path( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + char* strLegalPath = kodi::dl::api.kodi_vfs_make_legal_path(path.c_str()); if (strLegalPath != nullptr) { if (std::strlen(strLegalPath)) strReturn = strLegalPath; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strLegalPath); + free(strLegalPath); } return strReturn; } @@ -1287,19 +1216,15 @@ inline std::string ATTR_DLL_LOCAL MakeLegalPath(const std::string& path) /// ... /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL TranslateSpecialProtocol(const std::string& source) +inline std::string TranslateSpecialProtocol(const std::string& source) { - using namespace kodi::addon; - std::string strReturn; - char* protocol = CPrivateBase::m_interface->toKodi->kodi_filesystem->translate_special_protocol( - CPrivateBase::m_interface->toKodi->kodiBase, source.c_str()); + char* protocol = kodi::dl::api.kodi_vfs_translate_special_protocol(source.c_str()); if (protocol != nullptr) { if (std::strlen(protocol)) strReturn = protocol; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - protocol); + free(protocol); } return strReturn; } @@ -1341,16 +1266,14 @@ inline std::string ATTR_DLL_LOCAL TranslateSpecialProtocol(const std::string& so /// fprintf(stderr, " - available: %lu MByte\n", available / 1024 / 1024); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL GetDiskSpace(const std::string& path, - uint64_t& capacity, - uint64_t& free, - uint64_t& available) -{ - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_disk_space( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str(), &capacity, &free, &available); -} +// inline bool GetDiskSpace(const std::string& path, +// uint64_t& capacity, +// uint64_t& free, +// uint64_t& available) +// { +// return kodi::dl::api.kodi_vfs_get_disk_space( +// path.c_str(), &capacity, &free, &available); +// } //------------------------------------------------------------------------------ //============================================================================== @@ -1371,7 +1294,7 @@ inline bool ATTR_DLL_LOCAL GetDiskSpace(const std::string& path, /// fprintf(stderr, "File name is '%s'\n", fileName.c_str()); /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL GetFileName(const std::string& path) +inline std::string GetFileName(const std::string& path) { /* find the last slash */ const size_t slash = path.find_last_of("/\\"); @@ -1397,7 +1320,7 @@ inline std::string ATTR_DLL_LOCAL GetFileName(const std::string& path) /// fprintf(stderr, "Directory name is '%s'\n", dirName.c_str()); /// ~~~~~~~~~~~~~ /// -inline std::string ATTR_DLL_LOCAL GetDirectoryName(const std::string& path) +inline std::string GetDirectoryName(const std::string& path) { // Will from a full filename return the directory the file resides in. // Keeps the final slash at end and possible |option=foo options. @@ -1432,7 +1355,7 @@ inline std::string ATTR_DLL_LOCAL GetDirectoryName(const std::string& path) /// fprintf(stderr, "Directory name is '%s'\n", dirName.c_str()); /// ~~~~~~~~~~~~~ /// -inline void ATTR_DLL_LOCAL RemoveSlashAtEnd(std::string& path) +inline void RemoveSlashAtEnd(std::string& path) { if (!path.empty()) { @@ -1452,7 +1375,7 @@ inline void ATTR_DLL_LOCAL RemoveSlashAtEnd(std::string& path) /// @param[in] minimum The minimum size (or maybe the minimum number of chunks?) /// @return The aligned size /// -inline unsigned int ATTR_DLL_LOCAL GetChunkSize(unsigned int chunk, unsigned int minimum) +inline unsigned int GetChunkSize(unsigned int chunk, unsigned int minimum) { if (chunk) return chunk * ((minimum + chunk - 1) / chunk); @@ -1509,12 +1432,9 @@ inline unsigned int ATTR_DLL_LOCAL GetChunkSize(unsigned int chunk, unsigned int /// kodi::vfs::IsInternetStream("ftp://do-somewhere.com/the-file.mkv") ? "yes" : "no", true); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL IsInternetStream(const std::string& path, bool strictCheck = false) +inline bool IsInternetStream(const std::string& path, bool strictCheck = false) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->is_internet_stream( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str(), strictCheck); + return kodi::dl::api.kodi_vfs_is_internet_stream(path.c_str(), strictCheck); } //------------------------------------------------------------------------------ @@ -1541,12 +1461,9 @@ inline bool ATTR_DLL_LOCAL IsInternetStream(const std::string& path, bool strict /// bool lan = kodi::vfs::IsOnLAN("smb://path/to/file"); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL IsOnLAN(const std::string& path) +inline bool IsOnLAN(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->is_on_lan( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_is_on_lan(path.c_str()); } //------------------------------------------------------------------------------ @@ -1570,12 +1487,9 @@ inline bool ATTR_DLL_LOCAL IsOnLAN(const std::string& path) /// bool remote = kodi::vfs::IsRemote("http://path/to/file"); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL IsRemote(const std::string& path) +inline bool IsRemote(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->is_remote( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_is_remote(path.c_str()); } //------------------------------------------------------------------------------ @@ -1586,12 +1500,9 @@ inline bool ATTR_DLL_LOCAL IsRemote(const std::string& path) /// @param[in] path To checked path /// @return True if path is local, false otherwise /// -inline bool ATTR_DLL_LOCAL IsLocal(const std::string& path) +inline bool IsLocal(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->is_local( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_is_local(path.c_str()); } //------------------------------------------------------------------------------ @@ -1617,14 +1528,11 @@ inline bool ATTR_DLL_LOCAL IsLocal(const std::string& path) /// isURL = kodi::vfs::IsURL("/path/to/file"); /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL IsURL(const std::string& path) +inline bool IsURL(const std::string& path) { - using namespace kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->is_url( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str()); + return kodi::dl::api.kodi_vfs_is_url(path.c_str()); } -//-------------------------------------------------------------------------- +//------------------------------------------------------------------------------ //============================================================================ /// @ingroup cpp_kodi_vfs_General @@ -1650,14 +1558,12 @@ inline bool ATTR_DLL_LOCAL IsURL(const std::string& path) /// ... /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL GetHttpHeader(const std::string& url, HttpHeader& header) +inline bool GetHttpHeader(const std::string& url, HttpHeader& header) { - using namespace ::kodi::addon; - - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_http_header( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str(), &header.m_handle); + header.m_handle = kodi::dl::api.kodi_vfs_http_header_open(url.c_str()); + return header.m_handle != nullptr; } -//---------------------------------------------------------------------------- +//------------------------------------------------------------------------------ //============================================================================ /// @ingroup cpp_kodi_vfs_General @@ -1681,24 +1587,20 @@ inline bool ATTR_DLL_LOCAL GetHttpHeader(const std::string& url, HttpHeader& hea /// ... /// ~~~~~~~~~~~~~ /// -inline bool ATTR_DLL_LOCAL GetMimeType(const std::string& url, - std::string& mimeType, - const std::string& useragent = "") +inline bool GetMimeType(const std::string& url, + std::string& mimeType, + const std::string& useragent = "") { - using namespace ::kodi::addon; - char* cMimeType = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_mime_type( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str(), &cMimeType, useragent.c_str()); + bool ret = kodi::dl::api.kodi_vfs_get_mime_type(url.c_str(), &cMimeType, useragent.c_str()); if (cMimeType != nullptr) { mimeType = cMimeType; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - cMimeType); + free(cMimeType); } return ret; } -//---------------------------------------------------------------------------- +//------------------------------------------------------------------------------ //============================================================================ /// @ingroup cpp_kodi_vfs_General @@ -1726,20 +1628,16 @@ inline bool ATTR_DLL_LOCAL GetContentType(const std::string& url, std::string& content, const std::string& useragent = "") { - using namespace ::kodi::addon; - char* cContent = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_content_type( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str(), &cContent, useragent.c_str()); + bool ret = kodi::dl::api.kodi_vfs_get_content_type(url.c_str(), &cContent, useragent.c_str()); if (cContent != nullptr) { content = cContent; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - cContent); + free(cContent); } return ret; } -//---------------------------------------------------------------------------- +//------------------------------------------------------------------------------ //============================================================================ /// @ingroup cpp_kodi_vfs_General @@ -1766,22 +1664,16 @@ inline bool ATTR_DLL_LOCAL GetContentType(const std::string& url, /// inline bool ATTR_DLL_LOCAL GetCookies(const std::string& url, std::string& cookies) { - using namespace ::kodi::addon; - char* cCookies = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_cookies( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str(), &cCookies); + bool ret = kodi::dl::api.kodi_vfs_get_cookies(url.c_str(), &cCookies); if (cCookies != nullptr) { cookies = cCookies; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - cCookies); + free(cCookies); } return ret; } -//---------------------------------------------------------------------------- - -//}}} +//------------------------------------------------------------------------------ //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ // "C++" CFile class @@ -1857,11 +1749,8 @@ class ATTR_DLL_LOCAL CFile /// bool OpenFile(const std::string& filename, unsigned int flags = 0) { - using namespace kodi::addon; - Close(); - m_file = CPrivateBase::m_interface->toKodi->kodi_filesystem->open_file( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), flags); + m_file = kodi::dl::api.kodi_vfs_file_open(filename.c_str(), flags); return m_file != nullptr; } //-------------------------------------------------------------------------- @@ -1880,23 +1769,17 @@ class ATTR_DLL_LOCAL CFile /// bool OpenFileForWrite(const std::string& filename, bool overwrite = false) { - using namespace kodi::addon; - Close(); // Try to open the file. If it fails, check if we need to create the directory first // This way we avoid checking if the directory exists every time - m_file = CPrivateBase::m_interface->toKodi->kodi_filesystem->open_file_for_write( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), overwrite); + m_file = kodi::dl::api.kodi_vfs_file_open_for_write(filename.c_str(), overwrite); if (!m_file) { std::string cacheDirectory = kodi::vfs::GetDirectoryName(filename); - if (CPrivateBase::m_interface->toKodi->kodi_filesystem->directory_exists( - CPrivateBase::m_interface->toKodi->kodiBase, cacheDirectory.c_str()) || - CPrivateBase::m_interface->toKodi->kodi_filesystem->create_directory( - CPrivateBase::m_interface->toKodi->kodiBase, cacheDirectory.c_str())) - m_file = CPrivateBase::m_interface->toKodi->kodi_filesystem->open_file_for_write( - CPrivateBase::m_interface->toKodi->kodiBase, filename.c_str(), overwrite); + if (kodi::dl::api.kodi_vfs_directory_exists(cacheDirectory.c_str()) || + kodi::dl::api.kodi_vfs_create_directory(cacheDirectory.c_str())) + m_file = kodi::dl::api.kodi_vfs_file_open_for_write(filename.c_str(), overwrite); } return m_file != nullptr; } @@ -1917,12 +1800,9 @@ class ATTR_DLL_LOCAL CFile /// void Close() { - using namespace kodi::addon; - if (!m_file) return; - CPrivateBase::m_interface->toKodi->kodi_filesystem->close_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + kodi::dl::api.kodi_vfs_file_close(m_file); m_file = nullptr; } //-------------------------------------------------------------------------- @@ -1936,10 +1816,7 @@ class ATTR_DLL_LOCAL CFile /// bool CURLCreate(const std::string& url) { - using namespace kodi::addon; - - m_file = CPrivateBase::m_interface->toKodi->kodi_filesystem->curl_create( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str()); + m_file = kodi::dl::api.kodi_vfs_file_curl_create(url.c_str()); return m_file != nullptr; } //-------------------------------------------------------------------------- @@ -1955,15 +1832,12 @@ class ATTR_DLL_LOCAL CFile /// bool CURLAddOption(CURLOptiontype type, const std::string& name, const std::string& value) { - using namespace kodi::addon; - if (!m_file) { kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before!"); return false; } - return CPrivateBase::m_interface->toKodi->kodi_filesystem->curl_add_option( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, type, name.c_str(), value.c_str()); + return kodi::dl::api.kodi_vfs_file_curl_add_option(m_file, type, name.c_str(), value.c_str()); } //-------------------------------------------------------------------------- @@ -1976,15 +1850,12 @@ class ATTR_DLL_LOCAL CFile /// bool CURLOpen(unsigned int flags = 0) { - using namespace kodi::addon; - if (!m_file) { kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before!"); return false; } - return CPrivateBase::m_interface->toKodi->kodi_filesystem->curl_open( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, flags); + return kodi::dl::api.kodi_vfs_file_curl_open(m_file, flags); } //-------------------------------------------------------------------------- @@ -1999,14 +1870,11 @@ class ATTR_DLL_LOCAL CFile /// file was reached) or undetectable error occur, -1 in case of any /// explicit error /// - ssize_t Read(void* ptr, size_t size) + ssize_t Read(uint8_t* ptr, size_t size) { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->read_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, ptr, size); + return kodi::dl::api.kodi_vfs_file_read(m_file, ptr, size); } //-------------------------------------------------------------------------- @@ -2019,8 +1887,6 @@ class ATTR_DLL_LOCAL CFile /// bool ReadLine(std::string& line) { - using namespace kodi::addon; - line.clear(); if (!m_file) return false; @@ -2028,8 +1894,7 @@ class ATTR_DLL_LOCAL CFile // chars, we didn't hit a newline. Otherwise, if file position is 1 or 2 // past the number of bytes read, we read (and skipped) a newline sequence. char buffer[1025]; - if (CPrivateBase::m_interface->toKodi->kodi_filesystem->read_file_string( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, buffer, sizeof(buffer))) + if (kodi::dl::api.kodi_vfs_file_read_line(m_file, buffer, sizeof(buffer))) { line = buffer; return !line.empty(); @@ -2048,14 +1913,11 @@ class ATTR_DLL_LOCAL CFile /// zero if no bytes were written and no detectable error occur,-1 /// in case of any explicit error /// - ssize_t Write(const void* ptr, size_t size) + ssize_t Write(const uint8_t* ptr, size_t size) { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->write_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, ptr, size); + return kodi::dl::api.kodi_vfs_file_write(m_file, ptr, size); } //-------------------------------------------------------------------------- @@ -2075,12 +1937,9 @@ class ATTR_DLL_LOCAL CFile /// void Flush() { - using namespace kodi::addon; - if (!m_file) return; - CPrivateBase::m_interface->toKodi->kodi_filesystem->flush_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + kodi::dl::api.kodi_vfs_file_flush(m_file); } //-------------------------------------------------------------------------- @@ -2104,12 +1963,9 @@ class ATTR_DLL_LOCAL CFile /// int64_t Seek(int64_t position, int whence = SEEK_SET) { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->seek_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, position, whence); + return kodi::dl::api.kodi_vfs_file_seek(m_file, position, whence); } //-------------------------------------------------------------------------- @@ -2122,12 +1978,9 @@ class ATTR_DLL_LOCAL CFile /// int Truncate(int64_t size) { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->truncate_file( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, size); + return kodi::dl::api.kodi_vfs_file_truncate(m_file, size); } //-------------------------------------------------------------------------- @@ -2139,12 +1992,9 @@ class ATTR_DLL_LOCAL CFile /// int64_t GetPosition() const { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_position( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + return kodi::dl::api.kodi_vfs_file_get_position(m_file); } //-------------------------------------------------------------------------- @@ -2156,12 +2006,9 @@ class ATTR_DLL_LOCAL CFile /// int64_t GetLength() const { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_length( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + return kodi::dl::api.kodi_vfs_file_get_length(m_file); } //-------------------------------------------------------------------------- @@ -2171,18 +2018,7 @@ class ATTR_DLL_LOCAL CFile /// /// @return If you've reached the end of the file, AtEnd() returns true. /// - bool AtEnd() const - { - using namespace kodi::addon; - - if (!m_file) - return true; - int64_t length = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_length( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); - int64_t position = CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_position( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); - return position >= length; - } + bool AtEnd() const { return kodi::dl::api.kodi_vfs_file_at_end(m_file); } //-------------------------------------------------------------------------- //========================================================================== @@ -2193,12 +2029,9 @@ class ATTR_DLL_LOCAL CFile /// int GetChunkSize() const { - using namespace kodi::addon; - if (!m_file) return -1; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_chunk_size( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + return kodi::dl::api.kodi_vfs_file_get_chunk_size(m_file); } //-------------------------------------------------------------------------- @@ -2210,12 +2043,9 @@ class ATTR_DLL_LOCAL CFile /// bool IoControlGetSeekPossible() const { - using namespace kodi::addon; - if (!m_file) return false; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->io_control_get_seek_possible( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + return kodi::dl::api.kodi_vfs_file_io_ctl_get_seek_possible(m_file); } //-------------------------------------------------------------------------- @@ -2231,14 +2061,11 @@ class ATTR_DLL_LOCAL CFile /// bool IoControlGetCacheStatus(CacheStatus& status) const { - using namespace kodi::addon; - if (!m_file) return false; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->io_control_get_cache_status( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, status); + return kodi::dl::api.kodi_vfs_file_io_ctl_get_cache_status(m_file, status); } - //-------------------------------------------------------------------------- + //------------------------------------------------------------------------------ //========================================================================== /// @ingroup cpp_kodi_vfs_CFile @@ -2249,14 +2076,11 @@ class ATTR_DLL_LOCAL CFile /// bool IoControlSetCacheRate(uint32_t rate) { - using namespace kodi::addon; - if (!m_file) return false; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->io_control_set_cache_rate( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, rate); + return kodi::dl::api.kodi_vfs_file_io_ctl_set_cache_rate(m_file, rate); } - //-------------------------------------------------------------------------- + //------------------------------------------------------------------------------ //========================================================================== /// @ingroup cpp_kodi_vfs_CFile @@ -2267,14 +2091,11 @@ class ATTR_DLL_LOCAL CFile /// bool IoControlSetRetry(bool retry) { - using namespace kodi::addon; - if (!m_file) return false; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->io_control_set_retry( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, retry); + return kodi::dl::api.kodi_vfs_file_io_ctl_set_retry(m_file, retry); } - //-------------------------------------------------------------------------- + //------------------------------------------------------------------------------ //========================================================================== /// @ingroup cpp_kodi_vfs_CFile @@ -2286,8 +2107,6 @@ class ATTR_DLL_LOCAL CFile /// const std::string GetPropertyValue(FilePropertyTypes type, const std::string& name) const { - using namespace kodi::addon; - if (!m_file) { kodi::Log(ADDON_LOG_ERROR, @@ -2314,27 +2133,27 @@ class ATTR_DLL_LOCAL CFile const std::vector GetPropertyValues(FilePropertyTypes type, const std::string& name) const { - using namespace kodi::addon; - if (!m_file) { kodi::Log(ADDON_LOG_ERROR, "kodi::vfs::CURLCreate(...) needed to call before GetPropertyValues!"); return std::vector(); } - int numValues = 0; - char** res(CPrivateBase::m_interface->toKodi->kodi_filesystem->get_property_values( - CPrivateBase::m_interface->toKodi->kodiBase, m_file, type, name.c_str(), &numValues)); + size_t numValues = 0; + char** res( + kodi::dl::api.kodi_vfs_file_get_property_values(m_file, type, name.c_str(), &numValues)); if (res) { std::vector vecReturn; vecReturn.reserve(numValues); - for (int i = 0; i < numValues; ++i) + for (size_t i = 0; i < numValues; ++i) { vecReturn.emplace_back(res[i]); + free(res[i]); } - CPrivateBase::m_interface->toKodi->free_string_array( - CPrivateBase::m_interface->toKodi->kodiBase, res, numValues); + + free(res); + return vecReturn; } return std::vector(); @@ -2349,22 +2168,15 @@ class ATTR_DLL_LOCAL CFile /// double GetFileDownloadSpeed() const { - using namespace kodi::addon; - if (!m_file) return 0.0; - return CPrivateBase::m_interface->toKodi->kodi_filesystem->get_file_download_speed( - CPrivateBase::m_interface->toKodi->kodiBase, m_file); + return kodi::dl::api.kodi_vfs_file_get_download_speed(m_file); } //-------------------------------------------------------------------------- private: - void* m_file = nullptr; + KODI_FILE_HDL m_file = nullptr; }; -///@} -//------------------------------------------------------------------------------ - -//}}} } /* namespace vfs */ } /* namespace kodi */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/General.h b/xbmc/addons/kodi-dev-kit/include/kodi/General.h index 71678c2a56c24..a1825929af5c1 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/General.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/General.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2018 Team Kodi + * Copyright (C) 2005-2021 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -14,6 +14,8 @@ #ifdef __cplusplus +#include + //============================================================================== /// \ingroup cpp_kodi_Defs /// @brief For kodi::Version used structure @@ -67,14 +69,12 @@ inline bool ATTR_DLL_LOCAL UnknownToUTF8(const std::string& stringSrc, using namespace kodi::addon; bool ret = false; - char* retString = CPrivateBase::m_interface->toKodi->kodi->unknown_to_utf8( - CPrivateBase::m_interface->toKodi->kodiBase, stringSrc.c_str(), &ret, failOnBadChar); + char* retString = kodi::dl::api.kodi_unknown_to_utf8(stringSrc.c_str(), &ret, failOnBadChar); if (retString != nullptr) { if (ret) utf8StringDst = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -107,17 +107,13 @@ inline bool ATTR_DLL_LOCAL UnknownToUTF8(const std::string& stringSrc, inline std::string ATTR_DLL_LOCAL GetLanguage(LangFormats format = LANG_FMT_ENGLISH_NAME, bool region = false) { - using namespace kodi::addon; - std::string language; - char* retString = CPrivateBase::m_interface->toKodi->kodi->get_language( - CPrivateBase::m_interface->toKodi->kodiBase, format, region); + char* retString = kodi::dl::api.kodi_get_language(format, region); if (retString != nullptr) { if (std::strlen(retString)) language = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return language; } @@ -201,16 +197,12 @@ inline std::string ATTR_DLL_LOCAL GetLanguage(LangFormats format = LANG_FMT_ENGL /// inline void ATTR_DLL_LOCAL QueueFormattedNotification(QueueMsg type, const char* format, ...) { - using namespace kodi::addon; - va_list args; va_start(args, format); const std::string str = kodi::tools::StringUtils::FormatV(format, args); va_end(args); - CPrivateBase::m_interface->toKodi->kodi->queue_notification( - CPrivateBase::m_interface->toKodi->kodiBase, type, "", str.c_str(), "", 5000, false, 1000); + kodi::dl::api.kodi_queue_notification(type, "", str.c_str(), "", 5000, false, 1000); } -//------------------------------------------------------------------------------ //============================================================================== /// \ingroup cpp_kodi @@ -265,46 +257,11 @@ inline void ATTR_DLL_LOCAL QueueNotification(QueueMsg type, bool withSound = true, unsigned int messageTime = 1000) { - using namespace kodi::addon; - - CPrivateBase::m_interface->toKodi->kodi->queue_notification( - CPrivateBase::m_interface->toKodi->kodiBase, type, header.c_str(), message.c_str(), - imageFile.c_str(), displayTime, withSound, messageTime); + kodi::dl::api.kodi_queue_notification(type, header.c_str(), message.c_str(), imageFile.c_str(), + displayTime, withSound, messageTime); } //------------------------------------------------------------------------------ -//============================================================================ -/// \ingroup cpp_kodi -/// @brief Get the MD5 digest of the given text -/// -/// @param[in] text text to compute the MD5 for -/// @return Returned MD5 digest -/// -/// -/// ------------------------------------------------------------------------ -/// -/// **Example:** -/// ~~~~~~~~~~~~~{.cpp} -/// #include -/// ... -/// std::string md5 = kodi::GetMD5("Make me as md5"); -/// fprintf(stderr, "My md5 digest is: '%s'\n", md5.c_str()); -/// ... -/// ~~~~~~~~~~~~~ -/// -inline std::string ATTR_DLL_LOCAL GetMD5(const std::string& text) -{ - using namespace kodi::addon; - - char* md5ret = static_cast(malloc(40 * sizeof(char))); // md5 size normally 32 bytes - CPrivateBase::m_interface->toKodi->kodi->get_md5(CPrivateBase::m_interface->toKodi->kodiBase, - text.c_str(), md5ret); - std::string md5 = md5ret; - free(md5ret); - return md5; -} -//---------------------------------------------------------------------------- - //============================================================================== /// \ingroup cpp_kodi /// @brief Returns your regions setting as a string for the specified id @@ -330,17 +287,13 @@ inline std::string ATTR_DLL_LOCAL GetMD5(const std::string& text) /// inline std::string ATTR_DLL_LOCAL GetRegion(const std::string& id) { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - std::string strReturn; - char* strMsg = toKodi->kodi->get_region(toKodi->kodiBase, id.c_str()); + char* strMsg = kodi::dl::api.kodi_get_region(id.c_str()); if (strMsg != nullptr) { if (std::strlen(strMsg)) strReturn = strMsg; - toKodi->free_string(toKodi->kodiBase, strMsg); + free(strMsg); } return strReturn; } @@ -371,12 +324,9 @@ inline std::string ATTR_DLL_LOCAL GetRegion(const std::string& id) /// inline void ATTR_DLL_LOCAL GetFreeMem(long& free, long& total, bool asBytes = false) { - using namespace kodi::addon; - free = -1; total = -1; - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - toKodi->kodi->get_free_mem(toKodi->kodiBase, &free, &total, asBytes); + kodi::dl::api.kodi_get_free_mem(&free, &total, asBytes); } //------------------------------------------------------------------------------ @@ -399,10 +349,7 @@ inline void ATTR_DLL_LOCAL GetFreeMem(long& free, long& total, bool asBytes = fa /// inline int ATTR_DLL_LOCAL GetGlobalIdleTime() { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - return toKodi->kodi->get_global_idle_time(toKodi->kodiBase); + return kodi::dl::api.kodi_get_global_idle_time(); } //------------------------------------------------------------------------------ @@ -429,17 +376,13 @@ inline int ATTR_DLL_LOCAL GetGlobalIdleTime() /// inline std::string ATTR_DLL_LOCAL GetCurrentSkinId() { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - std::string strReturn; - char* strMsg = toKodi->kodi->get_current_skin_id(toKodi->kodiBase); + char* strMsg = kodi::dl::api.kodi_get_current_skin_id(); if (strMsg != nullptr) { if (std::strlen(strMsg)) strReturn = strMsg; - toKodi->free_string(toKodi->kodiBase, strMsg); + free(strMsg); } return strReturn; } @@ -472,16 +415,12 @@ inline bool ATTR_DLL_LOCAL IsAddonAvailable(const std::string& id, std::string& version, bool& enabled) { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - char* cVersion = nullptr; - bool ret = toKodi->kodi->is_addon_avilable(toKodi->kodiBase, id.c_str(), &cVersion, &enabled); + bool ret = kodi::dl::api.kodi_is_addon_avilable(id.c_str(), &cVersion, &enabled); if (cVersion) { version = cVersion; - toKodi->free_string(toKodi->kodiBase, cVersion); + free(cVersion); } return ret; } @@ -528,35 +467,32 @@ inline bool ATTR_DLL_LOCAL IsAddonAvailable(const std::string& id, /// inline void ATTR_DLL_LOCAL KodiVersion(kodi_version_t& version) { - using namespace kodi::addon; - char* compile_name = nullptr; char* revision = nullptr; char* tag = nullptr; char* tag_revision = nullptr; - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; - toKodi->kodi->kodi_version(toKodi->kodiBase, &compile_name, &version.major, &version.minor, - &revision, &tag, &tag_revision); + kodi::dl::api.kodi_version(&compile_name, &version.major, &version.minor, &revision, &tag, + &tag_revision); if (compile_name != nullptr) { version.compile_name = compile_name; - toKodi->free_string(toKodi->kodiBase, compile_name); + free(compile_name); } if (revision != nullptr) { version.revision = revision; - toKodi->free_string(toKodi->kodiBase, revision); + free(revision); } if (tag != nullptr) { version.tag = tag; - toKodi->free_string(toKodi->kodiBase, tag); + free(tag); } if (tag_revision != nullptr) { version.tag_revision = tag_revision; - toKodi->free_string(toKodi->kodiBase, tag_revision); + free(tag_revision); } } //------------------------------------------------------------------------------ @@ -598,19 +534,15 @@ inline bool ATTR_DLL_LOCAL GetKeyboardLayout(int modifierKey, std::string& layout_name, std::vector>& layout) { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; AddonKeyboardKeyTable c_layout; char* c_layout_name = nullptr; - bool ret = - toKodi->kodi->get_keyboard_layout(toKodi->kodiBase, &c_layout_name, modifierKey, &c_layout); + bool ret = kodi::dl::api.kodi_get_keyboard_layout(modifierKey, &c_layout_name, &c_layout); if (ret) { if (c_layout_name) { layout_name = c_layout_name; - toKodi->free_string(toKodi->kodiBase, c_layout_name); + free(c_layout_name); } layout.resize(STD_KB_BUTTONS_MAX_ROWS); @@ -623,7 +555,7 @@ inline bool ATTR_DLL_LOCAL GetKeyboardLayout(int modifierKey, if (button) { layout[row][column] = button; - toKodi->free_string(toKodi->kodiBase, button); + free(button); } } } @@ -668,21 +600,45 @@ inline bool ATTR_DLL_LOCAL GetKeyboardLayout(int modifierKey, /// inline bool ATTR_DLL_LOCAL ChangeKeyboardLayout(std::string& layout_name) { - using namespace kodi::addon; - - AddonToKodiFuncTable_Addon* toKodi = CPrivateBase::m_interface->toKodi; char* c_layout_name = nullptr; - bool ret = toKodi->kodi->change_keyboard_layout(toKodi->kodiBase, &c_layout_name); + bool ret = kodi::dl::api.kodi_change_keyboard_layout(&c_layout_name); if (c_layout_name) { layout_name = c_layout_name; - toKodi->free_string(toKodi->kodiBase, c_layout_name); + free(c_layout_name); } return ret; } //------------------------------------------------------------------------------ +//============================================================================== +/// @ingroup cpp_kodi +/// @brief +/// +/// +/// +/// @param[in] filename +/// @param[in] use_cached +/// +inline void ATTR_DLL_LOCAL PlaySFX(const std::string& filename, bool use_cached) +{ + kodi::dl::api.kodi_play_sfx(filename.c_str(), use_cached); +} +//------------------------------------------------------------------------------ + +//============================================================================== +/// @ingroup cpp_kodi +/// @brief +/// +/// +/// +inline void ATTR_DLL_LOCAL StopSFX() +{ + kodi::dl::api.kodi_stop_sfx(); +} +//------------------------------------------------------------------------------ + } /* namespace kodi */ #endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/Monitor.h b/xbmc/addons/kodi-dev-kit/include/kodi/Monitor.h new file mode 100644 index 0000000000000..73ffcf88ad920 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/Monitor.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005-2021 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "AddonBase.h" +#include "c-api/monitor.h" + +#ifdef __cplusplus + +namespace kodi +{ +namespace monitor +{ + +inline bool ATTR_DLL_LOCAL WaitForAbort(double timeout) +{ + return kodi::dl::api.kodi_monitor_wait_for_abort(timeout); +} + +inline bool ATTR_DLL_LOCAL AbortRequested() +{ + return kodi::dl::api.kodi_monitor_abort_requested(); +} + +} /* namespace monitor */ +} /* namespace kodi */ + +#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/Network.h b/xbmc/addons/kodi-dev-kit/include/kodi/Network.h index e6ff2c985e342..e98101c77d542 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/Network.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/Network.h @@ -40,8 +40,8 @@ inline bool ATTR_DLL_LOCAL WakeOnLan(const std::string& mac) { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_network->wake_on_lan( - CPrivateBase::m_interface->toKodi->kodiBase, mac.c_str()); + return CPrivateBase::ifc.toKodi->kodi_network->wake_on_lan(CPrivateBase::ifc.toKodi->kodiBase, + mac.c_str()); } //---------------------------------------------------------------------------- @@ -68,13 +68,12 @@ inline std::string ATTR_DLL_LOCAL GetIPAddress() using namespace ::kodi::addon; std::string ip; - char* string = CPrivateBase::m_interface->toKodi->kodi_network->get_ip_address( - CPrivateBase::m_interface->toKodi->kodiBase); + char* string = + CPrivateBase::ifc.toKodi->kodi_network->get_ip_address(CPrivateBase::ifc.toKodi->kodiBase); if (string != nullptr) { ip = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + CPrivateBase::ifc.toKodi->free_string(CPrivateBase::ifc.toKodi->kodiBase, string); } return ip; } @@ -103,13 +102,12 @@ inline std::string ATTR_DLL_LOCAL GetHostname() using namespace ::kodi::addon; std::string ip; - char* string = CPrivateBase::m_interface->toKodi->kodi_network->get_hostname( - CPrivateBase::m_interface->toKodi->kodiBase); + char* string = + CPrivateBase::ifc.toKodi->kodi_network->get_hostname(CPrivateBase::ifc.toKodi->kodiBase); if (string != nullptr) { ip = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + CPrivateBase::ifc.toKodi->free_string(CPrivateBase::ifc.toKodi->kodiBase, string); } return ip; } @@ -139,13 +137,12 @@ inline std::string ATTR_DLL_LOCAL GetUserAgent() using namespace ::kodi::addon; std::string agent; - char* string = CPrivateBase::m_interface->toKodi->kodi_network->get_user_agent( - CPrivateBase::m_interface->toKodi->kodiBase); + char* string = + CPrivateBase::ifc.toKodi->kodi_network->get_user_agent(CPrivateBase::ifc.toKodi->kodiBase); if (string != nullptr) { agent = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + CPrivateBase::ifc.toKodi->free_string(CPrivateBase::ifc.toKodi->kodiBase, string); } return agent; } @@ -174,8 +171,8 @@ inline bool ATTR_DLL_LOCAL IsLocalHost(const std::string& hostname) { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_network->is_local_host( - CPrivateBase::m_interface->toKodi->kodiBase, hostname.c_str()); + return CPrivateBase::ifc.toKodi->kodi_network->is_local_host(CPrivateBase::ifc.toKodi->kodiBase, + hostname.c_str()); } //---------------------------------------------------------------------------- @@ -191,8 +188,8 @@ inline bool ATTR_DLL_LOCAL IsHostOnLAN(const std::string& hostname, bool offLine { using namespace kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_network->is_host_on_lan( - CPrivateBase::m_interface->toKodi->kodiBase, hostname.c_str(), offLineCheck); + return CPrivateBase::ifc.toKodi->kodi_network->is_host_on_lan(CPrivateBase::ifc.toKodi->kodiBase, + hostname.c_str(), offLineCheck); } //------------------------------------------------------------------------------ @@ -226,13 +223,12 @@ inline std::string ATTR_DLL_LOCAL URLEncode(const std::string& url) using namespace ::kodi::addon; std::string retString; - char* string = CPrivateBase::m_interface->toKodi->kodi_network->url_encode( - CPrivateBase::m_interface->toKodi->kodiBase, url.c_str()); + char* string = CPrivateBase::ifc.toKodi->kodi_network->url_encode( + CPrivateBase::ifc.toKodi->kodiBase, url.c_str()); if (string != nullptr) { retString = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + CPrivateBase::ifc.toKodi->free_string(CPrivateBase::ifc.toKodi->kodiBase, string); } return retString; } @@ -269,13 +265,12 @@ inline bool ATTR_DLL_LOCAL DNSLookup(const std::string& hostName, std::string& i using namespace ::kodi::addon; bool ret = false; - char* string = CPrivateBase::m_interface->toKodi->kodi_network->dns_lookup( - CPrivateBase::m_interface->toKodi->kodiBase, hostName.c_str(), &ret); + char* string = CPrivateBase::ifc.toKodi->kodi_network->dns_lookup( + CPrivateBase::ifc.toKodi->kodiBase, hostName.c_str(), &ret); if (string != nullptr) { ipAddress = string; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - string); + CPrivateBase::ifc.toKodi->free_string(CPrivateBase::ifc.toKodi->kodiBase, string); } return ret; } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioDecoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioDecoder.h index 8569bc3c93bbc..69801da1a26e2 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioDecoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioDecoder.h @@ -467,10 +467,6 @@ class ATTR_DLL_LOCAL CInstanceAudioDecoder : public IAddonInstance explicit CInstanceAudioDecoder(const kodi::addon::IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceAudioDecoder: Creation of multiple together with single instance way is not allowed!"); - - SetAddonStruct(instance); } //-------------------------------------------------------------------------- @@ -608,15 +604,15 @@ class ATTR_DLL_LOCAL CInstanceAudioDecoder : public IAddonInstance //-------------------------------------------------------------------------- private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { instance->hdl = this; - instance->audiodecoder->toAddon->supports_file = ADDON_supports_file; - instance->audiodecoder->toAddon->init = ADDON_init; - instance->audiodecoder->toAddon->read_pcm = ADDON_read_pcm; - instance->audiodecoder->toAddon->seek = ADDON_seek; - instance->audiodecoder->toAddon->read_tag = ADDON_read_tag; - instance->audiodecoder->toAddon->track_count = ADDON_track_count; + instance->audiodecoder->supports_file = ADDON_supports_file; + instance->audiodecoder->init = ADDON_init; + instance->audiodecoder->read_pcm = ADDON_read_pcm; + instance->audiodecoder->seek = ADDON_seek; + instance->audiodecoder->read_tag = ADDON_read_tag; + instance->audiodecoder->track_count = ADDON_track_count; } inline static bool ADDON_supports_file(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioEncoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioEncoder.h index c79a472997745..c5f4c7db2c9b7 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioEncoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/AudioEncoder.h @@ -13,8 +13,6 @@ #ifdef __cplusplus -#include - namespace kodi { namespace addon @@ -394,13 +392,9 @@ class ATTR_DLL_LOCAL CInstanceAudioEncoder : public IAddonInstance /// ~~~~~~~~~~~~~ /// explicit CInstanceAudioEncoder(const kodi::addon::IInstanceInfo& instance) - : IAddonInstance(instance) + : IAddonInstance(instance), + m_kodi(instance.GetKodiHdl()) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceAudioEncoder: Creation of multiple together " - "with single instance way is not allowed!"); - - SetAddonStruct(instance); } //---------------------------------------------------------------------------- @@ -446,7 +440,7 @@ class ATTR_DLL_LOCAL CInstanceAudioEncoder : public IAddonInstance /// ssize_t Write(const uint8_t* data, size_t length) { - return m_kodi->write(m_kodi->kodiInstance, data, length); + return kodi::dl::api.kodi_addon_audioencoder_write(m_kodi, data, length); } //---------------------------------------------------------------------------- @@ -473,18 +467,17 @@ class ATTR_DLL_LOCAL CInstanceAudioEncoder : public IAddonInstance /// ssize_t Seek(ssize_t position, int whence = SEEK_SET) { - return m_kodi->seek(m_kodi->kodiInstance, position, whence); + return kodi::dl::api.kodi_addon_audioencoder_seek(m_kodi, position, whence); } //---------------------------------------------------------------------------- private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { instance->hdl = this; - instance->audioencoder->toAddon->start = ADDON_start; - instance->audioencoder->toAddon->encode = ADDON_encode; - instance->audioencoder->toAddon->finish = ADDON_finish; - m_kodi = instance->audioencoder->toKodi; + instance->audioencoder->start = ADDON_start; + instance->audioencoder->encode = ADDON_encode; + instance->audioencoder->finish = ADDON_finish; } inline static bool ADDON_start(const KODI_ADDON_AUDIOENCODER_HDL hdl, @@ -505,7 +498,7 @@ class ATTR_DLL_LOCAL CInstanceAudioEncoder : public IAddonInstance return static_cast(hdl)->Finish(); } - AddonToKodiFuncTable_AudioEncoder* m_kodi{nullptr}; + const KODI_ADDON_INSTANCE_BACKEND_HDL m_kodi; }; } /* namespace addon */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Game.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Game.h index 101d79ca95981..9014f57629c7f 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Game.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Game.h @@ -158,14 +158,14 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// ADDONCREATOR(CGameExample) /// ~~~~~~~~~~~~~ /// - CInstanceGame() : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance)) + CInstanceGame() : IAddonInstance(IInstanceInfo(CPrivateBase::ifc.m_firstInstance)) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstanceGame: Creation of more as one in single " "instance way is not allowed!"); - SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance); - CPrivateBase::m_interface->globalSingleInstance = this; + SetAddonStruct(CPrivateBase::ifc.m_firstInstance); + CPrivateBase::ifc.globalSingleInstance = this; } //---------------------------------------------------------------------------- @@ -460,7 +460,7 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// bool Open(const game_stream_properties& properties) { - if (!CPrivateBase::m_interface->globalSingleInstance) + if (!CPrivateBase::ifc.globalSingleInstance) return false; if (m_handle) @@ -470,7 +470,7 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance } AddonToKodiFuncTable_Game& cb = - *static_cast(CPrivateBase::m_interface->globalSingleInstance) + *static_cast(CPrivateBase::ifc.globalSingleInstance) ->m_instanceData->toKodi; m_handle = cb.OpenStream(cb.kodiInstance, &properties); return m_handle != nullptr; @@ -485,11 +485,11 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// void Close() { - if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance) + if (!m_handle || !CPrivateBase::ifc.globalSingleInstance) return; AddonToKodiFuncTable_Game& cb = - *static_cast(CPrivateBase::m_interface->globalSingleInstance) + *static_cast(CPrivateBase::ifc.globalSingleInstance) ->m_instanceData->toKodi; cb.CloseStream(cb.kodiInstance, m_handle); m_handle = nullptr; @@ -511,11 +511,11 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// bool GetBuffer(unsigned int width, unsigned int height, game_stream_buffer& buffer) { - if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance) + if (!m_handle || !CPrivateBase::ifc.globalSingleInstance) return false; AddonToKodiFuncTable_Game& cb = - *static_cast(CPrivateBase::m_interface->globalSingleInstance) + *static_cast(CPrivateBase::ifc.globalSingleInstance) ->m_instanceData->toKodi; return cb.GetStreamBuffer(cb.kodiInstance, m_handle, width, height, &buffer); } @@ -531,11 +531,11 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// void AddData(const game_stream_packet& packet) { - if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance) + if (!m_handle || !CPrivateBase::ifc.globalSingleInstance) return; AddonToKodiFuncTable_Game& cb = - *static_cast(CPrivateBase::m_interface->globalSingleInstance) + *static_cast(CPrivateBase::ifc.globalSingleInstance) ->m_instanceData->toKodi; cb.AddStreamData(cb.kodiInstance, m_handle, &packet); } @@ -551,11 +551,11 @@ class ATTR_DLL_LOCAL CInstanceGame : public IAddonInstance /// void ReleaseBuffer(game_stream_buffer& buffer) { - if (!m_handle || !CPrivateBase::m_interface->globalSingleInstance) + if (!m_handle || !CPrivateBase::ifc.globalSingleInstance) return; AddonToKodiFuncTable_Game& cb = - *static_cast(CPrivateBase::m_interface->globalSingleInstance) + *static_cast(CPrivateBase::ifc.globalSingleInstance) ->m_instanceData->toKodi; cb.ReleaseStreamBuffer(cb.kodiInstance, m_handle, &buffer); } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/ImageDecoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/ImageDecoder.h index eb98f900285d6..cbe232acf6767 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/ImageDecoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/ImageDecoder.h @@ -13,21 +13,12 @@ #ifdef __cplusplus -#include - namespace kodi { namespace addon { -//############################################################################## -/// @defgroup cpp_kodi_addon_imagedecoder_Defs Definitions, structures and enumerators -/// @ingroup cpp_kodi_addon_imagedecoder -/// @brief **Image decoder add-on general variables** -/// -/// Used to exchange the available options between Kodi and addon. -/// -/// +using ImageFormat = ADDON_IMG_FMT; //============================================================================== /// @defgroup cpp_kodi_addon_imagedecoder_Defs_ImageDecoderInfoTag class ImageDecoderInfoTag @@ -546,11 +537,6 @@ class ATTR_DLL_LOCAL CInstanceImageDecoder : public IAddonInstance /// explicit CInstanceImageDecoder(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceImageDecoder: Creation of multiple together " - "with single instance way is not allowed!"); - - SetAddonStruct(instance); } //---------------------------------------------------------------------------- @@ -621,17 +607,17 @@ class ATTR_DLL_LOCAL CInstanceImageDecoder : public IAddonInstance unsigned int width, unsigned int height, unsigned int pitch, - ADDON_IMG_FMT format) = 0; + kodi::addon::ImageFormat format) = 0; //---------------------------------------------------------------------------- private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { instance->hdl = this; - instance->imagedecoder->toAddon->supports_file = ADDON_supports_file; - instance->imagedecoder->toAddon->read_tag = ADDON_read_tag; - instance->imagedecoder->toAddon->load_image_from_memory = ADDON_load_image_from_memory; - instance->imagedecoder->toAddon->decode = ADDON_decode; + instance->imagedecoder->supports_file = ADDON_supports_file; + instance->imagedecoder->read_tag = ADDON_read_tag; + instance->imagedecoder->load_image_from_memory = ADDON_load_image_from_memory; + instance->imagedecoder->decode = ADDON_decode; } inline static bool ADDON_supports_file(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Inputstream.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Inputstream.h index 1d0a21c879a58..0ac9948f602f8 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Inputstream.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Inputstream.h @@ -1160,7 +1160,7 @@ class ATTR_DLL_LOCAL CInstanceInputStream : public IAddonInstance /// explicit CInstanceInputStream(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstanceInputStream: Creation of multiple together " "with single instance way is not allowed!"); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/PVR.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/PVR.h index 0ee71e28af35f..3253269b0a899 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/PVR.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/PVR.h @@ -456,14 +456,14 @@ class ATTR_DLL_LOCAL CInstancePVRClient : public IAddonInstance /// ADDONCREATOR(CPVRExample) /// ~~~~~~~~~~~~~ /// - CInstancePVRClient() : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance)) + CInstancePVRClient() : IAddonInstance(IInstanceInfo(CPrivateBase::ifc.m_firstInstance)) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstancePVRClient: Creation of more as one in single " "instance way is not allowed!"); - SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance); - CPrivateBase::m_interface->globalSingleInstance = this; + SetAddonStruct(CPrivateBase::ifc.m_firstInstance); + CPrivateBase::ifc.globalSingleInstance = this; } //---------------------------------------------------------------------------- @@ -502,7 +502,7 @@ class ATTR_DLL_LOCAL CInstancePVRClient : public IAddonInstance /// explicit CInstancePVRClient(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstancePVRClient: Creation of multiple together with " "single instance way is not allowed!"); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Peripheral.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Peripheral.h index ea07498d80418..217789930a41a 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Peripheral.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Peripheral.h @@ -12,6 +12,9 @@ #include "peripheral/PeripheralUtils.h" #ifdef __cplusplus + +#include + namespace kodi { namespace addon @@ -215,15 +218,10 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// /// Used by an add-on that only supports peripheral. /// - CInstancePeripheral() - : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance)) + CInstancePeripheral() : IAddonInstance(IInstanceInfo(CAddonBase::addonBase->m_firstInstance)) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstancePeripheral: Creation of more as one in single " - "instance way is not allowed!"); - - SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance); - CPrivateBase::m_interface->globalSingleInstance = this; + m_kodi = CAddonBase::addonBase->m_firstInstance.GetKodiHdl(); + CAddonBase::addonBase->m_globalSingleInstance = this; } //---------------------------------------------------------------------------- @@ -263,11 +261,7 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// explicit CInstancePeripheral(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstancePeripheral: Creation of multiple together with " - "single instance way is not allowed!"); - - SetAddonStruct(instance); + m_kodi = instance.GetKodiHdl(); } //---------------------------------------------------------------------------- @@ -523,7 +517,7 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// /// @return The add-on installation path /// - const std::string AddonPath() const { return m_instanceData->props->addon_path; } + const std::string AddonPath() const { return kodi::addon::GetAddonPath(); } //---------------------------------------------------------------------------- //============================================================================ @@ -535,7 +529,7 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// /// @return Path to the user profile /// - const std::string UserPath() const { return m_instanceData->props->user_path; } + const std::string UserPath() const { return kodi::addon::GetUserPath(); } //---------------------------------------------------------------------------- //============================================================================ @@ -543,10 +537,7 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// /// The add-on calls this if a change in hardware is detected. /// - void TriggerScan(void) - { - return m_instanceData->toKodi->trigger_scan(m_instanceData->toKodi->kodiInstance); - } + void TriggerScan(void) { return kodi_addon_peripheral_trigger_scan(m_kodi); } //---------------------------------------------------------------------------- //============================================================================ @@ -559,8 +550,8 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// void RefreshButtonMaps(const std::string& deviceName = "", const std::string& controllerId = "") { - return m_instanceData->toKodi->refresh_button_maps(m_instanceData->toKodi->kodiInstance, - deviceName.c_str(), controllerId.c_str()); + return kodi_addon_peripheral_refresh_button_maps(m_kodi, deviceName.c_str(), + controllerId.c_str()); } //---------------------------------------------------------------------------- @@ -576,8 +567,7 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance unsigned int FeatureCount(const std::string& controllerId, JOYSTICK_FEATURE_TYPE type = JOYSTICK_FEATURE_TYPE_UNKNOWN) { - return m_instanceData->toKodi->feature_count(m_instanceData->toKodi->kodiInstance, - controllerId.c_str(), type); + return kodi_addon_peripheral_feature_count(m_kodi, controllerId.c_str(), type); } //---------------------------------------------------------------------------- @@ -591,64 +581,60 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance /// JOYSTICK_FEATURE_TYPE FeatureType(const std::string& controllerId, const std::string& featureName) { - return m_instanceData->toKodi->feature_type(m_instanceData->toKodi->kodiInstance, - controllerId.c_str(), featureName.c_str()); + return kodi_addon_peripheral_feature_type(m_kodi, controllerId.c_str(), featureName.c_str()); } //---------------------------------------------------------------------------- ///@} private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + friend class CAddonBase; + + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { instance->hdl = this; - instance->peripheral->toAddon->get_capabilities = ADDON_GetCapabilities; - instance->peripheral->toAddon->perform_device_scan = ADDON_PerformDeviceScan; - instance->peripheral->toAddon->free_scan_results = ADDON_FreeScanResults; - instance->peripheral->toAddon->get_events = ADDON_GetEvents; - instance->peripheral->toAddon->free_events = ADDON_FreeEvents; - instance->peripheral->toAddon->send_event = ADDON_SendEvent; - - instance->peripheral->toAddon->get_joystick_info = ADDON_GetJoystickInfo; - instance->peripheral->toAddon->free_joystick_info = ADDON_FreeJoystickInfo; - instance->peripheral->toAddon->get_features = ADDON_GetFeatures; - instance->peripheral->toAddon->free_features = ADDON_FreeFeatures; - instance->peripheral->toAddon->map_features = ADDON_MapFeatures; - instance->peripheral->toAddon->get_ignored_primitives = ADDON_GetIgnoredPrimitives; - instance->peripheral->toAddon->free_primitives = ADDON_FreePrimitives; - instance->peripheral->toAddon->set_ignored_primitives = ADDON_SetIgnoredPrimitives; - instance->peripheral->toAddon->save_button_map = ADDON_SaveButtonMap; - instance->peripheral->toAddon->revert_button_map = ADDON_RevertButtonMap; - instance->peripheral->toAddon->reset_button_map = ADDON_ResetButtonMap; - instance->peripheral->toAddon->power_off_joystick = ADDON_PowerOffJoystick; - - m_instanceData = instance->peripheral; - m_instanceData->toAddon->addonInstance = this; - } - - inline static void ADDON_GetCapabilities(const AddonInstance_Peripheral* addonInstance, + instance->peripheral->get_capabilities = ADDON_GetCapabilities; + instance->peripheral->perform_device_scan = ADDON_PerformDeviceScan; + instance->peripheral->free_scan_results = ADDON_FreeScanResults; + instance->peripheral->get_events = ADDON_GetEvents; + instance->peripheral->free_events = ADDON_FreeEvents; + instance->peripheral->send_event = ADDON_SendEvent; + + instance->peripheral->get_joystick_info = ADDON_GetJoystickInfo; + instance->peripheral->free_joystick_info = ADDON_FreeJoystickInfo; + instance->peripheral->get_features = ADDON_GetFeatures; + instance->peripheral->free_features = ADDON_FreeFeatures; + instance->peripheral->map_features = ADDON_MapFeatures; + instance->peripheral->get_ignored_primitives = ADDON_GetIgnoredPrimitives; + instance->peripheral->free_primitives = ADDON_FreePrimitives; + instance->peripheral->set_ignored_primitives = ADDON_SetIgnoredPrimitives; + instance->peripheral->save_button_map = ADDON_SaveButtonMap; + instance->peripheral->revert_button_map = ADDON_RevertButtonMap; + instance->peripheral->reset_button_map = ADDON_ResetButtonMap; + instance->peripheral->power_off_joystick = ADDON_PowerOffJoystick; + } + +private: + inline static void ADDON_GetCapabilities(KODI_ADDON_PERIPHERAL_HDL hdl, PERIPHERAL_CAPABILITIES* capabilities) { - if (!addonInstance || !capabilities) + if (!hdl || !capabilities) return; kodi::addon::PeripheralCapabilities peripheralCapabilities(capabilities); - static_cast(addonInstance->toAddon->addonInstance) - ->GetCapabilities(peripheralCapabilities); + static_cast(hdl)->GetCapabilities(peripheralCapabilities); } - inline static PERIPHERAL_ERROR ADDON_PerformDeviceScan( - const AddonInstance_Peripheral* addonInstance, - unsigned int* peripheral_count, - PERIPHERAL_INFO** scan_results) + inline static PERIPHERAL_ERROR ADDON_PerformDeviceScan(KODI_ADDON_PERIPHERAL_HDL hdl, + PERIPHERAL_INFO** scan_results, + size_t* peripheral_count) { - if (!addonInstance || !peripheral_count || !scan_results) + if (!hdl || !peripheral_count || !scan_results) return PERIPHERAL_ERROR_INVALID_PARAMETERS; std::vector> peripherals; - PERIPHERAL_ERROR err = static_cast(addonInstance->toAddon->addonInstance) - ->PerformDeviceScan(peripherals); + PERIPHERAL_ERROR err = static_cast(hdl)->PerformDeviceScan(peripherals); if (err == PERIPHERAL_NO_ERROR) { *peripheral_count = static_cast(peripherals.size()); @@ -658,26 +644,25 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance return err; } - inline static void ADDON_FreeScanResults(const AddonInstance_Peripheral* addonInstance, - unsigned int peripheral_count, - PERIPHERAL_INFO* scan_results) + inline static void ADDON_FreeScanResults(KODI_ADDON_PERIPHERAL_HDL hdl, + PERIPHERAL_INFO* scan_results, + size_t peripheral_count) { - if (!addonInstance) + if (!hdl) return; - kodi::addon::Peripherals::FreeStructs(peripheral_count, scan_results); + kodi::addon::Peripherals::FreeStructs(scan_results, peripheral_count); } - inline static PERIPHERAL_ERROR ADDON_GetEvents(const AddonInstance_Peripheral* addonInstance, - unsigned int* event_count, - PERIPHERAL_EVENT** events) + inline static PERIPHERAL_ERROR ADDON_GetEvents(KODI_ADDON_PERIPHERAL_HDL hdl, + PERIPHERAL_EVENT** events, + size_t* event_count) { - if (!addonInstance || !event_count || !events) + if (!hdl || !event_count || !events) return PERIPHERAL_ERROR_INVALID_PARAMETERS; std::vector peripheralEvents; - PERIPHERAL_ERROR err = static_cast(addonInstance->toAddon->addonInstance) - ->GetEvents(peripheralEvents); + PERIPHERAL_ERROR err = static_cast(hdl)->GetEvents(peripheralEvents); if (err == PERIPHERAL_NO_ERROR) { *event_count = static_cast(peripheralEvents.size()); @@ -687,35 +672,34 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance return err; } - inline static void ADDON_FreeEvents(const AddonInstance_Peripheral* addonInstance, - unsigned int event_count, - PERIPHERAL_EVENT* events) + inline static void ADDON_FreeEvents(KODI_ADDON_PERIPHERAL_HDL hdl, + PERIPHERAL_EVENT* events, + size_t event_count) { - if (!addonInstance) + if (!hdl) return; - kodi::addon::PeripheralEvents::FreeStructs(event_count, events); + kodi::addon::PeripheralEvents::FreeStructs(events, event_count); } - inline static bool ADDON_SendEvent(const AddonInstance_Peripheral* addonInstance, - const PERIPHERAL_EVENT* event) + inline static bool ADDON_SendEvent(KODI_ADDON_PERIPHERAL_HDL hdl, const PERIPHERAL_EVENT* event) { - if (!addonInstance || !event) + if (!hdl || !event) return false; - return static_cast(addonInstance->toAddon->addonInstance) - ->SendEvent(kodi::addon::PeripheralEvent(*event)); + return static_cast(hdl)->SendEvent(kodi::addon::PeripheralEvent(*event)); } - inline static PERIPHERAL_ERROR ADDON_GetJoystickInfo( - const AddonInstance_Peripheral* addonInstance, unsigned int index, JOYSTICK_INFO* info) + inline static PERIPHERAL_ERROR ADDON_GetJoystickInfo(KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index, + JOYSTICK_INFO* info) { - if (!addonInstance || !info) + if (!hdl || !info) return PERIPHERAL_ERROR_INVALID_PARAMETERS; kodi::addon::Joystick addonInfo; - PERIPHERAL_ERROR err = static_cast(addonInstance->toAddon->addonInstance) - ->GetJoystickInfo(index, addonInfo); + PERIPHERAL_ERROR err = + static_cast(hdl)->GetJoystickInfo(index, addonInfo); if (err == PERIPHERAL_NO_ERROR) { addonInfo.ToStruct(*info); @@ -724,29 +708,28 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance return err; } - inline static void ADDON_FreeJoystickInfo(const AddonInstance_Peripheral* addonInstance, - JOYSTICK_INFO* info) + inline static void ADDON_FreeJoystickInfo(KODI_ADDON_PERIPHERAL_HDL hdl, JOYSTICK_INFO* info) { - if (!addonInstance) + if (!hdl) return; kodi::addon::Joystick::FreeStruct(*info); } - inline static PERIPHERAL_ERROR ADDON_GetFeatures(const AddonInstance_Peripheral* addonInstance, + inline static PERIPHERAL_ERROR ADDON_GetFeatures(KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick, const char* controller_id, - unsigned int* feature_count, - JOYSTICK_FEATURE** features) + JOYSTICK_FEATURE** features, + size_t* feature_count) { - if (!addonInstance || !joystick || !controller_id || !feature_count || !features) + if (!hdl || !joystick || !controller_id || !feature_count || !features) return PERIPHERAL_ERROR_INVALID_PARAMETERS; kodi::addon::Joystick addonJoystick(*joystick); std::vector featuresVector; - PERIPHERAL_ERROR err = static_cast(addonInstance->toAddon->addonInstance) - ->GetFeatures(addonJoystick, controller_id, featuresVector); + PERIPHERAL_ERROR err = static_cast(hdl)->GetFeatures( + addonJoystick, controller_id, featuresVector); if (err == PERIPHERAL_NO_ERROR) { *feature_count = static_cast(featuresVector.size()); @@ -756,23 +739,23 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance return err; } - inline static void ADDON_FreeFeatures(const AddonInstance_Peripheral* addonInstance, - unsigned int feature_count, - JOYSTICK_FEATURE* features) + inline static void ADDON_FreeFeatures(KODI_ADDON_PERIPHERAL_HDL hdl, + JOYSTICK_FEATURE* features, + size_t feature_count) { - if (!addonInstance) + if (!hdl) return; - kodi::addon::JoystickFeatures::FreeStructs(feature_count, features); + kodi::addon::JoystickFeatures::FreeStructs(features, feature_count); } - inline static PERIPHERAL_ERROR ADDON_MapFeatures(const AddonInstance_Peripheral* addonInstance, + inline static PERIPHERAL_ERROR ADDON_MapFeatures(KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick, const char* controller_id, - unsigned int feature_count, - const JOYSTICK_FEATURE* features) + const JOYSTICK_FEATURE* features, + size_t feature_count) { - if (!addonInstance || !joystick || !controller_id || (feature_count > 0 && !features)) + if (!hdl || !joystick || !controller_id || (feature_count > 0 && !features)) return PERIPHERAL_ERROR_INVALID_PARAMETERS; kodi::addon::Joystick addonJoystick(*joystick); @@ -781,24 +764,23 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance for (unsigned int i = 0; i < feature_count; i++) primitiveVector.emplace_back(*(features + i)); - return static_cast(addonInstance->toAddon->addonInstance) - ->MapFeatures(addonJoystick, controller_id, primitiveVector); + return static_cast(hdl)->MapFeatures(addonJoystick, controller_id, + primitiveVector); } - inline static PERIPHERAL_ERROR ADDON_GetIgnoredPrimitives( - const AddonInstance_Peripheral* addonInstance, - const JOYSTICK_INFO* joystick, - unsigned int* primitive_count, - JOYSTICK_DRIVER_PRIMITIVE** primitives) + inline static PERIPHERAL_ERROR ADDON_GetIgnoredPrimitives(KODI_ADDON_PERIPHERAL_HDL hdl, + const JOYSTICK_INFO* joystick, + JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count) { - if (!addonInstance || !joystick || !primitive_count || !primitives) + if (!hdl || !joystick || !primitive_count || !primitives) return PERIPHERAL_ERROR_INVALID_PARAMETERS; kodi::addon::Joystick addonJoystick(*joystick); std::vector primitiveVector; - PERIPHERAL_ERROR err = static_cast(addonInstance->toAddon->addonInstance) - ->GetIgnoredPrimitives(addonJoystick, primitiveVector); + PERIPHERAL_ERROR err = static_cast(hdl)->GetIgnoredPrimitives( + addonJoystick, primitiveVector); if (err == PERIPHERAL_NO_ERROR) { *primitive_count = static_cast(primitiveVector.size()); @@ -808,23 +790,23 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance return err; } - inline static void ADDON_FreePrimitives(const AddonInstance_Peripheral* addonInstance, - unsigned int primitive_count, - JOYSTICK_DRIVER_PRIMITIVE* primitives) + inline static void ADDON_FreePrimitives(KODI_ADDON_PERIPHERAL_HDL hdl, + JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) { - if (!addonInstance) + if (!hdl) return; - kodi::addon::DriverPrimitives::FreeStructs(primitive_count, primitives); + kodi::addon::DriverPrimitives::FreeStructs(primitives, primitive_count); } inline static PERIPHERAL_ERROR ADDON_SetIgnoredPrimitives( - const AddonInstance_Peripheral* addonInstance, + KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick, - unsigned int primitive_count, - const JOYSTICK_DRIVER_PRIMITIVE* primitives) + const JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) { - if (!addonInstance || !joystick || (primitive_count > 0 && !primitives)) + if (!hdl || !joystick || (primitive_count > 0 && !primitives)) return PERIPHERAL_ERROR_INVALID_PARAMETERS; kodi::addon::Joystick addonJoystick(*joystick); @@ -833,55 +815,50 @@ class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance for (unsigned int i = 0; i < primitive_count; i++) primitiveVector.emplace_back(*(primitives + i)); - return static_cast(addonInstance->toAddon->addonInstance) - ->SetIgnoredPrimitives(addonJoystick, primitiveVector); + return static_cast(hdl)->SetIgnoredPrimitives(addonJoystick, + primitiveVector); } - inline static void ADDON_SaveButtonMap(const AddonInstance_Peripheral* addonInstance, + inline static void ADDON_SaveButtonMap(KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick) { - if (!addonInstance || !joystick) + if (!hdl || !joystick) return; kodi::addon::Joystick addonJoystick(*joystick); - static_cast(addonInstance->toAddon->addonInstance) - ->SaveButtonMap(addonJoystick); + static_cast(hdl)->SaveButtonMap(addonJoystick); } - inline static void ADDON_RevertButtonMap(const AddonInstance_Peripheral* addonInstance, + inline static void ADDON_RevertButtonMap(KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick) { - if (!addonInstance || !joystick) + if (!hdl || !joystick) return; kodi::addon::Joystick addonJoystick(*joystick); - static_cast(addonInstance->toAddon->addonInstance) - ->RevertButtonMap(addonJoystick); + static_cast(hdl)->RevertButtonMap(addonJoystick); } - inline static void ADDON_ResetButtonMap(const AddonInstance_Peripheral* addonInstance, + inline static void ADDON_ResetButtonMap(KODI_ADDON_PERIPHERAL_HDL hdl, const JOYSTICK_INFO* joystick, const char* controller_id) { - if (!addonInstance || !joystick || !controller_id) + if (!hdl || !joystick || !controller_id) return; kodi::addon::Joystick addonJoystick(*joystick); - static_cast(addonInstance->toAddon->addonInstance) - ->ResetButtonMap(addonJoystick, controller_id); + static_cast(hdl)->ResetButtonMap(addonJoystick, controller_id); } - inline static void ADDON_PowerOffJoystick(const AddonInstance_Peripheral* addonInstance, - unsigned int index) + inline static void ADDON_PowerOffJoystick(KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index) { - if (!addonInstance) + if (!hdl) return; - static_cast(addonInstance->toAddon->addonInstance) - ->PowerOffJoystick(index); + static_cast(hdl)->PowerOffJoystick(index); } - AddonInstance_Peripheral* m_instanceData; + KODI_ADDON_INSTANCE_BACKEND_HDL m_kodi; }; } /* namespace addon */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Screensaver.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Screensaver.h index 1fd36fb40ebb5..b448ef8d3f8ed 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Screensaver.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Screensaver.h @@ -13,6 +13,7 @@ #include "../gui/renderHelper.h" #ifdef __cplusplus + namespace kodi { namespace addon @@ -193,15 +194,10 @@ class ATTR_DLL_LOCAL CInstanceScreensaver : public IAddonInstance /// /// Used by an add-on that only supports screensavers. /// - CInstanceScreensaver() - : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance)) + CInstanceScreensaver() : IAddonInstance(IInstanceInfo(CAddonBase::addonBase->m_firstInstance)) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceScreensaver: Creation of more as one in single " - "instance way is not allowed!"); - - SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance); - CPrivateBase::m_interface->globalSingleInstance = this; + CAddonBase::addonBase->m_globalSingleInstance = this; + kodi_addon_screensaver_get_properties(GetInfo().GetKodiHdl(), &m_props); } //---------------------------------------------------------------------------- @@ -248,11 +244,7 @@ class ATTR_DLL_LOCAL CInstanceScreensaver : public IAddonInstance /// explicit CInstanceScreensaver(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceScreensaver: Creation of multiple together " - "with single instance way is not allowed!"); - - SetAddonStruct(instance); + kodi_addon_screensaver_get_properties(GetInfo().GetKodiHdl(), &m_props); } //---------------------------------------------------------------------------- @@ -370,14 +362,12 @@ class ATTR_DLL_LOCAL CInstanceScreensaver : public IAddonInstance ///@} private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { instance->hdl = this; - instance->screensaver->toAddon->start = ADDON_start; - instance->screensaver->toAddon->stop = ADDON_stop; - instance->screensaver->toAddon->render = ADDON_render; - - instance->screensaver->toKodi->get_properties(instance->info->kodi, &m_props); + instance->screensaver->start = ADDON_start; + instance->screensaver->stop = ADDON_stop; + instance->screensaver->render = ADDON_render; } inline static bool ADDON_start(const KODI_ADDON_SCREENSAVER_HDL hdl) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VFS.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VFS.h index 6affffe04609e..047fb56d432a3 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VFS.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VFS.h @@ -30,7 +30,7 @@ class CInstanceVFS; /// places. /// ///@{ -using VFSFileHandle = VFS_FILE_HANDLE; +using VFSFileHandle = KODI_VFS_FILE_HDL; ///@} //------------------------------------------------------------------------------ @@ -47,7 +47,7 @@ using VFSFileHandle = VFS_FILE_HANDLE; /// @copydetails cpp_kodi_addon_vfs_Defs_VFSUrl_Help /// ///@{ -class ATTR_DLL_LOCAL VFSUrl : public CStructHdl +class ATTR_DLL_LOCAL VFSUrl : public CStructHdl { /*! \cond PRIVATE */ friend class CInstanceVFS; @@ -144,8 +144,8 @@ class ATTR_DLL_LOCAL VFSUrl : public CStructHdl private: VFSUrl() = delete; VFSUrl(const VFSUrl& channel) = delete; - VFSUrl(const VFSURL* channel) : CStructHdl(channel) {} - VFSUrl(VFSURL* channel) : CStructHdl(channel) {} + VFSUrl(const KODI_ADDON_VFS_URL* channel) : CStructHdl(channel) {} + VFSUrl(KODI_ADDON_VFS_URL* channel) : CStructHdl(channel) {} }; ///@} //------------------------------------------------------------------------------ @@ -442,14 +442,7 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance /// /// @warning Only use `instance` from the @ref CAddonBase::CreateInstance call. /// - explicit CInstanceVFS(const IInstanceInfo& instance) : IAddonInstance(instance) - { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) - throw std::logic_error("kodi::addon::CInstanceVFS: Creation of multiple together with single " - "instance way is not allowed!"); - - SetAddonStruct(instance); - } + explicit CInstanceVFS(const kodi::addon::IInstanceInfo& instance) : IAddonInstance(instance) {} //---------------------------------------------------------------------------- //============================================================================ @@ -804,12 +797,12 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance bool GetKeyboardInput(const std::string& heading, std::string& input, bool hiddenInput = false) { char* cInput = nullptr; - bool ret = m_cb->get_keyboard_input(m_cb->ctx, heading.c_str(), &cInput, hiddenInput); + bool ret = kodi_addon_vfs_get_dir_cb__get_keyboard_input( + m_instance, m_ctx_cb_hdl, heading.c_str(), &cInput, hiddenInput); if (cInput) { input = cInput; - ::kodi::addon::CPrivateBase::m_interface->toKodi->free_string( - ::kodi::addon::CPrivateBase::m_interface->toKodi->kodiBase, cInput); + free(cInput); } return ret; } @@ -827,8 +820,8 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance const std::string& line2 = "", const std::string& line3 = "") { - m_cb->set_error_dialog(m_cb->ctx, heading.c_str(), line1.c_str(), line2.c_str(), - line3.c_str()); + kodi_addon_vfs_get_dir_cb__set_error_dialog(m_instance, m_ctx_cb_hdl, heading.c_str(), + line1.c_str(), line2.c_str(), line3.c_str()); } /// @ingroup cpp_kodi_addon_vfs_general_cb_GetDirectory @@ -837,13 +830,18 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance /// @param[in] url The URL void RequireAuthentication(const std::string& url) { - m_cb->require_authentication(m_cb->ctx, url.c_str()); + kodi_addon_vfs_get_dir_cb__require_authentication(m_instance, m_ctx_cb_hdl, url.c_str()); } - explicit CVFSCallbacks(const VFSGetDirectoryCallbacks* cb) : m_cb(cb) {} + explicit CVFSCallbacks(const KODI_ADDON_INSTANCE_BACKEND_HDL instance, + const KODI_CTX_CB_HDL ctx_cb_hdl) + : m_instance(instance), m_ctx_cb_hdl(ctx_cb_hdl) + { + } private: - const VFSGetDirectoryCallbacks* m_cb; + const KODI_ADDON_INSTANCE_BACKEND_HDL m_instance; + const KODI_CTX_CB_HDL m_ctx_cb_hdl; }; //---------------------------------------------------------------------------- @@ -900,208 +898,197 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance //@} private: - void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) + void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance) override { - m_instanceData = instance; - m_instanceData->hdl = this; - m_instanceData->vfs->toAddon->addonInstance = this; - m_instanceData->vfs->toAddon->open = ADDON_Open; - m_instanceData->vfs->toAddon->open_for_write = ADDON_OpenForWrite; - m_instanceData->vfs->toAddon->read = ADDON_Read; - m_instanceData->vfs->toAddon->write = ADDON_Write; - m_instanceData->vfs->toAddon->seek = ADDON_Seek; - m_instanceData->vfs->toAddon->truncate = ADDON_Truncate; - m_instanceData->vfs->toAddon->get_length = ADDON_GetLength; - m_instanceData->vfs->toAddon->get_position = ADDON_GetPosition; - m_instanceData->vfs->toAddon->get_chunk_size = ADDON_GetChunkSize; - m_instanceData->vfs->toAddon->io_control_get_seek_possible = ADDON_IoControlGetSeekPossible; - m_instanceData->vfs->toAddon->io_control_get_cache_status = ADDON_IoControlGetCacheStatus; - m_instanceData->vfs->toAddon->io_control_set_cache_rate = ADDON_IoControlSetCacheRate; - m_instanceData->vfs->toAddon->io_control_set_retry = ADDON_IoControlSetRetry; - m_instanceData->vfs->toAddon->stat = ADDON_Stat; - m_instanceData->vfs->toAddon->close = ADDON_Close; - m_instanceData->vfs->toAddon->exists = ADDON_Exists; - m_instanceData->vfs->toAddon->clear_out_idle = ADDON_ClearOutIdle; - m_instanceData->vfs->toAddon->disconnect_all = ADDON_DisconnectAll; - m_instanceData->vfs->toAddon->delete_it = ADDON_Delete; - m_instanceData->vfs->toAddon->rename = ADDON_Rename; - m_instanceData->vfs->toAddon->directory_exists = ADDON_DirectoryExists; - m_instanceData->vfs->toAddon->remove_directory = ADDON_RemoveDirectory; - m_instanceData->vfs->toAddon->create_directory = ADDON_CreateDirectory; - m_instanceData->vfs->toAddon->get_directory = ADDON_GetDirectory; - m_instanceData->vfs->toAddon->free_directory = ADDON_FreeDirectory; - m_instanceData->vfs->toAddon->contains_files = ADDON_ContainsFiles; + instance->hdl = this; + instance->vfs->file_open = ADDON_file_open; + instance->vfs->file_open_for_write = ADDON_file_open_for_write; + instance->vfs->file_read = ADDON_file_read; + instance->vfs->file_write = ADDON_file_write; + instance->vfs->file_seek = ADDON_file_seek; + instance->vfs->file_truncate = ADDON_file_truncate; + instance->vfs->file_get_length = ADDON_file_get_length; + instance->vfs->file_get_position = ADDON_file_get_position; + instance->vfs->file_get_chunk_size = ADDON_file_get_chunk_size; + instance->vfs->file_io_control_get_seek_possible = ADDON_file_io_control_get_seek_possible; + instance->vfs->file_io_control_get_cache_status = ADDON_file_io_control_get_cache_status; + instance->vfs->file_io_control_set_cache_rate = ADDON_file_io_control_set_cache_rate; + instance->vfs->file_io_control_set_retry = ADDON_file_io_control_set_retry; + instance->vfs->stat = ADDON_stat; + instance->vfs->file_close = ADDON_file_close; + instance->vfs->exists = ADDON_exists; + instance->vfs->clear_out_idle = ADDON_clear_out_idle; + instance->vfs->disconnect_all = ADDON_disconnect_all; + instance->vfs->delete_it = ADDON_delete; + instance->vfs->rename = ADDON_rename; + instance->vfs->directory_exists = ADDON_directory_exists; + instance->vfs->directory_remove = ADDON_directory_remove; + instance->vfs->directory_create = ADDON_directory_create; + instance->vfs->directory_get = ADDON_directory_get; + instance->vfs->directory_contains_files = ADDON_directory_contains_files; } - inline static VFS_FILE_HANDLE ADDON_Open(const AddonInstance_VFSEntry* instance, - const VFSURL* url) + inline static KODI_VFS_FILE_HDL ADDON_file_open(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->Open(url); + return static_cast(hdl)->Open(url); } - inline static VFS_FILE_HANDLE ADDON_OpenForWrite(const AddonInstance_VFSEntry* instance, - const VFSURL* url, - bool overWrite) + inline static KODI_VFS_FILE_HDL ADDON_file_open_for_write(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url, + bool overWrite) { - return static_cast(instance->toAddon->addonInstance) - ->OpenForWrite(url, overWrite); + return static_cast(hdl)->OpenForWrite(url, overWrite); } - inline static ssize_t ADDON_Read(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - uint8_t* buffer, - size_t uiBufSize) + inline static ssize_t ADDON_file_read(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t uiBufSize) { - return static_cast(instance->toAddon->addonInstance) - ->Read(context, buffer, uiBufSize); + return static_cast(hdl)->Read(context, buffer, uiBufSize); } - inline static ssize_t ADDON_Write(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - const uint8_t* buffer, - size_t uiBufSize) + inline static ssize_t ADDON_file_write(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t uiBufSize) { - return static_cast(instance->toAddon->addonInstance) - ->Write(context, buffer, uiBufSize); + return static_cast(hdl)->Write(context, buffer, uiBufSize); } - inline static int64_t ADDON_Seek(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - int64_t position, - int whence) + inline static int64_t ADDON_file_seek(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence) { - return static_cast(instance->toAddon->addonInstance) - ->Seek(context, position, whence); + return static_cast(hdl)->Seek(context, position, whence); } - inline static int ADDON_Truncate(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - int64_t size) + inline static int ADDON_file_truncate(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size) { - return static_cast(instance->toAddon->addonInstance)->Truncate(context, size); + return static_cast(hdl)->Truncate(context, size); } - inline static int64_t ADDON_GetLength(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context) + inline static int64_t ADDON_file_get_length(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context) { - return static_cast(instance->toAddon->addonInstance)->GetLength(context); + return static_cast(hdl)->GetLength(context); } - inline static int64_t ADDON_GetPosition(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context) + inline static int64_t ADDON_file_get_position(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context) { - return static_cast(instance->toAddon->addonInstance)->GetPosition(context); + return static_cast(hdl)->GetPosition(context); } - inline static int ADDON_GetChunkSize(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context) + inline static int ADDON_file_get_chunk_size(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context) { - return static_cast(instance->toAddon->addonInstance)->GetChunkSize(context); + return static_cast(hdl)->GetChunkSize(context); } - inline static bool ADDON_IoControlGetSeekPossible(const AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context) + inline static bool ADDON_file_io_control_get_seek_possible(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context) { - return static_cast(instance->toAddon->addonInstance) - ->IoControlGetSeekPossible(context); + return static_cast(hdl)->IoControlGetSeekPossible(context); } - inline static bool ADDON_IoControlGetCacheStatus(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - VFS_CACHE_STATUS_DATA* status) + inline static bool ADDON_file_io_control_get_cache_status(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + VFS_CACHE_STATUS* status) { kodi::vfs::CacheStatus cppStatus(status); - return static_cast(instance->toAddon->addonInstance) - ->IoControlGetCacheStatus(context, cppStatus); + return static_cast(hdl)->IoControlGetCacheStatus(context, cppStatus); } - inline static bool ADDON_IoControlSetCacheRate(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - uint32_t rate) + inline static bool ADDON_file_io_control_set_cache_rate(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint32_t rate) { - return static_cast(instance->toAddon->addonInstance) - ->IoControlSetCacheRate(context, rate); + return static_cast(hdl)->IoControlSetCacheRate(context, rate); } - inline static bool ADDON_IoControlSetRetry(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - bool retry) + inline static bool ADDON_file_io_control_set_retry(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + bool retry) { - return static_cast(instance->toAddon->addonInstance) - ->IoControlSetRetry(context, retry); + return static_cast(hdl)->IoControlSetRetry(context, retry); } - inline static int ADDON_Stat(const AddonInstance_VFSEntry* instance, - const VFSURL* url, - struct STAT_STRUCTURE* buffer) + inline static int ADDON_stat(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer) { kodi::vfs::FileStatus cppBuffer(buffer); - return static_cast(instance->toAddon->addonInstance)->Stat(url, cppBuffer); + return static_cast(hdl)->Stat(url, cppBuffer); } - inline static bool ADDON_Close(const AddonInstance_VFSEntry* instance, VFS_FILE_HANDLE context) + inline static bool ADDON_file_close(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) { - return static_cast(instance->toAddon->addonInstance)->Close(context); + return static_cast(hdl)->Close(context); } - inline static bool ADDON_Exists(const AddonInstance_VFSEntry* instance, const VFSURL* url) + inline static bool ADDON_exists(const KODI_ADDON_VFS_HDL hdl, const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->Exists(url); + return static_cast(hdl)->Exists(url); } - inline static void ADDON_ClearOutIdle(const AddonInstance_VFSEntry* instance) + inline static void ADDON_clear_out_idle(const KODI_ADDON_VFS_HDL hdl) { - return static_cast(instance->toAddon->addonInstance)->ClearOutIdle(); + return static_cast(hdl)->ClearOutIdle(); } - inline static void ADDON_DisconnectAll(const AddonInstance_VFSEntry* instance) + inline static void ADDON_disconnect_all(const KODI_ADDON_VFS_HDL hdl) { - return static_cast(instance->toAddon->addonInstance)->DisconnectAll(); + return static_cast(hdl)->DisconnectAll(); } - inline static bool ADDON_Delete(const AddonInstance_VFSEntry* instance, const VFSURL* url) + inline static bool ADDON_delete(const KODI_ADDON_VFS_HDL hdl, const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->Delete(url); + return static_cast(hdl)->Delete(url); } - inline static bool ADDON_Rename(const AddonInstance_VFSEntry* instance, - const VFSURL* url, - const VFSURL* url2) + inline static bool ADDON_rename(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url, + const KODI_ADDON_VFS_URL* url2) { - return static_cast(instance->toAddon->addonInstance)->Rename(url, url2); + return static_cast(hdl)->Rename(url, url2); } - inline static bool ADDON_DirectoryExists(const AddonInstance_VFSEntry* instance, - const VFSURL* url) + inline static bool ADDON_directory_exists(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->DirectoryExists(url); + return static_cast(hdl)->DirectoryExists(url); } - inline static bool ADDON_RemoveDirectory(const AddonInstance_VFSEntry* instance, - const VFSURL* url) + inline static bool ADDON_directory_remove(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->RemoveDirectory(url); + return static_cast(hdl)->RemoveDirectory(url); } - inline static bool ADDON_CreateDirectory(const AddonInstance_VFSEntry* instance, - const VFSURL* url) + inline static bool ADDON_directory_create(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url) { - return static_cast(instance->toAddon->addonInstance)->CreateDirectory(url); + return static_cast(hdl)->CreateDirectory(url); } - inline static bool ADDON_GetDirectory(const AddonInstance_VFSEntry* instance, - const VFSURL* url, - VFSDirEntry** retEntries, - int* num_entries, - VFSGetDirectoryCallbacks* callbacks) + inline static bool ADDON_directory_get(const KODI_ADDON_VFS_HDL hdl, + const KODI_ADDON_VFS_URL* url, + VFS_DIR_ENTRY** retEntries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl) { std::vector addonEntries; - bool ret = static_cast(instance->toAddon->addonInstance) - ->GetDirectory(url, addonEntries, CVFSCallbacks(callbacks)); + bool ret = static_cast(hdl)->GetDirectory(url, addonEntries, + CVFSCallbacks(hdl, ctx_cb_hdl)); if (ret) { - VFSDirEntry* entries = - static_cast(malloc(sizeof(VFSDirEntry) * addonEntries.size())); + VFS_DIR_ENTRY* entries = + static_cast(malloc(sizeof(VFS_DIR_ENTRY) * addonEntries.size())); for (unsigned int i = 0; i < addonEntries.size(); ++i) { entries[i].label = strdup(addonEntries[i].Label().c_str()); @@ -1116,7 +1103,7 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance if (!props.empty()) { entries[i].properties = - static_cast(malloc(sizeof(VFSProperty) * props.size())); + static_cast(malloc(sizeof(VFS_PROPERTY) * props.size())); for (const auto& prop : props) { entries[i].properties[entries[i].num_props].name = strdup(prop.first.c_str()); @@ -1133,44 +1120,19 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance return ret; } - inline static void ADDON_FreeDirectory(const AddonInstance_VFSEntry* instance, - VFSDirEntry* entries, - int num_entries) - { - for (int i = 0; i < num_entries; ++i) - { - if (entries[i].properties) - { - for (unsigned int j = 0; j < entries[i].num_props; ++j) - { - free(entries[i].properties[j].name); - free(entries[i].properties[j].val); - } - free(entries[i].properties); - } - free(entries[i].label); - free(entries[i].title); - free(entries[i].path); - } - free(entries); - } - - inline static bool ADDON_ContainsFiles(const AddonInstance_VFSEntry* instance, - const VFSURL* url, - VFSDirEntry** retEntries, - int* num_entries, - char* rootpath) + inline static bool ADDON_directory_contains_files(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** retEntries, + size_t* num_entries, + char** rootpath) { std::string cppRootPath; std::vector addonEntries; - bool ret = static_cast(instance->toAddon->addonInstance) - ->ContainsFiles(url, addonEntries, cppRootPath); + bool ret = static_cast(hdl)->ContainsFiles(url, addonEntries, cppRootPath); if (ret) { - strncpy(rootpath, cppRootPath.c_str(), ADDON_STANDARD_STRING_LENGTH); - - VFSDirEntry* entries = - static_cast(malloc(sizeof(VFSDirEntry) * addonEntries.size())); + VFS_DIR_ENTRY* entries = + static_cast(malloc(sizeof(VFS_DIR_ENTRY) * addonEntries.size())); for (size_t i = 0; i < addonEntries.size(); ++i) { entries[i].label = strdup(addonEntries[i].Label().c_str()); @@ -1185,7 +1147,7 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance if (!props.empty()) { entries[i].properties = - static_cast(malloc(sizeof(VFSProperty) * props.size())); + static_cast(malloc(sizeof(VFS_PROPERTY) * props.size())); for (const auto& prop : props) { entries[i].properties[entries[i].num_props].name = strdup(prop.first.c_str()); @@ -1196,13 +1158,13 @@ class ATTR_DLL_LOCAL CInstanceVFS : public IAddonInstance else entries[i].properties = nullptr; } + + *rootpath = strdup(cppRootPath.c_str()); *retEntries = entries; - *num_entries = static_cast(addonEntries.size()); + *num_entries = addonEntries.size(); } return ret; } - - KODI_ADDON_INSTANCE_STRUCT* m_instanceData{nullptr}; }; } /* namespace addon */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VideoCodec.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VideoCodec.h index 06f0fc85a61ca..1a6c6928bf3df 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VideoCodec.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/VideoCodec.h @@ -259,7 +259,7 @@ class ATTR_DLL_LOCAL CInstanceVideoCodec : public IAddonInstance /// explicit CInstanceVideoCodec(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstanceVideoCodec: Creation of multiple together with " "single instance way is not allowed!"); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Visualization.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Visualization.h index b058344c32e7a..3ee4620514489 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Visualization.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/Visualization.h @@ -396,15 +396,14 @@ class ATTR_DLL_LOCAL CInstanceVisualization : public IAddonInstance /// /// Used by an add-on that only supports visualizations. /// - CInstanceVisualization() - : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance)) + CInstanceVisualization() : IAddonInstance(IInstanceInfo(CPrivateBase::ifc.m_firstInstance)) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error( "kodi::addon::CInstanceVisualization: Cannot create multiple instances of add-on."); - SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance); - CPrivateBase::m_interface->globalSingleInstance = this; + SetAddonStruct(CPrivateBase::ifc.m_firstInstance); + CPrivateBase::ifc.globalSingleInstance = this; } //---------------------------------------------------------------------------- @@ -448,7 +447,7 @@ class ATTR_DLL_LOCAL CInstanceVisualization : public IAddonInstance /// explicit CInstanceVisualization(const IInstanceInfo& instance) : IAddonInstance(instance) { - if (CPrivateBase::m_interface->globalSingleInstance != nullptr) + if (CPrivateBase::ifc.globalSingleInstance != nullptr) throw std::logic_error("kodi::addon::CInstanceVisualization: Creation of multiple together " "with single instance way is not allowed!"); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/CMakeLists.txt index ebbeeb7e6c3ea..f1319d512fac5 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/CMakeLists.txt @@ -2,11 +2,7 @@ # See xbmc/addons/kodi-dev-kit/tools/code-generator.py. set(HEADERS - DemuxPacket.h - StreamCodec.h - StreamConstants.h StreamCrypto.h - TimingConstants.h ) if(HEADERS) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/DemuxPacket.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/DemuxPacket.h deleted file mode 100644 index f965b9f64149f..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/DemuxPacket.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "TimingConstants.h" -#include "../../c-api/addon-instance/inputstream/demux_packet.h" diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamCodec.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamCodec.h deleted file mode 100644 index e80e2ca43b6ce..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamCodec.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../c-api/addon-instance/inputstream/stream_codec.h" diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamConstants.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamConstants.h deleted file mode 100644 index 200631b6f96f5..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/StreamConstants.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../c-api/addon-instance/inputstream/stream_constants.h" diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/TimingConstants.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/TimingConstants.h deleted file mode 100644 index 22f8952577716..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/inputstream/TimingConstants.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../c-api/addon-instance/inputstream/timing_constants.h" - -#ifdef __cplusplus - -// Unset the on timing_constants.h given defines -#undef STREAM_TIME_TO_MSEC -#undef STREAM_SEC_TO_TIME -#undef STREAM_MSEC_TO_TIME - -/// @ingroup cpp_kodi_addon_inputstream_Defs_TimingConstants -/// @brief Converts a stream time to milliseconds as an integer value. -/// -/// @param[in] x Stream time -/// @return Milliseconds -/// -/// @note Within "C" code this is used as `#define`. -/// -constexpr int STREAM_TIME_TO_MSEC(double x) -{ - return static_cast(x * 1000 / STREAM_TIME_BASE); -} - -/// @ingroup cpp_kodi_addon_inputstream_Defs_TimingConstants -/// @brief Converts a time in seconds to the used stream time format. -/// -/// @param[in] x Seconds -/// @return Stream time -/// -/// @note Within "C" code this is used as `#define`. -/// -constexpr double STREAM_SEC_TO_TIME(double x) -{ - return x * STREAM_TIME_BASE; -} - -/// @ingroup cpp_kodi_addon_inputstream_Defs_TimingConstants -/// @brief Converts a time in milliseconds to the used stream time format. -/// -/// @param[in] x Milliseconds -/// @return Stream time -/// -/// @note Within "C" code this is used as `#define`. -/// -constexpr double STREAM_MSEC_TO_TIME(double x) -{ - return x * STREAM_TIME_BASE / 1000; -} - -#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/peripheral/PeripheralUtils.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/peripheral/PeripheralUtils.h index bedd7cb801c60..a02575001a96c 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/peripheral/PeripheralUtils.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/peripheral/PeripheralUtils.h @@ -99,11 +99,11 @@ class PeripheralVector } } - static void FreeStructs(unsigned int structCount, THE_STRUCT* structs) + static void FreeStructs(THE_STRUCT* structs, size_t structCount) { if (structs) { - for (unsigned int i = 0; i < structCount; i++) + for (size_t i = 0; i < structCount; i++) THE_CLASS::FreeStruct(structs[i]); } PERIPHERAL_SAFE_DELETE_ARRAY(structs); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/CMakeLists.txt index 1690c398fb937..8766f858791ef 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/CMakeLists.txt @@ -4,13 +4,9 @@ set(HEADERS ChannelGroups.h Channels.h - EDL.h EPG.h - General.h - MenuHook.h Providers.h Recordings.h - Stream.h Timers.h ) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/EDL.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/EDL.h deleted file mode 100644 index 34c7c413bf93e..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/EDL.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../AddonBase.h" -#include "../../c-api/addon-instance/pvr/pvr_edl.h" - -//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -// "C++" Definitions group 8 - PVR Edit definition list (EDL) -#ifdef __cplusplus - -namespace kodi -{ -namespace addon -{ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry class PVREDLEntry -/// @ingroup cpp_kodi_addon_pvr_Defs_EDLEntry -/// @brief **Edit definition list (EDL) entry**\n -/// Time places and type of related fields. -/// -/// This used within @ref cpp_kodi_addon_pvr_EPGTag "EPG" and -/// @ref cpp_kodi_addon_pvr_Recordings "recordings". -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry_Help -/// -///@{ -class PVREDLEntry : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVREDLEntry() { memset(m_cStructure, 0, sizeof(PVR_EDL_ENTRY)); } - PVREDLEntry(const PVREDLEntry& type) : CStructHdl(type) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry : - /// | Name | Type | Set call | Get call | Usage - /// |------|------|----------|----------|----------- - /// | **Start time** | `int64_t` | @ref PVREDLEntry::SetStart "SetStart" | @ref PVREDLEntry::GetStart "GetStart" | *required to set* - /// | **End time** | `int64_t` | @ref PVREDLEntry::SetEnd "SetEnd" | @ref PVREDLEntry::GetEnd "GetEnd" | *required to set* - /// | **Type** | @ref PVR_EDL_TYPE | @ref PVREDLEntry::SetType "SetType" | @ref PVREDLEntry::GetType "GetType" | *required to set* - /// - - /// @addtogroup cpp_kodi_addon_pvr_Defs_EDLEntry_PVREDLEntry - ///@{ - - /// @brief Start time in milliseconds. - void SetStart(int64_t start) { m_cStructure->start = start; } - - /// @brief To get with @ref SetStart() changed values. - int64_t GetStart() const { return m_cStructure->start; } - - /// @brief End time in milliseconds. - void SetEnd(int64_t end) { m_cStructure->end = end; } - - /// @brief To get with @ref SetEnd() changed values. - int64_t GetEnd() const { return m_cStructure->end; } - - /// @brief The with @ref PVR_EDL_TYPE used definition list type. - void SetType(PVR_EDL_TYPE type) { m_cStructure->type = type; } - - /// @brief To get with @ref SetType() changed values. - PVR_EDL_TYPE GetType() const { return m_cStructure->type; } - ///@} - -private: - PVREDLEntry(const PVR_EDL_ENTRY* type) : CStructHdl(type) {} - PVREDLEntry(PVR_EDL_ENTRY* type) : CStructHdl(type) {} -}; -///@} -//------------------------------------------------------------------------------ - -} /* namespace addon */ -} /* namespace kodi */ - -#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/General.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/General.h deleted file mode 100644 index 758feedd903b1..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/General.h +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../AddonBase.h" -#include "../../c-api/addon-instance/pvr/pvr_general.h" - -//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -// "C++" Definitions group 1 - General PVR -#ifdef __cplusplus - -namespace kodi -{ -namespace addon -{ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_PVRTypeIntValue class PVRTypeIntValue -/// @ingroup cpp_kodi_addon_pvr_Defs_General -/// @brief **PVR add-on type value**\n -/// Representation of a `` event related value. -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_PVRTypeIntValue_Help -/// -///@{ -class PVRTypeIntValue : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVRTypeIntValue(const PVRTypeIntValue& data) : CStructHdl(data) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_PVRTypeIntValue_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_PVRTypeIntValue - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_PVRTypeIntValue : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Value** | `int` | @ref PVRTypeIntValue::SetValue "SetValue" | @ref PVRTypeIntValue::GetValue "GetValue" - /// | **Description** | `std::string` | @ref PVRTypeIntValue::SetDescription "SetDescription" | @ref PVRTypeIntValue::GetDescription "GetDescription" - /// - /// @remark Further can there be used his class constructor to set values. - - /// @addtogroup cpp_kodi_addon_pvr_Defs_PVRTypeIntValue - ///@{ - - /// @brief Default class constructor. - /// - /// @note Values must be set afterwards. - PVRTypeIntValue() = default; - - /// @brief Class constructor with integrated value set. - /// - /// @param[in] value Type identification value - /// @param[in] description Type description text - PVRTypeIntValue(int value, const std::string& description) - { - SetValue(value); - SetDescription(description); - } - - /// @brief To set with the identification value. - void SetValue(int value) { m_cStructure->iValue = value; } - - /// @brief To get with the identification value. - int GetValue() const { return m_cStructure->iValue; } - - /// @brief To set with the description text of the value. - void SetDescription(const std::string& description) - { - strncpy(m_cStructure->strDescription, description.c_str(), - sizeof(m_cStructure->strDescription) - 1); - } - - /// @brief To get with the description text of the value. - std::string GetDescription() const { return m_cStructure->strDescription; } - ///@} - -private: - PVRTypeIntValue(const PVR_ATTRIBUTE_INT_VALUE* data) : CStructHdl(data) {} - PVRTypeIntValue(PVR_ATTRIBUTE_INT_VALUE* data) : CStructHdl(data) {} -}; -///@} -//------------------------------------------------------------------------------ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_PVRCapabilities class PVRCapabilities -/// @ingroup cpp_kodi_addon_pvr_Defs_General -/// @brief **PVR add-on capabilities**\n -/// This class is needed to tell Kodi which options are supported on the addon. -/// -/// If a capability is set to **true**, then the corresponding methods from -/// @ref cpp_kodi_addon_pvr "kodi::addon::CInstancePVRClient" need to be -/// implemented. -/// -/// As default them all set to **false**. -/// -/// Used on @ref kodi::addon::CInstancePVRClient::GetCapabilities(). -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_PVRCapabilities_Help -/// -///@{ -class PVRCapabilities -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - explicit PVRCapabilities() = delete; - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_PVRCapabilities_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_PVRCapabilities - /// ---------------------------------------------------------------------------- - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_PVRCapabilities : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Supports EPG** | `boolean` | @ref PVRCapabilities::SetSupportsEPG "SetSupportsEPG" | @ref PVRCapabilities::GetSupportsEPG "GetSupportsEPG" - /// | **Supports EPG EDL** | `boolean` | @ref PVRCapabilities::SetSupportsEPGEdl "SetSupportsEPGEdl" | @ref PVRCapabilities::GetSupportsEPGEdl "GetSupportsEPGEdl" - /// | **Supports TV** | `boolean` | @ref PVRCapabilities::SetSupportsTV "SetSupportsTV" | @ref PVRCapabilities::GetSupportsTV "GetSupportsTV" - /// | **Supports radio** | `boolean` | @ref PVRCapabilities::SetSupportsRadio "SetSupportsRadio" | @ref PVRCapabilities::GetSupportsRadio "GetSupportsRadio" - /// | **Supports recordings** | `boolean` | @ref PVRCapabilities::SetSupportsRecordings "SetSupportsRecordings" | @ref PVRCapabilities::GetSupportsRecordings "GetSupportsRecordings" - /// | **Supports recordings undelete** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingsUndelete "SetSupportsRecordingsUndelete" | @ref PVRCapabilities::GetSupportsRecordingsUndelete "SetSupportsRecordingsUndelete" - /// | **Supports timers** | `boolean` | @ref PVRCapabilities::SetSupportsTimers "SetSupportsTimers" | @ref PVRCapabilities::GetSupportsTimers "GetSupportsTimers" - /// | **Supports providers** | `boolean` | @ref PVRCapabilities::SetSupportsProviders "SetSupportsProviders" | @ref PVRCapabilities::GetSupportsProviders "GetSupportsProviders" - /// | **Supports channel groups** | `boolean` | @ref PVRCapabilities::SetSupportsChannelGroups "SetSupportsChannelGroups" | @ref PVRCapabilities::GetSupportsChannelGroups "GetSupportsChannelGroups" - /// | **Supports channel scan** | `boolean` | @ref PVRCapabilities::SetSupportsChannelScan "SetSupportsChannelScan" | @ref PVRCapabilities::GetSupportsChannelScan "GetSupportsChannelScan" - /// | **Supports channel settings** | `boolean` | @ref PVRCapabilities::SetSupportsChannelSettings "SetSupportsChannelSettings" | @ref PVRCapabilities::GetSupportsChannelSettings "GetSupportsChannelSettings" - /// | **Handles input stream** | `boolean` | @ref PVRCapabilities::SetHandlesInputStream "SetHandlesInputStream" | @ref PVRCapabilities::GetHandlesInputStream "GetHandlesInputStream" - /// | **Handles demuxing** | `boolean` | @ref PVRCapabilities::SetHandlesDemuxing "SetHandlesDemuxing" | @ref PVRCapabilities::GetHandlesDemuxing "GetHandlesDemuxing" - /// | **Supports recording play count** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingPlayCount "SetSupportsRecordingPlayCount" | @ref PVRCapabilities::GetSupportsRecordingPlayCount "GetSupportsRecordingPlayCount" - /// | **Supports last played position** | `boolean` | @ref PVRCapabilities::SetSupportsLastPlayedPosition "SetSupportsLastPlayedPosition" | @ref PVRCapabilities::GetSupportsLastPlayedPosition "GetSupportsLastPlayedPosition" - /// | **Supports recording EDL** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingEdl "SetSupportsRecordingEdl" | @ref PVRCapabilities::GetSupportsRecordingEdl "GetSupportsRecordingEdl" - /// | **Supports recordings rename** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingsRename "SetSupportsRecordingsRename" | @ref PVRCapabilities::GetSupportsRecordingsRename "GetSupportsRecordingsRename" - /// | **Supports recordings lifetime change** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingsLifetimeChange "SetSupportsRecordingsLifetimeChange" | @ref PVRCapabilities::GetSupportsRecordingsLifetimeChange "GetSupportsRecordingsLifetimeChange" - /// | **Supports descramble info** | `boolean` | @ref PVRCapabilities::SetSupportsDescrambleInfo "SetSupportsDescrambleInfo" | @ref PVRCapabilities::GetSupportsDescrambleInfo "GetSupportsDescrambleInfo" - /// | **Supports async EPG transfer** | `boolean` | @ref PVRCapabilities::SetSupportsAsyncEPGTransfer "SetSupportsAsyncEPGTransfer" | @ref PVRCapabilities::GetSupportsAsyncEPGTransfer "GetSupportsAsyncEPGTransfer" - /// | **Supports recording size** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingSize "SetSupportsRecordingSize" | @ref PVRCapabilities::GetSupportsRecordingSize "GetSupportsRecordingSize" - /// | **Supports recordings delete** | `boolean` | @ref PVRCapabilities::SetSupportsRecordingsDelete "SetSupportsRecordingsDelete" | @ref PVRCapabilities::GetSupportsRecordingsDelete "SetSupportsRecordingsDelete" - /// | **Recordings lifetime values** | @ref cpp_kodi_addon_pvr_Defs_PVRTypeIntValue "PVRTypeIntValue" | @ref PVRCapabilities::SetRecordingsLifetimeValues "SetRecordingsLifetimeValues" | @ref PVRCapabilities::GetRecordingsLifetimeValues "GetRecordingsLifetimeValues" - /// - /// @warning This class can not be used outside of @ref kodi::addon::CInstancePVRClient::GetCapabilities() - /// - - /// @addtogroup cpp_kodi_addon_pvr_Defs_PVRCapabilities - ///@{ - - /// @brief Set **true** if the add-on provides EPG information. - void SetSupportsEPG(bool supportsEPG) { m_capabilities->bSupportsEPG = supportsEPG; } - - /// @brief To get with @ref SetSupportsEPG changed values. - bool GetSupportsEPG() const { return m_capabilities->bSupportsEPG; } - - /// @brief Set **true** if the backend supports retrieving an edit decision - /// list for an EPG tag. - void SetSupportsEPGEdl(bool supportsEPGEdl) { m_capabilities->bSupportsEPGEdl = supportsEPGEdl; } - - /// @brief To get with @ref SetSupportsEPGEdl changed values. - bool GetSupportsEPGEdl() const { return m_capabilities->bSupportsEPGEdl; } - - /// @brief Set **true** if this add-on provides TV channels. - void SetSupportsTV(bool supportsTV) { m_capabilities->bSupportsTV = supportsTV; } - - /// @brief To get with @ref SetSupportsTV changed values. - bool GetSupportsTV() const { return m_capabilities->bSupportsTV; } - - /// @brief Set **true** if this add-on provides TV channels. - void SetSupportsRadio(bool supportsRadio) { m_capabilities->bSupportsRadio = supportsRadio; } - - /// @brief To get with @ref SetSupportsRadio changed values. - bool GetSupportsRadio() const { return m_capabilities->bSupportsRadio; } - - /// @brief **true** if this add-on supports playback of recordings stored on - /// the backend. - void SetSupportsRecordings(bool supportsRecordings) - { - m_capabilities->bSupportsRecordings = supportsRecordings; - } - - /// @brief To get with @ref SetSupportsRecordings changed values. - bool GetSupportsRecordings() const { return m_capabilities->bSupportsRecordings; } - - /// @brief Set **true** if this add-on supports undelete of recordings stored - /// on the backend. - void SetSupportsRecordingsUndelete(bool supportsRecordingsUndelete) - { - m_capabilities->bSupportsRecordingsUndelete = supportsRecordingsUndelete; - } - - /// @brief To get with @ref SetSupportsRecordings changed values. - bool GetSupportsRecordingsUndelete() const { return m_capabilities->bSupportsRecordingsUndelete; } - - /// @brief Set **true** if this add-on supports the creation and editing of - /// timers. - void SetSupportsTimers(bool supportsTimers) { m_capabilities->bSupportsTimers = supportsTimers; } - - /// @brief To get with @ref SetSupportsTimers changed values. - bool GetSupportsTimers() const { return m_capabilities->bSupportsTimers; } - - /// @brief Set **true** if this add-on supports providers. - /// - /// It uses the following functions: - /// - @ref kodi::addon::CInstancePVRClient::GetProvidersAmount() - /// - @ref kodi::addon::CInstancePVRClient::GetProviders() - void SetSupportsProviders(bool supportsProviders) - { - m_capabilities->bSupportsProviders = supportsProviders; - } - - /// @brief To get with @ref SetSupportsProviders changed values. - bool GetSupportsProviders() const { return m_capabilities->bSupportsProviders; } - - /// @brief Set **true** if this add-on supports channel groups. - /// - /// It use the following functions: - /// - @ref kodi::addon::CInstancePVRClient::GetChannelGroupsAmount() - /// - @ref kodi::addon::CInstancePVRClient::GetChannelGroups() - /// - @ref kodi::addon::CInstancePVRClient::GetChannelGroupMembers() - void SetSupportsChannelGroups(bool supportsChannelGroups) - { - m_capabilities->bSupportsChannelGroups = supportsChannelGroups; - } - - /// @brief To get with @ref SetSupportsChannelGroups changed values. - bool GetSupportsChannelGroups() const { return m_capabilities->bSupportsChannelGroups; } - - /// @brief Set **true** if this add-on support scanning for new channels on - /// the backend. - /// - /// It use the following function: - /// - @ref kodi::addon::CInstancePVRClient::OpenDialogChannelScan() - void SetSupportsChannelScan(bool supportsChannelScan) - { - m_capabilities->bSupportsChannelScan = supportsChannelScan; - } - - /// @brief To get with @ref SetSupportsChannelScan changed values. - bool GetSupportsChannelScan() const { return m_capabilities->bSupportsChannelScan; } - - /// @brief Set **true** if this add-on supports channel edit. - /// - /// It use the following functions: - /// - @ref kodi::addon::CInstancePVRClient::DeleteChannel() - /// - @ref kodi::addon::CInstancePVRClient::RenameChannel() - /// - @ref kodi::addon::CInstancePVRClient::OpenDialogChannelSettings() - /// - @ref kodi::addon::CInstancePVRClient::OpenDialogChannelAdd() - void SetSupportsChannelSettings(bool supportsChannelSettings) - { - m_capabilities->bSupportsChannelSettings = supportsChannelSettings; - } - - /// @brief To get with @ref SetSupportsChannelSettings changed values. - bool GetSupportsChannelSettings() const { return m_capabilities->bSupportsChannelSettings; } - - /// @brief Set **true** if this add-on provides an input stream. false if Kodi - /// handles the stream. - void SetHandlesInputStream(bool handlesInputStream) - { - m_capabilities->bHandlesInputStream = handlesInputStream; - } - - /// @brief To get with @ref SetHandlesInputStream changed values. - bool GetHandlesInputStream() const { return m_capabilities->bHandlesInputStream; } - - /// @brief Set **true** if this add-on demultiplexes packets. - void SetHandlesDemuxing(bool handlesDemuxing) - { - m_capabilities->bHandlesDemuxing = handlesDemuxing; - } - - /// @brief To get with @ref SetHandlesDemuxing changed values. - bool GetHandlesDemuxing() const { return m_capabilities->bHandlesDemuxing; } - - /// @brief Set **true** if the backend supports play count for recordings. - void SetSupportsRecordingPlayCount(bool supportsRecordingPlayCount) - { - m_capabilities->bSupportsRecordingPlayCount = supportsRecordingPlayCount; - } - - /// @brief To get with @ref SetSupportsRecordingPlayCount changed values. - bool GetSupportsRecordingPlayCount() const { return m_capabilities->bSupportsRecordingPlayCount; } - - /// @brief Set **true** if the backend supports store/retrieve of last played - /// position for recordings. - void SetSupportsLastPlayedPosition(bool supportsLastPlayedPosition) - { - m_capabilities->bSupportsLastPlayedPosition = supportsLastPlayedPosition; - } - - /// @brief To get with @ref SetSupportsLastPlayedPosition changed values. - bool GetSupportsLastPlayedPosition() const { return m_capabilities->bSupportsLastPlayedPosition; } - - /// @brief Set **true** if the backend supports retrieving an edit decision - /// list for recordings. - void SetSupportsRecordingEdl(bool supportsRecordingEdl) - { - m_capabilities->bSupportsRecordingEdl = supportsRecordingEdl; - } - - /// @brief To get with @ref SetSupportsRecordingEdl changed values. - bool GetSupportsRecordingEdl() const { return m_capabilities->bSupportsRecordingEdl; } - - /// @brief Set **true** if the backend supports renaming recordings. - void SetSupportsRecordingsRename(bool supportsRecordingsRename) - { - m_capabilities->bSupportsRecordingsRename = supportsRecordingsRename; - } - - /// @brief To get with @ref SetSupportsRecordingsRename changed values. - bool GetSupportsRecordingsRename() const { return m_capabilities->bSupportsRecordingsRename; } - - /// @brief Set **true** if the backend supports changing lifetime for - /// recordings. - void SetSupportsRecordingsLifetimeChange(bool supportsRecordingsLifetimeChange) - { - m_capabilities->bSupportsRecordingsLifetimeChange = supportsRecordingsLifetimeChange; - } - - /// @brief To get with @ref SetSupportsRecordingsLifetimeChange changed - /// values. - bool GetSupportsRecordingsLifetimeChange() const - { - return m_capabilities->bSupportsRecordingsLifetimeChange; - } - - /// @brief Set **true** if the backend supports descramble information for - /// playing channels. - void SetSupportsDescrambleInfo(bool supportsDescrambleInfo) - { - m_capabilities->bSupportsDescrambleInfo = supportsDescrambleInfo; - } - - /// @brief To get with @ref SetSupportsDescrambleInfo changed values. - bool GetSupportsDescrambleInfo() const { return m_capabilities->bSupportsDescrambleInfo; } - - /// @brief Set **true** if this addon-on supports asynchronous transfer of epg - /// events to Kodi using the callback function - /// @ref kodi::addon::CInstancePVRClient::EpgEventStateChange(). - void SetSupportsAsyncEPGTransfer(bool supportsAsyncEPGTransfer) - { - m_capabilities->bSupportsAsyncEPGTransfer = supportsAsyncEPGTransfer; - } - - /// @brief To get with @ref SetSupportsAsyncEPGTransfer changed values. - bool GetSupportsAsyncEPGTransfer() const { return m_capabilities->bSupportsAsyncEPGTransfer; } - - /// @brief Set **true** if this addon-on supports retrieving size of recordings. - void SetSupportsRecordingSize(bool supportsRecordingSize) - { - m_capabilities->bSupportsRecordingSize = supportsRecordingSize; - } - - /// @brief To get with @ref SetSupportsRecordingSize changed values. - bool GetSupportsRecordingSize() const { return m_capabilities->bSupportsRecordingSize; } - - /// @brief Set **true** if this add-on supports delete of recordings stored - /// on the backend. - void SetSupportsRecordingsDelete(bool supportsRecordingsDelete) - { - m_capabilities->bSupportsRecordingsDelete = supportsRecordingsDelete; - } - - /// @brief To get with @ref SetSupportsRecordingsDelete changed values. - bool GetSupportsRecordingsDelete() const { return m_capabilities->bSupportsRecordingsDelete; } - - /// @brief **optional**\n - /// Set array containing the possible values for @ref PVRRecording::SetLifetime(). - /// - /// -------------------------------------------------------------------------- - /// - /// @copydetails cpp_kodi_addon_pvr_Defs_PVRTypeIntValue_Help - void SetRecordingsLifetimeValues( - const std::vector& recordingsLifetimeValues) - { - m_capabilities->iRecordingsLifetimesSize = 0; - for (unsigned int i = 0; i < recordingsLifetimeValues.size() && - i < sizeof(m_capabilities->recordingsLifetimeValues); - ++i) - { - m_capabilities->recordingsLifetimeValues[i].iValue = - recordingsLifetimeValues[i].GetCStructure()->iValue; - strncpy(m_capabilities->recordingsLifetimeValues[i].strDescription, - recordingsLifetimeValues[i].GetCStructure()->strDescription, - sizeof(m_capabilities->recordingsLifetimeValues[i].strDescription) - 1); - ++m_capabilities->iRecordingsLifetimesSize; - } - } - - /// @brief To get with @ref SetRecordingsLifetimeValues changed values. - std::vector GetRecordingsLifetimeValues() const - { - std::vector recordingsLifetimeValues; - for (unsigned int i = 0; i < m_capabilities->iRecordingsLifetimesSize; ++i) - recordingsLifetimeValues.emplace_back( - m_capabilities->recordingsLifetimeValues[i].iValue, - m_capabilities->recordingsLifetimeValues[i].strDescription); - return recordingsLifetimeValues; - } - ///@} - -private: - PVRCapabilities(PVR_ADDON_CAPABILITIES* capabilities) : m_capabilities(capabilities) {} - - PVR_ADDON_CAPABILITIES* m_capabilities; -}; -///@} -//------------------------------------------------------------------------------ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty class PVRStreamProperty -/// @ingroup cpp_kodi_addon_pvr_Defs_General_Inputstream -/// @brief **PVR stream property value handler**\n -/// To set for Kodi wanted stream properties. -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty_Help -/// -///--------------------------------------------------------------------------- -/// -/// **Example:** -/// ~~~~~~~~~~~~~{.cpp} -/// ... -/// -/// PVR_ERROR CMyPVRInstance::GetChannelStreamProperties(const kodi::addon::PVRChannel& channel, -/// std::vector& properties) -/// { -/// ... -/// properties.emplace_back(PVR_STREAM_PROPERTY_INPUTSTREAM, "inputstream.adaptive"); -/// return PVR_ERROR_NO_ERROR; -/// } -/// -/// ... -/// ~~~~~~~~~~~~~ -/// -/// -/// **Example 2:** -/// ~~~~~~~~~~~~~{.cpp} -/// ... -/// -/// PVR_ERROR CMyPVRInstance::GetChannelStreamProperties(const kodi::addon::PVRChannel& channel, -/// std::vector& properties) -/// { -/// ... -/// kodi::addon::PVRStreamProperty property; -/// property.SetName(PVR_STREAM_PROPERTY_INPUTSTREAM); -/// property.SetValue("inputstream.adaptive"); -/// properties.emplace_back(property); -/// return PVR_ERROR_NO_ERROR; -/// } -/// -/// ... -/// ~~~~~~~~~~~~~ -/// -///@{ -class PVRStreamProperty : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVRStreamProperty(const PVRStreamProperty& data) : CStructHdl(data) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Name** | `int` | @ref PVRStreamProperty::SetValue "SetName" | @ref PVRStreamProperty::GetName "GetName" - /// | **Value** | `std::string` | @ref PVRStreamProperty::SetValue "SetValue" | @ref PVRStreamProperty::GetValue "GetValue" - /// - /// @remark Further can there be used his class constructor to set values. - - /// @addtogroup cpp_kodi_addon_pvr_Defs_General_Inputstream_PVRStreamProperty - ///@{ - - /// @brief Default class constructor. - /// - /// @note Values must be set afterwards. - PVRStreamProperty() = default; - - /// @brief Class constructor with integrated value set. - /// - /// @param[in] name Type identification - /// @param[in] value Type used property value - PVRStreamProperty(const std::string& name, const std::string& value) - { - SetName(name); - SetValue(value); - } - - /// @brief To set with the identification name. - void SetName(const std::string& name) - { - strncpy(m_cStructure->strName, name.c_str(), sizeof(m_cStructure->strName) - 1); - } - - /// @brief To get with the identification name. - std::string GetName() const { return m_cStructure->strName; } - - /// @brief To set with the used property value. - void SetValue(const std::string& value) - { - strncpy(m_cStructure->strValue, value.c_str(), sizeof(m_cStructure->strValue) - 1); - } - - /// @brief To get with the used property value. - std::string GetValue() const { return m_cStructure->strValue; } - ///@} - -private: - PVRStreamProperty(const PVR_NAMED_VALUE* data) : CStructHdl(data) {} - PVRStreamProperty(PVR_NAMED_VALUE* data) : CStructHdl(data) {} -}; -///@} -//------------------------------------------------------------------------------ - -} /* namespace addon */ -} /* namespace kodi */ - -#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/MenuHook.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/MenuHook.h deleted file mode 100644 index 053a4d5cf1269..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/MenuHook.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../AddonBase.h" -#include "../../c-api/addon-instance/pvr/pvr_menu_hook.h" - -//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -// "C++" Definitions group 7 - Menu hook -#ifdef __cplusplus - -namespace kodi -{ -namespace addon -{ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook class PVRMenuhook -/// @ingroup cpp_kodi_addon_pvr_Defs_Menuhook -/// @brief **Context menu hook**\n -/// Menu hooks that are available in the context menus while playing a stream via this add-on. -/// And in the Live TV settings dialog. -/// -/// Possible menu's given to Kodi. -/// -/// This can be becomes used on this, if @ref kodi::addon::CInstancePVRClient::AddMenuHook() -/// was set to related type: -/// - @ref kodi::addon::CInstancePVRClient::CallSettingsMenuHook() -/// - @ref kodi::addon::CInstancePVRClient::CallChannelMenuHook() -/// - @ref kodi::addon::CInstancePVRClient::CallEPGMenuHook() -/// - @ref kodi::addon::CInstancePVRClient::CallRecordingMenuHook() -/// - @ref kodi::addon::CInstancePVRClient::CallTimerMenuHook() -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook_Help -/// -///@{ -class PVRMenuhook : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /// @addtogroup cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook - /// @brief Optional class constructor with value set. - /// - /// @param[in] hookId This hook's identifier - /// @param[in] localizedStringId Localized string identifier - /// @param[in] category Category of menu hook, defined with @ref PVR_MENUHOOK_CAT - /// - /// - /// -------------------------------------------------------------------------- - /// - /// Example: - /// ~~~~~~~~~~~~~{.cpp} - /// AddMenuHook(kodi::addon::PVRMenuhook(1, 30001, PVR_MENUHOOK_CHANNEL)); - /// ~~~~~~~~~~~~~ - /// - PVRMenuhook(unsigned int hookId, unsigned int localizedStringId, PVR_MENUHOOK_CAT category) - { - m_cStructure->iHookId = hookId; - m_cStructure->iLocalizedStringId = localizedStringId; - m_cStructure->category = category; - } - - /*! \cond PRIVATE */ - PVRMenuhook() - { - m_cStructure->iHookId = 0; - m_cStructure->iLocalizedStringId = 0; - m_cStructure->category = PVR_MENUHOOK_UNKNOWN; - } - PVRMenuhook(const PVRMenuhook& data) : CStructHdl(data) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook : - /// | Name | Type | Set call | Get call | Usage - /// |------|------|----------|----------|----------- - /// | **This hook's identifier** | `unsigned int` | @ref PVRMenuhook::SetHookId "SetHookId" | @ref PVRMenuhook::GetHookId "GetHookId" | *required to set* - /// | **Localized string Identifier** | `unsigned int` | @ref PVRMenuhook::SetLocalizedStringId "SetLocalizedStringId" | @ref PVRMenuhook::GetLocalizedStringId "GetLocalizedStringId" | *required to set* - /// | **Category of menu hook** | @ref PVR_MENUHOOK_CAT | @ref PVRMenuhook::SetCategory "SetCategory" | @ref PVRMenuhook::GetCategory "GetCategory" | *required to set* - - /// @addtogroup cpp_kodi_addon_pvr_Defs_Menuhook_PVRMenuhook - ///@{ - - /// @brief **required**\n - /// This hook's identifier. - void SetHookId(unsigned int hookId) { m_cStructure->iHookId = hookId; } - - /// @brief To get with @ref SetHookId() changed values. - unsigned int GetHookId() const { return m_cStructure->iHookId; } - - /// @brief **required**\n - /// The id of the label for this hook in @ref kodi::GetLocalizedString(). - void SetLocalizedStringId(unsigned int localizedStringId) - { - m_cStructure->iLocalizedStringId = localizedStringId; - } - - /// @brief To get with @ref SetLocalizedStringId() changed values. - unsigned int GetLocalizedStringId() const { return m_cStructure->iLocalizedStringId; } - - /// @brief **required**\n - /// Category of menu hook. - void SetCategory(PVR_MENUHOOK_CAT category) { m_cStructure->category = category; } - - /// @brief To get with @ref SetCategory() changed values. - PVR_MENUHOOK_CAT GetCategory() const { return m_cStructure->category; } - ///@} - -private: - PVRMenuhook(const PVR_MENUHOOK* data) : CStructHdl(data) {} - PVRMenuhook(PVR_MENUHOOK* data) : CStructHdl(data) {} -}; -///@} -//------------------------------------------------------------------------------ - -} /* namespace addon */ -} /* namespace kodi */ - -#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/Stream.h b/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/Stream.h deleted file mode 100644 index 4241c233f5be8..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/addon-instance/pvr/Stream.h +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright (C) 2005-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../AddonBase.h" -#include "../../c-api/addon-instance/pvr/pvr_stream.h" - -//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -// "C++" Definitions group 9 - PVR stream definitions (NOTE: Becomes replaced -// in future by inputstream addon instance way) - -#ifdef __cplusplus - -namespace kodi -{ -namespace addon -{ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRCodec class PVRCodec -/// @ingroup cpp_kodi_addon_pvr_Defs_Stream -/// @brief **PVR codec identifier**\n -/// Used to exchange the desired codec type between Kodi and addon. -/// -/// @ref kodi::addon::CInstancePVRClient::GetCodecByName is used to get this data. -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_Stream_PVRCodec_Help -/// -///@{ -class PVRCodec : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVRCodec() - { - m_cStructure->codec_type = PVR_CODEC_TYPE_UNKNOWN; - m_cStructure->codec_id = PVR_INVALID_CODEC_ID; - } - PVRCodec(const PVRCodec& type) : CStructHdl(type) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRCodec_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_Stream_PVRCodec - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_Stream_PVRCodec : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Codec type** | @ref PVR_CODEC_TYPE | @ref PVRCodec::SetCodecType "SetCodecType" | @ref PVRCodec::GetCodecType "GetCodecType" - /// | **Codec identifier** | `unsigned int` | @ref PVRCodec::SetCodecId "SetCodecId" | @ref PVRCodec::GetCodecId "GetCodecId" - /// - - /// @addtogroup cpp_kodi_addon_pvr_Defs_Stream_PVRCodec - ///@{ - - /// @brief Codec type. - void SetCodecType(PVR_CODEC_TYPE codecType) { m_cStructure->codec_type = codecType; } - - /// @brief To get with @ref SetCodecType() changed values. - PVR_CODEC_TYPE GetCodecType() const { return m_cStructure->codec_type; } - - /// @brief Codec id. - /// - /// Related codec identifier, normally match the ffmpeg id's. - void SetCodecId(unsigned int codecId) { m_cStructure->codec_id = codecId; } - - /// @brief To get with @ref SetCodecId() changed values. - unsigned int GetCodecId() const { return m_cStructure->codec_id; } - ///@} - -private: - PVRCodec(const PVR_CODEC& type) : CStructHdl(&type) {} - PVRCodec(const PVR_CODEC* type) : CStructHdl(type) {} - PVRCodec(PVR_CODEC* type) : CStructHdl(type) {} -}; -///@} -//------------------------------------------------------------------------------ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties class PVRStreamProperties -/// @ingroup cpp_kodi_addon_pvr_Defs_Stream -/// @brief **PVR stream properties**\n -/// All information about a respective stream is stored in this, so that Kodi -/// can process the data given by the addon after demux. -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties_Help -/// -///@{ -class PVRStreamProperties - : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVRStreamProperties() { memset(m_cStructure, 0, sizeof(PVR_STREAM_PROPERTIES::PVR_STREAM)); } - PVRStreamProperties(const PVRStreamProperties& type) : CStructHdl(type) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties - /// ---------------------------------------------------------------------------- - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **PID** | `unsigned int` | @ref PVRStreamProperties::SetPID "SetPID" | @ref PVRStreamProperties::GetPID "GetPID" - /// | **Codec type** | @ref PVR_CODEC_TYPE | @ref PVRStreamProperties::SetCodecType "SetCodecType" | @ref PVRStreamProperties::GetCodecType "GetCodecType" - /// | **Codec identifier** | `unsigned int` | @ref PVRStreamProperties::SetCodecId "SetCodecId" | @ref PVRStreamProperties::GetCodecId "GetCodecId" - /// | **Language** | `std::string` | @ref PVRStreamProperties::SetLanguage "SetLanguage" | @ref PVRStreamProperties::GetLanguage "GetLanguage" - /// | **Subtitle info** | `int` | @ref PVRStreamProperties::SetSubtitleInfo "SetSubtitleInfo" | @ref PVRStreamProperties::GetSubtitleInfo "GetSubtitleInfo" - /// | **FPS scale** | `int` | @ref PVRStreamProperties::SetFPSScale "SetFPSScale" | @ref PVRStreamProperties::GetFPSScale "GetFPSScale" - /// | **FPS rate** | `int` | @ref PVRStreamProperties::SetFPSRate "SetFPSRate" | @ref PVRStreamProperties::GetFPSRate "GetFPSRate" - /// | **Height** | `int` | @ref PVRStreamProperties::SetHeight "SetHeight" | @ref PVRStreamProperties::GetHeight "GetHeight" - /// | **Width** | `int` | @ref PVRStreamProperties::SetWidth "SetWidth" | @ref PVRStreamProperties::GetWidth "GetWidth" - /// | **Aspect ratio** | `float` | @ref PVRStreamProperties::SetAspect "SetAspect" | @ref PVRStreamProperties::GetAspect "GetAspect" - /// | **Channels** | `int` | @ref PVRStreamProperties::SetChannels "SetChannels" | @ref PVRStreamProperties::GetChannels "GetChannels" - /// | **Samplerate** | `int` | @ref PVRStreamProperties::SetSampleRate "SetSampleRate" | @ref PVRStreamProperties::GetSampleRate "GetSampleRate" - /// | **Block align** | `int` | @ref PVRStreamProperties::SetBlockAlign "SetBlockAlign" | @ref PVRStreamProperties::GetBlockAlign "GetBlockAlign" - /// | **Bit rate** | `int` | @ref PVRStreamProperties::SetBitRate "SetBitRate" | @ref PVRStreamProperties::GetBitRate "GetBitRate" - /// | **Bits per sample** | `int` | @ref PVRStreamProperties::SetBitsPerSample "SetBitsPerSample" | @ref PVRStreamProperties::GetBitsPerSample "GetBitsPerSample" - /// - - /// @addtogroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamProperties - ///@{ - - /// @brief PID. - void SetPID(unsigned int pid) { m_cStructure->iPID = pid; } - - /// @brief To get with @ref SetPID() changed values. - unsigned int GetPID() const { return m_cStructure->iPID; } - - /// @brief Codec type this stream. - void SetCodecType(PVR_CODEC_TYPE codecType) { m_cStructure->iCodecType = codecType; } - - /// @brief To get with @ref SetCodecType() changed values. - PVR_CODEC_TYPE GetCodecType() const { return m_cStructure->iCodecType; } - - /// @brief Codec id of this stream. - void SetCodecId(unsigned int codecId) { m_cStructure->iCodecId = codecId; } - - /// @brief To get with @ref SetCodecId() changed values. - unsigned int GetCodecId() const { return m_cStructure->iCodecId; } - - /// @brief 3 letter language id. - void SetLanguage(const std::string& language) - { - if (language.size() > 3) - { - kodi::Log(ADDON_LOG_ERROR, - "PVRStreamProperties::%s: Language string size '%li' higher as needed 3", __func__, - language.size()); - return; - } - m_cStructure->strLanguage[0] = language[0]; - m_cStructure->strLanguage[1] = language[1]; - m_cStructure->strLanguage[2] = language[2]; - m_cStructure->strLanguage[3] = 0; - } - - /// @brief To get with @ref SetLanguage() changed values. - std::string GetLanguage() const { return m_cStructure->strLanguage; } - - /// @brief Subtitle Info - void SetSubtitleInfo(int subtitleInfo) { m_cStructure->iSubtitleInfo = subtitleInfo; } - - /// @brief To get with @ref SetSubtitleInfo() changed values. - int GetSubtitleInfo() const { return m_cStructure->iSubtitleInfo; } - - /// @brief To set scale of 1000 and a rate of 29970 will result in 29.97 fps. - void SetFPSScale(int fpsScale) { m_cStructure->iFPSScale = fpsScale; } - - /// @brief To get with @ref SetFPSScale() changed values. - int GetFPSScale() const { return m_cStructure->iFPSScale; } - - /// @brief FPS rate - void SetFPSRate(int fpsRate) { m_cStructure->iFPSRate = fpsRate; } - - /// @brief To get with @ref SetFPSRate() changed values. - int GetFPSRate() const { return m_cStructure->iFPSRate; } - - /// @brief Height of the stream reported by the demuxer - void SetHeight(int height) { m_cStructure->iHeight = height; } - - /// @brief To get with @ref SetHeight() changed values. - int GetHeight() const { return m_cStructure->iHeight; } - - /// @brief Width of the stream reported by the demuxer. - void SetWidth(int width) { m_cStructure->iWidth = width; } - - /// @brief To get with @ref SetWidth() changed values. - int GetWidth() const { return m_cStructure->iWidth; } - - /// @brief Display aspect ratio of the stream. - void SetAspect(float aspect) { m_cStructure->fAspect = aspect; } - - /// @brief To get with @ref SetAspect() changed values. - float GetAspect() const { return m_cStructure->fAspect; } - - /// @brief Amount of channels. - void SetChannels(int channels) { m_cStructure->iChannels = channels; } - - /// @brief To get with @ref SetChannels() changed values. - int GetChannels() const { return m_cStructure->iChannels; } - - /// @brief Sample rate. - void SetSampleRate(int sampleRate) { m_cStructure->iSampleRate = sampleRate; } - - /// @brief To get with @ref SetSampleRate() changed values. - int GetSampleRate() const { return m_cStructure->iSampleRate; } - - /// @brief Block alignment - void SetBlockAlign(int blockAlign) { m_cStructure->iBlockAlign = blockAlign; } - - /// @brief To get with @ref SetBlockAlign() changed values. - int GetBlockAlign() const { return m_cStructure->iBlockAlign; } - - /// @brief Bit rate. - void SetBitRate(int bitRate) { m_cStructure->iBitRate = bitRate; } - - /// @brief To get with @ref SetBitRate() changed values. - int GetBitRate() const { return m_cStructure->iBitRate; } - - /// @brief Bits per sample. - void SetBitsPerSample(int bitsPerSample) { m_cStructure->iBitsPerSample = bitsPerSample; } - - /// @brief To get with @ref SetBitsPerSample() changed values. - int GetBitsPerSample() const { return m_cStructure->iBitsPerSample; } - ///@} - -private: - PVRStreamProperties(const PVR_STREAM_PROPERTIES::PVR_STREAM* type) : CStructHdl(type) {} - PVRStreamProperties(PVR_STREAM_PROPERTIES::PVR_STREAM* type) : CStructHdl(type) {} -}; -///@} -//------------------------------------------------------------------------------ - -//============================================================================== -/// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes class PVRStreamTimes -/// @ingroup cpp_kodi_addon_pvr_Defs_Stream -/// @brief **Times of playing stream (Live TV and recordings)**\n -/// This class is used to transfer the necessary data when -/// @ref kodi::addon::PVRStreamProperties::GetStreamTimes is called. -/// -/// ---------------------------------------------------------------------------- -/// -/// @copydetails cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes_Help -/// -///@{ -class PVRStreamTimes : public CStructHdl -{ - friend class CInstancePVRClient; - -public: - /*! \cond PRIVATE */ - PVRStreamTimes() { memset(m_cStructure, 0, sizeof(PVR_STREAM_TIMES)); } - PVRStreamTimes(const PVRStreamTimes& type) : CStructHdl(type) {} - /*! \endcond */ - - /// @defgroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes_Help Value Help - /// @ingroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes - /// ---------------------------------------------------------------------------- - /// - /// The following table contains values that can be set with @ref cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes : - /// | Name | Type | Set call | Get call - /// |------|------|----------|---------- - /// | **Start time** | `time_t` | @ref PVRStreamTimes::SetStartTime "SetStartTime" | @ref PVRStreamTimes::GetStartTime "GetStartTime" - /// | **PTS start** | `int64_t` | @ref PVRStreamTimes::SetPTSStart "SetPTSStart" | @ref PVRStreamTimes::GetPTSStart "GetPTSStart" - /// | **PTS begin** | `int64_t` | @ref PVRStreamTimes::SetPTSBegin "SetPTSBegin" | @ref PVRStreamTimes::GetPTSBegin "GetPTSBegin" - /// | **PTS end** | `int64_t` | @ref PVRStreamTimes::SetPTSEnd "SetPTSEnd" | @ref PVRStreamTimes::GetPTSEnd "GetPTSEnd" - /// - - /// @addtogroup cpp_kodi_addon_pvr_Defs_Stream_PVRStreamTimes - ///@{ - - /// @brief For recordings, this must be zero. For Live TV, this is a reference - /// time in units of time_t (UTC) from which time elapsed starts. Ideally start - /// of tv show, but can be any other value. - void SetStartTime(time_t startTime) { m_cStructure->startTime = startTime; } - - /// @brief To get with @ref SetStartTime() changed values. - time_t GetStartTime() const { return m_cStructure->startTime; } - - /// @brief The pts of startTime. - void SetPTSStart(int64_t ptsStart) { m_cStructure->ptsStart = ptsStart; } - - /// @brief To get with @ref SetPTSStart() changed values. - int64_t GetPTSStart() const { return m_cStructure->ptsStart; } - - /// @brief Earliest pts player can seek back. Value is in micro seconds, - /// relative to PTS start. For recordings, this must be zero. For Live TV, this - /// must be zero if not timeshifting and must point to begin of the timeshift - /// buffer, otherwise. - void SetPTSBegin(int64_t ptsBegin) { m_cStructure->ptsBegin = ptsBegin; } - - /// @brief To get with @ref SetPTSBegin() changed values. - int64_t GetPTSBegin() const { return m_cStructure->ptsBegin; } - - /// @brief Latest pts player can seek forward. Value is in micro seconds, - /// relative to PTS start. For recordings, this must be the total length. For - /// Live TV, this must be zero if not timeshifting and must point to end of - /// the timeshift buffer, otherwise. - void SetPTSEnd(int64_t ptsEnd) { m_cStructure->ptsEnd = ptsEnd; } - - /// @brief To get with @ref SetPTSEnd() changed values. - int64_t GetPTSEnd() const { return m_cStructure->ptsEnd; } - ///@} - -private: - PVRStreamTimes(const PVR_STREAM_TIMES* type) : CStructHdl(type) {} - PVRStreamTimes(PVR_STREAM_TIMES* type) : CStructHdl(type) {} -}; -///@} -//------------------------------------------------------------------------------ - -} /* namespace addon */ -} /* namespace kodi */ - -#endif /* __cplusplus */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/CMakeLists.txt index a7dd1d336ba8d..13ddea8d7d6f1 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/CMakeLists.txt @@ -6,7 +6,9 @@ set(HEADERS audio_engine.h filesystem.h general.h + monitor.h network.h + version.h ) if(HEADERS) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/CMakeLists.txt index 52670ebfbd36b..fd11ddf7b566d 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/CMakeLists.txt @@ -11,7 +11,7 @@ set(HEADERS pvr.h screensaver.h vfs.h - video_codec.h + videocodec.h visualization.h ) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audiodecoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audiodecoder.h index 6eb5520792236..213e2c9c79e73 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audiodecoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audiodecoder.h @@ -45,7 +45,9 @@ extern "C" { #endif /* __cplusplus */ - typedef void* KODI_ADDON_AUDIODECODER_HDL; +#if __KODI_API__ >= 1 + + typedef KODI_ADDON_INSTANCE_HDL KODI_ADDON_AUDIODECODER_HDL; //============================================================================ /// @defgroup cpp_kodi_addon_audiodecoder_Defs_AUDIODECODER_READ_RETURN enum AUDIODECODER_READ_RETURN @@ -123,26 +125,19 @@ extern "C" typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_TRACK_COUNT_V1)( const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file); - typedef struct AddonToKodiFuncTable_AudioDecoder - { - KODI_HANDLE kodiInstance; - } AddonToKodiFuncTable_AudioDecoder; - - typedef struct KodiToAddonFuncTable_AudioDecoder + typedef struct KODI_ADDON_AUDIODECODER_FUNC { + PFN_KODI_ADDON_INSTANCE_CREATE_V1 create; + PFN_KODI_ADDON_INSTANCE_DESTROY_V1 destroy; PFN_KODI_ADDON_AUDIODECODER_SUPPORTS_FILE_V1 supports_file; PFN_KODI_ADDON_AUDIODECODER_INIT_V1 init; PFN_KODI_ADDON_AUDIODECODER_READ_PCM_V1 read_pcm; PFN_KODI_ADDON_AUDIODECODER_SEEK_V1 seek; PFN_KODI_ADDON_AUDIODECODER_READ_TAG_V1 read_tag; PFN_KODI_ADDON_AUDIODECODER_TRACK_COUNT_V1 track_count; - } KodiToAddonFuncTable_AudioDecoder; + } KODI_ADDON_AUDIODECODER_FUNC; - typedef struct AddonInstance_AudioDecoder - { - struct AddonToKodiFuncTable_AudioDecoder* toKodi; - struct KodiToAddonFuncTable_AudioDecoder* toAddon; - } AddonInstance_AudioDecoder; +#endif /* __KODI_API__ >= 1 */ #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audioencoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audioencoder.h index d00ced6e736eb..1cb833bba5de6 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audioencoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/audioencoder.h @@ -6,16 +6,20 @@ * See LICENSES/README.md for more information. */ -#ifndef C_API_ADDONINSTANCE_AUDIO_ENCODER_H -#define C_API_ADDONINSTANCE_AUDIO_ENCODER_H +#ifndef C_API_ADDONINSTANCE_AUDIOENCODER_H +#define C_API_ADDONINSTANCE_AUDIOENCODER_H #include "../addon_base.h" +#include + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +#if __KODI_API__ >= 1 + typedef void* KODI_ADDON_AUDIOENCODER_HDL; struct KODI_ADDON_AUDIOENCODER_INFO_TAG @@ -40,6 +44,10 @@ extern "C" const char* comment; }; + typedef KODI_ADDON_AUDIOENCODER_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_DESTROY_V1)( + KODI_ADDON_AUDIOENCODER_HDL hdl); typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_START_V1)( KODI_ADDON_AUDIOENCODER_HDL hdl, const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag); typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_ENCODE_V1)( @@ -47,28 +55,26 @@ extern "C" typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_FINISH_V1)( KODI_ADDON_AUDIOENCODER_HDL hdl); - typedef struct AddonToKodiFuncTable_AudioEncoder - { - KODI_HANDLE kodiInstance; - ssize_t (*write)(KODI_HANDLE kodiInstance, const uint8_t* data, size_t len); - ssize_t (*seek)(KODI_HANDLE kodiInstance, ssize_t pos, int whence); - } AddonToKodiFuncTable_AudioEncoder; - - typedef struct KodiToAddonFuncTable_AudioEncoder + typedef struct KODI_ADDON_AUDIOENCODER_FUNC { + PFN_KODI_ADDON_AUDIOENCODER_CREATE_V1 create; + PFN_KODI_ADDON_AUDIOENCODER_DESTROY_V1 destroy; PFN_KODI_ADDON_AUDIOENCODER_START_V1 start; PFN_KODI_ADDON_AUDIOENCODER_ENCODE_V1 encode; PFN_KODI_ADDON_AUDIOENCODER_FINISH_V1 finish; - } KodiToAddonFuncTable_AudioEncoder; + } KODI_ADDON_AUDIOENCODER_FUNC; - typedef struct AddonInstance_AudioEncoder - { - struct AddonToKodiFuncTable_AudioEncoder* toKodi; - struct KodiToAddonFuncTable_AudioEncoder* toAddon; - } AddonInstance_AudioEncoder; + ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_write(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const uint8_t* data, + size_t len) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_seek(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + ssize_t pos, + int whence) __INTRODUCED_IN_KODI(1); + +#endif /* __KODI_API__ >= 1 */ #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ -#endif /* !C_API_ADDONINSTANCE_AUDIO_ENCODER_H */ +#endif /* !C_API_ADDONINSTANCE_AUDIOENCODER_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/game.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/game.h index ff4347571e053..1073b038485dd 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/game.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/game.h @@ -1,17 +1,20 @@ /* - * Copyright (C) 2014-2020 Team Kodi + * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ +/*---AUTO_GEN_PARSE---*/ + #ifndef C_API_ADDONINSTANCE_GAME_H #define C_API_ADDONINSTANCE_GAME_H #include "../addon_base.h" -#include /* size_t */ +#include +#include //============================================================================== /// @ingroup cpp_kodi_addon_game_Defs @@ -24,526 +27,200 @@ extern "C" { #endif /* __cplusplus */ - //============================================================================ - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **Game add-on error codes** - /// - /// Used as return values on most Game related functions. - /// + typedef void* KODI_ADDON_GAME_HDL; + typedef enum GAME_ERROR { - /// @brief no error occurred GAME_ERROR_NO_ERROR, - - /// @brief an unknown error occurred GAME_ERROR_UNKNOWN, - - /// @brief the method that the frontend called is not implemented GAME_ERROR_NOT_IMPLEMENTED, - - /// @brief the command was rejected by the game client GAME_ERROR_REJECTED, - - /// @brief the parameters of the method that was called are invalid for this operation GAME_ERROR_INVALID_PARAMETERS, - - /// @brief the command failed GAME_ERROR_FAILED, - - /// @brief no game is loaded GAME_ERROR_NOT_LOADED, - - /// @brief game requires restricted resources GAME_ERROR_RESTRICTED, } GAME_ERROR; - //---------------------------------------------------------------------------- - - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_AudioStream 1. Audio stream - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **The for Audio stream used data system** - /// - /// Used to give Addon currently used audio stream configuration on Kodi and - /// arrays to give related data to Kodi on callbacks. - /// - ///@{ - //============================================================================ - /// @brief **Stream Format** - /// - /// From Kodi requested specified audio sample format. - /// typedef enum GAME_PCM_FORMAT { GAME_PCM_FORMAT_UNKNOWN, - - /// @brief S16NE sample format GAME_PCM_FORMAT_S16NE, } GAME_PCM_FORMAT; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Audio channel** - /// - /// Channel identification flags. - /// typedef enum GAME_AUDIO_CHANNEL { - /// @brief Channel list terminator GAME_CH_NULL, - - /// @brief Channel front left GAME_CH_FL, - - /// @brief Channel front right GAME_CH_FR, - - /// @brief Channel front center GAME_CH_FC, - - /// @brief Channel Low Frequency Effects / Subwoofer GAME_CH_LFE, - - /// @brief Channel back left GAME_CH_BL, - - /// @brief Channel back right GAME_CH_BR, - - /// @brief Channel front left over center GAME_CH_FLOC, - - /// @brief Channel front right over center GAME_CH_FROC, - - /// @brief Channel back center GAME_CH_BC, - - /// @brief Channel surround/side left GAME_CH_SL, - - /// @brief Channel surround/side right GAME_CH_SR, - - /// @brief Channel top front left GAME_CH_TFL, - - /// @brief Channel top front right GAME_CH_TFR, - - /// @brief Channel top front center GAME_CH_TFC, - - /// @brief Channel top center GAME_CH_TC, - - /// @brief Channel top back left GAME_CH_TBL, - - /// @brief Channel top back right GAME_CH_TBR, - - /// @brief Channel top back center GAME_CH_TBC, - - /// @brief Channel bacl left over center GAME_CH_BLOC, - - /// @brief Channel back right over center GAME_CH_BROC, } GAME_AUDIO_CHANNEL; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Game audio stream properties** - /// - /// Used by Kodi to pass the currently required audio stream settings to the addon - /// typedef struct game_stream_audio_properties { - GAME_PCM_FORMAT format; - const GAME_AUDIO_CHANNEL* channel_map; - } ATTR_PACKED game_stream_audio_properties; + enum GAME_PCM_FORMAT format; + const enum GAME_AUDIO_CHANNEL* channel_map; + } game_stream_audio_properties; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Audio stream packet** - /// - /// This packet contains audio stream data passed to Kodi. - /// typedef struct game_stream_audio_packet { - /// @brief Pointer for audio stream data given to Kodi const uint8_t* data; - - /// @brief Size of data array size_t size; - } ATTR_PACKED game_stream_audio_packet; + } game_stream_audio_packet; //---------------------------------------------------------------------------- ///@} - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_VideoStream 2. Video stream - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **The for Video stream used data system** - /// - /// Used to give Addon currently used video stream configuration on Kodi and - /// arrays to give related data to Kodi on callbacks. - /// - ///@{ - - //============================================================================ - /// @brief **Pixel format** - /// - /// From Kodi requested specified video RGB color model format. - /// typedef enum GAME_PIXEL_FORMAT { GAME_PIXEL_FORMAT_UNKNOWN, - - /// @brief 0RGB8888 Format GAME_PIXEL_FORMAT_0RGB8888, - - /// @brief RGB565 Format GAME_PIXEL_FORMAT_RGB565, - - /// @brief 0RGB1555 Format GAME_PIXEL_FORMAT_0RGB1555, } GAME_PIXEL_FORMAT; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Video rotation position** - /// - /// To define position how video becomes shown. - /// typedef enum GAME_VIDEO_ROTATION { - /// @brief 0° and Without rotation GAME_VIDEO_ROTATION_0, - - /// @brief rotate 90° counterclockwise GAME_VIDEO_ROTATION_90_CCW, - - /// @brief rotate 180° counterclockwise GAME_VIDEO_ROTATION_180_CCW, - - /// @brief rotate 270° counterclockwise GAME_VIDEO_ROTATION_270_CCW, } GAME_VIDEO_ROTATION; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Game video stream properties** - /// - /// Used by Kodi to pass the currently required video stream settings to the addon - /// typedef struct game_stream_video_properties { - /// @brief The stream's pixel format - GAME_PIXEL_FORMAT format; - - /// @brief The nominal used width + enum GAME_PIXEL_FORMAT format; unsigned int nominal_width; - - /// @brief The nominal used height unsigned int nominal_height; - - /// @brief The maximal used width unsigned int max_width; - - /// @brief The maximal used height unsigned int max_height; - - /// @brief On video stream used aspect ration - /// - /// @note If aspect_ratio is <= 0.0, an aspect ratio of nominal_width / nominal_height is assumed float aspect_ratio; - } ATTR_PACKED game_stream_video_properties; + } game_stream_video_properties; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Video stream packet** - /// - /// This packet contains video stream data passed to Kodi. - /// typedef struct game_stream_video_packet { - /// @brief Video height unsigned int width; - - /// @brief Video width unsigned int height; - - /// @brief Width @ref GAME_VIDEO_ROTATION defined rotation angle. - GAME_VIDEO_ROTATION rotation; - - /// @brief Pointer for video stream data given to Kodi + enum GAME_VIDEO_ROTATION rotation; const uint8_t* data; - - /// @brief Size of data array size_t size; - } ATTR_PACKED game_stream_video_packet; + } game_stream_video_packet; //---------------------------------------------------------------------------- ///@} - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_HardwareFramebuffer 3. Hardware framebuffer stream - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **Hardware framebuffer stream data** - /// - ///@{ - - //============================================================================ - /// @brief **Hardware framebuffer type** - /// typedef enum GAME_HW_CONTEXT_TYPE { - /// @brief None context GAME_HW_CONTEXT_NONE, - - /// @brief OpenGL 2.x. Driver can choose to use latest compatibility context GAME_HW_CONTEXT_OPENGL, - - /// @brief OpenGL ES 2.0 GAME_HW_CONTEXT_OPENGLES2, - - /// @brief Modern desktop core GL context. Use major/minor fields to set GL version GAME_HW_CONTEXT_OPENGL_CORE, - - /// @brief OpenGL ES 3.0 GAME_HW_CONTEXT_OPENGLES3, - - /// @brief OpenGL ES 3.1+. Set major/minor fields. GAME_HW_CONTEXT_OPENGLES_VERSION, - - /// @brief Vulkan GAME_HW_CONTEXT_VULKAN } GAME_HW_CONTEXT_TYPE; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Hardware framebuffer properties** - /// typedef struct game_stream_hw_framebuffer_properties { - /// @brief The API to use. - /// - GAME_HW_CONTEXT_TYPE context_type; - - /// @brief Set if render buffers should have depth component attached. - /// - /// @todo: Obsolete - /// + enum GAME_HW_CONTEXT_TYPE context_type; bool depth; - - /// @brief Set if stencil buffers should be attached. - /// - /// If depth and stencil are true, a packed 24/8 buffer will be added. - /// Only attaching stencil is invalid and will be ignored. - /// - /// @todo: Obsolete. - /// bool stencil; - - /// @brief Use conventional bottom-left origin convention. - /// - /// If false, standard top-left origin semantics are used. - /// - /// @todo: Move to GL specific interface - /// bool bottom_left_origin; - - /// @brief Major version number for core GL context or GLES 3.1+. unsigned int version_major; - - /// @brief Minor version number for core GL context or GLES 3.1+. unsigned int version_minor; - - /// @brief If this is true, the frontend will go very far to avoid resetting context - /// in scenarios like toggling fullscreen, etc. - /// - /// @todo: Obsolete? Maybe frontend should just always assume this... - /// - /// The reset callback might still be called in extreme situations such as if - /// the context is lost beyond recovery. - /// - /// For optimal stability, set this to false, and allow context to be reset at - /// any time. - /// bool cache_context; - - /// @brief Creates a debug context. bool debug_context; - } ATTR_PACKED game_stream_hw_framebuffer_properties; + } game_stream_hw_framebuffer_properties; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Hardware framebuffer buffer** - /// typedef struct game_stream_hw_framebuffer_buffer { - /// @brief uintptr_t framebuffer; - } ATTR_PACKED game_stream_hw_framebuffer_buffer; + } game_stream_hw_framebuffer_buffer; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Hardware framebuffer packet** - /// typedef struct game_stream_hw_framebuffer_packet { - /// @brief uintptr_t framebuffer; - } ATTR_PACKED game_stream_hw_framebuffer_packet; + } game_stream_hw_framebuffer_packet; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Hardware framebuffer process function address** - /// typedef void (*game_proc_address_t)(void); - //---------------------------------------------------------------------------- - ///@} - - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_SoftwareFramebuffer 4. Software framebuffer stream - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **Software framebuffer stream data** - /// - ///@{ - - //============================================================================ - /// @brief **Game video stream properties** - /// - /// Used by Kodi to pass the currently required video stream settings to the addon - /// typedef game_stream_video_properties game_stream_sw_framebuffer_properties; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Hardware framebuffer type** - /// typedef struct game_stream_sw_framebuffer_buffer { - GAME_PIXEL_FORMAT format; + enum GAME_PIXEL_FORMAT format; uint8_t* data; size_t size; - } ATTR_PACKED game_stream_sw_framebuffer_buffer; + } game_stream_sw_framebuffer_buffer; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Video stream packet** - /// - /// This packet contains video stream data passed to Kodi. - /// typedef game_stream_video_packet game_stream_sw_framebuffer_packet; - //---------------------------------------------------------------------------- - - ///@} - - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_StreamTypes 5. Stream types - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **Stream types data** - /// - ///@{ - //============================================================================ - /// @brief **Game stream types** - /// typedef enum GAME_STREAM_TYPE { - /// @brief Unknown GAME_STREAM_UNKNOWN, - - /// @brief Audio stream GAME_STREAM_AUDIO, - - /// @brief Video stream GAME_STREAM_VIDEO, - - /// @brief Hardware framebuffer GAME_STREAM_HW_FRAMEBUFFER, - - /// @brief Software framebuffer GAME_STREAM_SW_FRAMEBUFFER, } GAME_STREAM_TYPE; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Immutable stream metadata** - /// - /// This metadata is provided when the stream is opened. If any stream - /// properties change, a new stream must be opened. - /// typedef struct game_stream_properties { - /// @brief - GAME_STREAM_TYPE type; + enum GAME_STREAM_TYPE type; union { - /// @brief game_stream_audio_properties audio; - - /// @brief game_stream_video_properties video; - - /// @brief game_stream_hw_framebuffer_properties hw_framebuffer; - - /// @brief game_stream_sw_framebuffer_properties sw_framebuffer; }; - } ATTR_PACKED game_stream_properties; + } game_stream_properties; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Stream buffers for hardware rendering and zero-copy support** - /// typedef struct game_stream_buffer { - /// @brief GAME_STREAM_TYPE type; union { - /// @brief game_stream_hw_framebuffer_buffer hw_framebuffer; - - /// @brief game_stream_sw_framebuffer_buffer sw_framebuffer; }; - } ATTR_PACKED game_stream_buffer; + } game_stream_buffer; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Stream packet and ephemeral metadata** - /// - /// This packet contains stream data and accompanying metadata. The metadata - /// is ephemeral, meaning it only applies to the current packet and can change - /// from packet to packet in the same stream. - /// typedef struct game_stream_packet { - /// @brief GAME_STREAM_TYPE type; union { - /// @brief game_stream_audio_packet audio; - - /// @brief game_stream_video_packet video; - - /// @brief game_stream_hw_framebuffer_packet hw_framebuffer; - - /// @brief game_stream_sw_framebuffer_packet sw_framebuffer; }; - } ATTR_PACKED game_stream_packet; + } game_stream_packet; //---------------------------------------------------------------------------- ///@} @@ -555,240 +232,88 @@ extern "C" /// ///@{ - //============================================================================ - /// @brief **Game reguin definition** - /// - /// Returned from game_get_region() typedef enum GAME_REGION { - /// @brief Game region unknown GAME_REGION_UNKNOWN, - - /// @brief Game region NTSC GAME_REGION_NTSC, - - /// @brief Game region PAL GAME_REGION_PAL, } GAME_REGION; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Special game types passed into game_load_game_special().** - /// - /// @remark Only used when multiple ROMs are required. - /// typedef enum SPECIAL_GAME_TYPE { - /// @brief Game Type BSX SPECIAL_GAME_TYPE_BSX, - - /// @brief Game Type BSX slotted SPECIAL_GAME_TYPE_BSX_SLOTTED, - - /// @brief Game Type sufami turbo SPECIAL_GAME_TYPE_SUFAMI_TURBO, - - /// @brief Game Type super game boy SPECIAL_GAME_TYPE_SUPER_GAME_BOY, } SPECIAL_GAME_TYPE; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **Game Memory** - /// typedef enum GAME_MEMORY { - /// @brief Passed to game_get_memory_data/size(). If the memory type doesn't apply - /// to the implementation NULL/0 can be returned. GAME_MEMORY_MASK = 0xff, - - /// @brief Regular save ram. - /// - /// This ram is usually found on a game cartridge, backed - /// up by a battery. If save game data is too complex for a single memory - /// buffer, the SYSTEM_DIRECTORY environment callback can be used. GAME_MEMORY_SAVE_RAM = 0, - - /// @brief Some games have a built-in clock to keep track of time. - /// - /// This memory is usually just a couple of bytes to keep track of time. GAME_MEMORY_RTC = 1, - - /// @brief System ram lets a frontend peek into a game systems main RAM GAME_MEMORY_SYSTEM_RAM = 2, - - /// @brief Video ram lets a frontend peek into a game systems video RAM (VRAM) GAME_MEMORY_VIDEO_RAM = 3, - - /// @brief Special memory type GAME_MEMORY_SNES_BSX_RAM = ((1 << 8) | GAME_MEMORY_SAVE_RAM), - - /// @brief Special memory type GAME_MEMORY_SNES_BSX_PRAM = ((2 << 8) | GAME_MEMORY_SAVE_RAM), - - /// @brief Special memory type GAME_MEMORY_SNES_SUFAMI_TURBO_A_RAM = ((3 << 8) | GAME_MEMORY_SAVE_RAM), - - /// @brief Special memory type GAME_MEMORY_SNES_SUFAMI_TURBO_B_RAM = ((4 << 8) | GAME_MEMORY_SAVE_RAM), - - /// @brief Special memory type GAME_MEMORY_SNES_GAME_BOY_RAM = ((5 << 8) | GAME_MEMORY_SAVE_RAM), - - /// @brief Special memory type GAME_MEMORY_SNES_GAME_BOY_RTC = ((6 << 8) | GAME_MEMORY_RTC), } GAME_MEMORY; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief **ID values for SIMD CPU features** typedef enum GAME_SIMD { - /// @brief SIMD CPU SSE GAME_SIMD_SSE = (1 << 0), - - /// @brief SIMD CPU SSE2 GAME_SIMD_SSE2 = (1 << 1), - - /// @brief SIMD CPU VMX GAME_SIMD_VMX = (1 << 2), - - /// @brief SIMD CPU VMX128 GAME_SIMD_VMX128 = (1 << 3), - - /// @brief SIMD CPU AVX GAME_SIMD_AVX = (1 << 4), - - /// @brief SIMD CPU NEON GAME_SIMD_NEON = (1 << 5), - - /// @brief SIMD CPU SSE3 GAME_SIMD_SSE3 = (1 << 6), - - /// @brief SIMD CPU SSSE3 GAME_SIMD_SSSE3 = (1 << 7), - - /// @brief SIMD CPU MMX GAME_SIMD_MMX = (1 << 8), - - /// @brief SIMD CPU MMXEXT GAME_SIMD_MMXEXT = (1 << 9), - - /// @brief SIMD CPU SSE4 GAME_SIMD_SSE4 = (1 << 10), - - /// @brief SIMD CPU SSE42 GAME_SIMD_SSE42 = (1 << 11), - - /// @brief SIMD CPU AVX2 GAME_SIMD_AVX2 = (1 << 12), - - /// @brief SIMD CPU VFPU GAME_SIMD_VFPU = (1 << 13), } GAME_SIMD; - //---------------------------------------------------------------------------- - - ///@} - - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - /// @defgroup cpp_kodi_addon_game_Defs_InputTypes 7. Input types - /// @ingroup cpp_kodi_addon_game_Defs - /// @brief **Input types** - /// - ///@{ - //============================================================================ - /// @brief typedef enum GAME_INPUT_EVENT_SOURCE { - /// @brief GAME_INPUT_EVENT_DIGITAL_BUTTON, - - /// @brief GAME_INPUT_EVENT_ANALOG_BUTTON, - - /// @brief GAME_INPUT_EVENT_AXIS, - - /// @brief GAME_INPUT_EVENT_ANALOG_STICK, - - /// @brief GAME_INPUT_EVENT_ACCELEROMETER, - - /// @brief GAME_INPUT_EVENT_KEY, - - /// @brief GAME_INPUT_EVENT_RELATIVE_POINTER, - - /// @brief GAME_INPUT_EVENT_ABSOLUTE_POINTER, - - /// @brief GAME_INPUT_EVENT_MOTOR, } GAME_INPUT_EVENT_SOURCE; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef enum GAME_KEY_MOD { - /// @brief GAME_KEY_MOD_NONE = 0x0000, - - /// @brief GAME_KEY_MOD_SHIFT = 0x0001, - - /// @brief GAME_KEY_MOD_CTRL = 0x0002, - - /// @brief GAME_KEY_MOD_ALT = 0x0004, - - /// @brief GAME_KEY_MOD_META = 0x0008, - - /// @brief GAME_KEY_MOD_SUPER = 0x0010, - - /// @brief GAME_KEY_MOD_NUMLOCK = 0x0100, - - /// @brief GAME_KEY_MOD_CAPSLOCK = 0x0200, - - /// @brief GAME_KEY_MOD_SCROLLOCK = 0x0400, } GAME_KEY_MOD; - //---------------------------------------------------------------------------- - //============================================================================ - /// @brief Type of port on the virtual game console typedef enum GAME_PORT_TYPE { - /// @brief Game port unknown GAME_PORT_UNKNOWN, - - /// @brief Game port Keyboard GAME_PORT_KEYBOARD, - - /// @brief Game port mouse GAME_PORT_MOUSE, - - /// @brief Game port controller GAME_PORT_CONTROLLER, } GAME_PORT_TYPE; - //---------------------------------------------------------------------------- - /*! @cond PRIVATE */ - /*! - * @brief "C" Game add-on controller layout. - * - * Structure used to interface in "C" between Kodi and Addon. - * - * See @ref AddonGameControllerLayout for description of values. - */ typedef struct game_controller_layout { char* controller_id; @@ -809,42 +334,23 @@ extern "C" unsigned int abs_pointer_count; char** motors; unsigned int motor_count; - } ATTR_PACKED game_controller_layout; + } game_controller_layout; /*! @endcond */ struct game_input_port; - //============================================================================ - /// @brief Device that can provide input typedef struct game_input_device { - /// @brief ID used in the Kodi controller API const char* controller_id; - - /// @brief const char* port_address; - - /// @brief struct game_input_port* available_ports; - - /// @brief unsigned int port_count; - } ATTR_PACKED game_input_device; + } game_input_device; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief Port that can provide input - /// - /// Ports can accept multiple devices and devices can have multiple ports, so - /// the topology of possible configurations is a tree structure of alternating - /// port and device nodes. - /// typedef struct game_input_port { - /// @brief - GAME_PORT_TYPE type; - - /// @brief Required for GAME_PORT_CONTROLLER type + enum GAME_PORT_TYPE type; const char* port_id; /// @brief Flag to prevent a port from being disconnected @@ -855,190 +361,107 @@ extern "C" bool force_connected; /// @brief - game_input_device* accepted_devices; + struct game_input_device* accepted_devices; /// @brief unsigned int device_count; - } ATTR_PACKED game_input_port; + } game_input_port; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief The input topology is the possible ways to connect input devices - /// - /// This represents the logical topology, which is the possible connections that - /// the game client's logic can handle. It is strictly a subset of the physical - /// topology. Loops are not allowed. - /// typedef struct game_input_topology { - /// @brief The list of ports on the virtual game console - game_input_port* ports; - - /// @brief The number of ports + struct game_input_port* ports; unsigned int port_count; - - /// @brief A limit on the number of input-providing devices, or -1 for no limit int player_limit; - } ATTR_PACKED game_input_topology; + } game_input_topology; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_digital_button_event { - /// @brief bool pressed; - } ATTR_PACKED game_digital_button_event; + } game_digital_button_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_analog_button_event { - /// @brief float magnitude; - } ATTR_PACKED game_analog_button_event; + } game_analog_button_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_axis_event { /// @brief float position; - } ATTR_PACKED game_axis_event; + } game_axis_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_analog_stick_event { - /// @brief float x; - - /// @brief float y; - } ATTR_PACKED game_analog_stick_event; + } game_analog_stick_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_accelerometer_event { - /// @brief float x; - - /// @brief float y; - - /// @brief float z; - } ATTR_PACKED game_accelerometer_event; + } game_accelerometer_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_key_event { - /// @brief bool pressed; - - /// @brief If the keypress generates a printing character - /// - /// The unicode value contains the character generated. If the key is a - /// non-printing character, e.g. a function or arrow key, the unicode value - /// is zero. uint32_t unicode; - /// @brief - GAME_KEY_MOD modifiers; - } ATTR_PACKED game_key_event; + enum GAME_KEY_MOD modifiers; + } game_key_event; //---------------------------------------------------------------------------- //============================================================================ /// @brief typedef struct game_rel_pointer_event { - /// @brief int x; - - /// @brief int y; - } ATTR_PACKED game_rel_pointer_event; + } game_rel_pointer_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_abs_pointer_event { - /// @brief bool pressed; - - /// @brief float x; - - /// @brief float y; - } ATTR_PACKED game_abs_pointer_event; + } game_abs_pointer_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_motor_event { - /// @brief float magnitude; - } ATTR_PACKED game_motor_event; + } game_motor_event; //---------------------------------------------------------------------------- - //============================================================================ - /// @brief typedef struct game_input_event { - /// @brief - GAME_INPUT_EVENT_SOURCE type; - - /// @brief + enum GAME_INPUT_EVENT_SOURCE type; const char* controller_id; - - /// @brief - GAME_PORT_TYPE port_type; - - /// @brief + enum GAME_PORT_TYPE port_type; const char* port_address; - - /// @brief const char* feature_name; union { - /// @brief struct game_digital_button_event digital_button; - - /// @brief struct game_analog_button_event analog_button; - - /// @brief struct game_axis_event axis; - - /// @brief struct game_analog_stick_event analog_stick; - - /// @brief struct game_accelerometer_event accelerometer; - - /// @brief struct game_key_event key; - - /// @brief struct game_rel_pointer_event rel_pointer; - - /// @brief struct game_abs_pointer_event abs_pointer; - - /// @brief struct game_motor_event motor; }; - } ATTR_PACKED game_input_event; + } game_input_event; //---------------------------------------------------------------------------- ///@} @@ -1050,168 +473,154 @@ extern "C" /// ///@{ - //============================================================================ - /// @brief Game system timing - /// struct game_system_timing { - /// @brief FPS of video content. double fps; - - /// @brief Sampling rate of audio. double sample_rate; }; - //---------------------------------------------------------------------------- - - ///@} - - //--==----==----==----==----==----==----==----==----==----==----==----==----==-- - - /*! - * @brief Game properties - * - * Not to be used outside this header. - */ - typedef struct AddonProps_Game + struct GAME_PROPS { - /*! - * The path of the game client being loaded. - */ const char* game_client_dll_path; - - /*! - * Paths to proxy DLLs used to load the game client. - */ const char** proxy_dll_paths; - - /*! - * Number of proxy DLL paths provided. - */ unsigned int proxy_dll_count; - - /*! - * The "system" directories of the frontend. These directories can be used to - * store system-specific ROMs such as BIOSes, configuration data, etc. - */ const char** resource_directories; - - /*! - * Number of resource directories provided - */ unsigned int resource_directory_count; - - /*! - * The writable directory of the frontend. This directory can be used to store - * SRAM, memory cards, high scores, etc, if the game client cannot use the - * regular memory interface, GetMemoryData(). - */ const char* profile_directory; - - /*! - * The value of the property from addon.xml - */ bool supports_vfs; - - /*! - * The extensions in the property from addon.xml - */ const char** extensions; - - /*! - * Number of extensions provided - */ unsigned int extension_count; - } AddonProps_Game; + }; - typedef void* KODI_GAME_STREAM_HANDLE; + typedef KODI_ADDON_GAME_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_DESTROY_V1)(KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_GAME_V1)( + const KODI_ADDON_GAME_HDL hdl, const char* url); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_GAME_SPECIAL_V1)( + const KODI_ADDON_GAME_HDL hdl, + enum SPECIAL_GAME_TYPE type, + const char** urls, + size_t urlCount); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_LOAD_STANDALONE_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_UNLOAD_GAME_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_GAME_TIMING_V1)( + const KODI_ADDON_GAME_HDL hdl, struct game_system_timing* timing_info); + typedef enum GAME_REGION(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_REGION_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_REQUIRES_GAME_LOOP_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_RUN_FRAME_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_RESET_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HW_CONTEXT_RESET_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HW_CONTEXT_DESTROY_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_HAS_FEATURE_V1)(const KODI_ADDON_GAME_HDL hdl, + const char* controller_id, + const char* feature_name); + typedef struct game_input_topology*(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_TOPOLOGY_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_FREE_TOPOLOGY_V1)( + const KODI_ADDON_GAME_HDL hdl, struct game_input_topology* topology); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SET_CONTROLLER_LAYOUTS_V1)( + const KODI_ADDON_GAME_HDL hdl, + const struct game_controller_layout* controllers, + size_t controller_count); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_ENABLE_KEYBOARD_V1)(const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_ENABLE_MOUSE_V1)(const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CONNECT_CONTROLLER_V1)( + const KODI_ADDON_GAME_HDL hdl, + bool connect, + const char* port_address, + const char* controller_id); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_INPUT_EVENT_V1)( + const KODI_ADDON_GAME_HDL hdl, const struct game_input_event* event); + typedef size_t(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SERIALIZE_SIZE_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SERIALIZE_V1)( + const KODI_ADDON_GAME_HDL hdl, uint8_t* data, size_t size); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_DESERIALIZE_V1)( + const KODI_ADDON_GAME_HDL hdl, const uint8_t* data, size_t size); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_CHEAT_RESET_V1)( + const KODI_ADDON_GAME_HDL hdl); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_GET_MEMORY_V1)( + const KODI_ADDON_GAME_HDL hdl, enum GAME_MEMORY type, uint8_t** data, size_t* size); + typedef enum GAME_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_GAME_SET_CHEAT_V1)( + const KODI_ADDON_GAME_HDL hdl, unsigned int index, bool enabled, const char* code); + + typedef struct KODI_ADDON_GAME_FUNC + { + PFN_KODI_ADDON_GAME_CREATE_V1 create; + PFN_KODI_ADDON_GAME_DESTROY_V1 destroy; + PFN_KODI_ADDON_GAME_LOAD_GAME_V1 load_game; + PFN_KODI_ADDON_GAME_LOAD_GAME_SPECIAL_V1 load_game_special; + PFN_KODI_ADDON_GAME_LOAD_STANDALONE_V1 load_standalone; + PFN_KODI_ADDON_GAME_UNLOAD_GAME_V1 unload_game; + PFN_KODI_ADDON_GAME_GET_GAME_TIMING_V1 get_game_timing; + PFN_KODI_ADDON_GAME_GET_REGION_V1 get_region; + PFN_KODI_ADDON_GAME_REQUIRES_GAME_LOOP_V1 requires_game_loop; + PFN_KODI_ADDON_GAME_RUN_FRAME_V1 run_frame; + PFN_KODI_ADDON_GAME_RESET_V1 reset; + PFN_KODI_ADDON_GAME_HW_CONTEXT_RESET_V1 hw_context_reset; + PFN_KODI_ADDON_GAME_HW_CONTEXT_DESTROY_V1 hw_context_destroy; + PFN_KODI_ADDON_GAME_HAS_FEATURE_V1 has_feature; + PFN_KODI_ADDON_GAME_GET_TOPOLOGY_V1 get_topology; + PFN_KODI_ADDON_GAME_FREE_TOPOLOGY_V1 free_topology; + PFN_KODI_ADDON_GAME_SET_CONTROLLER_LAYOUTS_V1 set_controller_layouts; + PFN_KODI_ADDON_GAME_ENABLE_KEYBOARD_V1 enable_keyboard; + PFN_KODI_ADDON_GAME_ENABLE_MOUSE_V1 enable_mouse; + PFN_KODI_ADDON_GAME_CONNECT_CONTROLLER_V1 connect_controller; + PFN_KODI_ADDON_GAME_INPUT_EVENT_V1 input_event; + PFN_KODI_ADDON_GAME_SERIALIZE_SIZE_V1 serialize_size; + PFN_KODI_ADDON_GAME_SERIALIZE_V1 serialize; + PFN_KODI_ADDON_GAME_DESERIALIZE_V1 deserialize; + PFN_KODI_ADDON_GAME_CHEAT_RESET_V1 cheat_reset; + PFN_KODI_ADDON_GAME_GET_MEMORY_V1 get_memory; + PFN_KODI_ADDON_GAME_SET_CHEAT_V1 set_cheat; + } KODI_ADDON_GAME_FUNC; - /*! Structure to transfer the methods from kodi_game_dll.h to Kodi */ + typedef void* KODI_GAME_STREAM_HANDLE; - struct AddonInstance_Game; + ATTR_DLL_EXPORT void kodi_addon_game_close(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GAME_STREAM_HANDLE kodi_addon_game_open_stream( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct game_stream_properties* properties) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_game_get_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + unsigned int width, + unsigned int height, + struct game_stream_buffer* buffer) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_game_add_stream_data(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + const struct game_stream_packet* packet) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_game_release_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + struct game_stream_buffer* buffer) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_game_close_stream(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT game_proc_address_t kodi_addon_hw_get_proc_address( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* symbol) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_game_input_event(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct game_input_event* event) + __INTRODUCED_IN_KODI(1); - /*! - * @brief Game callbacks - * - * Not to be used outside this header. - */ - typedef struct AddonToKodiFuncTable_Game - { - KODI_HANDLE kodiInstance; - - void (*CloseGame)(KODI_HANDLE kodiInstance); - KODI_GAME_STREAM_HANDLE (*OpenStream)(KODI_HANDLE, const struct game_stream_properties*); - bool (*GetStreamBuffer)(KODI_HANDLE, - KODI_GAME_STREAM_HANDLE, - unsigned int, - unsigned int, - struct game_stream_buffer*); - void (*AddStreamData)(KODI_HANDLE, KODI_GAME_STREAM_HANDLE, const struct game_stream_packet*); - void (*ReleaseStreamBuffer)(KODI_HANDLE, KODI_GAME_STREAM_HANDLE, struct game_stream_buffer*); - void (*CloseStream)(KODI_HANDLE, KODI_GAME_STREAM_HANDLE); - game_proc_address_t (*HwGetProcAddress)(KODI_HANDLE kodiInstance, const char* symbol); - bool (*InputEvent)(KODI_HANDLE kodiInstance, const struct game_input_event* event); - } AddonToKodiFuncTable_Game; - - /*! - * @brief Game function hooks - * - * Not to be used outside this header. - */ - typedef struct KodiToAddonFuncTable_Game - { - KODI_HANDLE addonInstance; - - GAME_ERROR(__cdecl* LoadGame)(const struct AddonInstance_Game*, const char*); - GAME_ERROR(__cdecl* LoadGameSpecial) - (const struct AddonInstance_Game*, enum SPECIAL_GAME_TYPE, const char**, size_t); - GAME_ERROR(__cdecl* LoadStandalone)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* UnloadGame)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* GetGameTiming) - (const struct AddonInstance_Game*, struct game_system_timing*); - GAME_REGION(__cdecl* GetRegion)(const struct AddonInstance_Game*); - bool(__cdecl* RequiresGameLoop)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* RunFrame)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* Reset)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* HwContextReset)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* HwContextDestroy)(const struct AddonInstance_Game*); - bool(__cdecl* HasFeature)(const struct AddonInstance_Game*, const char*, const char*); - game_input_topology*(__cdecl* GetTopology)(const struct AddonInstance_Game*); - void(__cdecl* FreeTopology)(const struct AddonInstance_Game*, struct game_input_topology*); - void(__cdecl* SetControllerLayouts)(const struct AddonInstance_Game*, - const struct game_controller_layout*, - unsigned int); - bool(__cdecl* EnableKeyboard)(const struct AddonInstance_Game*, bool, const char*); - bool(__cdecl* EnableMouse)(const struct AddonInstance_Game*, bool, const char*); - bool(__cdecl* ConnectController)(const struct AddonInstance_Game*, - bool, - const char*, - const char*); - bool(__cdecl* InputEvent)(const struct AddonInstance_Game*, const struct game_input_event*); - size_t(__cdecl* SerializeSize)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* Serialize)(const struct AddonInstance_Game*, uint8_t*, size_t); - GAME_ERROR(__cdecl* Deserialize)(const struct AddonInstance_Game*, const uint8_t*, size_t); - GAME_ERROR(__cdecl* CheatReset)(const struct AddonInstance_Game*); - GAME_ERROR(__cdecl* GetMemory) - (const struct AddonInstance_Game*, enum GAME_MEMORY, uint8_t**, size_t*); - GAME_ERROR(__cdecl* SetCheat) - (const struct AddonInstance_Game*, unsigned int, bool, const char*); - } KodiToAddonFuncTable_Game; - - /*! - * @brief Game instance - * - * Not to be used outside this header. - */ - typedef struct AddonInstance_Game - { - struct AddonProps_Game* props; - struct AddonToKodiFuncTable_Game* toKodi; - struct KodiToAddonFuncTable_Game* toAddon; - } AddonInstance_Game; #ifdef __cplusplus -} +} /* extern "C" */ #endif /* __cplusplus */ #endif /* !C_API_ADDONINSTANCE_GAME_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/imagedecoder.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/imagedecoder.h index bc74e8aed03e5..819bdfc537acd 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/imagedecoder.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/imagedecoder.h @@ -6,16 +6,20 @@ * See LICENSES/README.md for more information. */ -#ifndef C_API_ADDONINSTANCE_IMAGE_DECODER_H -#define C_API_ADDONINSTANCE_IMAGE_DECODER_H +#ifndef C_API_ADDONINSTANCE_IMAGEDECODER_H +#define C_API_ADDONINSTANCE_IMAGEDECODER_H #include "../addon_base.h" +#include + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +#if __KODI_API__ >= 1 + typedef void* KODI_ADDON_IMAGEDECODER_HDL; //============================================================================ @@ -371,21 +375,21 @@ extern "C" int width; int height; float distance; - ADDON_IMG_ORIENTATION orientation; - ADDON_IMG_COLOR color; - ADDON_IMG_METERING_MODE metering_mode; + enum ADDON_IMG_ORIENTATION orientation; + enum ADDON_IMG_COLOR color; + enum ADDON_IMG_METERING_MODE metering_mode; float exposure_time; float exposure_bias; - ADDON_IMG_EXPOSURE_PROGRAM exposure_program; - ADDON_IMG_EXPOSURE_MODE exposure_mode; + enum ADDON_IMG_EXPOSURE_PROGRAM exposure_program; + enum ADDON_IMG_EXPOSURE_MODE exposure_mode; time_t time_created; float aperture_f_number; - ADDON_IMG_FLASH_TYPE flash_used; + enum ADDON_IMG_FLASH_TYPE flash_used; int focal_length; int focal_length_in_35mm_format; float digital_zoom_ratio; float iso_speed; - ADDON_IMG_LIGHT_SOURCE light_source; + enum ADDON_IMG_LIGHT_SOURCE light_source; bool gps_info_present; char latitude_ref; @@ -424,27 +428,20 @@ extern "C" unsigned int pitch, enum ADDON_IMG_FMT format); - typedef struct KodiToAddonFuncTable_ImageDecoder + struct KODI_ADDON_IMAGEDECODER_FUNC { + PFN_KODI_ADDON_INSTANCE_CREATE_V1 create; + PFN_KODI_ADDON_INSTANCE_DESTROY_V1 destroy; PFN_KODI_ADDON_IMAGEDECODER_SUPPORTS_FILE_V1 supports_file; PFN_KODI_ADDON_IMAGEDECODER_READ_TAG_V1 read_tag; PFN_KODI_ADDON_IMAGEDECODER_LOAD_IMAGE_FROM_MEMORY_V1 load_image_from_memory; PFN_KODI_ADDON_IMAGEDECODER_DECODE_V1 decode; - } KodiToAddonFuncTable_ImageDecoder; - - typedef struct AddonToKodiFuncTable_ImageDecoder - { - KODI_HANDLE kodi_instance; - } AddonToKodiFuncTable_ImageDecoder; + }; - typedef struct AddonInstance_ImageDecoder - { - struct AddonToKodiFuncTable_ImageDecoder* toKodi; - struct KodiToAddonFuncTable_ImageDecoder* toAddon; - } AddonInstance_ImageDecoder; +#endif /* __KODI_API__ >= 1 */ #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ -#endif /* !C_API_ADDONINSTANCE_IMAGE_DECODER_H */ +#endif /* !C_API_ADDONINSTANCE_IMAGEDECODER_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h index 58047a6cf024a..a16dae0dc16e4 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h @@ -6,6 +6,8 @@ * See LICENSES/README.md for more information. */ +/*---AUTO_GEN_PARSE---*/ + #ifndef C_API_ADDONINSTANCE_INPUTSTREAM_H #define C_API_ADDONINSTANCE_INPUTSTREAM_H @@ -32,6 +34,8 @@ extern "C" { #endif /* __cplusplus */ + typedef void* KODI_ADDON_INPUTSTREAM_HDL; + //============================================================================== /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface_InputstreamCapabilities /// @brief **Capability types of inputstream addon.**\n @@ -597,104 +601,147 @@ extern "C" double ptsEnd; }; - /*! - * @brief "C" ABI Structures to transfer the methods from this to Kodi - */ - - // this are properties given to the addon on create - // at this time we have no parameters for the addon - typedef struct AddonProps_InputStream /* internal */ + typedef KODI_ADDON_INSTANCE_BACKEND_HDL (*PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM)( + KODI_ADDON_INSTANCE_BACKEND_HDL handle, int streamId, struct INPUTSTREAM_INFO* stream); + + typedef KODI_ADDON_INPUTSTREAM_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DESTROY_V1)( + KODI_ADDON_INPUTSTREAM_HDL hdl); + + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_OPEN_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_PROPERTY* props); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_CLOSE_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_PATH_LIST_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CAPABILITIES_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_CAPABILITIES* capabilities); + + // IDemux + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_IDS_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_IDS* ids); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + struct INPUTSTREAM_INFO* info, + KODI_OWN_HDL* demuxStream, + PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_ENABLE_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid, bool enable); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_OPEN_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_RESET_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_ABORT_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_FLUSH_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef struct DEMUX_PACKET*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_READ_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SEEK_TIME_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, double time, bool backwards, double* startpts); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SET_SPEED_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int speed); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SET_VIDEO_RESOLUTION_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int width, int height); + + // IDisplayTime + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TOTAL_TIME_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TIME_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + + // ITime + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_TIMES_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, struct INPUTSTREAM_TIMES* times); + + // IPosTime + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_POS_TIME_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ms); + + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_READ_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, uint8_t* buffer, unsigned int bufferSize); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SEEK_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int64_t position, int whence); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_POSITION_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_LENGTH_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_IS_REAL_TIME_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + + // IChapter + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_COUNT_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_NAME_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_POS_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_SEEK_CHAPTER_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); + + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_BLOCK_SIZE_STREAM_V1)( + const KODI_ADDON_INPUTSTREAM_HDL hdl); + + typedef struct KODI_ADDON_INPUTSTREAM_FUNC { - int dummy; - } AddonProps_InputStream; + PFN_KODI_ADDON_INPUTSTREAM_CREATE_V1 create; + PFN_KODI_ADDON_INPUTSTREAM_DESTROY_V1 destroy; - typedef struct AddonToKodiFuncTable_InputStream /* internal */ - { - KODI_HANDLE kodiInstance; - struct DEMUX_PACKET* (*allocate_demux_packet)(void* kodiInstance, int data_size); - struct DEMUX_PACKET* (*allocate_encrypted_demux_packet)(void* kodiInstance, - unsigned int data_size, - unsigned int encrypted_subsample_count); - void (*free_demux_packet)(void* kodiInstance, struct DEMUX_PACKET* packet); - } AddonToKodiFuncTable_InputStream; - - struct AddonInstance_InputStream; - typedef struct KodiToAddonFuncTable_InputStream /* internal */ - { - KODI_HANDLE addonInstance; - - bool(__cdecl* open)(const struct AddonInstance_InputStream* instance, - struct INPUTSTREAM_PROPERTY* props); - void(__cdecl* close)(const struct AddonInstance_InputStream* instance); - const char*(__cdecl* get_path_list)(const struct AddonInstance_InputStream* instance); - void(__cdecl* get_capabilities)(const struct AddonInstance_InputStream* instance, - struct INPUTSTREAM_CAPABILITIES* capabilities); + PFN_KODI_ADDON_INPUTSTREAM_OPEN_V1 open; + PFN_KODI_ADDON_INPUTSTREAM_CLOSE_V1 close; + PFN_KODI_ADDON_INPUTSTREAM_GET_PATH_LIST_V1 get_path_list; + PFN_KODI_ADDON_INPUTSTREAM_GET_CAPABILITIES_V1 get_capabilities; // IDemux - bool(__cdecl* get_stream_ids)(const struct AddonInstance_InputStream* instance, - struct INPUTSTREAM_IDS* ids); - bool(__cdecl* get_stream)(const struct AddonInstance_InputStream* instance, - int streamid, - struct INPUTSTREAM_INFO* info, - KODI_HANDLE* demuxStream, - KODI_HANDLE (*transfer_stream)(KODI_HANDLE handle, - int streamId, - struct INPUTSTREAM_INFO* stream)); - void(__cdecl* enable_stream)(const struct AddonInstance_InputStream* instance, - int streamid, - bool enable); - bool(__cdecl* open_stream)(const struct AddonInstance_InputStream* instance, int streamid); - void(__cdecl* demux_reset)(const struct AddonInstance_InputStream* instance); - void(__cdecl* demux_abort)(const struct AddonInstance_InputStream* instance); - void(__cdecl* demux_flush)(const struct AddonInstance_InputStream* instance); - struct DEMUX_PACKET*(__cdecl* demux_read)(const struct AddonInstance_InputStream* instance); - bool(__cdecl* demux_seek_time)(const struct AddonInstance_InputStream* instance, - double time, - bool backwards, - double* startpts); - void(__cdecl* demux_set_speed)(const struct AddonInstance_InputStream* instance, int speed); - void(__cdecl* set_video_resolution)(const struct AddonInstance_InputStream* instance, - int width, - int height); + PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_IDS_V1 get_stream_ids; + PFN_KODI_ADDON_INPUTSTREAM_GET_STREAM_V1 get_stream; + PFN_KODI_ADDON_INPUTSTREAM_ENABLE_STREAM_V1 enable_stream; + PFN_KODI_ADDON_INPUTSTREAM_OPEN_STREAM_V1 open_stream; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_RESET_V1 demux_reset; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_ABORT_V1 demux_abort; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_FLUSH_V1 demux_flush; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_READ_V1 demux_read; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SEEK_TIME_V1 demux_seek_time; + PFN_KODI_ADDON_INPUTSTREAM_DEMUX_SET_SPEED_V1 demux_set_speed; + PFN_KODI_ADDON_INPUTSTREAM_SET_VIDEO_RESOLUTION_V1 set_video_resolution; // IDisplayTime - int(__cdecl* get_total_time)(const struct AddonInstance_InputStream* instance); - int(__cdecl* get_time)(const struct AddonInstance_InputStream* instance); + PFN_KODI_ADDON_INPUTSTREAM_GET_TOTAL_TIME_V1 get_total_time; + PFN_KODI_ADDON_INPUTSTREAM_GET_TIME_V1 get_time; // ITime - bool(__cdecl* get_times)(const struct AddonInstance_InputStream* instance, - struct INPUTSTREAM_TIMES* times); + PFN_KODI_ADDON_INPUTSTREAM_GET_TIMES_V1 get_times; // IPosTime - bool(__cdecl* pos_time)(const struct AddonInstance_InputStream* instance, int ms); - - int(__cdecl* read_stream)(const struct AddonInstance_InputStream* instance, - uint8_t* buffer, - unsigned int bufferSize); - int64_t(__cdecl* seek_stream)(const struct AddonInstance_InputStream* instance, - int64_t position, - int whence); - int64_t(__cdecl* position_stream)(const struct AddonInstance_InputStream* instance); - int64_t(__cdecl* length_stream)(const struct AddonInstance_InputStream* instance); - bool(__cdecl* is_real_time_stream)(const struct AddonInstance_InputStream* instance); + PFN_KODI_ADDON_INPUTSTREAM_POS_TIME_V1 pos_time; + PFN_KODI_ADDON_INPUTSTREAM_READ_STREAM_V1 read_stream; + PFN_KODI_ADDON_INPUTSTREAM_SEEK_STREAM_V1 seek_stream; + PFN_KODI_ADDON_INPUTSTREAM_POSITION_STREAM_V1 position_stream; + PFN_KODI_ADDON_INPUTSTREAM_LENGTH_STREAM_V1 length_stream; + PFN_KODI_ADDON_INPUTSTREAM_IS_REAL_TIME_STREAM_V1 is_real_time_stream; // IChapter - int(__cdecl* get_chapter)(const struct AddonInstance_InputStream* instance); - int(__cdecl* get_chapter_count)(const struct AddonInstance_InputStream* instance); - const char*(__cdecl* get_chapter_name)(const struct AddonInstance_InputStream* instance, - int ch); - int64_t(__cdecl* get_chapter_pos)(const struct AddonInstance_InputStream* instance, int ch); - bool(__cdecl* seek_chapter)(const struct AddonInstance_InputStream* instance, int ch); - - int(__cdecl* block_size_stream)(const struct AddonInstance_InputStream* instance); - } KodiToAddonFuncTable_InputStream; - - typedef struct AddonInstance_InputStream /* internal */ - { - struct AddonProps_InputStream* props; - struct AddonToKodiFuncTable_InputStream* toKodi; - struct KodiToAddonFuncTable_InputStream* toAddon; - } AddonInstance_InputStream; + PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_V1 get_chapter; + PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_COUNT_V1 get_chapter_count; + PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_NAME_V1 get_chapter_name; + PFN_KODI_ADDON_INPUTSTREAM_GET_CHAPTER_POS_V1 get_chapter_pos; + PFN_KODI_ADDON_INPUTSTREAM_SEEK_CHAPTER_V1 seek_chapter; + PFN_KODI_ADDON_INPUTSTREAM_BLOCK_SIZE_STREAM_V1 block_size_stream; + } KODI_ADDON_INPUTSTREAM_FUNC; + + ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_demux_packet( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, int data_size) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_encrypted_demux_packet( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int data_size, + unsigned int encrypted_subsample_count) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_inputstream_free_demux_packet(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct DEMUX_PACKET* packet) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/peripheral.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/peripheral.h index d5e1d2b63e25c..852036091c48d 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/peripheral.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/peripheral.h @@ -1,16 +1,20 @@ /* - * Copyright (C) 2014-2018 Team Kodi + * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ +/*---AUTO_GEN_PARSE---*/ + #ifndef C_API_ADDONINSTANCE_PERIPHERAL_H #define C_API_ADDONINSTANCE_PERIPHERAL_H #include "../addon_base.h" +#include + /* indicates a joystick has no preference for port number */ #define NO_PORT_REQUESTED (-1) @@ -22,6 +26,8 @@ extern "C" { #endif /* __cplusplus */ + typedef void* KODI_ADDON_PERIPHERAL_HDL; + //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_General_PERIPHERAL_ERROR enum PERIPHERAL_ERROR /// @ingroup cpp_kodi_addon_peripheral_Defs_General @@ -84,25 +90,25 @@ extern "C" /*! * @brief Information shared between peripherals */ - typedef struct PERIPHERAL_INFO + struct PERIPHERAL_INFO { - PERIPHERAL_TYPE type; /*!< type of peripheral */ + enum PERIPHERAL_TYPE type; /*!< type of peripheral */ char* name; /*!< name of peripheral */ uint16_t vendor_id; /*!< vendor ID of peripheral, 0x0000 if unknown */ uint16_t product_id; /*!< product ID of peripheral, 0x0000 if unknown */ unsigned int index; /*!< the order in which the add-on identified this peripheral */ - } ATTR_PACKED PERIPHERAL_INFO; + }; /*! * @brief Peripheral add-on capabilities. */ - typedef struct PERIPHERAL_CAPABILITIES + struct PERIPHERAL_CAPABILITIES { bool provides_joysticks; /*!< true if the add-on provides joysticks */ bool provides_joystick_rumble; bool provides_joystick_power_off; bool provides_buttonmaps; /*!< true if the add-on provides button maps */ - } ATTR_PACKED PERIPHERAL_CAPABILITIES; + }; //} @@ -210,22 +216,22 @@ extern "C" /*! * @brief Event information */ - typedef struct PERIPHERAL_EVENT + struct PERIPHERAL_EVENT { /*! @brief Index of the peripheral handling/receiving the event */ unsigned int peripheral_index; /*! @brief Type of the event used to determine which enum field to access below */ - PERIPHERAL_EVENT_TYPE type; + enum PERIPHERAL_EVENT_TYPE type; /*! @brief The index of the event source */ unsigned int driver_index; - JOYSTICK_STATE_BUTTON driver_button_state; - JOYSTICK_STATE_HAT driver_hat_state; + enum JOYSTICK_STATE_BUTTON driver_button_state; + enum JOYSTICK_STATE_HAT driver_hat_state; JOYSTICK_STATE_AXIS driver_axis_state; JOYSTICK_STATE_MOTOR motor_state; - } ATTR_PACKED PERIPHERAL_EVENT; + }; //} @@ -235,9 +241,9 @@ extern "C" /*! * @brief Info specific to joystick peripherals */ - typedef struct JOYSTICK_INFO + struct JOYSTICK_INFO { - PERIPHERAL_INFO peripheral; /*!< @brief peripheral info for this joystick */ + struct PERIPHERAL_INFO peripheral; /*!< @brief peripheral info for this joystick */ char* provider; /*!< @brief name of the driver or interface providing the joystick */ int requested_port; /*!< @brief requested port number (such as for 360 controllers), or NO_PORT_REQUESTED */ unsigned int button_count; /*!< @brief number of buttons reported by the driver */ @@ -245,7 +251,7 @@ extern "C" unsigned int axis_count; /*!< @brief number of axes reported by the driver */ unsigned int motor_count; /*!< @brief number of motors reported by the driver */ bool supports_poweroff; /*!< @brief whether the joystick supports being powered off */ - } ATTR_PACKED JOYSTICK_INFO; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_DRIVER_PRIMITIVE_TYPE enum JOYSTICK_DRIVER_PRIMITIVE_TYPE @@ -292,10 +298,10 @@ extern "C" /*! * @brief Button primitive */ - typedef struct JOYSTICK_DRIVER_BUTTON + struct JOYSTICK_DRIVER_BUTTON { int index; - } ATTR_PACKED JOYSTICK_DRIVER_BUTTON; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_DRIVER_HAT_DIRECTION enum JOYSTICK_DRIVER_HAT_DIRECTION @@ -326,11 +332,11 @@ extern "C" /*! * @brief Hat direction primitive */ - typedef struct JOYSTICK_DRIVER_HAT + struct JOYSTICK_DRIVER_HAT { int index; - JOYSTICK_DRIVER_HAT_DIRECTION direction; - } ATTR_PACKED JOYSTICK_DRIVER_HAT; + enum JOYSTICK_DRIVER_HAT_DIRECTION direction; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_DRIVER_SEMIAXIS_DIRECTION enum JOYSTICK_DRIVER_SEMIAXIS_DIRECTION @@ -355,29 +361,29 @@ extern "C" /*! * @brief Semiaxis primitive */ - typedef struct JOYSTICK_DRIVER_SEMIAXIS + struct JOYSTICK_DRIVER_SEMIAXIS { int index; int center; - JOYSTICK_DRIVER_SEMIAXIS_DIRECTION direction; + enum JOYSTICK_DRIVER_SEMIAXIS_DIRECTION direction; unsigned int range; - } ATTR_PACKED JOYSTICK_DRIVER_SEMIAXIS; + }; /*! * @brief Motor primitive */ - typedef struct JOYSTICK_DRIVER_MOTOR + struct JOYSTICK_DRIVER_MOTOR { int index; - } ATTR_PACKED JOYSTICK_DRIVER_MOTOR; + }; /*! * @brief Keyboard key primitive */ - typedef struct JOYSTICK_DRIVER_KEY + struct JOYSTICK_DRIVER_KEY { char keycode[16]; - } ATTR_PACKED JOYSTICK_DRIVER_KEY; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_DRIVER_MOUSE_INDEX enum JOYSTICK_DRIVER_MOUSE_INDEX @@ -423,10 +429,10 @@ extern "C" /*! * @brief Mouse button primitive */ - typedef struct JOYSTICK_DRIVER_MOUSE_BUTTON + struct JOYSTICK_DRIVER_MOUSE_BUTTON { - JOYSTICK_DRIVER_MOUSE_INDEX button; - } ATTR_PACKED JOYSTICK_DRIVER_MOUSE_BUTTON; + enum JOYSTICK_DRIVER_MOUSE_INDEX button; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_DRIVER_RELPOINTER_DIRECTION enum JOYSTICK_DRIVER_RELPOINTER_DIRECTION @@ -457,17 +463,17 @@ extern "C" /*! * @brief Relative pointer direction primitive */ - typedef struct JOYSTICK_DRIVER_RELPOINTER + struct JOYSTICK_DRIVER_RELPOINTER { - JOYSTICK_DRIVER_RELPOINTER_DIRECTION direction; - } ATTR_PACKED JOYSTICK_DRIVER_RELPOINTER; + enum JOYSTICK_DRIVER_RELPOINTER_DIRECTION direction; + }; /*! * @brief Driver primitive struct */ - typedef struct JOYSTICK_DRIVER_PRIMITIVE + struct JOYSTICK_DRIVER_PRIMITIVE { - JOYSTICK_DRIVER_PRIMITIVE_TYPE type; + enum JOYSTICK_DRIVER_PRIMITIVE_TYPE type; union { struct JOYSTICK_DRIVER_BUTTON button; @@ -478,7 +484,7 @@ extern "C" struct JOYSTICK_DRIVER_MOUSE_BUTTON mouse; struct JOYSTICK_DRIVER_RELPOINTER relpointer; }; - } ATTR_PACKED JOYSTICK_DRIVER_PRIMITIVE; + }; //============================================================================ /// @defgroup cpp_kodi_addon_peripheral_Defs_Joystick_JOYSTICK_FEATURE_TYPE enum JOYSTICK_FEATURE_TYPE @@ -590,115 +596,119 @@ extern "C" /*! * @brief Mapping between higher-level controller feature and its driver primitives */ - typedef struct JOYSTICK_FEATURE + struct JOYSTICK_FEATURE { char* name; - JOYSTICK_FEATURE_TYPE type; + enum JOYSTICK_FEATURE_TYPE type; struct JOYSTICK_DRIVER_PRIMITIVE primitives[JOYSTICK_PRIMITIVE_MAX]; - } ATTR_PACKED JOYSTICK_FEATURE; - //} - - typedef struct AddonProps_Peripheral - { - const char* user_path; /*!< @brief path to the user profile */ - const char* addon_path; /*!< @brief path to this add-on */ - } ATTR_PACKED AddonProps_Peripheral; - - struct AddonInstance_Peripheral; - - typedef struct AddonToKodiFuncTable_Peripheral - { - KODI_HANDLE kodiInstance; - void (*trigger_scan)(void* kodiInstance); - void (*refresh_button_maps)(void* kodiInstance, - const char* device_name, - const char* controller_id); - unsigned int (*feature_count)(void* kodiInstance, - const char* controller_id, - JOYSTICK_FEATURE_TYPE type); - JOYSTICK_FEATURE_TYPE(*feature_type) - (void* kodiInstance, const char* controller_id, const char* feature_name); - } AddonToKodiFuncTable_Peripheral; - - //! @todo Mouse, light gun, multitouch - - typedef struct KodiToAddonFuncTable_Peripheral - { - KODI_HANDLE addonInstance; - - void(__cdecl* get_capabilities)(const struct AddonInstance_Peripheral* addonInstance, - struct PERIPHERAL_CAPABILITIES* capabilities); - PERIPHERAL_ERROR(__cdecl* perform_device_scan) - (const struct AddonInstance_Peripheral* addonInstance, - unsigned int* peripheral_count, - struct PERIPHERAL_INFO** scan_results); - void(__cdecl* free_scan_results)(const struct AddonInstance_Peripheral* addonInstance, - unsigned int peripheral_count, - struct PERIPHERAL_INFO* scan_results); - PERIPHERAL_ERROR(__cdecl* get_events) - (const struct AddonInstance_Peripheral* addonInstance, - unsigned int* event_count, - struct PERIPHERAL_EVENT** events); - void(__cdecl* free_events)(const struct AddonInstance_Peripheral* addonInstance, - unsigned int event_count, - struct PERIPHERAL_EVENT* events); - bool(__cdecl* send_event)(const struct AddonInstance_Peripheral* addonInstance, - const struct PERIPHERAL_EVENT* event); - - /// @name Joystick operations - ///{ - PERIPHERAL_ERROR(__cdecl* get_joystick_info) - (const struct AddonInstance_Peripheral* addonInstance, - unsigned int index, - struct JOYSTICK_INFO* info); - void(__cdecl* free_joystick_info)(const struct AddonInstance_Peripheral* addonInstance, - struct JOYSTICK_INFO* info); - PERIPHERAL_ERROR(__cdecl* get_features) - (const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick, - const char* controller_id, - unsigned int* feature_count, - struct JOYSTICK_FEATURE** features); - void(__cdecl* free_features)(const struct AddonInstance_Peripheral* addonInstance, - unsigned int feature_count, - struct JOYSTICK_FEATURE* features); - PERIPHERAL_ERROR(__cdecl* map_features) - (const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick, - const char* controller_id, - unsigned int feature_count, - const struct JOYSTICK_FEATURE* features); - PERIPHERAL_ERROR(__cdecl* get_ignored_primitives) - (const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick, - unsigned int* feature_count, - struct JOYSTICK_DRIVER_PRIMITIVE** primitives); - void(__cdecl* free_primitives)(const struct AddonInstance_Peripheral* addonInstance, - unsigned int, - struct JOYSTICK_DRIVER_PRIMITIVE* primitives); - PERIPHERAL_ERROR(__cdecl* set_ignored_primitives) - (const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick, - unsigned int primitive_count, - const struct JOYSTICK_DRIVER_PRIMITIVE* primitives); - void(__cdecl* save_button_map)(const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick); - void(__cdecl* revert_button_map)(const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick); - void(__cdecl* reset_button_map)(const struct AddonInstance_Peripheral* addonInstance, - const struct JOYSTICK_INFO* joystick, - const char* controller_id); - void(__cdecl* power_off_joystick)(const struct AddonInstance_Peripheral* addonInstance, - unsigned int index); - ///} - } KodiToAddonFuncTable_Peripheral; - - typedef struct AddonInstance_Peripheral + }; + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // General interface functions + typedef KODI_ADDON_PERIPHERAL_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_DESTROY_V1)(KODI_ADDON_PERIPHERAL_HDL hdl); + + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_CAPABILITIES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_CAPABILITIES* capabilities); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_PERFORM_DEVICE_SCAN_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO** scan_results, + size_t* peripheral_count); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_SCAN_RESULTS_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_INFO* scan_results, size_t peripheral_count); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_EVENTS_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT** events, size_t* event_count); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_EVENTS_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct PERIPHERAL_EVENT* events, size_t event_count); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SEND_EVENT_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct PERIPHERAL_EVENT* event); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Joystick operations + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_JOYSTICK_INFO_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index, struct JOYSTICK_INFO* info); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_JOYSTICK_INFO_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_INFO* info); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_FEATURES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + struct JOYSTICK_FEATURE** features, + size_t* feature_count); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_FEATURES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, struct JOYSTICK_FEATURE* features, size_t feature_count); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_MAP_FEATURES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + const struct JOYSTICK_FEATURE* features, + size_t feature_count); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_GET_IGNORED_PRIMITIVES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + struct JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FREE_PRIMITIVES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); + typedef enum PERIPHERAL_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SET_IGNORED_PRIMITIVES_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_SAVE_BUTTON_MAP_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_REVERT_BUTTON_MAP_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, const struct JOYSTICK_INFO* joystick); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_RESET_BUTTON_MAP_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_POWER_OFF_JOYSTICK_V1)( + KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index); + + typedef struct KODI_ADDON_PERIPHERAL_FUNC { - struct AddonProps_Peripheral* props; - struct AddonToKodiFuncTable_Peripheral* toKodi; - struct KodiToAddonFuncTable_Peripheral* toAddon; - } AddonInstance_Peripheral; + PFN_KODI_ADDON_PERIPHERAL_CREATE_V1 create; + PFN_KODI_ADDON_PERIPHERAL_DESTROY_V1 destroy; + + PFN_KODI_ADDON_PERIPHERAL_GET_CAPABILITIES_V1 get_capabilities; + PFN_KODI_ADDON_PERIPHERAL_PERFORM_DEVICE_SCAN_V1 perform_device_scan; + PFN_KODI_ADDON_PERIPHERAL_FREE_SCAN_RESULTS_V1 free_scan_results; + PFN_KODI_ADDON_PERIPHERAL_GET_EVENTS_V1 get_events; + PFN_KODI_ADDON_PERIPHERAL_FREE_EVENTS_V1 free_events; + PFN_KODI_ADDON_PERIPHERAL_SEND_EVENT_V1 send_event; + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Joystick operations + PFN_KODI_ADDON_PERIPHERAL_GET_JOYSTICK_INFO_V1 get_joystick_info; + PFN_KODI_ADDON_PERIPHERAL_FREE_JOYSTICK_INFO_V1 free_joystick_info; + PFN_KODI_ADDON_PERIPHERAL_GET_FEATURES_V1 get_features; + PFN_KODI_ADDON_PERIPHERAL_FREE_FEATURES_V1 free_features; + PFN_KODI_ADDON_PERIPHERAL_MAP_FEATURES_V1 map_features; + PFN_KODI_ADDON_PERIPHERAL_GET_IGNORED_PRIMITIVES_V1 get_ignored_primitives; + PFN_KODI_ADDON_PERIPHERAL_FREE_PRIMITIVES_V1 free_primitives; + PFN_KODI_ADDON_PERIPHERAL_SET_IGNORED_PRIMITIVES_V1 set_ignored_primitives; + PFN_KODI_ADDON_PERIPHERAL_SAVE_BUTTON_MAP_V1 save_button_map; + PFN_KODI_ADDON_PERIPHERAL_REVERT_BUTTON_MAP_V1 revert_button_map; + PFN_KODI_ADDON_PERIPHERAL_RESET_BUTTON_MAP_V1 reset_button_map; + PFN_KODI_ADDON_PERIPHERAL_POWER_OFF_JOYSTICK_V1 power_off_joystick; + } KODI_ADDON_PERIPHERAL_FUNC; + + ATTR_DLL_EXPORT void kodi_addon_peripheral_trigger_scan(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_peripheral_refresh_button_maps( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* device_name, const char* controller_id) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_addon_peripheral_feature_count( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* controller_id, + enum JOYSTICK_FEATURE_TYPE type) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT enum JOYSTICK_FEATURE_TYPE kodi_addon_peripheral_feature_type( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* controller_id, const char* feature_name) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h index 96e1eea9710a7..3843c789bf6ec 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h @@ -9,7 +9,7 @@ #ifndef C_API_ADDONINSTANCE_PVR_H #define C_API_ADDONINSTANCE_PVR_H -#include "../../AddonBase.h" +#include "../addon_base.h" #include "pvr/pvr_channel_groups.h" #include "pvr/pvr_channels.h" #include "pvr/pvr_defines.h" @@ -22,319 +22,328 @@ #include "pvr/pvr_stream.h" #include "pvr/pvr_timers.h" -//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ -// "C" main interface function tables between Kodi and addon -// -// Values related to all parts and not used direct on addon, are to define here. -// #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - /*! - * @internal - * @brief PVR "C" basis API interface - * - * This field contains things that are exchanged between Kodi and Addon - * and is the basis of the PVR-side "C" API. - * - * @warning Care should be taken when making changes in this fields!\n - * Changes can destroy API in addons that have already been created. If a - * necessary change or new feature is added, the version of the PVR - * at @ref ADDON_INSTANCE_VERSION_PVR_MIN must be increased too.\n - * \n - * Conditional changes can be made in some places, without min PVR version - * increase. The add-on should then use CreateInstanceEx and add partial tests - * for this in the C++ header. - * - * Have by add of new parts a look about **Doxygen** `\\ingroup`, so that - * added parts included in documentation. - * - * If you add addon side related documentation, where his dev need know, - * use `///`. For parts only for Kodi make it like here. - * - * @endinternal - */ - - struct AddonInstance_PVR; - - /*! - * @brief Structure to define typical standard values - */ - typedef struct AddonProperties_PVR - { - const char* strUserPath; - const char* strClientPath; - int iEpgMaxFutureDays; - int iEpgMaxPastDays; - } AddonProperties_PVR; - - /*! - * @brief Structure to transfer the methods from Kodi to addon - */ - typedef struct AddonToKodiFuncTable_PVR + typedef void* KODI_ADDON_PVR_HDL; + typedef void* KODI_ADDON_PVR_TRANSFER_HDL; + + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CAPABILITIES_V1)( + KODI_ADDON_PVR_HDL hdl, struct PVR_ADDON_CAPABILITIES* capabilities); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_NAME_V1)( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_VERSION_V1)( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_HOSTNAME_V1)( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CONNECTION_STRING_V1)( + KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DRIVE_SPACE_V1)( + KODI_ADDON_PVR_HDL hdl, uint64_t* total, uint64_t* used); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_SETTINGS_MENU_HOOK_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_AMOUNT_V1)( + KODI_ADDON_PVR_HDL hdl, int* amount); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_V1)( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_STREAM_PROPERTIES_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_SIGNAL_STATUS_V1)( + KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_SIGNAL_STATUS* signal_status); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DESCRAMBLE_INFO_V1)( + KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_DESCRAMBLE_INFO* descramble_info); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Provider interface functions + + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_AMOUNT_V1)( + KODI_ADDON_PVR_HDL hdl, int* amount); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_V1)( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel group interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_AMOUNT_V1)( + KODI_ADDON_PVR_HDL hdl, int* amount); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_V1)( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUP_MEMBERS_V1)( + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel edit interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_CHANNEL_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_CHANNEL_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SETTINGS_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_ADD_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SCAN_V1)( + KODI_ADDON_PVR_HDL hdl); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_CHANNEL_MENU_HOOK_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_CHANNEL* channel); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // EPG interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_FOR_CHANNEL_V1)( + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + int channel_uid, + time_t start, + time_t end); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_RECORDABLE_V1)( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_recordable); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_PLAYABLE_V1)( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_playable); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_EDL_V1)( + KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_EDL_ENTRY edl[], size_t* size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_STREAM_PROPERTIES_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_PAST_DAYS_V1)( + KODI_ADDON_PVR_HDL hdl, int past_days); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_FUTURE_DAYS_V1)( + KODI_ADDON_PVR_HDL hdl, int future_days); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_EPG_MENU_HOOK_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct EPG_TAG* tag); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Recording interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_AMOUNT_V1)( + KODI_ADDON_PVR_HDL hdl, bool deleted, int* amount); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_V1)( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool deleted); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_RECORDING_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UNDELETE_RECORDING_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_ALL_RECORDINGS_FROM_TRASH_V1)( + KODI_ADDON_PVR_HDL hdl); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_RECORDING_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LIFETIME_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_PLAY_COUNT_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int count); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LAST_PLAYED_POSITION_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int last_played_position); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_LAST_PLAYED_POSITION_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int* last_played_position); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_EDL_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_EDL_ENTRY edl[], + size_t* size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_SIZE_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int64_t* size); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_STREAM_PROPERTIES_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_RECORDING_MENU_HOOK_V1)( + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_RECORDING* recording); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Timer interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMER_TYPES_V1)( + KODI_ADDON_PVR_HDL hdl, struct PVR_TIMER_TYPE types[], size_t* types_count); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_AMOUNT_V1)( + KODI_ADDON_PVR_HDL hdl, int* amount); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_V1)( + KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ADD_TIMER_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_TIMER_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer, bool force_delete); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UPDATE_TIMER_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_TIMER_MENU_HOOK_V1)( + KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_TIMER* timer); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Powersaving interface functions + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_SLEEP_V1)( + KODI_ADDON_PVR_HDL hdl); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_WAKE_V1)( + KODI_ADDON_PVR_HDL hdl); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_ACTIVATED_V1)( + KODI_ADDON_PVR_HDL hdl); + typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_DEACTIVATED_V1)( + KODI_ADDON_PVR_HDL hdl); + + typedef struct KODI_ADDON_PVR_FUNC { - // Pointer inside Kodi where used from him to find his class - KODI_HANDLE kodiInstance; - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // General callback functions - void (*AddMenuHook)(void* kodiInstance, const struct PVR_MENUHOOK* hook); - void (*RecordingNotification)(void* kodiInstance, - const char* name, - const char* fileName, - bool on); - void (*ConnectionStateChange)(void* kodiInstance, - const char* strConnectionString, - enum PVR_CONNECTION_STATE newState, - const char* strMessage); - void (*EpgEventStateChange)(void* kodiInstance, - struct EPG_TAG* tag, - enum EPG_EVENT_STATE newState); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Transfer functions where give data back to Kodi, e.g. GetChannels calls TransferChannelEntry - void (*TransferChannelEntry)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_CHANNEL* chan); - void (*TransferProviderEntry)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_PROVIDER* chanProvider); - void (*TransferChannelGroup)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_CHANNEL_GROUP* group); - void (*TransferChannelGroupMember)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_CHANNEL_GROUP_MEMBER* member); - void (*TransferEpgEntry)(void* kodiInstance, - const PVR_HANDLE handle, - const struct EPG_TAG* epgentry); - void (*TransferRecordingEntry)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_RECORDING* recording); - void (*TransferTimerEntry)(void* kodiInstance, - const PVR_HANDLE handle, - const struct PVR_TIMER* timer); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Kodi inform interface functions - void (*TriggerChannelUpdate)(void* kodiInstance); - void (*TriggerProvidersUpdate)(void* kodiInstance); - void (*TriggerChannelGroupsUpdate)(void* kodiInstance); - void (*TriggerEpgUpdate)(void* kodiInstance, unsigned int iChannelUid); - void (*TriggerRecordingUpdate)(void* kodiInstance); - void (*TriggerTimerUpdate)(void* kodiInstance); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Stream demux interface functions - void (*FreeDemuxPacket)(void* kodiInstance, struct DEMUX_PACKET* pPacket); - struct DEMUX_PACKET* (*AllocateDemuxPacket)(void* kodiInstance, int iDataSize); - struct PVR_CODEC (*GetCodecByName)(const void* kodiInstance, const char* strCodecName); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // New functions becomes added below and can be on another API change (where - // breaks min API version) moved up. - } AddonToKodiFuncTable_PVR; - - /*! - * @brief Structure to transfer the methods from addon to Kodi - */ - typedef struct KodiToAddonFuncTable_PVR - { - // Pointer inside addon where used on them to find his instance class (currently unused!) - KODI_HANDLE addonInstance; - //--==----==----==----==----==----==----==----==----==----==----==----==----== // General interface functions - enum PVR_ERROR(__cdecl* GetCapabilities)(const struct AddonInstance_PVR*, - struct PVR_ADDON_CAPABILITIES*); - enum PVR_ERROR(__cdecl* GetBackendName)(const struct AddonInstance_PVR*, char*, int); - enum PVR_ERROR(__cdecl* GetBackendVersion)(const struct AddonInstance_PVR*, char*, int); - enum PVR_ERROR(__cdecl* GetBackendHostname)(const struct AddonInstance_PVR*, char*, int); - enum PVR_ERROR(__cdecl* GetConnectionString)(const struct AddonInstance_PVR*, char*, int); - enum PVR_ERROR(__cdecl* GetDriveSpace)(const struct AddonInstance_PVR*, uint64_t*, uint64_t*); - enum PVR_ERROR(__cdecl* CallSettingsMenuHook)(const struct AddonInstance_PVR*, - const struct PVR_MENUHOOK*); + PFN_KODI_ADDON_PVR_GET_CAPABILITIES_V1 get_capabilities; + PFN_KODI_ADDON_PVR_GET_BACKEND_NAME_V1 get_backend_name; + PFN_KODI_ADDON_PVR_GET_BACKEND_VERSION_V1 get_backend_version; + PFN_KODI_ADDON_PVR_GET_BACKEND_HOSTNAME_V1 get_backend_hostname; + PFN_KODI_ADDON_PVR_GET_CONNECTION_STRING_V1 get_connection_string; + PFN_KODI_ADDON_PVR_GET_DRIVE_SPACE_V1 get_drive_space; + PFN_KODI_ADDON_PVR_CALL_SETTINGS_MENU_HOOK_V1 call_settings_menu_hook; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Channel interface functions - - enum PVR_ERROR(__cdecl* GetChannelsAmount)(const struct AddonInstance_PVR*, int*); - enum PVR_ERROR(__cdecl* GetChannels)(const struct AddonInstance_PVR*, PVR_HANDLE, bool); - enum PVR_ERROR(__cdecl* GetChannelStreamProperties)(const struct AddonInstance_PVR*, - const struct PVR_CHANNEL*, - struct PVR_NAMED_VALUE*, - unsigned int*); - enum PVR_ERROR(__cdecl* GetSignalStatus)(const struct AddonInstance_PVR*, - int, - struct PVR_SIGNAL_STATUS*); - enum PVR_ERROR(__cdecl* GetDescrambleInfo)(const struct AddonInstance_PVR*, - int, - struct PVR_DESCRAMBLE_INFO*); + PFN_KODI_ADDON_PVR_GET_CHANNELS_AMOUNT_V1 get_channels_amount; + PFN_KODI_ADDON_PVR_GET_CHANNELS_V1 get_channels; + PFN_KODI_ADDON_PVR_GET_CHANNEL_STREAM_PROPERTIES_V1 get_channel_stream_properties; + PFN_KODI_ADDON_PVR_GET_SIGNAL_STATUS_V1 get_signal_status; + PFN_KODI_ADDON_PVR_GET_DESCRAMBLE_INFO_V1 get_descramble_info; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Provider interface functions - - enum PVR_ERROR(__cdecl* GetProvidersAmount)(const struct AddonInstance_PVR*, int*); - enum PVR_ERROR(__cdecl* GetProviders)(const struct AddonInstance_PVR*, PVR_HANDLE); + PFN_KODI_ADDON_PVR_GET_PROVIDERS_AMOUNT_V1 get_providers_amount; + PFN_KODI_ADDON_PVR_GET_PROVIDERS_V1 get_providers; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Channel group interface functions - enum PVR_ERROR(__cdecl* GetChannelGroupsAmount)(const struct AddonInstance_PVR*, int*); - enum PVR_ERROR(__cdecl* GetChannelGroups)(const struct AddonInstance_PVR*, PVR_HANDLE, bool); - enum PVR_ERROR(__cdecl* GetChannelGroupMembers)(const struct AddonInstance_PVR*, - PVR_HANDLE, - const struct PVR_CHANNEL_GROUP*); + PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_AMOUNT_V1 get_channel_groups_amount; + PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_V1 get_channel_groups; + PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUP_MEMBERS_V1 get_channel_group_members; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Channel edit interface functions - enum PVR_ERROR(__cdecl* DeleteChannel)(const struct AddonInstance_PVR*, - const struct PVR_CHANNEL*); - enum PVR_ERROR(__cdecl* RenameChannel)(const struct AddonInstance_PVR*, - const struct PVR_CHANNEL*); - enum PVR_ERROR(__cdecl* OpenDialogChannelSettings)(const struct AddonInstance_PVR*, - const struct PVR_CHANNEL*); - enum PVR_ERROR(__cdecl* OpenDialogChannelAdd)(const struct AddonInstance_PVR*, - const struct PVR_CHANNEL*); - enum PVR_ERROR(__cdecl* OpenDialogChannelScan)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* CallChannelMenuHook)(const struct AddonInstance_PVR*, - const PVR_MENUHOOK*, - const PVR_CHANNEL*); + PFN_KODI_ADDON_PVR_DELETE_CHANNEL_V1 delete_channel; + PFN_KODI_ADDON_PVR_RENAME_CHANNEL_V1 rename_channel; + PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SETTINGS_V1 open_dialog_channel_settings; + PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_ADD_V1 open_dialog_channel_add; + PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SCAN_V1 open_dialog_channel_scan; + PFN_KODI_ADDON_PVR_CALL_CHANNEL_MENU_HOOK_V1 call_channel_menu_hook; //--==----==----==----==----==----==----==----==----==----==----==----==----== // EPG interface functions - enum PVR_ERROR(__cdecl* GetEPGForChannel)( - const struct AddonInstance_PVR*, PVR_HANDLE, int, time_t, time_t); - enum PVR_ERROR(__cdecl* IsEPGTagRecordable)(const struct AddonInstance_PVR*, - const struct EPG_TAG*, - bool*); - enum PVR_ERROR(__cdecl* IsEPGTagPlayable)(const struct AddonInstance_PVR*, - const struct EPG_TAG*, - bool*); - enum PVR_ERROR(__cdecl* GetEPGTagEdl)(const struct AddonInstance_PVR*, - const struct EPG_TAG*, - struct PVR_EDL_ENTRY[], - int*); - enum PVR_ERROR(__cdecl* GetEPGTagStreamProperties)(const struct AddonInstance_PVR*, - const struct EPG_TAG*, - struct PVR_NAMED_VALUE*, - unsigned int*); - enum PVR_ERROR(__cdecl* SetEPGMaxPastDays)(const struct AddonInstance_PVR*, int); - enum PVR_ERROR(__cdecl* SetEPGMaxFutureDays)(const struct AddonInstance_PVR*, int); - enum PVR_ERROR(__cdecl* CallEPGMenuHook)(const struct AddonInstance_PVR*, - const struct PVR_MENUHOOK*, - const struct EPG_TAG*); + PFN_KODI_ADDON_PVR_GET_EPG_FOR_CHANNEL_V1 get_epg_for_channel; + PFN_KODI_ADDON_PVR_IS_EPG_TAG_RECORDABLE_V1 is_epg_tag_recordable; + PFN_KODI_ADDON_PVR_IS_EPG_TAG_PLAYABLE_V1 is_epg_tag_playable; + PFN_KODI_ADDON_PVR_GET_EPG_TAG_EDL_V1 get_epg_tag_edl; + PFN_KODI_ADDON_PVR_GET_EPG_TAG_STREAM_PROPERTIES_V1 get_epg_tag_stream_properties; + PFN_KODI_ADDON_PVR_SET_EPG_MAX_PAST_DAYS_V1 set_epg_max_past_days; + PFN_KODI_ADDON_PVR_SET_EPG_MAX_FUTURE_DAYS_V1 set_epg_max_future_days; + PFN_KODI_ADDON_PVR_CALL_EPG_MENU_HOOK_V1 call_epg_menu_hook; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Recording interface functions - enum PVR_ERROR(__cdecl* GetRecordingsAmount)(const struct AddonInstance_PVR*, bool, int*); - enum PVR_ERROR(__cdecl* GetRecordings)(const struct AddonInstance_PVR*, PVR_HANDLE, bool); - enum PVR_ERROR(__cdecl* DeleteRecording)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*); - enum PVR_ERROR(__cdecl* UndeleteRecording)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*); - enum PVR_ERROR(__cdecl* DeleteAllRecordingsFromTrash)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* RenameRecording)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*); - enum PVR_ERROR(__cdecl* SetRecordingLifetime)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*); - enum PVR_ERROR(__cdecl* SetRecordingPlayCount)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*, - int); - enum PVR_ERROR(__cdecl* SetRecordingLastPlayedPosition)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*, - int); - enum PVR_ERROR(__cdecl* GetRecordingLastPlayedPosition)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*, - int*); - enum PVR_ERROR(__cdecl* GetRecordingEdl)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*, - struct PVR_EDL_ENTRY[], - int*); - enum PVR_ERROR(__cdecl* GetRecordingSize)(const struct AddonInstance_PVR*, - const PVR_RECORDING*, - int64_t*); - enum PVR_ERROR(__cdecl* GetRecordingStreamProperties)(const struct AddonInstance_PVR*, - const struct PVR_RECORDING*, - struct PVR_NAMED_VALUE*, - unsigned int*); - enum PVR_ERROR(__cdecl* CallRecordingMenuHook)(const struct AddonInstance_PVR*, - const struct PVR_MENUHOOK*, - const struct PVR_RECORDING*); + PFN_KODI_ADDON_PVR_GET_RECORDINGS_AMOUNT_V1 get_recordings_amount; + PFN_KODI_ADDON_PVR_GET_RECORDINGS_V1 get_recordings; + PFN_KODI_ADDON_PVR_DELETE_RECORDING_V1 delete_recording; + PFN_KODI_ADDON_PVR_UNDELETE_RECORDING_V1 undelete_recording; + PFN_KODI_ADDON_PVR_DELETE_ALL_RECORDINGS_FROM_TRASH_V1 delete_all_recordings_from_trash; + PFN_KODI_ADDON_PVR_RENAME_RECORDING_V1 rename_recording; + PFN_KODI_ADDON_PVR_SET_RECORDING_LIFETIME_V1 set_recording_lifetime; + PFN_KODI_ADDON_PVR_SET_RECORDING_PLAY_COUNT_V1 set_recording_play_count; + PFN_KODI_ADDON_PVR_SET_RECORDING_LAST_PLAYED_POSITION_V1 set_recording_last_played_position; + PFN_KODI_ADDON_PVR_GET_RECORDING_LAST_PLAYED_POSITION_V1 get_recording_last_played_position; + PFN_KODI_ADDON_PVR_GET_RECORDING_EDL_V1 get_recording_edl; + PFN_KODI_ADDON_PVR_GET_RECORDING_SIZE_V1 get_recording_size; + PFN_KODI_ADDON_PVR_GET_RECORDING_STREAM_PROPERTIES_V1 get_recording_stream_properties; + PFN_KODI_ADDON_PVR_CALL_RECORDING_MENU_HOOK_V1 call_recording_menu_hook; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Timer interface functions - enum PVR_ERROR(__cdecl* GetTimerTypes)(const struct AddonInstance_PVR*, - struct PVR_TIMER_TYPE[], - int*); - enum PVR_ERROR(__cdecl* GetTimersAmount)(const struct AddonInstance_PVR*, int*); - enum PVR_ERROR(__cdecl* GetTimers)(const struct AddonInstance_PVR*, PVR_HANDLE); - enum PVR_ERROR(__cdecl* AddTimer)(const struct AddonInstance_PVR*, const struct PVR_TIMER*); - enum PVR_ERROR(__cdecl* DeleteTimer)(const struct AddonInstance_PVR*, - const struct PVR_TIMER*, - bool); - enum PVR_ERROR(__cdecl* UpdateTimer)(const struct AddonInstance_PVR*, const struct PVR_TIMER*); - enum PVR_ERROR(__cdecl* CallTimerMenuHook)(const struct AddonInstance_PVR*, - const struct PVR_MENUHOOK*, - const struct PVR_TIMER*); + PFN_KODI_ADDON_PVR_GET_TIMER_TYPES_V1 get_timer_types; + PFN_KODI_ADDON_PVR_GET_TIMERS_AMOUNT_V1 get_timers_amount; + PFN_KODI_ADDON_PVR_GET_TIMERS_V1 get_timers; + PFN_KODI_ADDON_PVR_ADD_TIMER_V1 add_timer; + PFN_KODI_ADDON_PVR_DELETE_TIMER_V1 delete_timer; + PFN_KODI_ADDON_PVR_UPDATE_TIMER_V1 update_timer; + PFN_KODI_ADDON_PVR_CALL_TIMER_MENU_HOOK_V1 call_timer_menu_hook; //--==----==----==----==----==----==----==----==----==----==----==----==----== // Powersaving interface functions - enum PVR_ERROR(__cdecl* OnSystemSleep)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* OnSystemWake)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* OnPowerSavingActivated)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* OnPowerSavingDeactivated)(const struct AddonInstance_PVR*); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Live stream read interface functions - bool(__cdecl* OpenLiveStream)(const struct AddonInstance_PVR*, const struct PVR_CHANNEL*); - void(__cdecl* CloseLiveStream)(const struct AddonInstance_PVR*); - int(__cdecl* ReadLiveStream)(const struct AddonInstance_PVR*, unsigned char*, unsigned int); - int64_t(__cdecl* SeekLiveStream)(const struct AddonInstance_PVR*, int64_t, int); - int64_t(__cdecl* LengthLiveStream)(const struct AddonInstance_PVR*); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Recording stream read interface functions - bool(__cdecl* OpenRecordedStream)(const struct AddonInstance_PVR*, const struct PVR_RECORDING*); - void(__cdecl* CloseRecordedStream)(const struct AddonInstance_PVR*); - int(__cdecl* ReadRecordedStream)(const struct AddonInstance_PVR*, unsigned char*, unsigned int); - int64_t(__cdecl* SeekRecordedStream)(const struct AddonInstance_PVR*, int64_t, int); - int64_t(__cdecl* LengthRecordedStream)(const struct AddonInstance_PVR*); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // Stream demux interface functions - enum PVR_ERROR(__cdecl* GetStreamProperties)(const struct AddonInstance_PVR*, - struct PVR_STREAM_PROPERTIES*); - struct DEMUX_PACKET*(__cdecl* DemuxRead)(const struct AddonInstance_PVR*); - void(__cdecl* DemuxReset)(const struct AddonInstance_PVR*); - void(__cdecl* DemuxAbort)(const struct AddonInstance_PVR*); - void(__cdecl* DemuxFlush)(const struct AddonInstance_PVR*); - void(__cdecl* SetSpeed)(const struct AddonInstance_PVR*, int); - void(__cdecl* FillBuffer)(const struct AddonInstance_PVR*, bool); - bool(__cdecl* SeekTime)(const struct AddonInstance_PVR*, double, bool, double*); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // General stream interface functions - bool(__cdecl* CanPauseStream)(const struct AddonInstance_PVR*); - void(__cdecl* PauseStream)(const struct AddonInstance_PVR*, bool); - bool(__cdecl* CanSeekStream)(const struct AddonInstance_PVR*); - bool(__cdecl* IsRealTimeStream)(const struct AddonInstance_PVR*); - enum PVR_ERROR(__cdecl* GetStreamTimes)(const struct AddonInstance_PVR*, - struct PVR_STREAM_TIMES*); - enum PVR_ERROR(__cdecl* GetStreamReadChunkSize)(const struct AddonInstance_PVR*, int*); - - //--==----==----==----==----==----==----==----==----==----==----==----==----== - // New functions becomes added below and can be on another API change (where - // breaks min API version) moved up. - } KodiToAddonFuncTable_PVR; - - typedef struct AddonInstance_PVR - { - struct AddonProperties_PVR* props; - struct AddonToKodiFuncTable_PVR* toKodi; - struct KodiToAddonFuncTable_PVR* toAddon; - } AddonInstance_PVR; + PFN_KODI_ADDON_PVR_ON_SYSTEM_SLEEP_V1 on_system_sleep; + PFN_KODI_ADDON_PVR_ON_SYSTEM_WAKE_V1 on_system_wake; + PFN_KODI_ADDON_PVR_ON_POWER_SAVING_ACTIVATED_V1 on_power_saving_activated; + PFN_KODI_ADDON_PVR_ON_POWER_SAVING_DEACTIVATED_V1 on_power_saving_deactivated; + } KODI_ADDON_PVR_FUNC; + + ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_future_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_past_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT void kodi_addon_pvr_add_menu_hook(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct PVR_MENUHOOK* hook) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_recording_notification(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* name, + const char* fileName, + bool on) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_connection_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* strConnectionString, + enum PVR_CONNECTION_STATE newState, + const char* strMessage) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_epg_event_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct EPG_TAG* tag, + enum EPG_EVENT_STATE newState) + __INTRODUCED_IN_KODI(1); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Transfer functions where give data back to Kodi, e.g. GetChannels calls TransferChannelEntry + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_entry( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL* chan) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_provider_entry( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_PROVIDER* chanProvider) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group_member( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP_MEMBER* member) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_epg_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct EPG_TAG* epgentry) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_recording_entry( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_RECORDING* recording) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_timer_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_TIMER* timer) + __INTRODUCED_IN_KODI(1); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Kodi inform interface functions + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_providers_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_groups_update( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_epg_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int iChannelUid) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_recording_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_timer_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h index 062390d3583b9..de22d2148a165 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/screensaver.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2020 Team Kodi + * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -28,30 +28,22 @@ extern "C" float pixelRatio; }; - typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_START_V1)( - const KODI_ADDON_SCREENSAVER_HDL hdl); - typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_STOP_V1)( - const KODI_ADDON_SCREENSAVER_HDL hdl); - typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_RENDER_V1)( - const KODI_ADDON_SCREENSAVER_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_START_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_STOP_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_RENDER_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); - typedef struct KodiToAddonFuncTable_Screensaver + typedef struct KODI_ADDON_SCREENSAVER_FUNC { + PFN_KODI_ADDON_INSTANCE_CREATE_V1 create; + PFN_KODI_ADDON_INSTANCE_DESTROY_V1 destroy; PFN_KODI_ADDON_SCREENSAVER_START_V1 start; PFN_KODI_ADDON_SCREENSAVER_STOP_V1 stop; PFN_KODI_ADDON_SCREENSAVER_RENDER_V1 render; - } KodiToAddonFuncTable_Screensaver; + } KODI_ADDON_SCREENSAVER_FUNC; - typedef struct AddonToKodiFuncTable_Screensaver - { - void (*get_properties)(const KODI_HANDLE hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props); - } AddonToKodiFuncTable_Screensaver; - - typedef struct AddonInstance_Screensaver - { - struct AddonToKodiFuncTable_Screensaver* toKodi; - struct KodiToAddonFuncTable_Screensaver* toAddon; - } AddonInstance_Screensaver; + ATTR_DLL_EXPORT void kodi_addon_screensaver_get_properties( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h index b4fd90cf32207..ca8f4cfb55e10 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/vfs.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2005-2020 Team Kodi + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. @@ -11,14 +12,16 @@ #include "../addon_base.h" #include "../filesystem.h" -#define VFS_FILE_HANDLE void* - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - struct VFSURL + typedef void* KODI_ADDON_VFS_HDL; + typedef void* KODI_VFS_FILE_HDL; + typedef void* KODI_CTX_CB_HDL; + + struct KODI_ADDON_VFS_URL { const char* url; const char* domain; @@ -33,112 +36,128 @@ extern "C" const char* protocol; }; - typedef struct VFSGetDirectoryCallbacks /* internal */ - { - bool(__cdecl* get_keyboard_input)(KODI_HANDLE ctx, - const char* heading, - char** input, - bool hidden_input); - void(__cdecl* set_error_dialog)(KODI_HANDLE ctx, - const char* heading, - const char* line1, - const char* line2, - const char* line3); - void(__cdecl* require_authentication)(KODI_HANDLE ctx, const char* url); - KODI_HANDLE ctx; - } VFSGetDirectoryCallbacks; - - typedef struct AddonProps_VFSEntry /* internal */ - { - int dummy; - } AddonProps_VFSEntry; + typedef KODI_ADDON_VFS_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DESTROY_V1)(const KODI_ADDON_VFS_HDL hdl); - typedef struct AddonToKodiFuncTable_VFSEntry /* internal */ - { - KODI_HANDLE kodiInstance; - } AddonToKodiFuncTable_VFSEntry; + typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_FOR_WRITE_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, bool overwrite); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_CLOSE_V1)(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); + typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_READ_V1)(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t buf_size); + typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_WRITE_V1)(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t buf_size); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_SEEK_V1)(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_TRUNCATE_V1)(const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_LENGTH_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_POSITION_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_CHUNK_SIZE_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_SEEK_POSSIBLE_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_CACHE_STATUS_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, struct VFS_CACHE_STATUS* status); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_CACHE_RATE_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint32_t rate); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_RETRY_V1)( + const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, bool retry); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_STAT_V1)(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_EXISTS_V1)(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CLEAR_OUT_IDLE_V1)(const KODI_ADDON_VFS_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DISCONNECT_ALL_V1)(const KODI_ADDON_VFS_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DELETE_IT_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_RENAME_V1)(const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + const struct KODI_ADDON_VFS_URL* url2); - struct AddonInstance_VFSEntry; - typedef struct KodiToAddonFuncTable_VFSEntry /* internal */ - { - KODI_HANDLE addonInstance; - - VFS_FILE_HANDLE(__cdecl* open) - (const struct AddonInstance_VFSEntry* instance, const struct VFSURL* url); - VFS_FILE_HANDLE(__cdecl* open_for_write) - (const struct AddonInstance_VFSEntry* instance, const struct VFSURL* url, bool overwrite); - ssize_t(__cdecl* read)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - uint8_t* buffer, - size_t buf_size); - ssize_t(__cdecl* write)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - const uint8_t* buffer, - size_t buf_size); - int64_t(__cdecl* seek)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - int64_t position, - int whence); - int(__cdecl* truncate)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - int64_t size); - int64_t(__cdecl* get_length)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context); - int64_t(__cdecl* get_position)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context); - int(__cdecl* get_chunk_size)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context); - bool(__cdecl* io_control_get_seek_possible)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context); - bool(__cdecl* io_control_get_cache_status)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - struct VFS_CACHE_STATUS_DATA* status); - bool(__cdecl* io_control_set_cache_rate)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - uint32_t rate); - bool(__cdecl* io_control_set_retry)(const struct AddonInstance_VFSEntry* instance, - VFS_FILE_HANDLE context, - bool retry); - int(__cdecl* stat)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url, - struct STAT_STRUCTURE* buffer); - bool(__cdecl* close)(const struct AddonInstance_VFSEntry* instance, VFS_FILE_HANDLE context); - - bool(__cdecl* exists)(const struct AddonInstance_VFSEntry* instance, const struct VFSURL* url); - void(__cdecl* clear_out_idle)(const struct AddonInstance_VFSEntry* instance); - void(__cdecl* disconnect_all)(const struct AddonInstance_VFSEntry* instance); - bool(__cdecl* delete_it)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url); - bool(__cdecl* rename)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url, - const struct VFSURL* url2); - bool(__cdecl* directory_exists)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url); - bool(__cdecl* remove_directory)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url); - bool(__cdecl* create_directory)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url); - bool(__cdecl* get_directory)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url, - struct VFSDirEntry** entries, - int* num_entries, - struct VFSGetDirectoryCallbacks* callbacks); - bool(__cdecl* contains_files)(const struct AddonInstance_VFSEntry* instance, - const struct VFSURL* url, - struct VFSDirEntry** entries, - int* num_entries, - char* rootpath); - void(__cdecl* free_directory)(const struct AddonInstance_VFSEntry* instance, - struct VFSDirEntry* entries, - int num_entries); - } KodiToAddonFuncTable_VFSEntry; - - typedef struct AddonInstance_VFSEntry /* internal */ + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_EXISTS_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_REMOVE_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CREATE_V1)( + const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_GET_V1)( + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CONTAINS_FILES_V1)( + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + char** rootpath); + + struct KODI_ADDON_VFS_FUNC { - struct AddonProps_VFSEntry* props; - struct AddonToKodiFuncTable_VFSEntry* toKodi; - struct KodiToAddonFuncTable_VFSEntry* toAddon; - } AddonInstance_VFSEntry; + PFN_KODI_ADDON_VFS_CREATE_V1 create; + PFN_KODI_ADDON_VFS_DESTROY_V1 destroy; + + PFN_KODI_ADDON_VFS_CLEAR_OUT_IDLE_V1 clear_out_idle; + PFN_KODI_ADDON_VFS_DISCONNECT_ALL_V1 disconnect_all; + + PFN_KODI_ADDON_VFS_FILE_OPEN_V1 file_open; + PFN_KODI_ADDON_VFS_FILE_OPEN_FOR_WRITE_V1 file_open_for_write; + PFN_KODI_ADDON_VFS_FILE_CLOSE_V1 file_close; + PFN_KODI_ADDON_VFS_FILE_READ_V1 file_read; + PFN_KODI_ADDON_VFS_FILE_WRITE_V1 file_write; + PFN_KODI_ADDON_VFS_FILE_SEEK_V1 file_seek; + PFN_KODI_ADDON_VFS_FILE_TRUNCATE_V1 file_truncate; + PFN_KODI_ADDON_VFS_FILE_GET_LENGTH_V1 file_get_length; + PFN_KODI_ADDON_VFS_FILE_GET_POSITION_V1 file_get_position; + PFN_KODI_ADDON_VFS_FILE_GET_CHUNK_SIZE_V1 file_get_chunk_size; + PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_SEEK_POSSIBLE_V1 file_io_control_get_seek_possible; + PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_CACHE_STATUS_V1 file_io_control_get_cache_status; + PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_CACHE_RATE_V1 file_io_control_set_cache_rate; + PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_RETRY_V1 file_io_control_set_retry; + + PFN_KODI_ADDON_VFS_STAT_V1 stat; + PFN_KODI_ADDON_VFS_EXISTS_V1 exists; + PFN_KODI_ADDON_VFS_DELETE_IT_V1 delete_it; + PFN_KODI_ADDON_VFS_RENAME_V1 rename; + + PFN_KODI_ADDON_VFS_DIRECTORY_EXISTS_V1 directory_exists; + PFN_KODI_ADDON_VFS_DIRECTORY_REMOVE_V1 directory_remove; + PFN_KODI_ADDON_VFS_DIRECTORY_CREATE_V1 directory_create; + PFN_KODI_ADDON_VFS_DIRECTORY_GET_V1 directory_get; + PFN_KODI_ADDON_VFS_DIRECTORY_CONTAINS_FILES_V1 directory_contains_files; + }; + + ATTR_DLL_EXPORT bool kodi_addon_vfs_get_dir_cb__get_keyboard_input( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + char** input, + bool hidden_input) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__set_error_dialog( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + const char* line1, + const char* line2, + const char* line3) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__require_authentication( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* url) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/videocodec.h similarity index 72% rename from xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h rename to xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/videocodec.h index 98a32f2db4ab7..570fb3103f63d 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/video_codec.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/videocodec.h @@ -1,11 +1,13 @@ /* - * Copyright (C) 2017-2018 Team Kodi + * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ +/*---AUTO_GEN_PARSE---*/ + #ifndef C_API_ADDONINSTANCE_VIDEOCODEC_H #define C_API_ADDONINSTANCE_VIDEOCODEC_H @@ -19,6 +21,8 @@ extern "C" { #endif /* __cplusplus */ + typedef void* KODI_ADDON_VIDEOCODEC_HDL; + //============================================================================ /// @ingroup cpp_kodi_addon_videocodec_Defs /// @brief Return values used by video decoder interface @@ -148,7 +152,7 @@ extern "C" { /// @brief The video format declared with @ref VIDEOCODEC_FORMAT and to be /// used on the addon. - enum VIDEOCODEC_FORMAT videoFormat; + enum VIDEOCODEC_FORMAT video_format; /// @brief Video coded process flags, used to perform special operations in /// stream calls. @@ -163,16 +167,16 @@ extern "C" uint32_t height; /// @brief Data to be decoded in the addon. - uint8_t* decodedData; + uint8_t* decoded_data; /// @brief Size of the data given with @ref decodedData - size_t decodedDataSize; + size_t decoded_data_size; /// @brief YUV color plane calculation array. /// /// This includes the three values of the YUV and can be identified using /// @ref VIDEOCODEC_PLANE. - uint32_t planeOffsets[VIDEOCODEC_PICTURE_MAXPLANES]; + uint32_t plane_offsets[VIDEOCODEC_PICTURE_MAXPLANES]; /// @brief YUV color stride calculation array /// @@ -188,7 +192,7 @@ extern "C" /// To handle the input stream buffer, this is given by Kodi using /// @ref kodi::addon::CInstanceVideoCodec::GetFrameBuffer and must be /// released again using @ref kodi::addon::CInstanceVideoCodec::ReleaseFrameBuffer. - KODI_HANDLE videoBufferHandle; + KODI_OWN_HDL video_buffer_handle; }; ///@} //---------------------------------------------------------------------------- @@ -196,63 +200,51 @@ extern "C" struct VIDEOCODEC_INITDATA { enum VIDEOCODEC_TYPE codec; - enum STREAMCODEC_PROFILE codecProfile; - enum VIDEOCODEC_FORMAT* videoFormats; + enum STREAMCODEC_PROFILE codec_profile; + enum VIDEOCODEC_FORMAT* video_formats; uint32_t width; uint32_t height; - const uint8_t* extraData; - unsigned int extraDataSize; - struct STREAM_CRYPTO_SESSION cryptoSession; + const uint8_t* extra_data; + unsigned int extra_data_size; + struct STREAM_CRYPTO_SESSION crypto_session; }; - // this are properties given to the addon on create - // at this time we have no parameters for the addon - typedef struct AddonProps_VideoCodec - { - int dummy; - } AddonProps_VideoCodec; - - struct AddonInstance_VideoCodec; - typedef struct KodiToAddonFuncTable_VideoCodec - { - KODI_HANDLE addonInstance; - - //! @brief Opens a codec - bool(__cdecl* open)(const struct AddonInstance_VideoCodec* instance, - struct VIDEOCODEC_INITDATA* initData); - - //! @brief Reconfigures a codec - bool(__cdecl* reconfigure)(const struct AddonInstance_VideoCodec* instance, - struct VIDEOCODEC_INITDATA* initData); - - //! @brief Feed codec if requested from GetPicture() (return VC_BUFFER) - bool(__cdecl* add_data)(const struct AddonInstance_VideoCodec* instance, - const struct DEMUX_PACKET* packet); + typedef KODI_ADDON_VIDEOCODEC_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_DESTROY_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_OPEN_V1)( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData); - //! @brief Get a decoded picture / request new data - enum VIDEOCODEC_RETVAL(__cdecl* get_picture)(const struct AddonInstance_VideoCodec* instance, - struct VIDEOCODEC_PICTURE* picture); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_RECONFIGURE_V1)( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_INITDATA* initData); - //! @brief Get the name of this video decoder - const char*(__cdecl* get_name)(const struct AddonInstance_VideoCodec* instance); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_ADD_DATA_V1)( + KODI_ADDON_VIDEOCODEC_HDL hdl, const struct DEMUX_PACKET* packet); - //! @brief Reset the codec - void(__cdecl* reset)(const struct AddonInstance_VideoCodec* instance); - } KodiToAddonFuncTable_VideoCodec; - - typedef struct AddonToKodiFuncTable_VideoCodec - { - KODI_HANDLE kodiInstance; - bool (*get_frame_buffer)(void* kodiInstance, struct VIDEOCODEC_PICTURE* picture); - void (*release_frame_buffer)(void* kodiInstance, void* buffer); - } AddonToKodiFuncTable_VideoCodec; + typedef enum VIDEOCODEC_RETVAL(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_GET_PICTURE_V1)( + KODI_ADDON_VIDEOCODEC_HDL hdl, struct VIDEOCODEC_PICTURE* picture); + typedef const char*(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_GET_NAME_V1)( + KODI_ADDON_VIDEOCODEC_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_RESET_V1)(KODI_ADDON_VIDEOCODEC_HDL hdl); - typedef struct AddonInstance_VideoCodec + typedef struct KODI_ADDON_VIDEOCODEC_FUNC { - struct AddonProps_VideoCodec* props; - struct AddonToKodiFuncTable_VideoCodec* toKodi; - struct KodiToAddonFuncTable_VideoCodec* toAddon; - } AddonInstance_VideoCodec; + PFN_KODI_ADDON_VIDEOCODEC_CREATE_V1 create; + PFN_KODI_ADDON_VIDEOCODEC_DESTROY_V1 destroy; + PFN_KODI_ADDON_VIDEOCODEC_OPEN_V1 open; + PFN_KODI_ADDON_VIDEOCODEC_RECONFIGURE_V1 reconfigure; + PFN_KODI_ADDON_VIDEOCODEC_ADD_DATA_V1 add_data; + PFN_KODI_ADDON_VIDEOCODEC_GET_PICTURE_V1 get_picture; + PFN_KODI_ADDON_VIDEOCODEC_GET_NAME_V1 get_name; + PFN_KODI_ADDON_VIDEOCODEC_RESET_V1 reset; + } KODI_ADDON_VIDEOCODEC_FUNC; + + ATTR_DLL_EXPORT bool kodi_addon_videocodec_get_frame_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIDEOCODEC_PICTURE* picture) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_videocodec_release_frame_buffer( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIDEOCODEC_PICTURE* picture) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h index 616e0a8666432..c92b77c5cad90 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/visualization.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2020 Team Kodi + * Copyright (C) 2005-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -11,31 +11,31 @@ #include "../addon_base.h" -#define VIZ_LYRICS_SIZE 32768 - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ + typedef void* KODI_ADDON_VISUALIZATION_HDL; + struct VIS_INFO { - bool bWantsFreq; - int iSyncDelay; + bool wants_freq; + int sync_delay; }; struct VIS_TRACK { - const char *title; - const char *artist; - const char *album; - const char *albumArtist; - const char *genre; - const char *comment; - const char *lyrics; + const char* title; + const char* artist; + const char* album; + const char* albumArtist; + const char* genre; + const char* comment; + const char* lyrics; - const char *reserved1; - const char *reserved2; + const char* reserved1; + const char* reserved2; int trackNumber; int discNumber; @@ -47,7 +47,7 @@ extern "C" int reserved4; }; - typedef struct AddonProps_Visualization + struct VIS_PROPS { ADDON_HARDWARE_CONTEXT device; int x; @@ -55,63 +55,98 @@ extern "C" int width; int height; float pixelRatio; - const char* name; - const char* presets; - const char* profile; - } AddonProps_Visualization; - - typedef struct AddonToKodiFuncTable_Visualization - { - KODI_HANDLE kodiInstance; - void(__cdecl* transfer_preset)(KODI_HANDLE kodiInstance, const char* preset); - void(__cdecl* clear_presets)(KODI_HANDLE kodiInstance); - } AddonToKodiFuncTable_Visualization; - - struct AddonInstance_Visualization; + char* name; + char* presets; + char* profile; + }; - typedef struct KodiToAddonFuncTable_Visualization - { - KODI_HANDLE addonInstance; - bool(__cdecl* start)(const struct AddonInstance_Visualization* instance, - int channels, - int samples_per_sec, - int bits_per_sample, - const char* song_name); - void(__cdecl* stop)(const struct AddonInstance_Visualization* instance); - - void(__cdecl* get_info)(const struct AddonInstance_Visualization* instance, - struct VIS_INFO* info); - - void(__cdecl* audio_data)(const struct AddonInstance_Visualization* instance, - const float* audio_data, - int audio_data_length, - float* freq_data, - int freq_data_length); - bool(__cdecl* is_dirty)(const struct AddonInstance_Visualization* instance); - void(__cdecl* render)(const struct AddonInstance_Visualization* instance); - - unsigned int(__cdecl* get_presets)(const struct AddonInstance_Visualization* instance); - int(__cdecl* get_active_preset)(const struct AddonInstance_Visualization* instance); - bool(__cdecl* prev_preset)(const struct AddonInstance_Visualization* instance); - bool(__cdecl* next_preset)(const struct AddonInstance_Visualization* instance); - bool(__cdecl* load_preset)(const struct AddonInstance_Visualization* instance, int select); - bool(__cdecl* random_preset)(const struct AddonInstance_Visualization* instance); - bool(__cdecl* lock_preset)(const struct AddonInstance_Visualization* instance); - bool(__cdecl* rate_preset)(const struct AddonInstance_Visualization* instance, bool plus_minus); - bool(__cdecl* is_locked)(const struct AddonInstance_Visualization* instance); - - bool(__cdecl* update_albumart)(const struct AddonInstance_Visualization* instance, - const char* albumart); - bool(__cdecl* update_track)(const struct AddonInstance_Visualization* instance, - const struct VIS_TRACK* track); - } KodiToAddonFuncTable_Visualization; - - typedef struct AddonInstance_Visualization + typedef KODI_ADDON_VISUALIZATION_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_DESTROY_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_START_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, + int channels, + int samples_per_sec, + int bits_per_sample, + const char* song_name); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_STOP_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_INFO_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, struct VIS_INFO* info); + + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_AUDIO_DATA_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, + const float* audio_data, + size_t audio_data_length, + const float* freq_data, + size_t freq_data_length); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_DIRTY_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RENDER_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + + typedef unsigned int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_PRESETS_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_ACTIVE_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_PREV_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_NEXT_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOAD_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, int select); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RANDOM_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOCK_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RATE_PRESET_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, bool plus_minus); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_LOCKED_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl); + + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_ALBUMART_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, const char* albumart); + typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_TRACK_V1)( + KODI_ADDON_VISUALIZATION_HDL hdl, const struct VIS_TRACK* track); + + typedef struct KODI_ADDON_VISUALIZATION_FUNC { - struct AddonProps_Visualization* props; - struct AddonToKodiFuncTable_Visualization* toKodi; - struct KodiToAddonFuncTable_Visualization* toAddon; - } AddonInstance_Visualization; + PFN_KODI_ADDON_VISUALIZATION_CREATE_V1 create; + PFN_KODI_ADDON_VISUALIZATION_DESTROY_V1 destroy; + PFN_KODI_ADDON_VISUALIZATION_START_V1 start; + PFN_KODI_ADDON_VISUALIZATION_STOP_V1 stop; + + PFN_KODI_ADDON_VISUALIZATION_GET_INFO_V1 get_info; + + PFN_KODI_ADDON_VISUALIZATION_AUDIO_DATA_V1 audio_data; + PFN_KODI_ADDON_VISUALIZATION_IS_DIRTY_V1 is_dirty; + PFN_KODI_ADDON_VISUALIZATION_RENDER_V1 render; + + PFN_KODI_ADDON_VISUALIZATION_GET_PRESETS_V1 get_presets; + PFN_KODI_ADDON_VISUALIZATION_GET_ACTIVE_PRESET_V1 get_active_preset; + PFN_KODI_ADDON_VISUALIZATION_PREV_PRESET_V1 prev_preset; + PFN_KODI_ADDON_VISUALIZATION_NEXT_PRESET_V1 next_preset; + PFN_KODI_ADDON_VISUALIZATION_LOAD_PRESET_V1 load_preset; + PFN_KODI_ADDON_VISUALIZATION_RANDOM_PRESET_V1 random_preset; + PFN_KODI_ADDON_VISUALIZATION_LOCK_PRESET_V1 lock_preset; + PFN_KODI_ADDON_VISUALIZATION_RATE_PRESET_V1 rate_preset; + PFN_KODI_ADDON_VISUALIZATION_IS_LOCKED_V1 is_locked; + + PFN_KODI_ADDON_VISUALIZATION_UPDATE_ALBUMART_V1 update_albumart; + PFN_KODI_ADDON_VISUALIZATION_UPDATE_TRACK_V1 update_track; + } KODI_ADDON_VISUALIZATION_FUNC; + + ATTR_DLL_EXPORT void kodi_addon_visualization_get_properties(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIS_PROPS* props) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT void kodi_addon_visualization_transfer_preset(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* preset) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_addon_visualization_clear_presets(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon_base.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon_base.h index ca0e4416e71b7..921c4c1faf15a 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon_base.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon_base.h @@ -1,20 +1,23 @@ /* - * Copyright (C) 2005-2019 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ -#ifndef C_API_ADDON_BASE_H -#define C_API_ADDON_BASE_H +#ifndef C_API_ADDON_H +#define C_API_ADDON_H #if !defined(NOMINMAX) #define NOMINMAX #endif -#include "stdbool.h" -#include "stdint.h" +#include "version.h" + +#include +#include +#include #ifndef TARGET_WINDOWS #ifndef __cdecl @@ -100,26 +103,23 @@ typedef intptr_t ssize_t; #include #endif // TARGET_POSIX -// Hardware specific device context interface -#define ADDON_HARDWARE_CONTEXT void* - -/* - * To have a on add-on and kodi itself handled string always on known size! - */ -#define ADDON_STANDARD_STRING_LENGTH 1024 -#define ADDON_STANDARD_STRING_LENGTH_SMALL 256 - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ +#if __KODI_API__ >= 1 + + typedef void* KODI_HANDLE; + typedef void* KODI_DLL_HDL; + typedef void* KODI_OWN_HDL; + typedef void* KODI_IFC_HDL; typedef void* KODI_ADDON_HDL; typedef void* KODI_ADDON_BACKEND_HDL; typedef void* KODI_ADDON_INSTANCE_HDL; typedef void* KODI_ADDON_INSTANCE_BACKEND_HDL; - typedef void* KODI_ADDON_FUNC_DUMMY; + typedef void* ADDON_HARDWARE_CONTEXT; //============================================================================ /// @ingroup cpp_kodi_addon_addonbase_Defs @@ -131,30 +131,14 @@ extern "C" ///@{ typedef enum ADDON_STATUS { - /// @brief For everything OK and no error ADDON_STATUS_OK, - - /// @brief A needed connection was lost ADDON_STATUS_LOST_CONNECTION, - - /// @brief Addon needs a restart inside Kodi ADDON_STATUS_NEED_RESTART, - - /// @brief Necessary settings are not yet set ADDON_STATUS_NEED_SETTINGS, - - /// @brief Unknown and incomprehensible error ADDON_STATUS_UNKNOWN, - - /// @brief Permanent failure, like failing to resolve methods ADDON_STATUS_PERMANENT_FAILURE, - - /* internal used return error if function becomes not used from child on - * addon */ ADDON_STATUS_NOT_IMPLEMENTED } ADDON_STATUS; - ///@} - //---------------------------------------------------------------------------- //============================================================================ /// @defgroup cpp_kodi_Defs_ADDON_LOG enum ADDON_LOG @@ -175,172 +159,68 @@ extern "C" ///@{ typedef enum ADDON_LOG { - /// @brief **0** : To include debug information in the log file. ADDON_LOG_DEBUG = 0, - - /// @brief **1** : To include information messages in the log file. ADDON_LOG_INFO = 1, - - /// @brief **2** : To write warnings in the log file. ADDON_LOG_WARNING = 2, - - /// @brief **3** : To report error messages in the log file. ADDON_LOG_ERROR = 3, - - /// @brief **4** : To notify fatal unrecoverable errors, which can may also indicate - /// upcoming crashes. ADDON_LOG_FATAL = 4 } ADDON_LOG; ///@} //---------------------------------------------------------------------------- - typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1)( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, const char* value); - typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1)( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, bool value); - typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1)( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, int value); - typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1)( - const KODI_ADDON_INSTANCE_HDL hdl, const char* name, float value); - - typedef struct KODI_ADDON_INSTANCE_FUNC + typedef enum KODI_ADDON_INSTANCE_TYPE { - PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1 instance_setting_change_string; - PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1 instance_setting_change_boolean; - PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1 instance_setting_change_integer; - PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1 instance_setting_change_float; - } KODI_ADDON_INSTANCE_FUNC; - - typedef struct KODI_ADDON_INSTANCE_FUNC_CB - { - char* (*get_instance_user_path)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl); - bool (*is_instance_setting_using_default)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id); - - bool (*get_instance_setting_bool)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool* value); - bool (*get_instance_setting_int)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int* value); - bool (*get_instance_setting_float)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float* value); - bool (*get_instance_setting_string)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - char** value); - - bool (*set_instance_setting_bool)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - bool value); - bool (*set_instance_setting_int)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - int value); - bool (*set_instance_setting_float)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - float value); - bool (*set_instance_setting_string)(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, - const char* id, - const char* value); - } KODI_ADDON_INSTANCE_FUNC_CB; - - typedef int KODI_ADDON_INSTANCE_TYPE; + ADDON_INSTANCE_UNKNOWN = 0, + ADDON_INSTANCE_AUDIODECODER, + ADDON_INSTANCE_AUDIOENCODER, + ADDON_INSTANCE_GAME, + ADDON_INSTANCE_INPUTSTREAM, + ADDON_INSTANCE_PERIPHERAL, + ADDON_INSTANCE_PVR, + ADDON_INSTANCE_SCREENSAVER, + ADDON_INSTANCE_VISUALIZATION, + ADDON_INSTANCE_VFS, + ADDON_INSTANCE_IMAGEDECODER, + ADDON_INSTANCE_VIDEOCODEC, + ADDON_INSTANCE_WEB, + } KODI_ADDON_INSTANCE_TYPE; struct KODI_ADDON_INSTANCE_INFO { - KODI_ADDON_INSTANCE_TYPE type; - uint32_t number; - const char* id; - const char* version; + enum KODI_ADDON_INSTANCE_TYPE type; + uint32_t instance_id; + const char* unique_work_id; KODI_ADDON_INSTANCE_BACKEND_HDL kodi; KODI_ADDON_INSTANCE_HDL parent; bool first_instance; - - struct KODI_ADDON_INSTANCE_FUNC_CB* functions; }; + /*---AUTO_GEN_PARSE---*/ - typedef struct KODI_ADDON_INSTANCE_STRUCT + struct KODI_ADDON_INSTANCE_STRUCT { - const KODI_ADDON_INSTANCE_INFO* info; - KODI_ADDON_INSTANCE_HDL hdl; - struct KODI_ADDON_INSTANCE_FUNC* functions; - union { - KODI_ADDON_FUNC_DUMMY dummy; - struct AddonInstance_AudioDecoder* audiodecoder; - struct AddonInstance_AudioEncoder* audioencoder; - struct AddonInstance_ImageDecoder* imagedecoder; - struct AddonInstance_Game* game; - struct AddonInstance_InputStream* inputstream; - struct AddonInstance_Peripheral* peripheral; - struct AddonInstance_PVR* pvr; - struct AddonInstance_Screensaver* screensaver; - struct AddonInstance_VFSEntry* vfs; - struct AddonInstance_VideoCodec* videocodec; - struct AddonInstance_Visualization* visualization; + union + { + KODI_HANDLE dummy; + struct KODI_ADDON_INSTANCE_FUNC* instance; + struct KODI_ADDON_AUDIODECODER_FUNC* audiodecoder; + struct KODI_ADDON_AUDIOENCODER_FUNC* audioencoder; + struct KODI_ADDON_IMAGEDECODER_FUNC* imagedecoder; + struct KODI_ADDON_GAME_FUNC* game; + struct KODI_ADDON_INPUTSTREAM_FUNC* inputstream; + struct KODI_ADDON_PERIPHERAL_FUNC* peripheral; + struct KODI_ADDON_SCREENSAVER_FUNC* screensaver; + struct KODI_ADDON_VFS_FUNC* vfs; + struct KODI_ADDON_VIDEOCODEC_FUNC* videocodec; + struct KODI_ADDON_VISUALIZATION_FUNC* visualization; }; - } KODI_ADDON_INSTANCE_STRUCT; - - /*! @brief Standard undefined pointer handle */ - typedef void* KODI_HANDLE; - - typedef struct AddonToKodiFuncTable_kodi_addon - { - char* (*get_addon_path)(const KODI_ADDON_BACKEND_HDL hdl); - char* (*get_lib_path)(const KODI_ADDON_BACKEND_HDL hdl); - char* (*get_user_path)(const KODI_ADDON_BACKEND_HDL hdl); - char* (*get_temp_path)(const KODI_ADDON_BACKEND_HDL hdl); - - char* (*get_localized_string)(const KODI_ADDON_BACKEND_HDL hdl, long label_id); - - bool (*open_settings_dialog)(const KODI_ADDON_BACKEND_HDL hdl); - bool (*is_setting_using_default)(const KODI_ADDON_BACKEND_HDL hdl, const char* id); - - bool (*get_setting_bool)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool* value); - bool (*get_setting_int)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int* value); - bool (*get_setting_float)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, float* value); - bool (*get_setting_string)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, char** value); - - bool (*set_setting_bool)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, bool value); - bool (*set_setting_int)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, int value); - bool (*set_setting_float)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, float value); - bool (*set_setting_string)(const KODI_ADDON_BACKEND_HDL hdl, const char* id, const char* value); - - char* (*get_addon_info)(const KODI_ADDON_BACKEND_HDL hdl, const char* id); + }; - char* (*get_type_version)(const KODI_ADDON_BACKEND_HDL hdl, int type); - void* (*get_interface)(const KODI_ADDON_BACKEND_HDL hdl, const char* name, const char* version); - } AddonToKodiFuncTable_kodi_addon; + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_V1)( + const struct KODI_ADDON_INSTANCE_INFO* first_instance, KODI_ADDON_HDL* hdl); + /*---AUTO_GEN_PARSE---*/ + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_V1)(KODI_ADDON_HDL hdl); - /*! - * @brief Callback function tables from addon to Kodi - * Set complete from Kodi! - */ - typedef struct AddonToKodiFuncTable_Addon - { - // Pointer inside Kodi, used on callback functions to give related handle - // class, for this ADDON::CAddonDll inside Kodi. - KODI_ADDON_BACKEND_HDL kodiBase; - - void (*free_string)(const KODI_ADDON_BACKEND_HDL hdl, char* str); - void (*free_string_array)(const KODI_ADDON_BACKEND_HDL hdl, char** arr, int numElements); - void (*addon_log_msg)(const KODI_ADDON_BACKEND_HDL hdl, const int loglevel, const char* msg); - - struct AddonToKodiFuncTable_kodi* kodi; - struct AddonToKodiFuncTable_kodi_addon* kodi_addon; - struct AddonToKodiFuncTable_kodi_audioengine* kodi_audioengine; - struct AddonToKodiFuncTable_kodi_filesystem* kodi_filesystem; - struct AddonToKodiFuncTable_kodi_gui* kodi_gui; - struct AddonToKodiFuncTable_kodi_network* kodi_network; - } AddonToKodiFuncTable_Addon; - - typedef ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_V1)( - const KODI_ADDON_INSTANCE_BACKEND_HDL first_instance, KODI_ADDON_HDL* hdl); - typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_V1)(const KODI_ADDON_HDL hdl); - typedef ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_INSTANCE_V1)( - const KODI_ADDON_HDL hdl, struct KODI_ADDON_INSTANCE_STRUCT* instance); - typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_INSTANCE_V1)( - const KODI_ADDON_HDL hdl, struct KODI_ADDON_INSTANCE_STRUCT* instance); typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_STRING_V1)( const KODI_ADDON_HDL hdl, const char* name, const char* value); typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_BOOLEAN_V1)( @@ -348,52 +228,151 @@ extern "C" typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_INTEGER_V1)( const KODI_ADDON_HDL hdl, const char* name, int value); typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_FLOAT_V1)( - const KODI_ADDON_HDL hdl, const char* name, float value); + const KODI_ADDON_HDL hdl, const char* name, double value); + + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_INSTANCE_V1)( + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + struct KODI_ADDON_INSTANCE_STRUCT* instance); + /*---AUTO_GEN_PARSE---*/ + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_INSTANCE_V1)( + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_ADDON_INSTANCE_HDL instance_hdl); + /*---AUTO_GEN_PARSE---*/ + + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1)( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value); + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1)( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value); + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1)( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value); + typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1)( + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value); - /*! - * @brief Function tables from Kodi to addon - */ - typedef struct KodiToAddonFuncTable_Addon + struct KODI_ADDON_FUNC { PFN_KODI_ADDON_CREATE_V1 create; PFN_KODI_ADDON_DESTROY_V1 destroy; - PFN_KODI_ADDON_CREATE_INSTANCE_V1 create_instance; - PFN_KODI_ADDON_DESTROY_INSTANCE_V1 destroy_instance; + PFN_KODI_ADDON_SETTING_CHANGE_STRING_V1 setting_change_string; PFN_KODI_ADDON_SETTING_CHANGE_BOOLEAN_V1 setting_change_boolean; PFN_KODI_ADDON_SETTING_CHANGE_INTEGER_V1 setting_change_integer; PFN_KODI_ADDON_SETTING_CHANGE_FLOAT_V1 setting_change_float; - } KodiToAddonFuncTable_Addon; - /*! - * @brief Main structure passed from kodi to addon with basic information needed to - * create add-on. - */ - typedef struct AddonGlobalInterface - { - // Pointer of first created instance, used in case this add-on goes with single way - // Set from Kodi! - struct KODI_ADDON_INSTANCE_STRUCT* firstKodiInstance; + PFN_KODI_ADDON_CREATE_INSTANCE_V1 create_instance; + PFN_KODI_ADDON_DESTROY_INSTANCE_V1 destroy_instance; - // Pointer to master base class inside add-on - // Set from addon header (kodi::addon::CAddonBase)! - KODI_ADDON_HDL addonBase; + PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1 instance_setting_change_string; + PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1 instance_setting_change_boolean; + PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1 instance_setting_change_integer; + PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1 instance_setting_change_float; + }; - // Pointer to a instance used on single way (together with this class) - // Set from addon header (kodi::addon::IAddonInstance)! - KODI_ADDON_INSTANCE_HDL globalSingleInstance; + typedef KODI_ADDON_INSTANCE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_CREATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_DESTROY_V1)(KODI_ADDON_INSTANCE_HDL hdl); - // Callback function tables from addon to Kodi - // Set from Kodi! - AddonToKodiFuncTable_Addon* toKodi; + struct KODI_ADDON_INSTANCE_FUNC + { + PFN_KODI_ADDON_INSTANCE_CREATE_V1 create; + PFN_KODI_ADDON_INSTANCE_DESTROY_V1 destroy; + }; - // Function tables from Kodi to addon - // Set from addon header! - KodiToAddonFuncTable_Addon* toAddon; - } AddonGlobalInterface; + ATTR_DLL_EXPORT const char* kodi_check_main_shared(int argc, char* argv[]) + __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + ATTR_DLL_EXPORT KODI_IFC_HDL kodi_init(unsigned int api, + int argc, + char* argv[], + struct KODI_ADDON_FUNC* func, + bool via_main, + bool no_receive) __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + ATTR_DLL_EXPORT void kodi_deinit(KODI_IFC_HDL hdl) __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + ATTR_DLL_EXPORT bool kodi_process(KODI_IFC_HDL hdl) __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + + ATTR_DLL_EXPORT void kodi_log(enum ADDON_LOG loglevel, const char* format, ...) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_addon_get_addon_path() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_addon_get_lib_path() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_addon_get_user_path() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_addon_get_temp_path() __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_addon_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_addon_get_info(const char* id) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT bool kodi_addon_open_settings_dialog() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_is_setting_using_default(const char* id) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT bool kodi_addon_get_setting_bool(const char* id, bool* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_get_setting_int(const char* id, int* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_get_setting_float(const char* id, double* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_get_setting_string(const char* id, char** value) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT bool kodi_addon_set_setting_bool(const char* id, bool value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_set_setting_int(const char* id, int value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_set_setting_float(const char* id, double value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_set_setting_string(const char* id, const char* value) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_addon_instance_get_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_is_setting_using_default( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_bool( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_int( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_float( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_string( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, char** value) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_bool( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_int( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_float( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_string( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, const char* value) + __INTRODUCED_IN_KODI(1); + +#endif /* __KODI_API__ >= 1 */ #ifdef __cplusplus } #endif /* __cplusplus */ -#endif /* !C_API_ADDON_BASE_H */ +#endif /* !C_API_ADDON_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/audio_engine.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/audio_engine.h index dcb004c209cec..9de0a9ff3c249 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/audio_engine.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/audio_engine.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2019 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,7 +9,8 @@ #ifndef C_API_AUDIO_ENGINE_H #define C_API_AUDIO_ENGINE_H -#include +#include "addon_base.h" + #include #ifdef __cplusplus @@ -17,293 +18,139 @@ extern "C" { #endif /* __cplusplus */ - //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ - // "C" Definitions, structures and enumerators of audio engine - //{{{ + typedef void* KODI_AE_HDL; - //============================================================================ - /// @defgroup cpp_kodi_audioengine_Defs_AudioEngineStreamOptions enum AudioEngineStreamOptions - /// @ingroup cpp_kodi_audioengine_Defs - /// @brief **Bit options to pass to CAEStream**\n - /// A bit field of stream options. - /// - /// - /// ------------------------------------------------------------------------ - /// - /// **Usage example:** - /// ~~~~~~~~~~~~~{.cpp} - /// // Here only as minimal, "format" must be set to wanted types - /// kodi::audioengine::AudioEngineFormat format; - /// m_audioengine = new kodi::audioengine::CAEStream(format, AUDIO_STREAM_FORCE_RESAMPLE | AUDIO_STREAM_AUTOSTART); - /// ~~~~~~~~~~~~~ - /// - ///@{ typedef enum AudioEngineStreamOptions { - /// force resample even if rates match AUDIO_STREAM_FORCE_RESAMPLE = 1 << 0, - /// create the stream paused AUDIO_STREAM_PAUSED = 1 << 1, - /// autostart the stream when enough data is buffered AUDIO_STREAM_AUTOSTART = 1 << 2, } AudioEngineStreamOptions; - ///@} - //---------------------------------------------------------------------------- - - //============================================================================ - /// @defgroup cpp_kodi_audioengine_Defs_AudioEngineChannel enum AudioEngineChannel - /// @ingroup cpp_kodi_audioengine_Defs - /// @brief **The possible channels**\n - /// Used to set available or used channels on stream. - /// - /// - /// ------------------------------------------------------------------------ - /// - /// **Usage example:** - /// ~~~~~~~~~~~~~{.cpp} - /// kodi::audioengine::AudioEngineFormat format; - /// format.SetChannelLayout(std::vector(AUDIOENGINE_CH_FL, AUDIOENGINE_CH_FR)); - /// ~~~~~~~~~~~~~ - /// - ///@{ - enum AudioEngineChannel - { - /// Used inside to indicate the end of a list and not for addon use directly. - AUDIOENGINE_CH_NULL = -1, - /// RAW Audio format - AUDIOENGINE_CH_RAW, - /// Front left - AUDIOENGINE_CH_FL, - /// Front right - AUDIOENGINE_CH_FR, - /// Front center - AUDIOENGINE_CH_FC, - /// LFE / Subwoofer - AUDIOENGINE_CH_LFE, - /// Back left - AUDIOENGINE_CH_BL, - /// Back right - AUDIOENGINE_CH_BR, - /// Front left over center - AUDIOENGINE_CH_FLOC, - /// Front right over center - AUDIOENGINE_CH_FROC, - /// Back center - AUDIOENGINE_CH_BC, - /// Side left - AUDIOENGINE_CH_SL, - /// Side right - AUDIOENGINE_CH_SR, - /// Top front left - AUDIOENGINE_CH_TFL, - /// Top front right - AUDIOENGINE_CH_TFR, - /// Top front center - AUDIOENGINE_CH_TFC, - /// Top center - AUDIOENGINE_CH_TC, - /// Top back left - AUDIOENGINE_CH_TBL, - /// Top back right - AUDIOENGINE_CH_TBR, - /// Top back center - AUDIOENGINE_CH_TBC, - /// Back left over center - AUDIOENGINE_CH_BLOC, - /// Back right over center - AUDIOENGINE_CH_BROC, - /// Maximum possible value, to use e.g. as size inside list - AUDIOENGINE_CH_MAX - }; - ///@} - //---------------------------------------------------------------------------- - //============================================================================ - /// @defgroup cpp_kodi_audioengine_Defs_AudioEngineDataFormat enum AudioEngineDataFormat - /// @ingroup cpp_kodi_audioengine_Defs - /// @brief **Audio sample formats**\n - /// The bit layout of the audio data. - /// - /// LE = Little Endian, BE = Big Endian, NE = Native Endian - /// - /// For planar sample formats, each audio channel is in a separate data plane, - /// and linesize is the buffer size, in bytes, for a single plane. All data - /// planes must be the same size. For packed sample formats, only the first - /// data plane is used, and samples for each channel are interleaved. In this - /// case, linesize is the buffer size, in bytes, for the 1 plane. - /// - /// @note This is ordered from the worst to best preferred formats - /// - /// - /// ------------------------------------------------------------------------ - /// - /// **Usage example:** - /// ~~~~~~~~~~~~~{.cpp} - /// kodi::audioengine::AudioEngineFormat format; - /// format.SetDataFormat(AUDIOENGINE_FMT_FLOATP); - /// ~~~~~~~~~~~~~ - /// - ///@{ enum AudioEngineDataFormat { - /// To define format as invalid AUDIOENGINE_FMT_INVALID = -1, - - /// Unsigned integer 8 bit AUDIOENGINE_FMT_U8, - - /// Big Endian signed integer 16 bit AUDIOENGINE_FMT_S16BE, - /// Little Endian signed integer 16 bit AUDIOENGINE_FMT_S16LE, - /// Native Endian signed integer 16 bit AUDIOENGINE_FMT_S16NE, - - /// Big Endian signed integer 32 bit AUDIOENGINE_FMT_S32BE, - /// Little Endian signed integer 32 bit AUDIOENGINE_FMT_S32LE, - /// Native Endian signed integer 32 bit AUDIOENGINE_FMT_S32NE, - - /// Big Endian signed integer 24 bit (in 4 bytes) AUDIOENGINE_FMT_S24BE4, - /// Little Endian signed integer 24 bit (in 4 bytes) AUDIOENGINE_FMT_S24LE4, - /// Native Endian signed integer 24 bit (in 4 bytes) AUDIOENGINE_FMT_S24NE4, - /// S32 with bits_per_sample < 32 AUDIOENGINE_FMT_S24NE4MSB, - - /// Big Endian signed integer 24 bit (3 bytes) AUDIOENGINE_FMT_S24BE3, - /// Little Endian signed integer 24 bit (3 bytes) AUDIOENGINE_FMT_S24LE3, - /// Native Endian signed integer 24 bit (3 bytes) AUDIOENGINE_FMT_S24NE3, - - /// Double floating point AUDIOENGINE_FMT_DOUBLE, - /// Floating point AUDIOENGINE_FMT_FLOAT, - - /// **Bitstream**\n - /// RAW Audio format AUDIOENGINE_FMT_RAW, - - /// **Planar format**\n - /// Unsigned byte AUDIOENGINE_FMT_U8P, - /// **Planar format**\n - /// Native Endian signed 16 bit AUDIOENGINE_FMT_S16NEP, - /// **Planar format**\n - /// Native Endian signed 32 bit AUDIOENGINE_FMT_S32NEP, - /// **Planar format**\n - /// Native Endian signed integer 24 bit (in 4 bytes) AUDIOENGINE_FMT_S24NE4P, - /// **Planar format**\n - /// S32 with bits_per_sample < 32 AUDIOENGINE_FMT_S24NE4MSBP, - /// **Planar format**\n - /// Native Endian signed integer 24 bit (in 3 bytes) AUDIOENGINE_FMT_S24NE3P, - /// **Planar format**\n - /// Double floating point AUDIOENGINE_FMT_DOUBLEP, - /// **Planar format**\n - /// Floating point AUDIOENGINE_FMT_FLOATP, - - /// Amount of sample formats. AUDIOENGINE_FMT_MAX }; - ///@} - //---------------------------------------------------------------------------- - /*! - * @brief Internal API structure which are used for data exchange between - * Kodi and addon. - */ - struct AUDIO_ENGINE_FORMAT + enum AudioEngineChannel { - /*! The stream's data format (eg, AUDIOENGINE_FMT_S16LE) */ - enum AudioEngineDataFormat m_dataFormat; - - /*! The stream's sample rate (eg, 48000) */ - unsigned int m_sampleRate; - - /*! The encoded streams sample rate if a bitstream, otherwise undefined */ - unsigned int m_encodedRate; - - /*! The amount of used speaker channels */ - unsigned int m_channelCount; - - /*! The stream's channel layout */ - enum AudioEngineChannel m_channels[AUDIOENGINE_CH_MAX]; - - /*! The number of frames per period */ - unsigned int m_frames; - - /*! The size of one frame in bytes */ - unsigned int m_frameSize; + AUDIOENGINE_CH_NULL = -1, + AUDIOENGINE_CH_RAW, + AUDIOENGINE_CH_FL, + AUDIOENGINE_CH_FR, + AUDIOENGINE_CH_FC, + AUDIOENGINE_CH_LFE, + AUDIOENGINE_CH_BL, + AUDIOENGINE_CH_BR, + AUDIOENGINE_CH_FLOC, + AUDIOENGINE_CH_FROC, + AUDIOENGINE_CH_BC, + AUDIOENGINE_CH_SL, + AUDIOENGINE_CH_SR, + AUDIOENGINE_CH_TFL, + AUDIOENGINE_CH_TFR, + AUDIOENGINE_CH_TFC, + AUDIOENGINE_CH_TC, + AUDIOENGINE_CH_TBL, + AUDIOENGINE_CH_TBR, + AUDIOENGINE_CH_TBC, + AUDIOENGINE_CH_BLOC, + AUDIOENGINE_CH_BROC, + AUDIOENGINE_CH_MAX }; - /* A stream handle pointer, which is only used internally by the addon stream handle */ - typedef void AEStreamHandle; - - //}}} - - //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ - // "C" Internal interface tables for intercommunications between addon and kodi - //{{{ - - /* - * Function address structure, not need to visible on dev kit doxygen - * documentation - */ - typedef struct AddonToKodiFuncTable_kodi_audioengine + struct AUDIO_ENGINE_FMT { - AEStreamHandle* (*make_stream)(void* kodiBase, - struct AUDIO_ENGINE_FORMAT* format, - unsigned int options); - void (*free_stream)(void* kodiBase, AEStreamHandle* stream); - bool (*get_current_sink_format)(void* kodiBase, struct AUDIO_ENGINE_FORMAT* sink_format); - - // Audio Engine Stream definitions - unsigned int (*aestream_get_space)(void* kodiBase, AEStreamHandle* handle); - unsigned int (*aestream_add_data)(void* kodiBase, - AEStreamHandle* handle, - uint8_t* const* data, - unsigned int offset, - unsigned int frames, - double pts, - bool hasDownmix, - double centerMixLevel); - double (*aestream_get_delay)(void* kodiBase, AEStreamHandle* handle); - bool (*aestream_is_buffering)(void* kodiBase, AEStreamHandle* handle); - double (*aestream_get_cache_time)(void* kodiBase, AEStreamHandle* handle); - double (*aestream_get_cache_total)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_pause)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_resume)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_drain)(void* kodiBase, AEStreamHandle* handle, bool wait); - bool (*aestream_is_draining)(void* kodiBase, AEStreamHandle* handle); - bool (*aestream_is_drained)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_flush)(void* kodiBase, AEStreamHandle* handle); - float (*aestream_get_volume)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_set_volume)(void* kodiBase, AEStreamHandle* handle, float volume); - float (*aestream_get_amplification)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_set_amplification)(void* kodiBase, AEStreamHandle* handle, float amplify); - unsigned int (*aestream_get_frame_size)(void* kodiBase, AEStreamHandle* handle); - unsigned int (*aestream_get_channel_count)(void* kodiBase, AEStreamHandle* handle); - unsigned int (*aestream_get_sample_rate)(void* kodiBase, AEStreamHandle* handle); - enum AudioEngineDataFormat (*aestream_get_data_format)(void* kodiBase, AEStreamHandle* handle); - double (*aestream_get_resample_ratio)(void* kodiBase, AEStreamHandle* handle); - void (*aestream_set_resample_ratio)(void* kodiBase, AEStreamHandle* handle, double ratio); - } AddonToKodiFuncTable_kodi_audioengine; + enum AudioEngineDataFormat data_format; + unsigned int sample_rate; + unsigned int channel_count; + enum AudioEngineChannel channels[AUDIOENGINE_CH_MAX]; + unsigned int frames; + unsigned int frame_size; + }; - //}}} + ATTR_DLL_EXPORT bool kodi_audioengine_get_current_sink_format(struct AUDIO_ENGINE_FMT* fmt) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_audioengine_is_planar_format(enum AudioEngineDataFormat format) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT KODI_AE_HDL kodi_audioengine_stream_make(const struct AUDIO_ENGINE_FMT* fmt, + unsigned int options) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_free(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_space(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_add_data(KODI_AE_HDL hdl, + uint8_t* const* data, + size_t planes, + size_t data_size, + unsigned int offset, + unsigned int frames, + unsigned int frame_size, + double pts, + bool hasDownmix, + double centerMixLevel) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_audioengine_stream_get_delay(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_buffering(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_time(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_total(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_pause(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_resume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_drain(KODI_AE_HDL hdl, bool wait) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_draining(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_drained(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_flush(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_audioengine_stream_get_volume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_set_volume(KODI_AE_HDL hdl, float volume) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_audioengine_stream_get_amplification(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_set_amplification(KODI_AE_HDL hdl, float amplify) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_frame_size(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_channel_count(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_sample_rate(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT enum AudioEngineDataFormat kodi_audioengine_stream_get_data_format( + KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_audioengine_stream_get_resample_ratio(KODI_AE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_audioengine_stream_set_resample_ratio(KODI_AE_HDL hdl, double ratio) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/CMakeLists.txt new file mode 100644 index 0000000000000..f98c0fa2e5281 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/CMakeLists.txt @@ -0,0 +1,10 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(HEADERS + kodi_api_1.h +) + +if(HEADERS) + core_add_devkit_header(kodi_c-api_dl) +endif() diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/kodi_api_1.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/kodi_api_1.h new file mode 100644 index 0000000000000..a83fb37f9e483 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/dl/kodi_api_1.h @@ -0,0 +1,1425 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +/* API_HASH<0c5b48e579a4964b3a084023b09d50aa83d1b386854ed07118e2cb192466c7c7> */ + +#ifndef C_API_DL_API_1_H +#define C_API_DL_API_1_H + +#include "../addon-instance/audioencoder.h" +#include "../addon-instance/game.h" +#include "../addon-instance/inputstream.h" +#include "../addon-instance/peripheral.h" +#include "../addon-instance/pvr.h" +#include "../addon-instance/screensaver.h" +#include "../addon-instance/vfs.h" +#include "../addon-instance/videocodec.h" +#include "../addon-instance/visualization.h" +#include "../addon_base.h" +#include "../audio_engine.h" +#include "../filesystem.h" +#include "../general.h" +#include "../gui/controls/button.h" +#include "../gui/controls/edit.h" +#include "../gui/controls/fade_label.h" +#include "../gui/controls/image.h" +#include "../gui/controls/label.h" +#include "../gui/controls/progress.h" +#include "../gui/controls/radio_button.h" +#include "../gui/controls/rendering.h" +#include "../gui/controls/settings_slider.h" +#include "../gui/controls/slider.h" +#include "../gui/controls/spin.h" +#include "../gui/controls/text_box.h" +#include "../gui/dialogs/extended_progress.h" +#include "../gui/dialogs/progress.h" +#include "../gui/general.h" +#include "../gui/list_item.h" +#include "../gui/window.h" + +#ifndef ATTR_DL_APIENTRYP +#define ATTR_DL_APIENTRYP ATTR_APIENTRYP +#endif + +#ifndef ATTR_DL_DLL_EXPORT +#define ATTR_DL_DLL_EXPORT ATTR_DLL_EXPORT +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + struct kodi_api_1; + + ATTR_DL_DLL_EXPORT bool load_kodi_api_1(struct kodi_api_1* api); + + struct KODI_ADDON_FUNC; + struct AUDIO_ENGINE_FMT; + struct VFS_DIR_ENTRY; + struct VFS_STAT_STRUCTURE; + struct VFS_CACHE_STATUS; + struct AddonKeyboardKeyTable; + struct game_stream_properties; + struct game_stream_buffer; + struct game_stream_packet; + struct game_input_event; + struct DEMUX_PACKET; + struct PVR_MENUHOOK; + struct EPG_TAG; + struct PVR_CHANNEL; + struct PVR_PROVIDER; + struct PVR_CHANNEL_GROUP; + struct PVR_CHANNEL_GROUP_MEMBER; + struct PVR_RECORDING; + struct PVR_TIMER; + struct KODI_ADDON_SCREENSAVER_PROPS; + struct VIDEOCODEC_PICTURE; + struct VIS_PROPS; + struct tm; + + // addon_base.h + typedef KODI_IFC_HDL(ATTR_DL_APIENTRYP PFN_KODI_INIT_V1)( + unsigned int, int, char*[], struct KODI_ADDON_FUNC*, bool, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_SETTING_BOOL_V1)(const char*, bool*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_SETTING_FLOAT_V1)(const char*, double*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_SETTING_INT_V1)(const char*, int*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_SETTING_STRING_V1)(const char*, char**); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_GET_SETTING_BOOL_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, bool*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_GET_SETTING_FLOAT_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, double*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_GET_SETTING_INT_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, int*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_GET_SETTING_STRING_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, char**); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_IS_SETTING_USING_DEFAULT_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_SET_SETTING_BOOL_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_SET_SETTING_FLOAT_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, double); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_SET_SETTING_INT_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_SET_SETTING_STRING_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_IS_SETTING_USING_DEFAULT_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_OPEN_SETTINGS_DIALOG_V1)(); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_SET_SETTING_BOOL_V1)(const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_SET_SETTING_FLOAT_V1)(const char*, double); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_SET_SETTING_INT_V1)(const char*, int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_SET_SETTING_STRING_V1)(const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_PROCESS_V1)(KODI_IFC_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_ADDON_PATH_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_INFO_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_LIB_PATH_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_TEMP_PATH_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GET_USER_PATH_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INSTANCE_GET_USER_PATH_V1)( + const KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_ADDON_LOCALIZED_STRING_V1)(long); + typedef const char*(ATTR_DL_APIENTRYP PFN_KODI_CHECK_MAIN_SHARED_V1)(int, char*[]); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_DEINIT_V1)(KODI_IFC_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_LOG_V1)(enum ADDON_LOG, const char*, ...); + + // audio_engine.h + typedef KODI_AE_HDL(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_MAKE_V1)( + const struct AUDIO_ENGINE_FMT*, unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_GET_CURRENT_SINK_FORMAT_V1)( + struct AUDIO_ENGINE_FMT*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_IS_PLANAR_FORMAT_V1)( + enum AudioEngineDataFormat); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_IS_BUFFERING_V1)(KODI_AE_HDL); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_IS_DRAINED_V1)(KODI_AE_HDL); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_IS_DRAINING_V1)(KODI_AE_HDL); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_CACHE_TIME_V1)(KODI_AE_HDL); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_CACHE_TOTAL_V1)(KODI_AE_HDL); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_DELAY_V1)(KODI_AE_HDL); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_RESAMPLE_RATIO_V1)(KODI_AE_HDL); + typedef enum AudioEngineDataFormat( + ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_DATA_FORMAT_V1)(KODI_AE_HDL); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_AMPLIFICATION_V1)(KODI_AE_HDL); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_VOLUME_V1)(KODI_AE_HDL); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_ADD_DATA_V1)(KODI_AE_HDL, + uint8_t* const*, + size_t, + size_t, + unsigned int, + unsigned int, + unsigned int, + double, + bool, + double); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_CHANNEL_COUNT_V1)( + KODI_AE_HDL); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_FRAME_SIZE_V1)( + KODI_AE_HDL); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_SAMPLE_RATE_V1)( + KODI_AE_HDL); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_GET_SPACE_V1)(KODI_AE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_DRAIN_V1)(KODI_AE_HDL, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_FLUSH_V1)(KODI_AE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_FREE_V1)(KODI_AE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_PAUSE_V1)(KODI_AE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_RESUME_V1)(KODI_AE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_SET_AMPLIFICATION_V1)(KODI_AE_HDL, + float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_SET_RESAMPLE_RATIO_V1)(KODI_AE_HDL, + double); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_AUDIOENGINE_STREAM_SET_VOLUME_V1)(KODI_AE_HDL, float); + + // filesystem.h + typedef KODI_FILE_HDL(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_CURL_CREATE_V1)(const char*); + typedef KODI_FILE_HDL(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_OPEN_FOR_WRITE_V1)(const char*, bool); + typedef KODI_FILE_HDL(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_OPEN_V1)(const char*, unsigned int); + typedef KODI_HTTP_HEADER_HDL(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_OPEN_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_CAN_OPEN_DIRECTORY_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_COPY_FILE_V1)(const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_CREATE_DIRECTORY_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_DELETE_FILE_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_DIRECTORY_EXISTS_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_AT_END_V1)(KODI_FILE_HDL); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_CURL_ADD_OPTION_V1)(KODI_FILE_HDL, + enum CURLOptiontype, + const char*, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_CURL_OPEN_V1)(KODI_FILE_HDL, unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_EXISTS_V1)(const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_IO_CTL_GET_CACHE_STATUS_V1)( + KODI_FILE_HDL, struct VFS_CACHE_STATUS*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_IO_CTL_GET_SEEK_POSSIBLE_V1)(KODI_FILE_HDL); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_IO_CTL_SET_CACHE_RATE_V1)(KODI_FILE_HDL, + uint32_t); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_IO_CTL_SET_RETRY_V1)(KODI_FILE_HDL, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_READ_LINE_V1)(KODI_FILE_HDL, char*, size_t); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_CONTENT_TYPE_V1)(const char*, + char**, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_COOKIES_V1)(const char*, char**); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_DIRECTORY_V1)(const char*, + const char*, + struct VFS_DIR_ENTRY**, + size_t*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_DISK_SPACE_V1)(const char*, + uint64_t*, + uint64_t*, + uint64_t*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_MIME_TYPE_V1)(const char*, char**, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_IS_INTERNET_STREAM_V1)(const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_IS_LOCAL_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_IS_ON_LAN_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_IS_REMOTE_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_IS_URL_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_REMOVE_DIRECTORY_RECURSIVE_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_REMOVE_DIRECTORY_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_RENAME_FILE_V1)(const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_VFS_STAT_FILE_V1)(const char*, + struct VFS_STAT_STRUCTURE*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_PROPERTY_VALUE_V1)(KODI_FILE_HDL, + enum FilePropertyTypes, + const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_CACHE_THUMB_NAME_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_GET_FILE_MD5_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_CHARSET_V1)(KODI_HTTP_HEADER_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_HEADER_V1)(KODI_HTTP_HEADER_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_MIME_TYPE_V1)(KODI_HTTP_HEADER_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_PROTO_LINE_V1)(KODI_HTTP_HEADER_HDL); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_VALUE_V1)(KODI_HTTP_HEADER_HDL, + const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_MAKE_LEGAL_FILENAME_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_MAKE_LEGAL_PATH_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_VFS_TRANSLATE_SPECIAL_PROTOCOL_V1)(const char*); + typedef char**(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_PROPERTY_VALUES_V1)(KODI_FILE_HDL, + enum FilePropertyTypes, + const char*, + size_t*); + typedef char**(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_GET_VALUES_V1)(KODI_HTTP_HEADER_HDL, + const char*, + size_t*); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_DOWNLOAD_SPEED_V1)(KODI_FILE_HDL); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_CHUNK_SIZE_V1)(KODI_FILE_HDL); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_TRUNCATE_V1)(KODI_FILE_HDL, int64_t); + typedef int64_t(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_LENGTH_V1)(KODI_FILE_HDL); + typedef int64_t(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_GET_POSITION_V1)(KODI_FILE_HDL); + typedef int64_t(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_SEEK_V1)(KODI_FILE_HDL, int64_t, int); + typedef ssize_t(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_READ_V1)(KODI_FILE_HDL, uint8_t*, size_t); + typedef ssize_t(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_WRITE_V1)(KODI_FILE_HDL, + const uint8_t*, + size_t); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_CLOSE_V1)(KODI_FILE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_VFS_FILE_FLUSH_V1)(KODI_FILE_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_VFS_FREE_DIRECTORY_V1)(struct VFS_DIR_ENTRY*, size_t); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_VFS_HTTP_HEADER_CLOSE_V1)(KODI_HTTP_HEADER_HDL); + + // general.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_CHANGE_KEYBOARD_LAYOUT_V1)(char**); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GET_KEYBOARD_LAYOUT_V1)(int, + char**, + struct AddonKeyboardKeyTable*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_IS_ADDON_AVILABLE_V1)(const char*, char**, bool*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GET_CURRENT_SKIN_ID_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GET_DIGEST_V1)(enum DigestType, const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GET_LANGUAGE_V1)(enum LangFormats, bool); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GET_LOCALIZED_STRING_V1)(long); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GET_REGION_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_UNKNOWN_TO_UTF8_V1)(const char*, bool*, bool); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GET_GLOBAL_IDLE_TIME_V1)(); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GET_FREE_MEM_V1)(long*, long*, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_PLAY_SFX_V1)(const char*, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_QUEUE_NOTIFICATION_V1)( + enum QueueMsg, const char*, const char*, const char*, unsigned int, bool, unsigned int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_STOP_SFX_V1)(); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_VERSION_V1)(char**, int*, int*, char**, char**, char**); + + // monitor.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_MONITOR_ABORT_REQUESTED_V1)(); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_MONITOR_WAIT_FOR_ABORT_V1)(double); + + // network.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_IS_HOST_ON_LAN_V1)(const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_IS_LOCAL_HOST_V1)(const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_WAKE_ON_LAN_V1)(const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_DNS_LOOKUP_V1)(const char*, bool*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_GET_HOSTNAME_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_GET_IP_ADDRESS_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_GET_USER_AGENT_V1)(); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_NETWORK_URL_ENCODE_V1)(const char*); + + // addon-instance/audioencoder.h + typedef ssize_t(ATTR_DL_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_SEEK_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, ssize_t, int); + typedef ssize_t(ATTR_DL_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_WRITE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const uint8_t*, size_t); + + // addon-instance/game.h + typedef KODI_GAME_STREAM_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_OPEN_STREAM_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const struct game_stream_properties*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_GET_STREAM_BUFFER_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + KODI_GAME_STREAM_HANDLE, + unsigned int, + unsigned int, + struct game_stream_buffer*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_INPUT_EVENT_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const struct game_input_event*); + typedef game_proc_address_t(ATTR_DL_APIENTRYP PFN_KODI_ADDON_HW_GET_PROC_ADDRESS_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_ADD_STREAM_DATA_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, KODI_GAME_STREAM_HANDLE, const struct game_stream_packet*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_CLOSE_STREAM_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, KODI_GAME_STREAM_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_CLOSE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_GAME_RELEASE_STREAM_BUFFER_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, KODI_GAME_STREAM_HANDLE, struct game_stream_buffer*); + + // addon-instance/inputstream.h + typedef struct DEMUX_PACKET*( + ATTR_DL_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_ALLOCATE_DEMUX_PACKET_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, int); + typedef struct DEMUX_PACKET*( + ATTR_DL_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_ALLOCATE_ENCRYPTED_DEMUX_PACKET_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, unsigned int, unsigned int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_INPUTSTREAM_FREE_DEMUX_PACKET_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct DEMUX_PACKET*); + + // addon-instance/peripheral.h + typedef enum JOYSTICK_FEATURE_TYPE(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FEATURE_TYPE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, const char*); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_FEATURE_COUNT_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, enum JOYSTICK_FEATURE_TYPE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_REFRESH_BUTTON_MAPS_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PERIPHERAL_TRIGGER_SCAN_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + + // addon-instance/pvr.h + typedef int(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_MAX_FUTURE_DAYS_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_MAX_PAST_DAYS_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_ADD_MENU_HOOK_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const struct PVR_MENUHOOK*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_CONNECTION_STATE_CHANGE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, enum PVR_CONNECTION_STATE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_EPG_EVENT_STATE_CHANGE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct EPG_TAG*, enum EPG_EVENT_STATE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_RECORDING_NOTIFICATION_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*, const char*, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_ENTRY_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + const KODI_ADDON_PVR_TRANSFER_HDL, + const struct PVR_CHANNEL*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_GROUP_MEMBER_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + const KODI_ADDON_PVR_TRANSFER_HDL, + const struct PVR_CHANNEL_GROUP_MEMBER*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_GROUP_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + const KODI_ADDON_PVR_TRANSFER_HDL, + const struct PVR_CHANNEL_GROUP*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_EPG_ENTRY_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const KODI_ADDON_PVR_TRANSFER_HDL, const struct EPG_TAG*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_PROVIDER_ENTRY_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + const KODI_ADDON_PVR_TRANSFER_HDL, + const struct PVR_PROVIDER*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_RECORDING_ENTRY_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + const KODI_ADDON_PVR_TRANSFER_HDL, + const struct PVR_RECORDING*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRANSFER_TIMER_ENTRY_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const KODI_ADDON_PVR_TRANSFER_HDL, const struct PVR_TIMER*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_CHANNEL_GROUPS_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_CHANNEL_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_EPG_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, unsigned int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_PROVIDERS_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_RECORDING_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_PVR_TRIGGER_TIMER_UPDATE_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + + // addon-instance/screensaver.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_GET_PROPERTIES_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct KODI_ADDON_SCREENSAVER_PROPS*); + + // addon-instance/vfs.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VFS_GET_DIR_CB__GET_KEYBOARD_INPUT_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, KODI_CTX_CB_HDL, const char*, char**, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VFS_GET_DIR_CB__REQUIRE_AUTHENTICATION_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, KODI_CTX_CB_HDL, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VFS_GET_DIR_CB__SET_ERROR_DIALOG_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, + KODI_CTX_CB_HDL, + const char*, + const char*, + const char*, + const char*); + + // addon-instance/videocodec.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_GET_FRAME_BUFFER_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct VIDEOCODEC_PICTURE*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VIDEOCODEC_RELEASE_FRAME_BUFFER_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct VIDEOCODEC_PICTURE*); + + // addon-instance/visualization.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_CLEAR_PRESETS_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_PROPERTIES_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, struct VIS_PROPS*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_TRANSFER_PRESET_V1)( + KODI_ADDON_INSTANCE_BACKEND_HDL, const char*); + + // gui/general.h + typedef ADDON_HARDWARE_CONTEXT(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_HW_CONTEXT_V1)(); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_VIDEO_RESOLUTION_V1)(); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_CURRENT_WINDOW_DIALOG_ID_V1)(); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_CURRENT_WINDOW_ID_V1)(); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_SCREEN_HEIGHT_V1)(); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_GET_SCREEN_WIDTH_V1)(); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LOCK_V1)(); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_UNLOCK_V1)(); + + // gui/list_item.h + typedef KODI_GUI_LISTITEM_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_CREATE_V1)(const char*, + const char*, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_IS_SELECTED_V1)(KODI_GUI_LISTITEM_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_GET_ART_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_GET_LABEL2_V1)(KODI_GUI_LISTITEM_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_GET_LABEL_V1)(KODI_GUI_LISTITEM_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_GET_PATH_V1)(KODI_GUI_LISTITEM_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_GET_PROPERTY_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_DESTROY_V1)(KODI_GUI_LISTITEM_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SELECT_V1)(KODI_GUI_LISTITEM_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SET_ART_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SET_LABEL2_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SET_LABEL_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SET_PATH_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_LISTITEM_SET_PROPERTY_V1)(KODI_GUI_LISTITEM_HANDLE, + const char*, + const char*); + + // gui/window.h + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_BUTTON_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_EDIT_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_FADE_LABEL_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_IMAGE_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_LABEL_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_PROGRESS_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE( + ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_RADIO_BUTTON_V1)(KODI_GUI_WINDOW_HANDLE, + int); + typedef KODI_GUI_CONTROL_HANDLE( + ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_RENDER_ADDON_V1)(KODI_GUI_WINDOW_HANDLE, + int); + typedef KODI_GUI_CONTROL_HANDLE( + ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_SETTINGS_SLIDER_V1)(KODI_GUI_WINDOW_HANDLE, + int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_SLIDER_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_SPIN_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_CONTROL_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTROL_TEXT_BOX_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_LISTITEM_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_LIST_ITEM_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef KODI_GUI_WINDOW_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_CREATE_V1)( + KODI_HANDLE, const char*, const char*, bool, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_CLOSE_V1)(KODI_GUI_WINDOW_HANDLE); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_DO_MODAL_V1)(KODI_GUI_WINDOW_HANDLE); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_PROPERTY_BOOL_V1)(KODI_GUI_WINDOW_HANDLE, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_FOCUS_ID_V1)(KODI_GUI_WINDOW_HANDLE, int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SHOW_V1)(KODI_GUI_WINDOW_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_PROPERTY_V1)(KODI_GUI_WINDOW_HANDLE, + const char*); + typedef double(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_PROPERTY_DOUBLE_V1)( + KODI_GUI_WINDOW_HANDLE, const char*); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CURRENT_CONTAINER_ID_V1)( + KODI_GUI_WINDOW_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CURRENT_LIST_POSITION_V1)( + KODI_GUI_WINDOW_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_FOCUS_ID_V1)(KODI_GUI_WINDOW_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_LIST_SIZE_V1)(KODI_GUI_WINDOW_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_GET_PROPERTY_INT_V1)(KODI_GUI_WINDOW_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_ADD_LIST_ITEM_V1)(KODI_GUI_WINDOW_HANDLE, + KODI_GUI_LISTITEM_HANDLE, + int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_CLEAR_ITEM_LIST_V1)(KODI_GUI_WINDOW_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_CLEAR_PROPERTIES_V1)(KODI_GUI_WINDOW_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_CLEAR_PROPERTY_V1)(KODI_GUI_WINDOW_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_DESTROY_V1)(KODI_GUI_WINDOW_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_MARK_DIRTY_REGION_V1)(KODI_GUI_WINDOW_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_REMOVE_LIST_ITEM_FROM_POSITION_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_REMOVE_LIST_ITEM_V1)(KODI_GUI_WINDOW_HANDLE, + KODI_GUI_LISTITEM_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CONTAINER_CONTENT_V1)( + KODI_GUI_WINDOW_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CONTAINER_PROPERTY_V1)( + KODI_GUI_WINDOW_HANDLE, const char*, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CONTROL_LABEL_V1)(KODI_GUI_WINDOW_HANDLE, + int, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CONTROL_SELECTED_V1)( + KODI_GUI_WINDOW_HANDLE, int, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CONTROL_VISIBLE_V1)(KODI_GUI_WINDOW_HANDLE, + int, + bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_CURRENT_LIST_POSITION_V1)( + KODI_GUI_WINDOW_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_PROPERTY_BOOL_V1)(KODI_GUI_WINDOW_HANDLE, + const char*, + bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_PROPERTY_DOUBLE_V1)(KODI_GUI_WINDOW_HANDLE, + const char*, + double); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_PROPERTY_INT_V1)(KODI_GUI_WINDOW_HANDLE, + const char*, + int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_WINDOW_SET_PROPERTY_V1)(KODI_GUI_WINDOW_HANDLE, + const char*, + const char*); + + // gui/controls/button.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_GET_LABEL2_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_GET_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_SET_ENABLED_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_SET_LABEL2_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_SET_LABEL_V1)(KODI_GUI_CONTROL_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_BUTTON_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/edit.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_GET_LABEL_V1)(KODI_GUI_CONTROL_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_GET_TEXT_V1)(KODI_GUI_CONTROL_HANDLE); + typedef unsigned int(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_GET_CURSOR_POSITION_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_CURSOR_POSITION_V1)( + KODI_GUI_CONTROL_HANDLE, unsigned int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_ENABLED_V1)(KODI_GUI_CONTROL_HANDLE, + bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_INPUT_TYPE_V1)( + KODI_GUI_CONTROL_HANDLE, int, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_LABEL_V1)(KODI_GUI_CONTROL_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_TEXT_V1)(KODI_GUI_CONTROL_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_EDIT_SET_VISIBLE_V1)(KODI_GUI_CONTROL_HANDLE, + bool); + + // gui/controls/fade_label.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_FADE_LABEL_GET_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_FADE_LABEL_ADD_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_FADE_LABEL_RESET_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_FADE_LABEL_SET_SCROLLING_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_FADE_LABEL_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/image.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_IMAGE_SET_COLOR_DIFFUSE_V1)( + KODI_GUI_CONTROL_HANDLE, uint32_t); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_IMAGE_SET_FILENAME_V1)( + KODI_GUI_CONTROL_HANDLE, const char*, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_IMAGE_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/label.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_LABEL_GET_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_LABEL_SET_LABEL_V1)(KODI_GUI_CONTROL_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_LABEL_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/progress.h + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_PROGRESS_GET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_PROGRESS_SET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_PROGRESS_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/radio_button.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_IS_SELECTED_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_GET_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_ENABLED_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_SELECTED_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/rendering.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_RADIO_RENDERING_DESTROY_V1)( + KODI_GUI_CONTROL_HANDLE); + + // gui/controls/settings_slider.h + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_RESET_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_ENABLED_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_INTERVAL_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, float, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_INTERVAL_V1)( + KODI_GUI_CONTROL_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, int, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_TEXT_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/slider.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_GET_DESCRIPTION_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_GET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_GET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_GET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_RESET_V1)(KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_ENABLED_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_INTERVAL_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, float, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_INTERVAL_V1)( + KODI_GUI_CONTROL_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, int, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_PERCENTAGE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SLIDER_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/controls/spin.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_GET_STRING_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_GET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_GET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_ADD_INT_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE, const char*, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_ADD_STRING_LABEL_V1)( + KODI_GUI_CONTROL_HANDLE, const char*, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_RESET_V1)(KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_ENABLED_V1)(KODI_GUI_CONTROL_HANDLE, + bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_INTERVAL_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, float, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_INT_RANGE_V1)( + KODI_GUI_CONTROL_HANDLE, int, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_INT_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_STRING_VALUE_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_TEXT_V1)(KODI_GUI_CONTROL_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_TYPE_V1)(KODI_GUI_CONTROL_HANDLE, + int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_SPIN_SET_VISIBLE_V1)(KODI_GUI_CONTROL_HANDLE, + bool); + + // gui/controls/text_box.h + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_GET_TEXT_V1)( + KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_RESET_V1)(KODI_GUI_CONTROL_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_SCROLL_V1)(KODI_GUI_CONTROL_HANDLE, + unsigned int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_AUTO_SCROLLING_V1)( + KODI_GUI_CONTROL_HANDLE, int, int, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_TEXT_V1)( + KODI_GUI_CONTROL_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_VISIBLE_V1)( + KODI_GUI_CONTROL_HANDLE, bool); + + // gui/dialogs/context_menu.h + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_CONTEXT_MENU_OPEN_V1)(const char*, + const char*[], + size_t); + + // gui/dialogs/extended_progress.h + typedef KODI_GUI_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_NEW_DIALOG_V1)( + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_IS_FINISHED_V1)( + KODI_GUI_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_TEXT_V1)( + KODI_GUI_HANDLE); + typedef char*(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_TITLE_V1)( + KODI_GUI_HANDLE); + typedef float(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_PERCENTAGE_V1)( + KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_DELETE_DIALOG_V1)( + KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_MARK_FINISHED_V1)( + KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_PERCENTAGE_V1)( + KODI_GUI_HANDLE, float); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_PROGRESS_V1)( + KODI_GUI_HANDLE, int, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_TEXT_V1)( + KODI_GUI_HANDLE, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_TITLE_V1)( + KODI_GUI_HANDLE, const char*); + + // gui/dialogs/filebrowser.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_DIRECTORY_V1)( + const char*, const char*, const char*, char**, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_FROM_DIR_V1)( + const char*, const char*, const char*, const char*, char**, bool, bool, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_LIST_V1)( + const char*, const char*, const char*, char***, size_t*, bool, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_V1)( + const char*, const char*, const char*, const char*, char**, bool, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_IMAGE_LIST_V1)( + const char*, const char*, char***, size_t*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_IMAGE_V1)( + const char*, const char*, const char*, char**); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_SOURCE_V1)( + const char*, char**, bool, const char*, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_FILE_BROWSER_CLEAR_FILE_LIST_V1)(char***, + size_t); + + // gui/dialogs/keyboard.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_IS_KEYBOARD_ACTIVATED_V1)(); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SEND_TEXT_TO_ACTIVE_KEYBOARD_V1)( + const char*, bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_FILTER_V1)( + const char*, char**, bool, unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_INPUT_V1)(const char*, + char**, + bool, + unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_INPUT_WITH_HEAD_V1)( + const char*, char**, const char*, bool, bool, unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_NEW_PASSWORD_V1)( + const char*, char**, unsigned int); + typedef bool( + ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_NEW_PASSWORD_WITH_HEAD_V1)( + const char*, char**, const char*, bool, unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_NEW_PASSWORD_V1)( + char**, unsigned int); + typedef bool( + ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_NEW_PASSWORD_WITH_HEAD_V1)( + char**, const char*, bool, unsigned int); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_PASSWORD_V1)( + const char*, char**, const char*, int, unsigned int); + + // gui/dialogs/numeric.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_DATE_V1)(struct tm*, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_IP_ADDRESS_V1)( + const char*, char**, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_NUMBER_V1)(const char*, + char**, + const char*, + unsigned int); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_SECONDS_V1)(const char*, + char**, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_TIME_V1)(struct tm*, + const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_INPUT_V1)(const char*, + char**, + const char*, + bool); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_NEW_PASSWORD_V1)( + char**); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_PASSWORD_V1)( + const char*, const char*, int); + + // gui/dialogs/ok.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_OK_SHOW_AND_GET_INPUT_LINE_TEXT_V1)( + const char*, const char*, const char*, const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_OK_SHOW_AND_GET_INPUT_SINGLE_TEXT_V1)( + const char*, const char*); + + // gui/dialogs/progress.h + typedef KODI_GUI_HANDLE(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_NEW_DIALOG_V1)(); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_ABORT_V1)(KODI_GUI_HANDLE); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_IS_CANCELED_V1)(KODI_GUI_HANDLE); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_GET_PERCENTAGE_V1)(KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_DELETE_DIALOG_V1)(KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_OPEN_V1)(KODI_GUI_HANDLE); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_CAN_CANCEL_V1)(KODI_GUI_HANDLE, + bool); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_HEADING_V1)(KODI_GUI_HANDLE, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_LINE_V1)(KODI_GUI_HANDLE, + unsigned int, + const char*); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PERCENTAGE_V1)(KODI_GUI_HANDLE, + int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PROGRESS_ADVANCE_V1)( + KODI_GUI_HANDLE, int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PROGRESS_MAX_V1)(KODI_GUI_HANDLE, + int); + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_PROGRESS_SHOW_PROGRESS_BAR_V1)( + KODI_GUI_HANDLE, bool); + + // gui/dialogs/select.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_SELECT_OPEN_MULTI_SELECT_V1)( + const char*, const char*[], const char*[], uint8_t[], size_t, unsigned int); + typedef int(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_SELECT_OPEN_V1)( + const char*, const char*[], size_t, int, unsigned int); + + // gui/dialogs/text_viewer.h + typedef void(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_TEXT_VIEWER_SHOW_V1)(const char*, + const char*); + + // gui/dialogs/yes_no.h + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_LINE_BUTTON_TEXT_V1)( + const char*, const char*, const char*, const char*, bool*, const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_LINE_TEXT_V1)( + const char*, const char*, const char*, const char*, const char*, const char*); + typedef bool(ATTR_DL_APIENTRYP PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_SINGLE_TEXT_V1)( + const char*, const char*, bool*, const char*, const char*); + + struct kodi_api_1 + { + // addon_base.h + PFN_KODI_ADDON_GET_ADDON_PATH_V1 kodi_addon_get_addon_path; + PFN_KODI_ADDON_GET_INFO_V1 kodi_addon_get_info; + PFN_KODI_ADDON_GET_LIB_PATH_V1 kodi_addon_get_lib_path; + PFN_KODI_ADDON_GET_SETTING_BOOL_V1 kodi_addon_get_setting_bool; + PFN_KODI_ADDON_GET_SETTING_FLOAT_V1 kodi_addon_get_setting_float; + PFN_KODI_ADDON_GET_SETTING_INT_V1 kodi_addon_get_setting_int; + PFN_KODI_ADDON_GET_SETTING_STRING_V1 kodi_addon_get_setting_string; + PFN_KODI_ADDON_GET_TEMP_PATH_V1 kodi_addon_get_temp_path; + PFN_KODI_ADDON_GET_USER_PATH_V1 kodi_addon_get_user_path; + PFN_KODI_ADDON_INSTANCE_GET_SETTING_BOOL_V1 kodi_addon_instance_get_setting_bool; + PFN_KODI_ADDON_INSTANCE_GET_SETTING_FLOAT_V1 kodi_addon_instance_get_setting_float; + PFN_KODI_ADDON_INSTANCE_GET_SETTING_INT_V1 kodi_addon_instance_get_setting_int; + PFN_KODI_ADDON_INSTANCE_GET_SETTING_STRING_V1 kodi_addon_instance_get_setting_string; + PFN_KODI_ADDON_INSTANCE_GET_USER_PATH_V1 kodi_addon_instance_get_user_path; + PFN_KODI_ADDON_INSTANCE_IS_SETTING_USING_DEFAULT_V1 + kodi_addon_instance_is_setting_using_default; + PFN_KODI_ADDON_INSTANCE_SET_SETTING_BOOL_V1 kodi_addon_instance_set_setting_bool; + PFN_KODI_ADDON_INSTANCE_SET_SETTING_FLOAT_V1 kodi_addon_instance_set_setting_float; + PFN_KODI_ADDON_INSTANCE_SET_SETTING_INT_V1 kodi_addon_instance_set_setting_int; + PFN_KODI_ADDON_INSTANCE_SET_SETTING_STRING_V1 kodi_addon_instance_set_setting_string; + PFN_KODI_ADDON_IS_SETTING_USING_DEFAULT_V1 kodi_addon_is_setting_using_default; + PFN_KODI_ADDON_LOCALIZED_STRING_V1 kodi_addon_localized_string; + PFN_KODI_ADDON_OPEN_SETTINGS_DIALOG_V1 kodi_addon_open_settings_dialog; + PFN_KODI_ADDON_SET_SETTING_BOOL_V1 kodi_addon_set_setting_bool; + PFN_KODI_ADDON_SET_SETTING_FLOAT_V1 kodi_addon_set_setting_float; + PFN_KODI_ADDON_SET_SETTING_INT_V1 kodi_addon_set_setting_int; + PFN_KODI_ADDON_SET_SETTING_STRING_V1 kodi_addon_set_setting_string; + PFN_KODI_CHECK_MAIN_SHARED_V1 kodi_check_main_shared; + PFN_KODI_DEINIT_V1 kodi_deinit; + PFN_KODI_INIT_V1 kodi_init; + PFN_KODI_LOG_V1 kodi_log; + PFN_KODI_PROCESS_V1 kodi_process; + + // audio_engine.h + PFN_KODI_AUDIOENGINE_GET_CURRENT_SINK_FORMAT_V1 kodi_audioengine_get_current_sink_format; + PFN_KODI_AUDIOENGINE_IS_PLANAR_FORMAT_V1 kodi_audioengine_is_planar_format; + PFN_KODI_AUDIOENGINE_STREAM_ADD_DATA_V1 kodi_audioengine_stream_add_data; + PFN_KODI_AUDIOENGINE_STREAM_DRAIN_V1 kodi_audioengine_stream_drain; + PFN_KODI_AUDIOENGINE_STREAM_FLUSH_V1 kodi_audioengine_stream_flush; + PFN_KODI_AUDIOENGINE_STREAM_FREE_V1 kodi_audioengine_stream_free; + PFN_KODI_AUDIOENGINE_STREAM_GET_AMPLIFICATION_V1 kodi_audioengine_stream_get_amplification; + PFN_KODI_AUDIOENGINE_STREAM_GET_CACHE_TIME_V1 kodi_audioengine_stream_get_cache_time; + PFN_KODI_AUDIOENGINE_STREAM_GET_CACHE_TOTAL_V1 kodi_audioengine_stream_get_cache_total; + PFN_KODI_AUDIOENGINE_STREAM_GET_CHANNEL_COUNT_V1 kodi_audioengine_stream_get_channel_count; + PFN_KODI_AUDIOENGINE_STREAM_GET_DATA_FORMAT_V1 kodi_audioengine_stream_get_data_format; + PFN_KODI_AUDIOENGINE_STREAM_GET_DELAY_V1 kodi_audioengine_stream_get_delay; + PFN_KODI_AUDIOENGINE_STREAM_GET_FRAME_SIZE_V1 kodi_audioengine_stream_get_frame_size; + PFN_KODI_AUDIOENGINE_STREAM_GET_RESAMPLE_RATIO_V1 kodi_audioengine_stream_get_resample_ratio; + PFN_KODI_AUDIOENGINE_STREAM_GET_SAMPLE_RATE_V1 kodi_audioengine_stream_get_sample_rate; + PFN_KODI_AUDIOENGINE_STREAM_GET_SPACE_V1 kodi_audioengine_stream_get_space; + PFN_KODI_AUDIOENGINE_STREAM_GET_VOLUME_V1 kodi_audioengine_stream_get_volume; + PFN_KODI_AUDIOENGINE_STREAM_IS_BUFFERING_V1 kodi_audioengine_stream_is_buffering; + PFN_KODI_AUDIOENGINE_STREAM_IS_DRAINED_V1 kodi_audioengine_stream_is_drained; + PFN_KODI_AUDIOENGINE_STREAM_IS_DRAINING_V1 kodi_audioengine_stream_is_draining; + PFN_KODI_AUDIOENGINE_STREAM_MAKE_V1 kodi_audioengine_stream_make; + PFN_KODI_AUDIOENGINE_STREAM_PAUSE_V1 kodi_audioengine_stream_pause; + PFN_KODI_AUDIOENGINE_STREAM_RESUME_V1 kodi_audioengine_stream_resume; + PFN_KODI_AUDIOENGINE_STREAM_SET_AMPLIFICATION_V1 kodi_audioengine_stream_set_amplification; + PFN_KODI_AUDIOENGINE_STREAM_SET_RESAMPLE_RATIO_V1 kodi_audioengine_stream_set_resample_ratio; + PFN_KODI_AUDIOENGINE_STREAM_SET_VOLUME_V1 kodi_audioengine_stream_set_volume; + + // filesystem.h + PFN_KODI_VFS_CAN_OPEN_DIRECTORY_V1 kodi_vfs_can_open_directory; + PFN_KODI_VFS_COPY_FILE_V1 kodi_vfs_copy_file; + PFN_KODI_VFS_CREATE_DIRECTORY_V1 kodi_vfs_create_directory; + PFN_KODI_VFS_DELETE_FILE_V1 kodi_vfs_delete_file; + PFN_KODI_VFS_DIRECTORY_EXISTS_V1 kodi_vfs_directory_exists; + PFN_KODI_VFS_FILE_AT_END_V1 kodi_vfs_file_at_end; + PFN_KODI_VFS_FILE_CLOSE_V1 kodi_vfs_file_close; + PFN_KODI_VFS_FILE_CURL_ADD_OPTION_V1 kodi_vfs_file_curl_add_option; + PFN_KODI_VFS_FILE_CURL_CREATE_V1 kodi_vfs_file_curl_create; + PFN_KODI_VFS_FILE_CURL_OPEN_V1 kodi_vfs_file_curl_open; + PFN_KODI_VFS_FILE_EXISTS_V1 kodi_vfs_file_exists; + PFN_KODI_VFS_FILE_FLUSH_V1 kodi_vfs_file_flush; + PFN_KODI_VFS_FILE_GET_CHUNK_SIZE_V1 kodi_vfs_file_get_chunk_size; + PFN_KODI_VFS_FILE_GET_DOWNLOAD_SPEED_V1 kodi_vfs_file_get_download_speed; + PFN_KODI_VFS_FILE_GET_LENGTH_V1 kodi_vfs_file_get_length; + PFN_KODI_VFS_FILE_GET_POSITION_V1 kodi_vfs_file_get_position; + PFN_KODI_VFS_FILE_GET_PROPERTY_VALUES_V1 kodi_vfs_file_get_property_values; + PFN_KODI_VFS_FILE_GET_PROPERTY_VALUE_V1 kodi_vfs_file_get_property_value; + PFN_KODI_VFS_FILE_IO_CTL_GET_CACHE_STATUS_V1 kodi_vfs_file_io_ctl_get_cache_status; + PFN_KODI_VFS_FILE_IO_CTL_GET_SEEK_POSSIBLE_V1 kodi_vfs_file_io_ctl_get_seek_possible; + PFN_KODI_VFS_FILE_IO_CTL_SET_CACHE_RATE_V1 kodi_vfs_file_io_ctl_set_cache_rate; + PFN_KODI_VFS_FILE_IO_CTL_SET_RETRY_V1 kodi_vfs_file_io_ctl_set_retry; + PFN_KODI_VFS_FILE_OPEN_FOR_WRITE_V1 kodi_vfs_file_open_for_write; + PFN_KODI_VFS_FILE_OPEN_V1 kodi_vfs_file_open; + PFN_KODI_VFS_FILE_READ_LINE_V1 kodi_vfs_file_read_line; + PFN_KODI_VFS_FILE_READ_V1 kodi_vfs_file_read; + PFN_KODI_VFS_FILE_SEEK_V1 kodi_vfs_file_seek; + PFN_KODI_VFS_FILE_TRUNCATE_V1 kodi_vfs_file_truncate; + PFN_KODI_VFS_FILE_WRITE_V1 kodi_vfs_file_write; + PFN_KODI_VFS_FREE_DIRECTORY_V1 kodi_vfs_free_directory; + PFN_KODI_VFS_GET_CACHE_THUMB_NAME_V1 kodi_vfs_get_cache_thumb_name; + PFN_KODI_VFS_GET_CONTENT_TYPE_V1 kodi_vfs_get_content_type; + PFN_KODI_VFS_GET_COOKIES_V1 kodi_vfs_get_cookies; + PFN_KODI_VFS_GET_DIRECTORY_V1 kodi_vfs_get_directory; + PFN_KODI_VFS_GET_DISK_SPACE_V1 kodi_vfs_get_disk_space; + PFN_KODI_VFS_GET_FILE_MD5_V1 kodi_vfs_get_file_md5; + PFN_KODI_VFS_GET_MIME_TYPE_V1 kodi_vfs_get_mime_type; + PFN_KODI_VFS_HTTP_HEADER_CLOSE_V1 kodi_vfs_http_header_close; + PFN_KODI_VFS_HTTP_HEADER_GET_CHARSET_V1 kodi_vfs_http_header_get_charset; + PFN_KODI_VFS_HTTP_HEADER_GET_HEADER_V1 kodi_vfs_http_header_get_header; + PFN_KODI_VFS_HTTP_HEADER_GET_MIME_TYPE_V1 kodi_vfs_http_header_get_mime_type; + PFN_KODI_VFS_HTTP_HEADER_GET_PROTO_LINE_V1 kodi_vfs_http_header_get_proto_line; + PFN_KODI_VFS_HTTP_HEADER_GET_VALUES_V1 kodi_vfs_http_header_get_values; + PFN_KODI_VFS_HTTP_HEADER_GET_VALUE_V1 kodi_vfs_http_header_get_value; + PFN_KODI_VFS_HTTP_HEADER_OPEN_V1 kodi_vfs_http_header_open; + PFN_KODI_VFS_IS_INTERNET_STREAM_V1 kodi_vfs_is_internet_stream; + PFN_KODI_VFS_IS_LOCAL_V1 kodi_vfs_is_local; + PFN_KODI_VFS_IS_ON_LAN_V1 kodi_vfs_is_on_lan; + PFN_KODI_VFS_IS_REMOTE_V1 kodi_vfs_is_remote; + PFN_KODI_VFS_IS_URL_V1 kodi_vfs_is_url; + PFN_KODI_VFS_MAKE_LEGAL_FILENAME_V1 kodi_vfs_make_legal_filename; + PFN_KODI_VFS_MAKE_LEGAL_PATH_V1 kodi_vfs_make_legal_path; + PFN_KODI_VFS_REMOVE_DIRECTORY_RECURSIVE_V1 kodi_vfs_remove_directory_recursive; + PFN_KODI_VFS_REMOVE_DIRECTORY_V1 kodi_vfs_remove_directory; + PFN_KODI_VFS_RENAME_FILE_V1 kodi_vfs_rename_file; + PFN_KODI_VFS_STAT_FILE_V1 kodi_vfs_stat_file; + PFN_KODI_VFS_TRANSLATE_SPECIAL_PROTOCOL_V1 kodi_vfs_translate_special_protocol; + + // general.h + PFN_KODI_CHANGE_KEYBOARD_LAYOUT_V1 kodi_change_keyboard_layout; + PFN_KODI_GET_CURRENT_SKIN_ID_V1 kodi_get_current_skin_id; + PFN_KODI_GET_DIGEST_V1 kodi_get_digest; + PFN_KODI_GET_FREE_MEM_V1 kodi_get_free_mem; + PFN_KODI_GET_GLOBAL_IDLE_TIME_V1 kodi_get_global_idle_time; + PFN_KODI_GET_KEYBOARD_LAYOUT_V1 kodi_get_keyboard_layout; + PFN_KODI_GET_LANGUAGE_V1 kodi_get_language; + PFN_KODI_GET_LOCALIZED_STRING_V1 kodi_get_localized_string; + PFN_KODI_GET_REGION_V1 kodi_get_region; + PFN_KODI_IS_ADDON_AVILABLE_V1 kodi_is_addon_avilable; + PFN_KODI_PLAY_SFX_V1 kodi_play_sfx; + PFN_KODI_QUEUE_NOTIFICATION_V1 kodi_queue_notification; + PFN_KODI_STOP_SFX_V1 kodi_stop_sfx; + PFN_KODI_UNKNOWN_TO_UTF8_V1 kodi_unknown_to_utf8; + PFN_KODI_VERSION_V1 kodi_version; + + // monitor.h + PFN_KODI_MONITOR_ABORT_REQUESTED_V1 kodi_monitor_abort_requested; + PFN_KODI_MONITOR_WAIT_FOR_ABORT_V1 kodi_monitor_wait_for_abort; + + // network.h + PFN_KODI_NETWORK_DNS_LOOKUP_V1 kodi_network_dns_lookup; + PFN_KODI_NETWORK_GET_HOSTNAME_V1 kodi_network_get_hostname; + PFN_KODI_NETWORK_GET_IP_ADDRESS_V1 kodi_network_get_ip_address; + PFN_KODI_NETWORK_GET_USER_AGENT_V1 kodi_network_get_user_agent; + PFN_KODI_NETWORK_IS_HOST_ON_LAN_V1 kodi_network_is_host_on_lan; + PFN_KODI_NETWORK_IS_LOCAL_HOST_V1 kodi_network_is_local_host; + PFN_KODI_NETWORK_URL_ENCODE_V1 kodi_network_url_encode; + PFN_KODI_NETWORK_WAKE_ON_LAN_V1 kodi_network_wake_on_lan; + + // addon-instance/audioencoder.h + PFN_KODI_ADDON_AUDIOENCODER_SEEK_V1 kodi_addon_audioencoder_seek; + PFN_KODI_ADDON_AUDIOENCODER_WRITE_V1 kodi_addon_audioencoder_write; + + // addon-instance/game.h + PFN_KODI_ADDON_GAME_ADD_STREAM_DATA_V1 kodi_addon_game_add_stream_data; + PFN_KODI_ADDON_GAME_CLOSE_STREAM_V1 kodi_addon_game_close_stream; + PFN_KODI_ADDON_GAME_CLOSE_V1 kodi_addon_game_close; + PFN_KODI_ADDON_GAME_GET_STREAM_BUFFER_V1 kodi_addon_game_get_stream_buffer; + PFN_KODI_ADDON_GAME_INPUT_EVENT_V1 kodi_addon_game_input_event; + PFN_KODI_ADDON_GAME_OPEN_STREAM_V1 kodi_addon_game_open_stream; + PFN_KODI_ADDON_GAME_RELEASE_STREAM_BUFFER_V1 kodi_addon_game_release_stream_buffer; + PFN_KODI_ADDON_HW_GET_PROC_ADDRESS_V1 kodi_addon_hw_get_proc_address; + + // addon-instance/inputstream.h + PFN_KODI_ADDON_INPUTSTREAM_ALLOCATE_DEMUX_PACKET_V1 + kodi_addon_inputstream_allocate_demux_packet; + PFN_KODI_ADDON_INPUTSTREAM_ALLOCATE_ENCRYPTED_DEMUX_PACKET_V1 + kodi_addon_inputstream_allocate_encrypted_demux_packet; + PFN_KODI_ADDON_INPUTSTREAM_FREE_DEMUX_PACKET_V1 kodi_addon_inputstream_free_demux_packet; + + // addon-instance/peripheral.h + PFN_KODI_ADDON_PERIPHERAL_FEATURE_COUNT_V1 kodi_addon_peripheral_feature_count; + PFN_KODI_ADDON_PERIPHERAL_FEATURE_TYPE_V1 kodi_addon_peripheral_feature_type; + PFN_KODI_ADDON_PERIPHERAL_REFRESH_BUTTON_MAPS_V1 kodi_addon_peripheral_refresh_button_maps; + PFN_KODI_ADDON_PERIPHERAL_TRIGGER_SCAN_V1 kodi_addon_peripheral_trigger_scan; + + // addon-instance/pvr.h + PFN_KODI_ADDON_PVR_ADD_MENU_HOOK_V1 kodi_addon_pvr_add_menu_hook; + PFN_KODI_ADDON_PVR_CONNECTION_STATE_CHANGE_V1 kodi_addon_pvr_connection_state_change; + PFN_KODI_ADDON_PVR_EPG_EVENT_STATE_CHANGE_V1 kodi_addon_pvr_epg_event_state_change; + PFN_KODI_ADDON_PVR_GET_EPG_MAX_FUTURE_DAYS_V1 kodi_addon_pvr_get_epg_max_future_days; + PFN_KODI_ADDON_PVR_GET_EPG_MAX_PAST_DAYS_V1 kodi_addon_pvr_get_epg_max_past_days; + PFN_KODI_ADDON_PVR_RECORDING_NOTIFICATION_V1 kodi_addon_pvr_recording_notification; + PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_ENTRY_V1 kodi_addon_pvr_transfer_channel_entry; + PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_GROUP_MEMBER_V1 + kodi_addon_pvr_transfer_channel_group_member; + PFN_KODI_ADDON_PVR_TRANSFER_CHANNEL_GROUP_V1 kodi_addon_pvr_transfer_channel_group; + PFN_KODI_ADDON_PVR_TRANSFER_EPG_ENTRY_V1 kodi_addon_pvr_transfer_epg_entry; + PFN_KODI_ADDON_PVR_TRANSFER_PROVIDER_ENTRY_V1 kodi_addon_pvr_transfer_provider_entry; + PFN_KODI_ADDON_PVR_TRANSFER_RECORDING_ENTRY_V1 kodi_addon_pvr_transfer_recording_entry; + PFN_KODI_ADDON_PVR_TRANSFER_TIMER_ENTRY_V1 kodi_addon_pvr_transfer_timer_entry; + PFN_KODI_ADDON_PVR_TRIGGER_CHANNEL_GROUPS_UPDATE_V1 + kodi_addon_pvr_trigger_channel_groups_update; + PFN_KODI_ADDON_PVR_TRIGGER_CHANNEL_UPDATE_V1 kodi_addon_pvr_trigger_channel_update; + PFN_KODI_ADDON_PVR_TRIGGER_EPG_UPDATE_V1 kodi_addon_pvr_trigger_epg_update; + PFN_KODI_ADDON_PVR_TRIGGER_PROVIDERS_UPDATE_V1 kodi_addon_pvr_trigger_providers_update; + PFN_KODI_ADDON_PVR_TRIGGER_RECORDING_UPDATE_V1 kodi_addon_pvr_trigger_recording_update; + PFN_KODI_ADDON_PVR_TRIGGER_TIMER_UPDATE_V1 kodi_addon_pvr_trigger_timer_update; + + // addon-instance/screensaver.h + PFN_KODI_ADDON_SCREENSAVER_GET_PROPERTIES_V1 kodi_addon_screensaver_get_properties; + + // addon-instance/vfs.h + PFN_KODI_ADDON_VFS_GET_DIR_CB__GET_KEYBOARD_INPUT_V1 + kodi_addon_vfs_get_dir_cb__get_keyboard_input; + PFN_KODI_ADDON_VFS_GET_DIR_CB__REQUIRE_AUTHENTICATION_V1 + kodi_addon_vfs_get_dir_cb__require_authentication; + PFN_KODI_ADDON_VFS_GET_DIR_CB__SET_ERROR_DIALOG_V1 kodi_addon_vfs_get_dir_cb__set_error_dialog; + + // addon-instance/videocodec.h + PFN_KODI_ADDON_VIDEOCODEC_GET_FRAME_BUFFER_V1 kodi_addon_videocodec_get_frame_buffer; + PFN_KODI_ADDON_VIDEOCODEC_RELEASE_FRAME_BUFFER_V1 kodi_addon_videocodec_release_frame_buffer; + + // addon-instance/visualization.h + PFN_KODI_ADDON_VISUALIZATION_CLEAR_PRESETS_V1 kodi_addon_visualization_clear_presets; + PFN_KODI_ADDON_VISUALIZATION_GET_PROPERTIES_V1 kodi_addon_visualization_get_properties; + PFN_KODI_ADDON_VISUALIZATION_TRANSFER_PRESET_V1 kodi_addon_visualization_transfer_preset; + + // gui/general.h + PFN_KODI_GUI_GET_CURRENT_WINDOW_DIALOG_ID_V1 kodi_gui_get_current_window_dialog_id; + PFN_KODI_GUI_GET_CURRENT_WINDOW_ID_V1 kodi_gui_get_current_window_id; + PFN_KODI_GUI_GET_HW_CONTEXT_V1 kodi_gui_get_hw_context; + PFN_KODI_GUI_GET_SCREEN_HEIGHT_V1 kodi_gui_get_screen_height; + PFN_KODI_GUI_GET_SCREEN_WIDTH_V1 kodi_gui_get_screen_width; + PFN_KODI_GUI_GET_VIDEO_RESOLUTION_V1 kodi_gui_get_video_resolution; + PFN_KODI_GUI_LOCK_V1 kodi_gui_lock; + PFN_KODI_GUI_UNLOCK_V1 kodi_gui_unlock; + + // gui/list_item.h + PFN_KODI_GUI_LISTITEM_CREATE_V1 kodi_gui_listitem_create; + PFN_KODI_GUI_LISTITEM_DESTROY_V1 kodi_gui_listitem_destroy; + PFN_KODI_GUI_LISTITEM_GET_ART_V1 kodi_gui_listitem_get_art; + PFN_KODI_GUI_LISTITEM_GET_LABEL2_V1 kodi_gui_listitem_get_label2; + PFN_KODI_GUI_LISTITEM_GET_LABEL_V1 kodi_gui_listitem_get_label; + PFN_KODI_GUI_LISTITEM_GET_PATH_V1 kodi_gui_listitem_get_path; + PFN_KODI_GUI_LISTITEM_GET_PROPERTY_V1 kodi_gui_listitem_get_property; + PFN_KODI_GUI_LISTITEM_IS_SELECTED_V1 kodi_gui_listitem_is_selected; + PFN_KODI_GUI_LISTITEM_SELECT_V1 kodi_gui_listitem_select; + PFN_KODI_GUI_LISTITEM_SET_ART_V1 kodi_gui_listitem_set_art; + PFN_KODI_GUI_LISTITEM_SET_LABEL2_V1 kodi_gui_listitem_set_label2; + PFN_KODI_GUI_LISTITEM_SET_LABEL_V1 kodi_gui_listitem_set_label; + PFN_KODI_GUI_LISTITEM_SET_PATH_V1 kodi_gui_listitem_set_path; + PFN_KODI_GUI_LISTITEM_SET_PROPERTY_V1 kodi_gui_listitem_set_property; + + // gui/window.h + PFN_KODI_GUI_WINDOW_ADD_LIST_ITEM_V1 kodi_gui_window_add_list_item; + PFN_KODI_GUI_WINDOW_CLEAR_ITEM_LIST_V1 kodi_gui_window_clear_item_list; + PFN_KODI_GUI_WINDOW_CLEAR_PROPERTIES_V1 kodi_gui_window_clear_properties; + PFN_KODI_GUI_WINDOW_CLEAR_PROPERTY_V1 kodi_gui_window_clear_property; + PFN_KODI_GUI_WINDOW_CLOSE_V1 kodi_gui_window_close; + PFN_KODI_GUI_WINDOW_CREATE_V1 kodi_gui_window_create; + PFN_KODI_GUI_WINDOW_DESTROY_V1 kodi_gui_window_destroy; + PFN_KODI_GUI_WINDOW_DO_MODAL_V1 kodi_gui_window_do_modal; + PFN_KODI_GUI_WINDOW_GET_CONTROL_BUTTON_V1 kodi_gui_window_get_control_button; + PFN_KODI_GUI_WINDOW_GET_CONTROL_EDIT_V1 kodi_gui_window_get_control_edit; + PFN_KODI_GUI_WINDOW_GET_CONTROL_FADE_LABEL_V1 kodi_gui_window_get_control_fade_label; + PFN_KODI_GUI_WINDOW_GET_CONTROL_IMAGE_V1 kodi_gui_window_get_control_image; + PFN_KODI_GUI_WINDOW_GET_CONTROL_LABEL_V1 kodi_gui_window_get_control_label; + PFN_KODI_GUI_WINDOW_GET_CONTROL_PROGRESS_V1 kodi_gui_window_get_control_progress; + PFN_KODI_GUI_WINDOW_GET_CONTROL_RADIO_BUTTON_V1 kodi_gui_window_get_control_radio_button; + PFN_KODI_GUI_WINDOW_GET_CONTROL_RENDER_ADDON_V1 kodi_gui_window_get_control_render_addon; + PFN_KODI_GUI_WINDOW_GET_CONTROL_SETTINGS_SLIDER_V1 kodi_gui_window_get_control_settings_slider; + PFN_KODI_GUI_WINDOW_GET_CONTROL_SLIDER_V1 kodi_gui_window_get_control_slider; + PFN_KODI_GUI_WINDOW_GET_CONTROL_SPIN_V1 kodi_gui_window_get_control_spin; + PFN_KODI_GUI_WINDOW_GET_CONTROL_TEXT_BOX_V1 kodi_gui_window_get_control_text_box; + PFN_KODI_GUI_WINDOW_GET_CURRENT_CONTAINER_ID_V1 kodi_gui_window_get_current_container_id; + PFN_KODI_GUI_WINDOW_GET_CURRENT_LIST_POSITION_V1 kodi_gui_window_get_current_list_position; + PFN_KODI_GUI_WINDOW_GET_FOCUS_ID_V1 kodi_gui_window_get_focus_id; + PFN_KODI_GUI_WINDOW_GET_LIST_ITEM_V1 kodi_gui_window_get_list_item; + PFN_KODI_GUI_WINDOW_GET_LIST_SIZE_V1 kodi_gui_window_get_list_size; + PFN_KODI_GUI_WINDOW_GET_PROPERTY_BOOL_V1 kodi_gui_window_get_property_bool; + PFN_KODI_GUI_WINDOW_GET_PROPERTY_DOUBLE_V1 kodi_gui_window_get_property_double; + PFN_KODI_GUI_WINDOW_GET_PROPERTY_INT_V1 kodi_gui_window_get_property_int; + PFN_KODI_GUI_WINDOW_GET_PROPERTY_V1 kodi_gui_window_get_property; + PFN_KODI_GUI_WINDOW_MARK_DIRTY_REGION_V1 kodi_gui_window_mark_dirty_region; + PFN_KODI_GUI_WINDOW_REMOVE_LIST_ITEM_FROM_POSITION_V1 + kodi_gui_window_remove_list_item_from_position; + PFN_KODI_GUI_WINDOW_REMOVE_LIST_ITEM_V1 kodi_gui_window_remove_list_item; + PFN_KODI_GUI_WINDOW_SET_CONTAINER_CONTENT_V1 kodi_gui_window_set_container_content; + PFN_KODI_GUI_WINDOW_SET_CONTAINER_PROPERTY_V1 kodi_gui_window_set_container_property; + PFN_KODI_GUI_WINDOW_SET_CONTROL_LABEL_V1 kodi_gui_window_set_control_label; + PFN_KODI_GUI_WINDOW_SET_CONTROL_SELECTED_V1 kodi_gui_window_set_control_selected; + PFN_KODI_GUI_WINDOW_SET_CONTROL_VISIBLE_V1 kodi_gui_window_set_control_visible; + PFN_KODI_GUI_WINDOW_SET_CURRENT_LIST_POSITION_V1 kodi_gui_window_set_current_list_position; + PFN_KODI_GUI_WINDOW_SET_FOCUS_ID_V1 kodi_gui_window_set_focus_id; + PFN_KODI_GUI_WINDOW_SET_PROPERTY_BOOL_V1 kodi_gui_window_set_property_bool; + PFN_KODI_GUI_WINDOW_SET_PROPERTY_DOUBLE_V1 kodi_gui_window_set_property_double; + PFN_KODI_GUI_WINDOW_SET_PROPERTY_INT_V1 kodi_gui_window_set_property_int; + PFN_KODI_GUI_WINDOW_SET_PROPERTY_V1 kodi_gui_window_set_property; + PFN_KODI_GUI_WINDOW_SHOW_V1 kodi_gui_window_show; + + // gui/controls/button.h + PFN_KODI_GUI_CONTROLS_BUTTON_GET_LABEL2_V1 kodi_gui_controls_button_get_label2; + PFN_KODI_GUI_CONTROLS_BUTTON_GET_LABEL_V1 kodi_gui_controls_button_get_label; + PFN_KODI_GUI_CONTROLS_BUTTON_SET_ENABLED_V1 kodi_gui_controls_button_set_enabled; + PFN_KODI_GUI_CONTROLS_BUTTON_SET_LABEL2_V1 kodi_gui_controls_button_set_label2; + PFN_KODI_GUI_CONTROLS_BUTTON_SET_LABEL_V1 kodi_gui_controls_button_set_label; + PFN_KODI_GUI_CONTROLS_BUTTON_SET_VISIBLE_V1 kodi_gui_controls_button_set_visible; + + // gui/controls/edit.h + PFN_KODI_GUI_CONTROLS_EDIT_GET_CURSOR_POSITION_V1 kodi_gui_controls_edit_get_cursor_position; + PFN_KODI_GUI_CONTROLS_EDIT_GET_LABEL_V1 kodi_gui_controls_edit_get_label; + PFN_KODI_GUI_CONTROLS_EDIT_GET_TEXT_V1 kodi_gui_controls_edit_get_text; + PFN_KODI_GUI_CONTROLS_EDIT_SET_CURSOR_POSITION_V1 kodi_gui_controls_edit_set_cursor_position; + PFN_KODI_GUI_CONTROLS_EDIT_SET_ENABLED_V1 kodi_gui_controls_edit_set_enabled; + PFN_KODI_GUI_CONTROLS_EDIT_SET_INPUT_TYPE_V1 kodi_gui_controls_edit_set_input_type; + PFN_KODI_GUI_CONTROLS_EDIT_SET_LABEL_V1 kodi_gui_controls_edit_set_label; + PFN_KODI_GUI_CONTROLS_EDIT_SET_TEXT_V1 kodi_gui_controls_edit_set_text; + PFN_KODI_GUI_CONTROLS_EDIT_SET_VISIBLE_V1 kodi_gui_controls_edit_set_visible; + + // gui/controls/fade_label.h + PFN_KODI_GUI_CONTROLS_FADE_LABEL_ADD_LABEL_V1 kodi_gui_controls_fade_label_add_label; + PFN_KODI_GUI_CONTROLS_FADE_LABEL_GET_LABEL_V1 kodi_gui_controls_fade_label_get_label; + PFN_KODI_GUI_CONTROLS_FADE_LABEL_RESET_V1 kodi_gui_controls_fade_label_reset; + PFN_KODI_GUI_CONTROLS_FADE_LABEL_SET_SCROLLING_V1 kodi_gui_controls_fade_label_set_scrolling; + PFN_KODI_GUI_CONTROLS_FADE_LABEL_SET_VISIBLE_V1 kodi_gui_controls_fade_label_set_visible; + + // gui/controls/image.h + PFN_KODI_GUI_CONTROLS_IMAGE_SET_COLOR_DIFFUSE_V1 kodi_gui_controls_image_set_color_diffuse; + PFN_KODI_GUI_CONTROLS_IMAGE_SET_FILENAME_V1 kodi_gui_controls_image_set_filename; + PFN_KODI_GUI_CONTROLS_IMAGE_SET_VISIBLE_V1 kodi_gui_controls_image_set_visible; + + // gui/controls/label.h + PFN_KODI_GUI_CONTROLS_LABEL_GET_LABEL_V1 kodi_gui_controls_label_get_label; + PFN_KODI_GUI_CONTROLS_LABEL_SET_LABEL_V1 kodi_gui_controls_label_set_label; + PFN_KODI_GUI_CONTROLS_LABEL_SET_VISIBLE_V1 kodi_gui_controls_label_set_visible; + + // gui/controls/progress.h + PFN_KODI_GUI_CONTROLS_PROGRESS_GET_PERCENTAGE_V1 kodi_gui_controls_progress_get_percentage; + PFN_KODI_GUI_CONTROLS_PROGRESS_SET_PERCENTAGE_V1 kodi_gui_controls_progress_set_percentage; + PFN_KODI_GUI_CONTROLS_PROGRESS_SET_VISIBLE_V1 kodi_gui_controls_progress_set_visible; + + // gui/controls/radio_button.h + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_GET_LABEL_V1 kodi_gui_controls_radio_button_get_label; + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_IS_SELECTED_V1 kodi_gui_controls_radio_button_is_selected; + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_ENABLED_V1 kodi_gui_controls_radio_button_set_enabled; + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_LABEL_V1 kodi_gui_controls_radio_button_set_label; + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_SELECTED_V1 kodi_gui_controls_radio_button_set_selected; + PFN_KODI_GUI_CONTROLS_RADIO_BUTTON_SET_VISIBLE_V1 kodi_gui_controls_radio_button_set_visible; + + // gui/controls/rendering.h + PFN_KODI_GUI_CONTROLS_RADIO_RENDERING_DESTROY_V1 kodi_gui_controls_radio_rendering_destroy; + + // gui/controls/settings_slider.h + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_FLOAT_VALUE_V1 + kodi_gui_controls_settings_slider_get_float_value; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_INT_VALUE_V1 + kodi_gui_controls_settings_slider_get_int_value; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_GET_PERCENTAGE_V1 + kodi_gui_controls_settings_slider_get_percentage; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_RESET_V1 kodi_gui_controls_settings_slider_reset; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_ENABLED_V1 + kodi_gui_controls_settings_slider_set_enabled; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_INTERVAL_V1 + kodi_gui_controls_settings_slider_set_float_interval; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_RANGE_V1 + kodi_gui_controls_settings_slider_set_float_range; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_FLOAT_VALUE_V1 + kodi_gui_controls_settings_slider_set_float_value; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_INTERVAL_V1 + kodi_gui_controls_settings_slider_set_int_interval; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_RANGE_V1 + kodi_gui_controls_settings_slider_set_int_range; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_INT_VALUE_V1 + kodi_gui_controls_settings_slider_set_int_value; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_PERCENTAGE_V1 + kodi_gui_controls_settings_slider_set_percentage; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_TEXT_V1 kodi_gui_controls_settings_slider_set_text; + PFN_KODI_GUI_CONTROLS_SETTINGS_SLIDER_SET_VISIBLE_V1 + kodi_gui_controls_settings_slider_set_visible; + + // gui/controls/slider.h + PFN_KODI_GUI_CONTROLS_SLIDER_GET_DESCRIPTION_V1 kodi_gui_controls_slider_get_description; + PFN_KODI_GUI_CONTROLS_SLIDER_GET_FLOAT_VALUE_V1 kodi_gui_controls_slider_get_float_value; + PFN_KODI_GUI_CONTROLS_SLIDER_GET_INT_VALUE_V1 kodi_gui_controls_slider_get_int_value; + PFN_KODI_GUI_CONTROLS_SLIDER_GET_PERCENTAGE_V1 kodi_gui_controls_slider_get_percentage; + PFN_KODI_GUI_CONTROLS_SLIDER_RESET_V1 kodi_gui_controls_slider_reset; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_ENABLED_V1 kodi_gui_controls_slider_set_enabled; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_INTERVAL_V1 kodi_gui_controls_slider_set_float_interval; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_RANGE_V1 kodi_gui_controls_slider_set_float_range; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_FLOAT_VALUE_V1 kodi_gui_controls_slider_set_float_value; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_INTERVAL_V1 kodi_gui_controls_slider_set_int_interval; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_RANGE_V1 kodi_gui_controls_slider_set_int_range; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_INT_VALUE_V1 kodi_gui_controls_slider_set_int_value; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_PERCENTAGE_V1 kodi_gui_controls_slider_set_percentage; + PFN_KODI_GUI_CONTROLS_SLIDER_SET_VISIBLE_V1 kodi_gui_controls_slider_set_visible; + + // gui/controls/spin.h + PFN_KODI_GUI_CONTROLS_SPIN_ADD_INT_LABEL_V1 kodi_gui_controls_spin_add_int_label; + PFN_KODI_GUI_CONTROLS_SPIN_ADD_STRING_LABEL_V1 kodi_gui_controls_spin_add_string_label; + PFN_KODI_GUI_CONTROLS_SPIN_GET_FLOAT_VALUE_V1 kodi_gui_controls_spin_get_float_value; + PFN_KODI_GUI_CONTROLS_SPIN_GET_INT_VALUE_V1 kodi_gui_controls_spin_get_int_value; + PFN_KODI_GUI_CONTROLS_SPIN_GET_STRING_VALUE_V1 kodi_gui_controls_spin_get_string_value; + PFN_KODI_GUI_CONTROLS_SPIN_RESET_V1 kodi_gui_controls_spin_reset; + PFN_KODI_GUI_CONTROLS_SPIN_SET_ENABLED_V1 kodi_gui_controls_spin_set_enabled; + PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_INTERVAL_V1 kodi_gui_controls_spin_set_float_interval; + PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_RANGE_V1 kodi_gui_controls_spin_set_float_range; + PFN_KODI_GUI_CONTROLS_SPIN_SET_FLOAT_VALUE_V1 kodi_gui_controls_spin_set_float_value; + PFN_KODI_GUI_CONTROLS_SPIN_SET_INT_RANGE_V1 kodi_gui_controls_spin_set_int_range; + PFN_KODI_GUI_CONTROLS_SPIN_SET_INT_VALUE_V1 kodi_gui_controls_spin_set_int_value; + PFN_KODI_GUI_CONTROLS_SPIN_SET_STRING_VALUE_V1 kodi_gui_controls_spin_set_string_value; + PFN_KODI_GUI_CONTROLS_SPIN_SET_TEXT_V1 kodi_gui_controls_spin_set_text; + PFN_KODI_GUI_CONTROLS_SPIN_SET_TYPE_V1 kodi_gui_controls_spin_set_type; + PFN_KODI_GUI_CONTROLS_SPIN_SET_VISIBLE_V1 kodi_gui_controls_spin_set_visible; + + // gui/controls/text_box.h + PFN_KODI_GUI_CONTROLS_TEXT_BOX_GET_TEXT_V1 kodi_gui_controls_text_box_get_text; + PFN_KODI_GUI_CONTROLS_TEXT_BOX_RESET_V1 kodi_gui_controls_text_box_reset; + PFN_KODI_GUI_CONTROLS_TEXT_BOX_SCROLL_V1 kodi_gui_controls_text_box_scroll; + PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_AUTO_SCROLLING_V1 + kodi_gui_controls_text_box_set_auto_scrolling; + PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_TEXT_V1 kodi_gui_controls_text_box_set_text; + PFN_KODI_GUI_CONTROLS_TEXT_BOX_SET_VISIBLE_V1 kodi_gui_controls_text_box_set_visible; + + // gui/dialogs/context_menu.h + PFN_KODI_GUI_DIALOGS_CONTEXT_MENU_OPEN_V1 kodi_gui_dialogs_context_menu_open; + + // gui/dialogs/extended_progress.h + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_DELETE_DIALOG_V1 + kodi_gui_dialogs_extended_progress_delete_dialog; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_PERCENTAGE_V1 + kodi_gui_dialogs_extended_progress_get_percentage; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_TEXT_V1 kodi_gui_dialogs_extended_progress_get_text; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_GET_TITLE_V1 + kodi_gui_dialogs_extended_progress_get_title; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_IS_FINISHED_V1 + kodi_gui_dialogs_extended_progress_is_finished; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_MARK_FINISHED_V1 + kodi_gui_dialogs_extended_progress_mark_finished; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_NEW_DIALOG_V1 + kodi_gui_dialogs_extended_progress_new_dialog; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_PERCENTAGE_V1 + kodi_gui_dialogs_extended_progress_set_percentage; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_PROGRESS_V1 + kodi_gui_dialogs_extended_progress_set_progress; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_TEXT_V1 kodi_gui_dialogs_extended_progress_set_text; + PFN_KODI_GUI_DIALOGS_EXTENDED_PROGRESS_SET_TITLE_V1 + kodi_gui_dialogs_extended_progress_set_title; + + // gui/dialogs/filebrowser.h + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_CLEAR_FILE_LIST_V1 + kodi_gui_dialogs_file_browser_clear_file_list; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_DIRECTORY_V1 + kodi_gui_dialogs_file_browser_show_and_get_directory; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_FROM_DIR_V1 + kodi_gui_dialogs_file_browser_show_and_get_file_from_dir; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_LIST_V1 + kodi_gui_dialogs_file_browser_show_and_get_file_list; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_FILE_V1 + kodi_gui_dialogs_file_browser_show_and_get_file; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_IMAGE_LIST_V1 + kodi_gui_dialogs_file_browser_show_and_get_image_list; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_IMAGE_V1 + kodi_gui_dialogs_file_browser_show_and_get_image; + PFN_KODI_GUI_DIALOGS_FILE_BROWSER_SHOW_AND_GET_SOURCE_V1 + kodi_gui_dialogs_file_browser_show_and_get_source; + + // gui/dialogs/keyboard.h + PFN_KODI_GUI_DIALOGS_KEYBOARD_IS_KEYBOARD_ACTIVATED_V1 + kodi_gui_dialogs_keyboard_is_keyboard_activated; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SEND_TEXT_TO_ACTIVE_KEYBOARD_V1 + kodi_gui_dialogs_keyboard_send_text_to_active_keyboard; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_FILTER_V1 + kodi_gui_dialogs_keyboard_show_and_get_filter; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_INPUT_V1 + kodi_gui_dialogs_keyboard_show_and_get_input; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_INPUT_WITH_HEAD_V1 + kodi_gui_dialogs_keyboard_show_and_get_input_with_head; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_NEW_PASSWORD_V1 + kodi_gui_dialogs_keyboard_show_and_get_new_password; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_GET_NEW_PASSWORD_WITH_HEAD_V1 + kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_NEW_PASSWORD_V1 + kodi_gui_dialogs_keyboard_show_and_verify_new_password; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_NEW_PASSWORD_WITH_HEAD_V1 + kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head; + PFN_KODI_GUI_DIALOGS_KEYBOARD_SHOW_AND_VERIFY_PASSWORD_V1 + kodi_gui_dialogs_keyboard_show_and_verify_password; + + // gui/dialogs/numeric.h + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_DATE_V1 kodi_gui_dialogs_numeric_show_and_get_date; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_IP_ADDRESS_V1 + kodi_gui_dialogs_numeric_show_and_get_ip_address; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_NUMBER_V1 + kodi_gui_dialogs_numeric_show_and_get_number; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_SECONDS_V1 + kodi_gui_dialogs_numeric_show_and_get_seconds; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_GET_TIME_V1 kodi_gui_dialogs_numeric_show_and_get_time; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_INPUT_V1 + kodi_gui_dialogs_numeric_show_and_verify_input; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_NEW_PASSWORD_V1 + kodi_gui_dialogs_numeric_show_and_verify_new_password; + PFN_KODI_GUI_DIALOGS_NUMERIC_SHOW_AND_VERIFY_PASSWORD_V1 + kodi_gui_dialogs_numeric_show_and_verify_password; + + // gui/dialogs/ok.h + PFN_KODI_GUI_DIALOGS_OK_SHOW_AND_GET_INPUT_LINE_TEXT_V1 + kodi_gui_dialogs_ok_show_and_get_input_line_text; + PFN_KODI_GUI_DIALOGS_OK_SHOW_AND_GET_INPUT_SINGLE_TEXT_V1 + kodi_gui_dialogs_ok_show_and_get_input_single_text; + + // gui/dialogs/progress.h + PFN_KODI_GUI_DIALOGS_PROGRESS_ABORT_V1 kodi_gui_dialogs_progress_abort; + PFN_KODI_GUI_DIALOGS_PROGRESS_DELETE_DIALOG_V1 kodi_gui_dialogs_progress_delete_dialog; + PFN_KODI_GUI_DIALOGS_PROGRESS_GET_PERCENTAGE_V1 kodi_gui_dialogs_progress_get_percentage; + PFN_KODI_GUI_DIALOGS_PROGRESS_IS_CANCELED_V1 kodi_gui_dialogs_progress_is_canceled; + PFN_KODI_GUI_DIALOGS_PROGRESS_NEW_DIALOG_V1 kodi_gui_dialogs_progress_new_dialog; + PFN_KODI_GUI_DIALOGS_PROGRESS_OPEN_V1 kodi_gui_dialogs_progress_open; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_CAN_CANCEL_V1 kodi_gui_dialogs_progress_set_can_cancel; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_HEADING_V1 kodi_gui_dialogs_progress_set_heading; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_LINE_V1 kodi_gui_dialogs_progress_set_line; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PERCENTAGE_V1 kodi_gui_dialogs_progress_set_percentage; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PROGRESS_ADVANCE_V1 + kodi_gui_dialogs_progress_set_progress_advance; + PFN_KODI_GUI_DIALOGS_PROGRESS_SET_PROGRESS_MAX_V1 kodi_gui_dialogs_progress_set_progress_max; + PFN_KODI_GUI_DIALOGS_PROGRESS_SHOW_PROGRESS_BAR_V1 kodi_gui_dialogs_progress_show_progress_bar; + + // gui/dialogs/select.h + PFN_KODI_GUI_DIALOGS_SELECT_OPEN_MULTI_SELECT_V1 kodi_gui_dialogs_select_open_multi_select; + PFN_KODI_GUI_DIALOGS_SELECT_OPEN_V1 kodi_gui_dialogs_select_open; + + // gui/dialogs/text_viewer.h + PFN_KODI_GUI_DIALOGS_TEXT_VIEWER_SHOW_V1 kodi_gui_dialogs_text_viewer_show; + + // gui/dialogs/yes_no.h + PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_LINE_BUTTON_TEXT_V1 + kodi_gui_dialogs_yesno_show_and_get_input_line_button_text; + PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_LINE_TEXT_V1 + kodi_gui_dialogs_yesno_show_and_get_input_line_text; + PFN_KODI_GUI_DIALOGS_YESNO_SHOW_AND_GET_INPUT_SINGLE_TEXT_V1 + kodi_gui_dialogs_yesno_show_and_get_input_single_text; + }; + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* C_API_DL_API_1_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/filesystem.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/filesystem.h index aedcf6434e378..78a45b2cfc062 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/filesystem.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/filesystem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2018 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,8 +9,8 @@ #ifndef C_API_FILESYSTEM_H #define C_API_FILESYSTEM_H -#include -#include +#include "addon_base.h" + #include #ifdef _WIN32 // windows @@ -40,6 +40,9 @@ extern "C" { #endif /* __cplusplus */ + typedef void* KODI_FILE_HDL; + typedef void* KODI_HTTP_HEADER_HDL; + //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ // "C" Definitions, structures and enumerators of filesystem //{{{ @@ -169,54 +172,24 @@ extern "C" //}}} - //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ - // "C" Internal interface tables for intercommunications between addon and kodi - //{{{ - - struct KODI_HTTP_HEADER - { - void* handle; - - char* (*get_value)(void* kodiBase, void* handle, const char* param); - char** (*get_values)(void* kodiBase, void* handle, const char* param, int* length); - char* (*get_header)(void* kodiBase, void* handle); - char* (*get_mime_type)(void* kodiBase, void* handle); - char* (*get_charset)(void* kodiBase, void* handle); - char* (*get_proto_line)(void* kodiBase, void* handle); - }; - - struct STAT_STRUCTURE + struct VFS_STAT_STRUCTURE { - /// ID of device containing file uint32_t deviceId; - /// Total size, in bytes uint64_t size; - /// Time of last access time_t accessTime; - /// Time of last modification time_t modificationTime; - /// Time of last status change time_t statusTime; - /// The stat url is a directory bool isDirectory; - /// The stat url is a symbolic link bool isSymLink; - /// The stat url is block special bool isBlock; - /// The stat url is character special bool isCharacter; - /// The stat url is FIFO special bool isFifo; - /// The stat url is regular bool isRegular; - /// The stat url is socket bool isSocket; - /// The file serial number, which distinguishes this file from all other files on the same - /// device. uint64_t fileSerialNumber; }; - struct VFS_CACHE_STATUS_DATA + struct VFS_CACHE_STATUS { uint64_t forward; uint32_t maxrate; @@ -224,99 +197,149 @@ extern "C" uint32_t lowrate; }; - struct VFSProperty + struct VFS_PROPERTY { char* name; char* val; }; - struct VFSDirEntry + struct VFS_DIR_ENTRY { - char* label; //!< item label - char* title; //!< item title - char* path; //!< item path - unsigned int num_props; //!< Number of properties attached to item - struct VFSProperty* properties; //!< Properties - time_t date_time; //!< file creation date & time - bool folder; //!< Item is a folder - uint64_t size; //!< Size of file represented by item + char* label; + char* title; + char* path; + size_t num_props; + struct VFS_PROPERTY* properties; + time_t date_time; + bool folder; + uint64_t size; }; - typedef struct AddonToKodiFuncTable_kodi_filesystem - { - bool (*can_open_directory)(void* kodiBase, const char* url); - bool (*create_directory)(void* kodiBase, const char* path); - bool (*remove_directory)(void* kodiBase, const char* path); - bool (*directory_exists)(void* kodiBase, const char* path); - bool (*get_directory)(void* kodiBase, - const char* path, - const char* mask, - struct VFSDirEntry** items, - unsigned int* num_items); - void (*free_directory)(void* kodiBase, struct VFSDirEntry* items, unsigned int num_items); - - bool (*file_exists)(void* kodiBase, const char* filename, bool useCache); - bool (*stat_file)(void* kodiBase, const char* filename, struct STAT_STRUCTURE* buffer); - bool (*delete_file)(void* kodiBase, const char* filename); - bool (*rename_file)(void* kodiBase, const char* filename, const char* newFileName); - bool (*copy_file)(void* kodiBase, const char* filename, const char* dest); - - char* (*get_file_md5)(void* kodiBase, const char* filename); - char* (*get_cache_thumb_name)(void* kodiBase, const char* filename); - char* (*make_legal_filename)(void* kodiBase, const char* filename); - char* (*make_legal_path)(void* kodiBase, const char* path); - char* (*translate_special_protocol)(void* kodiBase, const char* strSource); - bool (*is_internet_stream)(void* kodiBase, const char* path, bool strictCheck); - bool (*is_on_lan)(void* kodiBase, const char* path); - bool (*is_remote)(void* kodiBase, const char* path); - bool (*is_local)(void* kodiBase, const char* path); - bool (*is_url)(void* kodiBase, const char* path); - bool (*get_http_header)(void* kodiBase, const char* url, struct KODI_HTTP_HEADER* headers); - bool (*get_mime_type)(void* kodiBase, const char* url, char** content, const char* useragent); - bool (*get_content_type)(void* kodiBase, - const char* url, - char** content, - const char* useragent); - bool (*get_cookies)(void* kodiBase, const char* url, char** cookies); - bool (*http_header_create)(void* kodiBase, struct KODI_HTTP_HEADER* headers); - void (*http_header_free)(void* kodiBase, struct KODI_HTTP_HEADER* headers); - - void* (*open_file)(void* kodiBase, const char* filename, unsigned int flags); - void* (*open_file_for_write)(void* kodiBase, const char* filename, bool overwrite); - ssize_t (*read_file)(void* kodiBase, void* file, void* ptr, size_t size); - bool (*read_file_string)(void* kodiBase, void* file, char* szLine, int iLineLength); - ssize_t (*write_file)(void* kodiBase, void* file, const void* ptr, size_t size); - void (*flush_file)(void* kodiBase, void* file); - int64_t (*seek_file)(void* kodiBase, void* file, int64_t position, int whence); - int (*truncate_file)(void* kodiBase, void* file, int64_t size); - int64_t (*get_file_position)(void* kodiBase, void* file); - int64_t (*get_file_length)(void* kodiBase, void* file); - double (*get_file_download_speed)(void* kodiBase, void* file); - void (*close_file)(void* kodiBase, void* file); - int (*get_file_chunk_size)(void* kodiBase, void* file); - bool (*io_control_get_seek_possible)(void* kodiBase, void* file); - bool (*io_control_get_cache_status)(void* kodiBase, - void* file, - struct VFS_CACHE_STATUS_DATA* status); - bool (*io_control_set_cache_rate)(void* kodiBase, void* file, uint32_t rate); - bool (*io_control_set_retry)(void* kodiBase, void* file, bool retry); - char** (*get_property_values)( - void* kodiBase, void* file, int type, const char* name, int* numValues); - - void* (*curl_create)(void* kodiBase, const char* url); - bool (*curl_add_option)( - void* kodiBase, void* file, int type, const char* name, const char* value); - bool (*curl_open)(void* kodiBase, void* file, unsigned int flags); - - bool (*get_disk_space)( - void* kodiBase, const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available); - bool (*remove_directory_recursive)(void* kodiBase, const char* path); - } AddonToKodiFuncTable_kodi_filesystem; - - //}}} + /*!@{*/ + ATTR_DLL_EXPORT bool kodi_vfs_can_open_directory(const char* url) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_create_directory(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_remove_directory(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_remove_directory_recursive(const char* path) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_directory_exists(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_get_directory(const char* path, + const char* mask, + struct VFS_DIR_ENTRY** items, + size_t* num_items) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_vfs_free_directory(struct VFS_DIR_ENTRY* items, size_t num_items) + __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + /*!@}*/ + + /*!@{*/ + ATTR_DLL_EXPORT bool kodi_vfs_file_exists(const char* filename, bool useCache) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_stat_file(const char* filename, struct VFS_STAT_STRUCTURE* buffer) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_delete_file(const char* filename) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_rename_file(const char* filename, const char* newFileName) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_copy_file(const char* filename, const char* dest) + __INTRODUCED_IN_KODI(1); + /*!@}*/ + + /*!@{*/ + ATTR_DLL_EXPORT char* kodi_vfs_get_file_md5(const char* filename) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_get_cache_thumb_name(const char* filename) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_make_legal_filename(const char* filename) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_make_legal_path(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_translate_special_protocol(const char* strSource) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_is_internet_stream(const char* path, bool strictCheck) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_is_on_lan(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_is_remote(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_is_local(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_is_url(const char* path) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_get_mime_type(const char* url, + char** content, + const char* useragent) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_get_content_type(const char* url, + char** content, + const char* useragent) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_get_cookies(const char* url, char** cookies) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_get_disk_space(const char* path, + uint64_t* capacity, + uint64_t* free, + uint64_t* available) __INTRODUCED_IN_KODI(1); + /*!@}*/ + + /*!@{*/ + ATTR_DLL_EXPORT KODI_HTTP_HEADER_HDL kodi_vfs_http_header_open(const char* url) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_vfs_http_header_close(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_value(KODI_HTTP_HEADER_HDL hdl, const char* param) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char** kodi_vfs_http_header_get_values(KODI_HTTP_HEADER_HDL hdl, + const char* param, + size_t* length) __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_header(KODI_HTTP_HEADER_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_mime_type(KODI_HTTP_HEADER_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_charset(KODI_HTTP_HEADER_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_proto_line(KODI_HTTP_HEADER_HDL hdl) + __INTRODUCED_IN_KODI(1); + /*!@}*/ + + /*!@{*/ + ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open(const char* filename, unsigned int flags) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open_for_write(const char* filename, bool overwrite) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_curl_create(const char* url) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_curl_add_option(KODI_FILE_HDL hdl, + enum CURLOptiontype type, + const char* name, + const char* value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_curl_open(KODI_FILE_HDL hdl, unsigned int flags) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_vfs_file_close(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT ssize_t kodi_vfs_file_read(KODI_FILE_HDL hdl, uint8_t* ptr, size_t size) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_read_line(KODI_FILE_HDL hdl, char* szLine, size_t lineLength) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT ssize_t kodi_vfs_file_write(KODI_FILE_HDL hdl, const uint8_t* ptr, size_t size) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_vfs_file_flush(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int64_t kodi_vfs_file_seek(KODI_FILE_HDL hdl, int64_t position, int whence) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_vfs_file_truncate(KODI_FILE_HDL hdl, int64_t size) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_position(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_length(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_at_end(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_vfs_file_get_download_speed(KODI_FILE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_vfs_file_get_chunk_size(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_seek_possible(KODI_FILE_HDL hdl) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_cache_status(KODI_FILE_HDL hdl, + struct VFS_CACHE_STATUS* status) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_cache_rate(KODI_FILE_HDL hdl, uint32_t rate) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_retry(KODI_FILE_HDL hdl, bool retry) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_vfs_file_get_property_value(KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char** kodi_vfs_file_get_property_values(KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name, + size_t* length) __INTRODUCED_IN_KODI(1); + /*!@}*/ #ifdef __cplusplus -} /* extern "C" */ +} #endif /* __cplusplus */ #endif /* !C_API_FILESYSTEM_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/general.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/general.h index 2188db90bd6aa..f4b9c3b54d997 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/general.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/general.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2018 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,7 +9,7 @@ #ifndef C_API_GENERAL_H #define C_API_GENERAL_H -#include +#include "addon_base.h" #ifdef __cplusplus extern "C" @@ -69,56 +69,53 @@ extern "C" } LangFormats; //---------------------------------------------------------------------------- - /* - * For interface between add-on and kodi. - * - * This structure defines the addresses of functions stored inside Kodi which - * are then available for the add-on to call - * - * All function pointers there are used by the C++ interface functions below. - * You find the set of them on xbmc/addons/interfaces/General.cpp - * - * Note: For add-on development itself this is not needed - */ + typedef enum DigestType + { + DIGEST_MD5, + DIGEST_SHA1, + DIGEST_SHA256, + DIGEST_SHA512 + } DigestType; + typedef struct AddonKeyboardKeyTable { char* keys[STD_KB_BUTTONS_MAX_ROWS][STD_KB_BUTTONS_PER_ROW]; } AddonKeyboardKeyTable; - typedef struct AddonToKodiFuncTable_kodi - { - char* (*unknown_to_utf8)(void* kodiBase, const char* source, bool* ret, bool failOnBadChar); - char* (*get_language)(void* kodiBase, int format, bool region); - bool (*queue_notification)(void* kodiBase, - int type, - const char* header, - const char* message, - const char* imageFile, - unsigned int displayTime, - bool withSound, - unsigned int messageTime); - void (*get_md5)(void* kodiBase, const char* text, char* md5); - char* (*get_region)(void* kodiBase, const char* id); - void (*get_free_mem)(void* kodiBase, long* free, long* total, bool as_bytes); - int (*get_global_idle_time)(void* kodiBase); - bool (*is_addon_avilable)(void* kodiBase, const char* id, char** version, bool* enabled); - void (*kodi_version)(void* kodiBase, - char** compile_name, - int* major, - int* minor, - char** revision, - char** tag, - char** tagversion); - char* (*get_current_skin_id)(void* kodiBase); - bool (*get_keyboard_layout)(void* kodiBase, - char** layout_name, - int modifier_key, - struct AddonKeyboardKeyTable* layout); - bool (*change_keyboard_layout)(void* kodiBase, char** layout_name); - } AddonToKodiFuncTable_kodi; + ATTR_DLL_EXPORT char* kodi_get_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_get_free_mem(long* free, long* total, bool as_bytes) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_unknown_to_utf8(const char* source, bool* ret, bool failOnBadChar) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_get_language(enum LangFormats format, bool region) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_queue_notification(enum QueueMsg type, + const char* header, + const char* message, + const char* imageFile, + unsigned int displayTime, + bool withSound, + unsigned int messageTime) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_get_digest(enum DigestType type, const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_get_region(const char* id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_get_global_idle_time() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_is_addon_avilable(const char* id, char** version, bool* enabled) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_version( + char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_get_current_skin_id() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_get_keyboard_layout(int modifier_key, + char** layout_name, + struct AddonKeyboardKeyTable* layout) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_change_keyboard_layout(char** layout_name) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_play_sfx(const char* filename, bool use_cached) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_stop_sfx() __INTRODUCED_IN_KODI(1); #ifdef __cplusplus -} /* extern "C" */ +} #endif /* __cplusplus */ #endif /* !C_API_GENERAL_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h index 46de2629d2ca7..a98a9bd461ae2 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/button.h @@ -9,22 +9,29 @@ #ifndef C_API_GUI_CONTROLS_BUTTON_H #define C_API_GUI_CONTROLS_BUTTON_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_button - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*set_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_label2)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - char* (*get_label2)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_button; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label2(KODI_GUI_CONTROL_HANDLE handle, + const char* label) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label2(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h index 571c7ce43cbb3..9f9e63d5dc876 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/edit.h @@ -9,13 +9,15 @@ #ifndef C_API_GUI_CONTROLS_EDIT_H #define C_API_GUI_CONTROLS_EDIT_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ + typedef void* KODI_GUI_CONTROL_HANDLE; + //============================================================================ /// @ingroup cpp_kodi_gui_windows_controls_CEdit_Defs /// @{ @@ -52,23 +54,28 @@ extern "C" /// @} //---------------------------------------------------------------------------- - typedef struct AddonToKodiFuncTable_kodi_gui_control_edit - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*set_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - char* (*get_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_cursor_position)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - unsigned int position); - unsigned int (*get_cursor_position)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_input_type)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - int type, - const char* heading); - } AddonToKodiFuncTable_kodi_gui_control_edit; + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_label(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_text(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_cursor_position(KODI_GUI_CONTROL_HANDLE handle, + unsigned int position) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT unsigned int kodi_gui_controls_edit_get_cursor_position( + KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_input_type(KODI_GUI_CONTROL_HANDLE handle, + int type, + const char* heading) + __INTRODUCED_IN_KODI(1); + #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h index dab45747121c4..282ccf87d5011 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/fade_label.h @@ -9,21 +9,28 @@ #ifndef C_API_GUI_CONTROLS_FADE_LABEL_H #define C_API_GUI_CONTROLS_FADE_LABEL_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_fade_label - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*add_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_scrolling)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool scroll); - void (*reset)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_fade_label; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_add_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_fade_label_get_label(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_scrolling(KODI_GUI_CONTROL_HANDLE handle, + bool scroll) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_reset(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h index 257dd678fd522..a6d2febe85b7c 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/image.h @@ -9,24 +9,23 @@ #ifndef C_API_GUI_CONTROLS_IMAGE_H #define C_API_GUI_CONTROLS_IMAGE_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_image - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_filename)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* filename, - bool use_cache); - void (*set_color_diffuse)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - uint32_t color_diffuse); - } AddonToKodiFuncTable_kodi_gui_control_image; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_image_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_image_set_filename(KODI_GUI_CONTROL_HANDLE handle, + const char* filename, + bool use_cache) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_image_set_color_diffuse(KODI_GUI_CONTROL_HANDLE handle, + uint32_t color_diffuse) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h index 92af25ca8d4b7..5b9b87284f95b 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/label.h @@ -9,19 +9,21 @@ #ifndef C_API_GUI_CONTROLS_LABEL_H #define C_API_GUI_CONTROLS_LABEL_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_label - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_label; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_label_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_label_get_label(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h index 4f211fdf62765..4b411901d1781 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/progress.h @@ -9,19 +9,22 @@ #ifndef C_API_GUI_CONTROLS_PROGRESS_H #define C_API_GUI_CONTROLS_PROGRESS_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_progress - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - float (*get_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_progress; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_percentage(KODI_GUI_CONTROL_HANDLE handle, + float percent) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_progress_get_percentage(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h index d652e6727f4c8..da5ad3daae7b3 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/radio_button.h @@ -9,22 +9,31 @@ #ifndef C_API_GUI_CONTROLS_RADIO_BUTTON_H #define C_API_GUI_CONTROLS_RADIO_BUTTON_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_radio_button - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*set_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_selected)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool selected); - bool (*is_selected)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_radio_button; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_radio_button_get_label(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_selected(KODI_GUI_CONTROL_HANDLE handle, + bool selected) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_controls_radio_button_is_selected(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h index 792a8d6df506b..10091145f8a9f 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/rendering.h @@ -9,25 +9,25 @@ #ifndef C_API_GUI_CONTROLS_RENDERING_H #define C_API_GUI_CONTROLS_RENDERING_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_rendering - { - void (*set_callbacks)( - KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*createCB)(KODI_GUI_CLIENT_HANDLE, int, int, int, int, ADDON_HARDWARE_CONTEXT), - void (*renderCB)(KODI_GUI_CLIENT_HANDLE), - void (*stopCB)(KODI_GUI_CLIENT_HANDLE), - bool (*dirtyCB)(KODI_GUI_CLIENT_HANDLE)); - void (*destroy)(void* kodiBase, KODI_GUI_CONTROL_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_control_rendering; + typedef void* KODI_GUI_CONTROL_HANDLE; + + // // ATTR_DLL_EXPORT void kodi_gui_controls_radio_rendering_set_callbacks( + // // KODI_GUI_CONTROL_HANDLE handle, + // // KODI_GUI_CLIENT_HANDLE clienthandle, + // // bool (*createCB)(KODI_GUI_CLIENT_HANDLE, int, int, int, int, ADDON_HARDWARE_CONTEXT), + // // void (*renderCB)(KODI_GUI_CLIENT_HANDLE), + // // void (*stopCB)(KODI_GUI_CLIENT_HANDLE), + // // bool (*dirtyCB)(KODI_GUI_CLIENT_HANDLE)) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_radio_rendering_destroy(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h index 42992527cd7ef..9a13b836d397f 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/settings_slider.h @@ -9,35 +9,46 @@ #ifndef C_API_GUI_CONTROLS_SETTINGS_SLIDER_H #define C_API_GUI_CONTROLS_SETTINGS_SLIDER_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_settings_slider - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*set_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* label); - void (*reset)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_int_range)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int start, int end); - void (*set_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - int (*get_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_int_interval)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int interval); - void (*set_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - float (*get_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_range)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - void (*set_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - float (*get_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_interval)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - } AddonToKodiFuncTable_kodi_gui_control_settings_slider; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* label) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_reset(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_range( + KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_value( + KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_controls_settings_slider_get_int_value( + KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_interval( + KODI_GUI_CONTROL_HANDLE handle, int interval) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_percentage( + KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_percentage( + KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_range( + KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_value( + KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_float_value( + KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_interval( + KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h index 67c6c2fc33e95..621d63f57eb94 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/slider.h @@ -9,35 +9,49 @@ #ifndef C_API_GUI_CONTROLS_SLIDER_H #define C_API_GUI_CONTROLS_SLIDER_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_slider - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*reset)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - char* (*get_description)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_int_range)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int start, int end); - void (*set_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - int (*get_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_int_interval)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int interval); - void (*set_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float percent); - float (*get_percentage)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_range)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - void (*set_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - float (*get_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_interval)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - } AddonToKodiFuncTable_kodi_gui_control_slider; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_reset(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_slider_get_description(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_range(KODI_GUI_CONTROL_HANDLE handle, + int start, + int end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_value(KODI_GUI_CONTROL_HANDLE handle, + int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_controls_slider_get_int_value(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_interval(KODI_GUI_CONTROL_HANDLE handle, + int interval) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_percentage(KODI_GUI_CONTROL_HANDLE handle, + float percent) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_percentage(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_range(KODI_GUI_CONTROL_HANDLE handle, + float start, + float end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_value(KODI_GUI_CONTROL_HANDLE handle, + float value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_float_value(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, + float interval) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h index 0373636afa965..db1b1116046e3 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/spin.h @@ -9,45 +9,54 @@ #ifndef C_API_GUI_CONTROLS_SPIN_H #define C_API_GUI_CONTROLS_SPIN_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_spin - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*set_enabled)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool enabled); - void (*set_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - void (*reset)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_type)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int type); - void (*add_string_label)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - const char* value); - void (*set_string_value)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* value); - char* (*get_string_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*add_int_label)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - const char* label, - int value); - void (*set_int_range)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int start, int end); - void (*set_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int value); - int (*get_int_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_range)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float start, - float end); - void (*set_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, float value); - float (*get_float_value)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_float_interval)(KODI_HANDLE kodiBase, - KODI_GUI_CONTROL_HANDLE handle, - float interval); - } AddonToKodiFuncTable_kodi_gui_control_spin; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_reset(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_type(KODI_GUI_CONTROL_HANDLE handle, int type) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_string_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label, + const char* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_string_value(KODI_GUI_CONTROL_HANDLE handle, + const char* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_spin_get_string_value(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_int_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label, + int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_range(KODI_GUI_CONTROL_HANDLE handle, + int start, + int end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_value(KODI_GUI_CONTROL_HANDLE handle, + int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_controls_spin_get_int_value(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_range(KODI_GUI_CONTROL_HANDLE handle, + float start, + float end) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_value(KODI_GUI_CONTROL_HANDLE handle, + float value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_controls_spin_get_float_value(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, + float interval) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h index 333689e0b2547..6267e06286be7 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/controls/text_box.h @@ -9,23 +9,29 @@ #ifndef C_API_GUI_CONTROLS_TEXT_BOX_H #define C_API_GUI_CONTROLS_TEXT_BOX_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_control_text_box - { - void (*set_visible)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, bool visible); - void (*reset)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*set_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, const char* text); - char* (*get_text)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle); - void (*scroll)(KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, unsigned int scroll); - void (*set_auto_scrolling)( - KODI_HANDLE kodiBase, KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat); - } AddonToKodiFuncTable_kodi_gui_control_text_box; + typedef void* KODI_GUI_CONTROL_HANDLE; + + ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_text_box_reset(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_controls_text_box_get_text(KODI_GUI_CONTROL_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_text_box_scroll(KODI_GUI_CONTROL_HANDLE handle, + unsigned int position) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_auto_scrolling( + KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat) __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h index 130d831e5bb3b..c4c8cd41b333e 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/context_menu.h @@ -9,20 +9,16 @@ #ifndef C_API_GUI_DIALOGS_CONTEXT_MENU_H #define C_API_GUI_DIALOGS_CONTEXT_MENU_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogContextMenu - { - int (*open)(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size); - } AddonToKodiFuncTable_kodi_gui_dialogContextMenu; + ATTR_DLL_EXPORT int kodi_gui_dialogs_context_menu_open(const char* heading, + const char* entries[], + size_t size) __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h index 0992d5c2288b0..d4132b4cacc5e 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/extended_progress.h @@ -9,30 +9,43 @@ #ifndef C_API_GUI_DIALOGS_EXTENDED_PROGRESS_H #define C_API_GUI_DIALOGS_EXTENDED_PROGRESS_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogExtendedProgress - { - KODI_GUI_HANDLE (*new_dialog)(KODI_HANDLE kodiBase, const char* title); - void (*delete_dialog)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - char* (*get_title)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*set_title)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* title); - char* (*get_text)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*set_text)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* text); - bool (*is_finished)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*mark_finished)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - float (*get_percentage)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*set_percentage)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, float percentage); - void (*set_progress)(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - int currentItem, - int itemCount); - } AddonToKodiFuncTable_kodi_gui_dialogExtendedProgress; + typedef void* KODI_GUI_HANDLE; + + ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_extended_progress_new_dialog(const char* title) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_delete_dialog(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_title(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_title(KODI_GUI_HANDLE handle, + const char* title) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_text(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_text(KODI_GUI_HANDLE handle, + const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_extended_progress_is_finished(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_mark_finished(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_dialogs_extended_progress_get_percentage(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_percentage(KODI_GUI_HANDLE handle, + float percentage) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_progress(KODI_GUI_HANDLE handle, + int currentItem, + int itemCount) + __INTRODUCED_IN_KODI(1); + #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h index ef3945b27468b..97fbbc0dad865 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/filebrowser.h @@ -9,64 +9,64 @@ #ifndef C_API_GUI_DIALOGS_FILEBROWSER_H #define C_API_GUI_DIALOGS_FILEBROWSER_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogFileBrowser - { - bool (*show_and_get_directory)(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out, - bool writeOnly); - bool (*show_and_get_file)(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories); - bool (*show_and_get_file_from_dir)(KODI_HANDLE kodiBase, - const char* directory, - const char* mask, - const char* heading, - const char* path_in, - char** path_out, - bool use_thumbs, - bool use_file_directories, - bool singleList); - bool (*show_and_get_file_list)(KODI_HANDLE kodiBase, - const char* shares, - const char* mask, - const char* heading, - char*** file_list, - unsigned int* entries, - bool use_thumbs, - bool use_file_directories); - bool (*show_and_get_source)(KODI_HANDLE kodiBase, - const char* path_in, - char** path_out, - bool allow_network_shares, - const char* additional_share, - const char* type); - bool (*show_and_get_image)(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - const char* path_in, - char** path_out); - bool (*show_and_get_image_list)(KODI_HANDLE kodiBase, - const char* shares, - const char* heading, - char*** file_list, - unsigned int* entries); - void (*clear_file_list)(KODI_HANDLE kodiBase, char*** file_list, unsigned int entries); - } AddonToKodiFuncTable_kodi_gui_dialogFileBrowser; + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_directory(const char* shares, + const char* heading, + const char* path_in, + char** path_out, + bool write_only) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file(const char* shares, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_from_dir( + const char* directory, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories, + bool single_list) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_list( + const char* shares, + const char* mask, + const char* heading, + char*** file_list, + size_t* entries, + bool use_thumbs, + bool use_file_directories) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_source( + const char* path_in, + char** path_out, + bool allow_network_shares, + const char* additional_share, + const char* type) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image(const char* shares, + const char* heading, + const char* path_in, + char** path_out) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image_list(const char* shares, + const char* heading, + char*** file_list, + size_t* entries) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_file_browser_clear_file_list(char*** file_list, + size_t entries) + __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h index f84dc204fefeb..eb8469e35e969 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/keyboard.h @@ -9,61 +9,54 @@ #ifndef C_API_GUI_DIALOGS_KEYBOARD_H #define C_API_GUI_DIALOGS_KEYBOARD_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogKeyboard - { - bool (*show_and_get_input_with_head)(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - const char* heading, - bool allow_empty_result, - bool hiddenInput, - unsigned int auto_close_ms); - bool (*show_and_get_input)(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool allow_empty_result, - unsigned int auto_close_ms); - bool (*show_and_get_new_password_with_head)(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - bool allow_empty_result, - unsigned int auto_close_ms); - bool (*show_and_get_new_password)(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - unsigned int auto_close_ms); - bool (*show_and_verify_new_password_with_head)(KODI_HANDLE kodiBase, - char** password_out, - const char* heading, - bool allow_empty_result, - unsigned int auto_close_ms); - bool (*show_and_verify_new_password)(KODI_HANDLE kodiBase, - char** password_out, - unsigned int auto_close_ms); - int (*show_and_verify_password)(KODI_HANDLE kodiBase, - const char* password_in, - char** password_out, - const char* heading, - int retries, - unsigned int auto_close_ms); - bool (*show_and_get_filter)(KODI_HANDLE kodiBase, - const char* text_in, - char** text_out, - bool searching, - unsigned int auto_close_ms); - bool (*send_text_to_active_keyboard)(KODI_HANDLE kodiBase, - const char* text, - bool close_keyboard); - bool (*is_keyboard_activated)(KODI_HANDLE kodiBase); - } AddonToKodiFuncTable_kodi_gui_dialogKeyboard; + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input_with_head( + const char* text_in, + char** text_out, + const char* heading, + bool allow_empty_result, + bool hidden_input, + unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input(const char* text_in, + char** text_out, + bool allow_empty_result, + unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head( + const char* password_in, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password( + const char* password_in, char** password_out, unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head( + char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password( + char** password_out, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_dialogs_keyboard_show_and_verify_password(const char* password_in, + char** password_out, + const char* heading, + int retries, + unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_filter(const char* text_in, + char** text_out, + bool searching, + unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_send_text_to_active_keyboard(const char* text, + bool close_keyboard) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_is_keyboard_activated() __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h index 08aaf25d86bc8..d1f64b6bd52be 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/numeric.h @@ -9,41 +9,43 @@ #ifndef C_API_GUI_DIALOGS_NUMERIC_H #define C_API_GUI_DIALOGS_NUMERIC_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogNumeric - { - bool (*show_and_verify_new_password)(KODI_HANDLE kodiBase, char** password); - int (*show_and_verify_password)(KODI_HANDLE kodiBase, - const char* password, - const char* heading, - int retries); - bool (*show_and_verify_input)(KODI_HANDLE kodiBase, - const char* verify_in, - char** verify_out, - const char* heading, - bool verify_input); - bool (*show_and_get_time)(KODI_HANDLE kodiBase, struct tm* time, const char* heading); - bool (*show_and_get_date)(KODI_HANDLE kodiBase, struct tm* date, const char* heading); - bool (*show_and_get_ip_address)(KODI_HANDLE kodiBase, - const char* ip_address_in, - char** ip_address_out, - const char* heading); - bool (*show_and_get_number)(KODI_HANDLE kodiBase, - const char* input_in, - char** input_out, - const char* heading, - unsigned int auto_close_ms); - bool (*show_and_get_seconds)(KODI_HANDLE kodiBase, - const char* time_in, - char** time_out, - const char* heading); - } AddonToKodiFuncTable_kodi_gui_dialogNumeric; + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_new_password(char** password) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_dialogs_numeric_show_and_verify_password(const char* password, + const char* heading, + int retries) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_input(const char* verify_in, + char** verify_out, + const char* heading, + bool verify_input) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_time(struct tm* time, + const char* heading) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_date(struct tm* date, + const char* heading) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_ip_address(const char* ip_address_in, + char** ip_address_out, + const char* heading) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_number(const char* number_in, + char** number_out, + const char* heading, + unsigned int auto_close_ms) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_seconds(const char* time_in, + char** time_out, + const char* heading) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h index 45fe0fc458fcf..a52c20910826e 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/ok.h @@ -9,24 +9,21 @@ #ifndef C_API_GUI_DIALOGS_OK_H #define C_API_GUI_DIALOGS_OK_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogOK - { - void (*show_and_get_input_single_text)(KODI_HANDLE kodiBase, - const char* heading, - const char* text); - void (*show_and_get_input_line_text)(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2); - } AddonToKodiFuncTable_kodi_gui_dialogOK; + ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_single_text(const char* heading, + const char* text) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_line_text(const char* heading, + const char* line0, + const char* line1, + const char* line2) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h index 60a003ab7b104..5413812d130a6 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/progress.h @@ -9,32 +9,46 @@ #ifndef C_API_GUI_DIALOGS_PROGRESS_H #define C_API_GUI_DIALOGS_PROGRESS_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogProgress - { - KODI_GUI_HANDLE (*new_dialog)(KODI_HANDLE kodiBase); - void (*delete_dialog)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*open)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*set_heading)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, const char* heading); - void (*set_line)(KODI_HANDLE kodiBase, - KODI_GUI_HANDLE handle, - unsigned int lineNo, - const char* line); - void (*set_can_cancel)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, bool canCancel); - bool (*is_canceled)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*set_percentage)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int percentage); - int (*get_percentage)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - void (*show_progress_bar)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, bool pnOff); - void (*set_progress_max)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int max); - void (*set_progress_advance)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle, int nSteps); - bool (*abort)(KODI_HANDLE kodiBase, KODI_GUI_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_dialogProgress; + typedef void* KODI_GUI_HANDLE; + + ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_progress_new_dialog() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_delete_dialog(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_open(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_heading(KODI_GUI_HANDLE handle, + const char* heading) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_line(KODI_GUI_HANDLE handle, + unsigned int line_no, + const char* line) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_can_cancel(KODI_GUI_HANDLE handle, + bool can_cancel) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_is_canceled(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_percentage(KODI_GUI_HANDLE handle, + int percentage) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_dialogs_progress_get_percentage(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_show_progress_bar(KODI_GUI_HANDLE handle, + bool on_off) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_max(KODI_GUI_HANDLE handle, int max) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_advance(KODI_GUI_HANDLE handle, + int n_steps) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_abort(KODI_GUI_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h index 79635d775e008..a04a0d1cebc44 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/select.h @@ -9,29 +9,25 @@ #ifndef C_API_GUI_DIALOGS_SELECT_H #define C_API_GUI_DIALOGS_SELECT_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogSelect - { - int (*open)(KODI_HANDLE kodiBase, - const char* heading, - const char* entries[], - unsigned int size, - int selected, - unsigned int autoclose); - bool (*open_multi_select)(KODI_HANDLE kodiBase, - const char* heading, - const char* entryIDs[], - const char* entryNames[], - bool entriesSelected[], - unsigned int size, - unsigned int autoclose); - } AddonToKodiFuncTable_kodi_gui_dialogSelect; + ATTR_DLL_EXPORT int kodi_gui_dialogs_select_open(const char* heading, + const char* entries[], + size_t size, + int selected, + unsigned int autoclose) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_select_open_multi_select(const char* heading, + const char* entryIDs[], + const char* entryNames[], + uint8_t entriesSelected[], + size_t size, + unsigned int autoclose) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h index 4a1cfe687c7a6..3e6eb112b9afb 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/text_viewer.h @@ -9,17 +9,15 @@ #ifndef C_API_GUI_DIALOGS_TEXT_VIEWER_H #define C_API_GUI_DIALOGS_TEXT_VIEWER_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogTextViewer - { - void (*open)(KODI_HANDLE kodiBase, const char* heading, const char* text); - } AddonToKodiFuncTable_kodi_gui_dialogTextViewer; + ATTR_DLL_EXPORT void kodi_gui_dialogs_text_viewer_show(const char* heading, const char* text) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h index 8558acbc465b1..711966414cd82 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/dialogs/yes_no.h @@ -9,37 +9,34 @@ #ifndef C_API_GUI_DIALOGS_YES_NO_H #define C_API_GUI_DIALOGS_YES_NO_H -#include "../definitions.h" +#include "../../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_dialogYesNo - { - bool (*show_and_get_input_single_text)(KODI_HANDLE kodiBase, - const char* heading, - const char* text, - bool* canceled, - const char* noLabel, - const char* yesLabel); - bool (*show_and_get_input_line_text)(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - const char* noLabel, - const char* yesLabel); - bool (*show_and_get_input_line_button_text)(KODI_HANDLE kodiBase, - const char* heading, - const char* line0, - const char* line1, - const char* line2, - bool* canceled, - const char* noLabel, - const char* yesLabel); - } AddonToKodiFuncTable_kodi_gui_dialogYesNo; + ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_single_text(const char* heading, + const char* text, + bool* canceled, + const char* noLabel, + const char* yesLabel) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_text(const char* heading, + const char* line0, + const char* line1, + const char* line2, + const char* noLabel, + const char* yesLabel) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_button_text( + const char* heading, + const char* line0, + const char* line1, + const char* line2, + bool* canceled, + const char* noLabel, + const char* yesLabel) __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/general.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/general.h index 676986725f401..f041111077ad2 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/general.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/general.h @@ -9,24 +9,21 @@ #ifndef C_API_GUI_GENERAL_H #define C_API_GUI_GENERAL_H -#include "definitions.h" +#include "../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_general - { - void (*lock)(); - void (*unlock)(); - int (*get_screen_height)(KODI_HANDLE kodiBase); - int (*get_screen_width)(KODI_HANDLE kodiBase); - int (*get_video_resolution)(KODI_HANDLE kodiBase); - int (*get_current_window_dialog_id)(KODI_HANDLE kodiBase); - int (*get_current_window_id)(KODI_HANDLE kodiBase); - ADDON_HARDWARE_CONTEXT (*get_hw_context)(KODI_HANDLE kodiBase); - } AddonToKodiFuncTable_kodi_gui_general; + ATTR_DLL_EXPORT void kodi_gui_lock() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_unlock() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_get_screen_height() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_get_screen_width() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT float kodi_gui_get_video_resolution() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_get_current_window_dialog_id() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_get_current_window_id() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT ADDON_HARDWARE_CONTEXT kodi_gui_get_hw_context() __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h index d2120ac355ada..c4f24c1b0c6ef 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/list_item.h @@ -9,41 +9,48 @@ #ifndef C_API_GUI_LIST_ITEM_H #define C_API_GUI_LIST_ITEM_H -#include "definitions.h" +#include "../addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - typedef struct AddonToKodiFuncTable_kodi_gui_listItem - { - KODI_GUI_LISTITEM_HANDLE(*create) - (KODI_HANDLE kodiBase, - const char* label, - const char* label2, - const char* path); - void (*destroy)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - - char* (*get_label)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - void (*set_label)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* label); - char* (*get_label2)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - void (*set_label2)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* label); - char* (*get_art)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* type); - void (*set_art)(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* type, - const char* image); - char* (*get_path)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - void (*set_path)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* path); - char* (*get_property)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, const char* key); - void (*set_property)(KODI_HANDLE kodiBase, - KODI_GUI_LISTITEM_HANDLE handle, - const char* key, - const char* value); - void (*select)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle, bool select); - bool (*is_selected)(KODI_HANDLE kodiBase, KODI_GUI_LISTITEM_HANDLE handle); - } AddonToKodiFuncTable_kodi_gui_listItem; + typedef void* KODI_GUI_LISTITEM_HANDLE; + + ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_listitem_create(const char* label, + const char* label2, + const char* path) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_destroy(KODI_GUI_LISTITEM_HANDLE handle) + __INTRODUCED_IN_KODI(1); + + ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label(KODI_GUI_LISTITEM_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_set_label(KODI_GUI_LISTITEM_HANDLE handle, + const char* label) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label2(KODI_GUI_LISTITEM_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_set_label2(KODI_GUI_LISTITEM_HANDLE handle, + const char* label) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_listitem_get_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_set_art(KODI_GUI_LISTITEM_HANDLE handle, + const char* type, + const char* image) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_listitem_get_path(KODI_GUI_LISTITEM_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_set_path(KODI_GUI_LISTITEM_HANDLE handle, const char* path) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_listitem_get_property(KODI_GUI_LISTITEM_HANDLE handle, + const char* key) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_set_property(KODI_GUI_LISTITEM_HANDLE handle, + const char* key, + const char* value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_listitem_select(KODI_GUI_LISTITEM_HANDLE handle, bool select) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_listitem_is_selected(KODI_GUI_LISTITEM_HANDLE handle) + __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/window.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/window.h index d7181c0538bb9..1f7f5918ea762 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/window.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/gui/window.h @@ -9,8 +9,9 @@ #ifndef C_API_GUI_WINDOW_H #define C_API_GUI_WINDOW_H -#include "definitions.h" +#include "../addon_base.h" #include "input/action_ids.h" +#include "list_item.h" #include @@ -22,157 +23,157 @@ extern "C" { #endif /* __cplusplus */ + typedef void* KODI_GUI_WINDOW_HANDLE; + typedef void* KODI_GUI_CLIENT_HANDLE; + typedef void* KODI_GUI_CONTROL_HANDLE; + typedef struct gui_context_menu_pair { unsigned int id; char name[ADDON_MAX_CONTEXT_ENTRY_NAME_LENGTH]; } gui_context_menu_pair; - typedef struct AddonToKodiFuncTable_kodi_gui_window - { - /* Window creation functions */ - KODI_GUI_WINDOW_HANDLE(*create) - (KODI_HANDLE kodiBase, - const char* xml_filename, - const char* default_skin, - bool as_dialog, - bool is_media); - void (*destroy)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - void (*set_callbacks)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_CLIENT_HANDLE clienthandle, - bool (*CBInit)(KODI_GUI_CLIENT_HANDLE), - bool (*CBFocus)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBClick)(KODI_GUI_CLIENT_HANDLE, int), - bool (*CBOnAction)(KODI_GUI_CLIENT_HANDLE, enum ADDON_ACTION), - void (*CBGetContextButtons)( - KODI_GUI_CLIENT_HANDLE, int, gui_context_menu_pair*, unsigned int*), - bool (*CBOnContextButton)(KODI_GUI_CLIENT_HANDLE, int, unsigned int)); - bool (*show)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - bool (*close)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - bool (*do_modal)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* Window control functions */ - bool (*set_focus_id)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - int (*get_focus_id)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - void (*set_control_label)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - const char* label); - void (*set_control_visible)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool visible); - void (*set_control_selected)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int control_id, - bool selected); - - /* Window property functions */ - void (*set_property)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value); - void (*set_property_int)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - int value); - void (*set_property_bool)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - bool value); - void (*set_property_double)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - double value); - char* (*get_property)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, const char* key); - int (*get_property_int)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, const char* key); - bool (*get_property_bool)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, const char* key); - double (*get_property_double)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key); - void (*clear_properties)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - void (*clear_property)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, const char* key); - - /* List item functions */ - void (*clear_item_list)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - void (*add_list_item)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item, - int list_position); - void (*remove_list_item_from_position)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position); - void (*remove_list_item)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - KODI_GUI_LISTITEM_HANDLE item); - KODI_GUI_LISTITEM_HANDLE(*get_list_item) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int list_position); - void (*set_current_list_position)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - int list_position); - int (*get_current_list_position)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - int (*get_list_size)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - void (*set_container_property)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* key, - const char* value); - void (*set_container_content)(KODI_HANDLE kodiBase, - KODI_GUI_WINDOW_HANDLE handle, - const char* value); - int (*get_current_container_id)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* Various functions */ - void (*mark_dirty_region)(KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle); - - /* GUI control access functions */ - KODI_GUI_CONTROL_HANDLE(*get_control_button) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_edit) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_fade_label) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_image) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_label) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_progress) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_radio_button) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_render_addon) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_settings_slider) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_slider) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_spin) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_text_box) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy1) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy2) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy3) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy4) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy5) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy6) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy7) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy8) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy9) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - KODI_GUI_CONTROL_HANDLE(*get_control_dummy10) - (KODI_HANDLE kodiBase, KODI_GUI_WINDOW_HANDLE handle, int control_id); - /* This above used to add new get_control_* functions */ - } AddonToKodiFuncTable_kodi_gui_window; + // typedef bool(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_INIT_V1)(KODI_GUI_CLIENT_HANDLE clienthandle); + // typedef bool(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_FOCUS_V1)(KODI_GUI_CLIENT_HANDLE clienthandle, + // int control_id); + // typedef bool(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_CLICK_V1)(KODI_GUI_CLIENT_HANDLE clienthandle, + // int control_id); + // typedef bool(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_ON_ACTION_V1)(KODI_GUI_CLIENT_HANDLE clienthandle, + // enum ADDON_ACTION action); + // typedef void(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_GET_CONTEXT_BUTTONS_V1)( + // KODI_GUI_CLIENT_HANDLE clienthandle, + // int control_id, + // struct gui_context_menu_pair* entries, + // size_t* amount); + // typedef bool(ATTR_APIENTRYP PFN_KODI_GUI_WINDOW_ON_CONTEXT_BUTTON_V1)( + // KODI_GUI_CLIENT_HANDLE clienthandle, int control_id, size_t selected); + + /* Window creation functions */ + ATTR_DLL_EXPORT KODI_GUI_WINDOW_HANDLE kodi_gui_window_create(KODI_HANDLE kodiBase, + const char* xml_filename, + const char* default_skin, + bool as_dialog, + bool is_media) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_destroy(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + + // ATTR_DLL_EXPORT void kodi_gui_window_set_callbacks( + // KODI_GUI_WINDOW_HANDLE handle, + // KODI_GUI_CLIENT_HANDLE clienthandle, + // PFN_KODI_GUI_WINDOW_INIT_V1 cb_init, + // PFN_KODI_GUI_WINDOW_FOCUS_V1 cb_focus, + // PFN_KODI_GUI_WINDOW_CLICK_V1 cb_click, + // PFN_KODI_GUI_WINDOW_ON_ACTION_V1 cb_on_action, + // PFN_KODI_GUI_WINDOW_GET_CONTEXT_BUTTONS_V1 cb_get_context_buttons, + // PFN_KODI_GUI_WINDOW_ON_CONTEXT_BUTTON_V1 cb_on_context_button) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_window_show(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_window_close(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_window_do_modal(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + + /* Window control functions */ + ATTR_DLL_EXPORT bool kodi_gui_window_set_focus_id(KODI_GUI_WINDOW_HANDLE handle, int control_id) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_window_get_focus_id(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_control_label(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* label) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_control_visible(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool visible) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_control_selected(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool selected) __INTRODUCED_IN_KODI(1); + + /* Window property functions */ + ATTR_DLL_EXPORT void kodi_gui_window_set_property(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_property_int(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + int value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_property_bool(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + bool value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_property_double(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + double value) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_gui_window_get_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_window_get_property_int(KODI_GUI_WINDOW_HANDLE handle, + const char* key) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_gui_window_get_property_bool(KODI_GUI_WINDOW_HANDLE handle, + const char* key) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT double kodi_gui_window_get_property_double(KODI_GUI_WINDOW_HANDLE handle, + const char* key) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_clear_properties(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_clear_property(KODI_GUI_WINDOW_HANDLE handle, + const char* key) __INTRODUCED_IN_KODI(1); + + /* List item functions */ + ATTR_DLL_EXPORT void kodi_gui_window_clear_item_list(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_add_list_item(KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item, + int list_position) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item_from_position(KODI_GUI_WINDOW_HANDLE handle, + int list_position) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item(KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_window_get_list_item( + KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_current_list_position(KODI_GUI_WINDOW_HANDLE handle, + int list_position) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_window_get_current_list_position(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_window_get_list_size(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_container_property(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT void kodi_gui_window_set_container_content(KODI_GUI_WINDOW_HANDLE handle, + const char* value) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT int kodi_gui_window_get_current_container_id(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + + /* Various functions */ + ATTR_DLL_EXPORT void kodi_gui_window_mark_dirty_region(KODI_GUI_WINDOW_HANDLE handle) + __INTRODUCED_IN_KODI(1); + + /* GUI control access functions */ + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_button( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_edit( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_fade_label( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_image( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_label( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_progress( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_radio_button( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_render_addon( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_settings_slider( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_slider( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_spin( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_text_box( + KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); #ifdef __cplusplus } /* extern "C" */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/monitor.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/monitor.h new file mode 100644 index 0000000000000..68d7fa1248b1a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/monitor.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#ifndef C_API_MONITOR_H +#define C_API_MONITOR_H + +#include "addon_base.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + ATTR_DLL_EXPORT bool kodi_monitor_wait_for_abort(double timeout) __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + + ATTR_DLL_EXPORT bool kodi_monitor_abort_requested() __INTRODUCED_IN_KODI(1); + /*---AUTO_GEN_PARSE---*/ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* !C_API_MONITOR_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/network.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/network.h index 8bd987be605ab..064259d7ff7bd 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/network.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/network.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2018 Team Kodi + * Copyright (C) 2005-2020 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later @@ -9,38 +9,29 @@ #ifndef C_API_NETWORK_H #define C_API_NETWORK_H -#include +#include "addon_base.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ - /* - * For interface between add-on and kodi. - * - * This structure defines the addresses of functions stored inside Kodi which - * are then available for the add-on to call - * - * All function pointers there are used by the C++ interface functions below. - * You find the set of them on xbmc/addons/interfaces/General.cpp - * - * Note: For add-on development itself this is not needed - */ - typedef struct AddonToKodiFuncTable_kodi_network - { - bool (*wake_on_lan)(void* kodiBase, const char* mac); - char* (*get_ip_address)(void* kodiBase); - char* (*dns_lookup)(void* kodiBase, const char* url, bool* ret); - char* (*url_encode)(void* kodiBase, const char* url); - char* (*get_hostname)(void* kodiBase); - bool (*is_local_host)(void* kodiBase, const char* hostname); - bool (*is_host_on_lan)(void* kodiBase, const char* hostname, bool offLineCheck); - char* (*get_user_agent)(void* kodiBase); - } AddonToKodiFuncTable_kodi_network; +#if __KODI_API__ >= 1 + + ATTR_DLL_EXPORT bool kodi_network_wake_on_lan(const char* mac) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_network_get_ip_address() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_network_dns_lookup(const char* url, bool* ret) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_network_url_encode(const char* url) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_network_get_hostname() __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_network_is_local_host(const char* hostname) __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT bool kodi_network_is_host_on_lan(const char* hostname, bool offLineCheck) + __INTRODUCED_IN_KODI(1); + ATTR_DLL_EXPORT char* kodi_network_get_user_agent() __INTRODUCED_IN_KODI(1); + +#endif /* __KODI_API__ >= 1 */ #ifdef __cplusplus -} /* extern "C" */ +} #endif /* __cplusplus */ -#endif /* C_API_NETWORK_H */ +#endif /* !C_API_NETWORK_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/version.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/version.h new file mode 100644 index 0000000000000..309408b4f1042 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/version.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#ifndef C_API_VERSION_H +#define C_API_VERSION_H + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/** + * Major version of this KDK. + * + * For example: 1 for r1. + */ +#define __KDK_MAJOR__ 1 + +/** + * Minor version of this KDK. + * + * For example: 0 for r1 and 1 for r1b. + */ +#define __KDK_MINOR__ 0 + +/** + * Set to 0 if this is a release build, or 1 for beta 1, + * 2 for beta 2, and so on. + */ +#define __KDK_BETA__ 0 + +/** + * Set to 1 if this is a canary build, 0 if not. + */ +#define __KDK_CANARY__ 1 + +#define __KODI_API_FUTURE__ 10000 + +#ifndef __KODI_API__ +#define __KODI_API__ __KODI_API_FUTURE__ +#endif + +#define __KODI_API_1__ 1 + +#define __INTRODUCED_IN_KODI(api_level) +#define __DEPRECATED_IN_KODI(api_level) +#define __REMOVED_IN_KODI(api_level) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* !C_API_VERSION_H */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/General.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/General.h index 3aaa854ae5094..632720176a623 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/General.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/General.h @@ -35,7 +35,7 @@ namespace gui inline void ATTR_DLL_LOCAL Lock() { using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->general->lock(); + CPrivateBase::ifc.toKodi->kodi_gui->general->lock(); } //------------------------------------------------------------------------------ @@ -46,7 +46,7 @@ inline void ATTR_DLL_LOCAL Lock() inline void ATTR_DLL_LOCAL Unlock() { using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->general->unlock(); + CPrivateBase::ifc.toKodi->kodi_gui->general->unlock(); } //------------------------------------------------------------------------------ @@ -59,8 +59,8 @@ inline void ATTR_DLL_LOCAL Unlock() inline int ATTR_DLL_LOCAL GetScreenHeight() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_screen_height( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_screen_height( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ @@ -73,8 +73,8 @@ inline int ATTR_DLL_LOCAL GetScreenHeight() inline int ATTR_DLL_LOCAL GetScreenWidth() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_screen_width( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_screen_width( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ @@ -87,8 +87,8 @@ inline int ATTR_DLL_LOCAL GetScreenWidth() inline int ATTR_DLL_LOCAL GetVideoResolution() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_video_resolution( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_video_resolution( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ @@ -111,8 +111,8 @@ inline int ATTR_DLL_LOCAL GetVideoResolution() inline int ATTR_DLL_LOCAL GetCurrentWindowDialogId() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_current_window_dialog_id( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_current_window_dialog_id( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ @@ -135,8 +135,8 @@ inline int ATTR_DLL_LOCAL GetCurrentWindowDialogId() inline int ATTR_DLL_LOCAL GetCurrentWindowId() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_current_window_id( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_current_window_id( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ @@ -165,8 +165,8 @@ inline int ATTR_DLL_LOCAL GetCurrentWindowId() inline kodi::HardwareContext GetHWContext() { using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->general->get_hw_context( - CPrivateBase::m_interface->toKodi->kodiBase); + return CPrivateBase::ifc.toKodi->kodi_gui->general->get_hw_context( + CPrivateBase::ifc.toKodi->kodiBase); } //------------------------------------------------------------------------------ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/ListItem.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/ListItem.h index 0d3e057113178..8eed9eff68655 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/ListItem.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/ListItem.h @@ -30,7 +30,7 @@ class ATTR_DLL_LOCAL CAddonGUIControlBase protected: explicit CAddonGUIControlBase(CAddonGUIControlBase* window) : m_controlHandle(nullptr), - m_interface(::kodi::addon::CPrivateBase::m_interface->toKodi), + m_interface(::kodi::addon::CPrivateBase::ifc.toKodi), m_Window(window) { } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h index 93d75cbbe0e92..0d7cbe53c0d80 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ContextMenu.h @@ -13,6 +13,8 @@ #ifdef __cplusplus +#include + namespace kodi { namespace gui @@ -67,15 +69,13 @@ namespace ContextMenu /// inline int ATTR_DLL_LOCAL Show(const std::string& heading, const std::vector& entries) { - using namespace ::kodi::addon; - unsigned int size = static_cast(entries.size()); + const size_t size = entries.size(); const char** cEntries = static_cast(malloc(size * sizeof(const char**))); for (unsigned int i = 0; i < size; ++i) { cEntries[i] = entries[i].c_str(); } - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + int ret = kodi::dl::api.kodi_gui_dialogs_context_menu_open(heading.c_str(), cEntries, size); free(cEntries); return ret; } @@ -115,15 +115,13 @@ inline int ATTR_DLL_LOCAL Show(const std::string& heading, const std::vector>& entries) { - using namespace ::kodi::addon; - unsigned int size = static_cast(entries.size()); + const size_t size = entries.size(); const char** cEntries = static_cast(malloc(size * sizeof(const char**))); for (unsigned int i = 0; i < size; ++i) { cEntries[i] = entries[i].second.c_str(); } - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + int ret = kodi::dl::api.kodi_gui_dialogs_context_menu_open(heading.c_str(), cEntries, size); free(cEntries); return ret; } @@ -163,15 +161,13 @@ inline int ATTR_DLL_LOCAL Show(const std::string& heading, inline int ATTR_DLL_LOCAL Show(const std::string& heading, const std::vector>& entries) { - using namespace ::kodi::addon; - unsigned int size = static_cast(entries.size()); + const size_t size = entries.size(); const char** cEntries = static_cast(malloc(size * sizeof(const char**))); for (unsigned int i = 0; i < size; ++i) { cEntries[i] = entries[i].second.c_str(); } - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogContextMenu->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size); + int ret = kodi::dl::api.kodi_gui_dialogs_context_menu_open(heading.c_str(), cEntries, size); free(cEntries); return ret; } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h index 3c21877c327c9..40272af983c73 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/ExtendedProgress.h @@ -13,6 +13,8 @@ #ifdef __cplusplus +#include + namespace kodi { namespace gui @@ -66,10 +68,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// explicit CExtendedProgress(const std::string& title = "") { - using namespace ::kodi::addon; - m_DialogHandle = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->new_dialog( - CPrivateBase::m_interface->toKodi->kodiBase, title.c_str()); + m_DialogHandle = kodi::dl::api.kodi_gui_dialogs_extended_progress_new_dialog(title.c_str()); if (!m_DialogHandle) kodi::Log(ADDON_LOG_FATAL, "kodi::gui::CDialogExtendedProgress can't create window class from Kodi !!!"); @@ -82,10 +81,8 @@ class ATTR_DLL_LOCAL CExtendedProgress /// ~CExtendedProgress() { - using namespace ::kodi::addon; if (m_DialogHandle) - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->delete_dialog( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + kodi::dl::api.kodi_gui_dialogs_extended_progress_delete_dialog(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -97,16 +94,13 @@ class ATTR_DLL_LOCAL CExtendedProgress /// std::string Title() const { - using namespace ::kodi::addon; std::string text; - char* strMsg = CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_title( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + char* strMsg = kodi::dl::api.kodi_gui_dialogs_extended_progress_get_title(m_DialogHandle); if (strMsg != nullptr) { if (std::strlen(strMsg)) text = strMsg; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strMsg); + free(strMsg); } return text; } @@ -120,9 +114,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// void SetTitle(const std::string& title) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_title( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, title.c_str()); + kodi::dl::api.kodi_gui_dialogs_extended_progress_set_title(m_DialogHandle, title.c_str()); } //---------------------------------------------------------------------------- @@ -134,16 +126,13 @@ class ATTR_DLL_LOCAL CExtendedProgress /// std::string Text() const { - using namespace ::kodi::addon; std::string text; - char* strMsg = CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_text( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + char* strMsg = kodi::dl::api.kodi_gui_dialogs_extended_progress_get_text(m_DialogHandle); if (strMsg != nullptr) { if (std::strlen(strMsg)) text = strMsg; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - strMsg); + free(strMsg); } return text; } @@ -157,9 +146,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// void SetText(const std::string& text) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_text( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, text.c_str()); + kodi::dl::api.kodi_gui_dialogs_extended_progress_set_text(m_DialogHandle, text.c_str()); } //---------------------------------------------------------------------------- @@ -171,9 +158,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// bool IsFinished() const { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->is_finished( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + return kodi::dl::api.kodi_gui_dialogs_extended_progress_is_finished(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -183,9 +168,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// void MarkFinished() { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->mark_finished( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + kodi::dl::api.kodi_gui_dialogs_extended_progress_mark_finished(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -197,9 +180,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// float Percentage() const { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->get_percentage( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + return kodi::dl::api.kodi_gui_dialogs_extended_progress_get_percentage(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -211,9 +192,7 @@ class ATTR_DLL_LOCAL CExtendedProgress /// void SetPercentage(float percentage) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_percentage( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, percentage); + kodi::dl::api.kodi_gui_dialogs_extended_progress_set_percentage(m_DialogHandle, percentage); } //---------------------------------------------------------------------------- @@ -226,9 +205,8 @@ class ATTR_DLL_LOCAL CExtendedProgress /// void SetProgress(int currentItem, int itemCount) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogExtendedProgress->set_progress( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, currentItem, itemCount); + kodi::dl::api.kodi_gui_dialogs_extended_progress_set_progress(m_DialogHandle, currentItem, + itemCount); } //---------------------------------------------------------------------------- diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h index b7550f2c23c73..cff8ef41c573f 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/FileBrowser.h @@ -13,6 +13,9 @@ #ifdef __cplusplus +#include +#include + namespace kodi { namespace gui @@ -72,17 +75,14 @@ inline bool ATTR_DLL_LOCAL ShowAndGetDirectory(const std::string& shares, std::string& path, bool writeOnly = false) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_directory( - CPrivateBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), path.c_str(), - &retString, writeOnly); + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_directory( + shares.c_str(), heading.c_str(), path.c_str(), &retString, writeOnly); if (retString != nullptr) { if (std::strlen(retString)) path = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -109,17 +109,15 @@ inline bool ATTR_DLL_LOCAL ShowAndGetFile(const std::string& shares, bool useThumbs = false, bool useFileDirectories = false) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file( - CPrivateBase::m_interface->toKodi->kodiBase, shares.c_str(), mask.c_str(), heading.c_str(), - path.c_str(), &retString, useThumbs, useFileDirectories); + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_file( + shares.c_str(), mask.c_str(), heading.c_str(), path.c_str(), &retString, useThumbs, + useFileDirectories); if (retString != nullptr) { if (std::strlen(retString)) path = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -149,18 +147,15 @@ inline bool ATTR_DLL_LOCAL ShowAndGetFileFromDir(const std::string& directory, bool useFileDirectories = false, bool singleList = false) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_from_dir( - CPrivateBase::m_interface->toKodi->kodiBase, directory.c_str(), mask.c_str(), - heading.c_str(), path.c_str(), &retString, useThumbs, useFileDirectories, singleList); + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_file_from_dir( + directory.c_str(), mask.c_str(), heading.c_str(), path.c_str(), &retString, useThumbs, + useFileDirectories, singleList); if (retString != nullptr) { if (std::strlen(retString)) path = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -186,18 +181,16 @@ inline bool ATTR_DLL_LOCAL ShowAndGetFileList(const std::string& shares, bool useThumbs = false, bool useFileDirectories = false) { - using namespace ::kodi::addon; char** list = nullptr; - unsigned int listSize = 0; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_file_list( - CPrivateBase::m_interface->toKodi->kodiBase, shares.c_str(), mask.c_str(), heading.c_str(), - &list, &listSize, useThumbs, useFileDirectories); + size_t listSize = 0; + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_file_list( + shares.c_str(), mask.c_str(), heading.c_str(), &list, &listSize, useThumbs, + useFileDirectories); if (ret) { - for (unsigned int i = 0; i < listSize; ++i) + for (size_t i = 0; i < listSize; ++i) fileList.emplace_back(list[i]); - CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list( - CPrivateBase::m_interface->toKodi->kodiBase, &list, listSize); + kodi::dl::api.kodi_gui_dialogs_file_browser_clear_file_list(&list, listSize); } return ret; } @@ -220,17 +213,14 @@ inline bool ATTR_DLL_LOCAL ShowAndGetSource(std::string& path, const std::string& additionalShare = "", const std::string& type = "") { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_source( - CPrivateBase::m_interface->toKodi->kodiBase, path.c_str(), &retString, allowNetworkShares, - additionalShare.c_str(), type.c_str()); + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_source( + path.c_str(), &retString, allowNetworkShares, additionalShare.c_str(), type.c_str()); if (retString != nullptr) { if (std::strlen(retString)) path = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -249,17 +239,14 @@ inline bool ATTR_DLL_LOCAL ShowAndGetImage(const std::string& shares, const std::string& heading, std::string& path) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image( - CPrivateBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), path.c_str(), - &retString); + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_image( + shares.c_str(), heading.c_str(), path.c_str(), &retString); if (retString != nullptr) { if (std::strlen(retString)) path = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -278,24 +265,22 @@ inline bool ATTR_DLL_LOCAL ShowAndGetImageList(const std::string& shares, const std::string& heading, std::vector& file_list) { - using namespace ::kodi::addon; char** list = nullptr; - unsigned int listSize = 0; - bool ret = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->show_and_get_image_list( - CPrivateBase::m_interface->toKodi->kodiBase, shares.c_str(), heading.c_str(), &list, - &listSize); + size_t listSize = 0; + bool ret = kodi::dl::api.kodi_gui_dialogs_file_browser_show_and_get_image_list( + shares.c_str(), heading.c_str(), &list, &listSize); if (ret) { - for (unsigned int i = 0; i < listSize; ++i) + for (size_t i = 0; i < listSize; ++i) file_list.emplace_back(list[i]); - CPrivateBase::m_interface->toKodi->kodi_gui->dialogFileBrowser->clear_file_list( - CPrivateBase::m_interface->toKodi->kodiBase, &list, listSize); + kodi::dl::api.kodi_gui_dialogs_file_browser_clear_file_list(&list, listSize); } return ret; } //------------------------------------------------------------------------------ -}; // namespace FileBrowser + + +} /* namespace FileBrowser */ } /* namespace dialogs */ } /* namespace gui */ diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h index 9aded507007b0..ba59544691607 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Keyboard.h @@ -13,6 +13,8 @@ #ifdef __cplusplus +#include + namespace kodi { namespace gui @@ -77,17 +79,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetInput(std::string& text, bool hiddenInput = false, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input_with_head( - CPrivateBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, heading.c_str(), - allowEmptyResult, hiddenInput, autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_get_input_with_head( + text.c_str(), &retString, heading.c_str(), allowEmptyResult, hiddenInput, autoCloseMs); if (retString != nullptr) { text = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -111,16 +109,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetInput(std::string& text, bool allowEmptyResult, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_input( - CPrivateBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, allowEmptyResult, - autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_get_input( + text.c_str(), &retString, allowEmptyResult, autoCloseMs); if (retString != nullptr) { text = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -145,17 +140,14 @@ inline bool ATTR_DLL_LOCAL ShowAndGetNewPassword(std::string& newPassword, bool allowEmptyResult, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; + ; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard - ->show_and_get_new_password_with_head( - CPrivateBase::m_interface->toKodi->kodiBase, newPassword.c_str(), &retString, - heading.c_str(), allowEmptyResult, autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head( + newPassword.c_str(), &retString, heading.c_str(), allowEmptyResult, autoCloseMs); if (retString != nullptr) { newPassword = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -176,15 +168,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetNewPassword(std::string& newPassword, inline bool ATTR_DLL_LOCAL ShowAndGetNewPassword(std::string& newPassword, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_new_password( - CPrivateBase::m_interface->toKodi->kodiBase, newPassword.c_str(), &retString, autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_get_new_password( + newPassword.c_str(), &retString, autoCloseMs); if (retString != nullptr) { newPassword = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -251,17 +241,13 @@ inline bool ATTR_DLL_LOCAL ShowAndVerifyNewPassword(std::string& newPassword, bool allowEmptyResult, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard - ->show_and_verify_new_password_with_head( - CPrivateBase::m_interface->toKodi->kodiBase, &retString, heading.c_str(), - allowEmptyResult, autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head( + &retString, heading.c_str(), allowEmptyResult, autoCloseMs); if (retString != nullptr) { newPassword = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -282,16 +268,13 @@ inline bool ATTR_DLL_LOCAL ShowAndVerifyNewPassword(std::string& newPassword, inline bool ATTR_DLL_LOCAL ShowAndVerifyNewPassword(std::string& newPassword, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; bool ret = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_new_password( - CPrivateBase::m_interface->toKodi->kodiBase, &retString, autoCloseMs); + kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_verify_new_password(&retString, autoCloseMs); if (retString != nullptr) { newPassword = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -316,16 +299,13 @@ inline int ATTR_DLL_LOCAL ShowAndVerifyPassword(std::string& password, int retries, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_verify_password( - CPrivateBase::m_interface->toKodi->kodiBase, password.c_str(), &retString, heading.c_str(), - retries, autoCloseMs); + int ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_verify_password( + password.c_str(), &retString, heading.c_str(), retries, autoCloseMs); if (retString != nullptr) { password = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -350,16 +330,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetFilter(std::string& text, bool searching, unsigned int autoCloseMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->show_and_get_filter( - CPrivateBase::m_interface->toKodi->kodiBase, text.c_str(), &retString, searching, - autoCloseMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_keyboard_show_and_get_filter(text.c_str(), &retString, + searching, autoCloseMs); if (retString != nullptr) { text = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -377,9 +354,8 @@ inline bool ATTR_DLL_LOCAL ShowAndGetFilter(std::string& text, inline bool ATTR_DLL_LOCAL SendTextToActiveKeyboard(const std::string& text, bool closeKeyboard = false) { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->send_text_to_active_keyboard( - CPrivateBase::m_interface->toKodi->kodiBase, text.c_str(), closeKeyboard); + return kodi::dl::api.kodi_gui_dialogs_keyboard_send_text_to_active_keyboard(text.c_str(), + closeKeyboard); } //------------------------------------------------------------------------------ @@ -391,9 +367,7 @@ inline bool ATTR_DLL_LOCAL SendTextToActiveKeyboard(const std::string& text, /// inline bool ATTR_DLL_LOCAL IsKeyboardActivated() { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogKeyboard->is_keyboard_activated( - CPrivateBase::m_interface->toKodi->kodiBase); + return kodi::dl::api.kodi_gui_dialogs_keyboard_is_keyboard_activated(); } //------------------------------------------------------------------------------ }; // namespace Keyboard diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h index 54b77206f7e84..9229d2d1e2814 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Numeric.h @@ -49,15 +49,12 @@ namespace Numeric /// inline bool ATTR_DLL_LOCAL ShowAndVerifyNewPassword(std::string& newPassword) { - using namespace ::kodi::addon; char* pw = nullptr; - bool ret = - CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_new_password( - CPrivateBase::m_interface->toKodi->kodiBase, &pw); + bool ret = kodi::dl::api.kodi_gui_dialogs_numeric_show_and_verify_new_password(&pw); if (pw != nullptr) { newPassword = pw; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, pw); + free(pw); } return ret; } @@ -126,9 +123,8 @@ inline int ATTR_DLL_LOCAL ShowAndVerifyPassword(const std::string& password, const std::string& heading, int retries) { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_password( - CPrivateBase::m_interface->toKodi->kodiBase, password.c_str(), heading.c_str(), retries); + return kodi::dl::api.kodi_gui_dialogs_numeric_show_and_verify_password(password.c_str(), + heading.c_str(), retries); } //------------------------------------------------------------------------------ @@ -147,16 +143,13 @@ inline bool ATTR_DLL_LOCAL ShowAndVerifyInput(std::string& toVerify, const std::string& heading, bool verifyInput) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_verify_input( - CPrivateBase::m_interface->toKodi->kodiBase, toVerify.c_str(), &retString, heading.c_str(), - verifyInput); + bool ret = kodi::dl::api.kodi_gui_dialogs_numeric_show_and_verify_input( + toVerify.c_str(), &retString, heading.c_str(), verifyInput); if (retString != nullptr) { toVerify = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -194,9 +187,7 @@ inline bool ATTR_DLL_LOCAL ShowAndVerifyInput(std::string& toVerify, /// inline bool ATTR_DLL_LOCAL ShowAndGetTime(tm& time, const std::string& heading) { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_time( - CPrivateBase::m_interface->toKodi->kodiBase, &time, heading.c_str()); + return kodi::dl::api.kodi_gui_dialogs_numeric_show_and_get_time(&time, heading.c_str()); } //------------------------------------------------------------------------------ @@ -232,9 +223,7 @@ inline bool ATTR_DLL_LOCAL ShowAndGetTime(tm& time, const std::string& heading) /// inline bool ATTR_DLL_LOCAL ShowAndGetDate(tm& date, const std::string& heading) { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_date( - CPrivateBase::m_interface->toKodi->kodiBase, &date, heading.c_str()); + return kodi::dl::api.kodi_gui_dialogs_numeric_show_and_get_date(&date, heading.c_str()); } //------------------------------------------------------------------------------ @@ -250,15 +239,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetDate(tm& date, const std::string& heading) /// inline bool ATTR_DLL_LOCAL ShowAndGetIPAddress(std::string& ipAddress, const std::string& heading) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_ip_address( - CPrivateBase::m_interface->toKodi->kodiBase, ipAddress.c_str(), &retString, heading.c_str()); + bool ret = kodi::dl::api.kodi_gui_dialogs_numeric_show_and_get_ip_address( + ipAddress.c_str(), &retString, heading.c_str()); if (retString != nullptr) { ipAddress = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -297,16 +284,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetNumber(std::string& input, const std::string& heading, unsigned int autoCloseTimeoutMs = 0) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_number( - CPrivateBase::m_interface->toKodi->kodiBase, input.c_str(), &retString, heading.c_str(), - autoCloseTimeoutMs); + bool ret = kodi::dl::api.kodi_gui_dialogs_numeric_show_and_get_number( + input.c_str(), &retString, heading.c_str(), autoCloseTimeoutMs); if (retString != nullptr) { input = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } @@ -324,15 +308,13 @@ inline bool ATTR_DLL_LOCAL ShowAndGetNumber(std::string& input, /// inline bool ATTR_DLL_LOCAL ShowAndGetSeconds(std::string& time, const std::string& heading) { - using namespace ::kodi::addon; char* retString = nullptr; - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogNumeric->show_and_get_seconds( - CPrivateBase::m_interface->toKodi->kodiBase, time.c_str(), &retString, heading.c_str()); + bool ret = kodi::dl::api.kodi_gui_dialogs_numeric_show_and_get_seconds(time.c_str(), &retString, + heading.c_str()); if (retString != nullptr) { time = retString; - CPrivateBase::m_interface->toKodi->free_string(CPrivateBase::m_interface->toKodi->kodiBase, - retString); + free(retString); } return ret; } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h index a9fcb3fd3f7e4..3901e3b77cd72 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/OK.h @@ -54,9 +54,7 @@ namespace OK /// inline void ATTR_DLL_LOCAL ShowAndGetInput(const std::string& heading, const std::string& text) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogOK->show_and_get_input_single_text( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str()); + kodi::dl::api.kodi_gui_dialogs_ok_show_and_get_input_single_text(heading.c_str(), text.c_str()); } //------------------------------------------------------------------------------ @@ -85,10 +83,8 @@ inline void ATTR_DLL_LOCAL ShowAndGetInput(const std::string& heading, const std::string& line1, const std::string& line2) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogOK->show_and_get_input_line_text( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), line1.c_str(), - line2.c_str()); + kodi::dl::api.kodi_gui_dialogs_ok_show_and_get_input_line_text(heading.c_str(), line0.c_str(), + line1.c_str(), line2.c_str()); } //------------------------------------------------------------------------------ } // namespace OK diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h index 3dfd8badbf45e..775f6a1336999 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Progress.h @@ -58,9 +58,7 @@ class ATTR_DLL_LOCAL CProgress /// CProgress() { - using namespace ::kodi::addon; - m_DialogHandle = CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->new_dialog( - CPrivateBase::m_interface->toKodi->kodiBase); + m_DialogHandle = kodi::dl::api.kodi_gui_dialogs_progress_new_dialog(); if (!m_DialogHandle) kodi::Log(ADDON_LOG_FATAL, "kodi::gui::dialogs::CProgress can't create window class from Kodi !!!"); @@ -73,10 +71,8 @@ class ATTR_DLL_LOCAL CProgress /// ~CProgress() { - using namespace ::kodi::addon; if (m_DialogHandle) - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->delete_dialog( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + kodi::dl::api.kodi_gui_dialogs_progress_delete_dialog(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -84,12 +80,7 @@ class ATTR_DLL_LOCAL CProgress /// @ingroup cpp_kodi_gui_dialogs_CProgress /// @brief To open the dialog /// - void Open() - { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->open( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); - } + void Open() { kodi::dl::api.kodi_gui_dialogs_progress_open(m_DialogHandle); } //---------------------------------------------------------------------------- //============================================================================ @@ -100,9 +91,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetHeading(const std::string& heading) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_heading( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, heading.c_str()); + kodi::dl::api.kodi_gui_dialogs_progress_set_heading(m_DialogHandle, heading.c_str()); } //---------------------------------------------------------------------------- @@ -115,9 +104,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetLine(unsigned int iLine, const std::string& line) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_line( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, iLine, line.c_str()); + kodi::dl::api.kodi_gui_dialogs_progress_set_line(m_DialogHandle, iLine, line.c_str()); } //---------------------------------------------------------------------------- @@ -129,9 +116,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetCanCancel(bool canCancel) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_can_cancel( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, canCancel); + kodi::dl::api.kodi_gui_dialogs_progress_set_can_cancel(m_DialogHandle, canCancel); } //---------------------------------------------------------------------------- @@ -143,9 +128,7 @@ class ATTR_DLL_LOCAL CProgress /// bool IsCanceled() const { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->is_canceled( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + return kodi::dl::api.kodi_gui_dialogs_progress_is_canceled(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -157,9 +140,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetPercentage(int percentage) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_percentage( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, percentage); + kodi::dl::api.kodi_gui_dialogs_progress_set_percentage(m_DialogHandle, percentage); } //---------------------------------------------------------------------------- @@ -171,9 +152,7 @@ class ATTR_DLL_LOCAL CProgress /// int GetPercentage() const { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->get_percentage( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); + return kodi::dl::api.kodi_gui_dialogs_progress_get_percentage(m_DialogHandle); } //---------------------------------------------------------------------------- @@ -185,9 +164,7 @@ class ATTR_DLL_LOCAL CProgress /// void ShowProgressBar(bool onOff) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->show_progress_bar( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, onOff); + kodi::dl::api.kodi_gui_dialogs_progress_show_progress_bar(m_DialogHandle, onOff); } //---------------------------------------------------------------------------- @@ -199,9 +176,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetProgressMax(int max) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_progress_max( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, max); + kodi::dl::api.kodi_gui_dialogs_progress_set_progress_max(m_DialogHandle, max); } //---------------------------------------------------------------------------- @@ -213,9 +188,7 @@ class ATTR_DLL_LOCAL CProgress /// void SetProgressAdvance(int steps = 1) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->set_progress_advance( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle, steps); + kodi::dl::api.kodi_gui_dialogs_progress_set_progress_advance(m_DialogHandle, steps); } //---------------------------------------------------------------------------- @@ -225,12 +198,7 @@ class ATTR_DLL_LOCAL CProgress /// /// @return True if aborted /// - bool Abort() - { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogProgress->abort( - CPrivateBase::m_interface->toKodi->kodiBase, m_DialogHandle); - } + bool Abort() { return kodi::dl::api.kodi_gui_dialogs_progress_abort(m_DialogHandle); } //---------------------------------------------------------------------------- private: diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h index 09bccc31af9a3..7479517250449 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/Select.h @@ -13,6 +13,8 @@ #ifdef __cplusplus +#include + namespace kodi { namespace gui @@ -115,9 +117,8 @@ inline int ATTR_DLL_LOCAL Show(const std::string& heading, { cEntries[i] = entries[i].c_str(); } - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogSelect->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size, selected, - autoclose); + int ret = kodi::dl::api.kodi_gui_dialogs_select_open(heading.c_str(), cEntries, size, selected, + autoclose); free(cEntries); return ret; } @@ -167,7 +168,6 @@ inline int ATTR_DLL_LOCAL Show(const std::string& heading, int selected = -1, unsigned int autoclose = 0) { - using namespace ::kodi::addon; unsigned int size = static_cast(entries.size()); const char** cEntries = static_cast(malloc(size * sizeof(const char*))); for (unsigned int i = 0; i < size; ++i) @@ -176,9 +176,8 @@ inline int ATTR_DLL_LOCAL Show(const std::string& heading, if (selected == -1 && entries[i].selected) selected = i; } - int ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogSelect->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntries, size, selected, - autoclose); + int ret = kodi::dl::api.kodi_gui_dialogs_select_open(heading.c_str(), cEntries, size, selected, + autoclose); if (ret >= 0) { entries[ret].selected = true; @@ -235,20 +234,18 @@ ShowMultiSelect(const std::string& heading, std::vector& entries, int autoclose = 0) { - using namespace ::kodi::addon; unsigned int size = static_cast(entries.size()); const char** cEntryIDs = static_cast(malloc(size * sizeof(const char*))); const char** cEntryNames = static_cast(malloc(size * sizeof(const char*))); - bool* cEntriesSelected = static_cast(malloc(size * sizeof(bool))); + uint8_t* cEntriesSelected = static_cast(malloc(size * sizeof(uint8_t))); for (unsigned int i = 0; i < size; ++i) { cEntryIDs[i] = entries[i].id.c_str(); cEntryNames[i] = entries[i].name.c_str(); cEntriesSelected[i] = entries[i].selected; } - bool ret = CPrivateBase::m_interface->toKodi->kodi_gui->dialogSelect->open_multi_select( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), cEntryIDs, cEntryNames, - cEntriesSelected, size, autoclose); + bool ret = kodi::dl::api.kodi_gui_dialogs_select_open_multi_select( + heading.c_str(), cEntryIDs, cEntryNames, cEntriesSelected, size, autoclose); if (ret) { for (unsigned int i = 0; i < size; ++i) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h index 7c2e6ca8046ca..94d437732eb61 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/TextViewer.h @@ -94,9 +94,7 @@ namespace TextViewer /// inline void ATTR_DLL_LOCAL Show(const std::string& heading, const std::string& text) { - using namespace ::kodi::addon; - CPrivateBase::m_interface->toKodi->kodi_gui->dialogTextViewer->open( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str()); + kodi::dl::api.kodi_gui_dialogs_text_viewer_show(heading.c_str(), text.c_str()); } //------------------------------------------------------------------------------ }; // namespace TextViewer diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h index e4d3d1201e09d..3678604eb0852 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/dialogs/YesNo.h @@ -77,10 +77,8 @@ inline bool ATTR_DLL_LOCAL ShowAndGetInput(const std::string& heading, const std::string& noLabel = "", const std::string& yesLabel = "") { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_single_text( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), text.c_str(), &canceled, - noLabel.c_str(), yesLabel.c_str()); + return kodi::dl::api.kodi_gui_dialogs_yesno_show_and_get_input_single_text( + heading.c_str(), text.c_str(), &canceled, noLabel.c_str(), yesLabel.c_str()); } //------------------------------------------------------------------------------ @@ -121,10 +119,9 @@ inline bool ATTR_DLL_LOCAL ShowAndGetInput(const std::string& heading, const std::string& noLabel = "", const std::string& yesLabel = "") { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogYesNo->show_and_get_input_line_text( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), line1.c_str(), - line2.c_str(), noLabel.c_str(), yesLabel.c_str()); + return kodi::dl::api.kodi_gui_dialogs_yesno_show_and_get_input_line_text( + heading.c_str(), line0.c_str(), line1.c_str(), line2.c_str(), noLabel.c_str(), + yesLabel.c_str()); } //------------------------------------------------------------------------------ @@ -171,11 +168,9 @@ inline bool ATTR_DLL_LOCAL ShowAndGetInput(const std::string& heading, const std::string& noLabel = "", const std::string& yesLabel = "") { - using namespace ::kodi::addon; - return CPrivateBase::m_interface->toKodi->kodi_gui->dialogYesNo - ->show_and_get_input_line_button_text( - CPrivateBase::m_interface->toKodi->kodiBase, heading.c_str(), line0.c_str(), - line1.c_str(), line2.c_str(), &canceled, noLabel.c_str(), yesLabel.c_str()); + return kodi::dl::api.kodi_gui_dialogs_yesno_show_and_get_input_line_button_text( + heading.c_str(), line0.c_str(), line1.c_str(), line2.c_str(), &canceled, noLabel.c_str(), + yesLabel.c_str()); } //------------------------------------------------------------------------------ }; // namespace YesNo diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/GLonDX.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/GLonDX.h index 9ba76eacc3653..508726a7846d4 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/GLonDX.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/GLonDX.h @@ -12,13 +12,14 @@ #if defined(WIN32) && defined(HAS_ANGLE) +#include "../../AddonBase.h" +#include "../../gui/General.h" + #include #include #include #include #include -#include -#include #include #pragma comment(lib, "d3dcompiler.lib") diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/Shader.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/Shader.h index ae78b7c36032f..88fb8241cfb15 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/Shader.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/gl/Shader.h @@ -12,13 +12,13 @@ #ifdef __cplusplus +#include "../../AddonBase.h" +#include "../../Filesystem.h" + #include #include #include -#include -#include - #define LOG_SIZE 1024 #define GLchar char @@ -51,7 +51,7 @@ class ATTR_DLL_LOCAL CShader file.c_str()); return false; } - size_t len = source.Read(buffer, sizeof(buffer)); + size_t len = source.Read(reinterpret_cast(buffer), sizeof(buffer)); m_source.assign(buffer); m_source[len] = 0; source.Close(); diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/ActionIDs.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/ActionIDs.h deleted file mode 100644 index 4c816a43090da..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/ActionIDs.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (C) 2005-2020 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#include "../../c-api/gui/input/action_ids.h" diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/CMakeLists.txt index 769cad2456942..a6ca69b607c22 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/CMakeLists.txt +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/input/CMakeLists.txt @@ -2,7 +2,6 @@ # See xbmc/addons/kodi-dev-kit/tools/code-generator.py. set(HEADERS - ActionIDs.h ) if(HEADERS) diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/gui/renderHelper.h b/xbmc/addons/kodi-dev-kit/include/kodi/gui/renderHelper.h index f369205e86ad9..f4f529126bbec 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/gui/renderHelper.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/gui/renderHelper.h @@ -59,19 +59,19 @@ namespace gui * * This only be used internal and not from addon's direct. * - * Function defines here and not in CAddonBase because of a hen and egg problem. + * Function defines here and not in CPrivateBase because of a hen and egg problem. */ inline std::shared_ptr ATTR_DLL_LOCAL GetRenderHelper() { using namespace ::kodi::addon; - if (static_cast(CPrivateBase::m_interface->addonBase)->m_renderHelper) - return static_cast(CPrivateBase::m_interface->addonBase)->m_renderHelper; + if (static_cast(CPrivateBase::ifc.m_addonBase)->m_renderHelper) + return static_cast(CPrivateBase::ifc.m_addonBase)->m_renderHelper; std::shared_ptr renderHelper(new CRenderHelper()); if (!renderHelper->Init()) return nullptr; - static_cast(CPrivateBase::m_interface->addonBase)->m_renderHelper = + static_cast(CPrivateBase::ifc.m_addonBase)->m_renderHelper = renderHelper; // Hold on base for other types return renderHelper; } diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/tools/DllHelper.h b/xbmc/addons/kodi-dev-kit/include/kodi/tools/DllHelper.h index 2003171f324a3..bb34400bd1941 100644 --- a/xbmc/addons/kodi-dev-kit/include/kodi/tools/DllHelper.h +++ b/xbmc/addons/kodi-dev-kit/include/kodi/tools/DllHelper.h @@ -10,11 +10,13 @@ #ifdef __cplusplus +#include "../AddonBase.h" +#include "../Filesystem.h" +#include "../General.h" + #include #include -#include -#include //============================================================================== /// @ingroup cpp_kodi_tools_CDllHelper diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/versions.h b/xbmc/addons/kodi-dev-kit/include/kodi/versions.h deleted file mode 100644 index 3ad510c9860ce..0000000000000 --- a/xbmc/addons/kodi-dev-kit/include/kodi/versions.h +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Copyright (C) 2016-2018 Team Kodi - * This file is part of Kodi - https://kodi.tv - * - * SPDX-License-Identifier: GPL-2.0-or-later - * See LICENSES/README.md for more information. - */ - -#pragma once - -#ifndef KODI_VERSIONS_H -#define KODI_VERSIONS_H - -#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. - */ - -// Ignore clang here, as this must be good in overview and as the main reason, -// because cmake uses this area in this form to perform its addon dependency -// check. -// clang-format off -#define ADDON_GLOBAL_VERSION_MAIN "2.0.0" -#define ADDON_GLOBAL_VERSION_MAIN_MIN "2.0.0" -#define ADDON_GLOBAL_VERSION_MAIN_XML_ID "kodi.binary.global.main" -#define ADDON_GLOBAL_VERSION_MAIN_DEPENDS "AddonBase.h" \ - "addon-instance/" \ - "c-api/addon_base.h" - -#define ADDON_GLOBAL_VERSION_GENERAL "1.0.5" -#define ADDON_GLOBAL_VERSION_GENERAL_MIN "1.0.4" -#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.15.0" -#define ADDON_GLOBAL_VERSION_GUI_MIN "5.15.0" -#define ADDON_GLOBAL_VERSION_GUI_XML_ID "kodi.binary.global.gui" -#define ADDON_GLOBAL_VERSION_GUI_DEPENDS "c-api/gui/input/action_ids.h" \ - "c-api/gui/" \ - "gui/" - -#define ADDON_GLOBAL_VERSION_AUDIOENGINE "1.1.1" -#define ADDON_GLOBAL_VERSION_AUDIOENGINE_MIN "1.1.0" -#define ADDON_GLOBAL_VERSION_AUDIOENGINE_XML_ID "kodi.binary.global.audioengine" -#define ADDON_GLOBAL_VERSION_AUDIOENGINE_DEPENDS "AudioEngine.h" \ - "c-api/audio_engine.h" - -#define ADDON_GLOBAL_VERSION_FILESYSTEM "1.1.7" -#define ADDON_GLOBAL_VERSION_FILESYSTEM_MIN "1.1.7" -#define ADDON_GLOBAL_VERSION_FILESYSTEM_XML_ID "kodi.binary.global.filesystem" -#define ADDON_GLOBAL_VERSION_FILESYSTEM_DEPENDS "Filesystem.h" \ - "c-api/filesystem.h" \ - "gui/gl/Shader.h" \ - "tools/DllHelper.h" - -#define ADDON_GLOBAL_VERSION_NETWORK "1.0.4" -#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" \ - "c-api/network.h" - -#define ADDON_GLOBAL_VERSION_TOOLS "1.0.4" -#define ADDON_GLOBAL_VERSION_TOOLS_MIN "1.0.0" -#define ADDON_GLOBAL_VERSION_TOOLS_XML_ID "kodi.binary.global.tools" -#define ADDON_GLOBAL_VERSION_TOOLS_DEPENDS "tools/DllHelper.h" \ - "tools/EndTime.h" \ - "tools/StringUtils.h" \ - "tools/Thread.h" \ - "tools/Timer.h" - -#define ADDON_INSTANCE_VERSION_AUDIODECODER "4.0.0" -#define ADDON_INSTANCE_VERSION_AUDIODECODER_MIN "4.0.0" -#define ADDON_INSTANCE_VERSION_AUDIODECODER_XML_ID "kodi.binary.instance.audiodecoder" -#define ADDON_INSTANCE_VERSION_AUDIODECODER_DEPENDS "c-api/addon-instance/audiodecoder.h" \ - "addon-instance/AudioDecoder.h" - -#define ADDON_INSTANCE_VERSION_AUDIOENCODER "3.0.0" -#define ADDON_INSTANCE_VERSION_AUDIOENCODER_MIN "3.0.0" -#define ADDON_INSTANCE_VERSION_AUDIOENCODER_XML_ID "kodi.binary.instance.audioencoder" -#define ADDON_INSTANCE_VERSION_AUDIOENCODER_DEPENDS "c-api/addon-instance/audioencoder.h" \ - "addon-instance/AudioEncoder.h" - -#define ADDON_INSTANCE_VERSION_GAME "2.2.0" -#define ADDON_INSTANCE_VERSION_GAME_MIN "2.2.0" -#define ADDON_INSTANCE_VERSION_GAME_XML_ID "kodi.binary.instance.game" -#define ADDON_INSTANCE_VERSION_GAME_DEPENDS "addon-instance/Game.h" - -#define ADDON_INSTANCE_VERSION_IMAGEDECODER "3.0.0" -#define ADDON_INSTANCE_VERSION_IMAGEDECODER_MIN "3.0.0" -#define ADDON_INSTANCE_VERSION_IMAGEDECODER_XML_ID "kodi.binary.instance.imagedecoder" -#define ADDON_INSTANCE_VERSION_IMAGEDECODER_DEPENDS "c-api/addon-instance/imagedecoder.h" \ - "addon-instance/ImageDecoder.h" - -#define ADDON_INSTANCE_VERSION_INPUTSTREAM "3.0.2" -#define ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN "3.0.1" -#define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream" -#define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "c-api/addon-instance/inputstream.h" \ - "c-api/addon-instance/inputstream/demux_packet.h" \ - "c-api/addon-instance/inputstream/stream_codec.h" \ - "c-api/addon-instance/inputstream/stream_constants.h" \ - "c-api/addon-instance/inputstream/stream_crypto.h" \ - "c-api/addon-instance/inputstream/timing_constants.h" \ - "addon-instance/Inputstream.h" \ - "addon-instance/inputstream/DemuxPacket.h" \ - "addon-instance/inputstream/StreamCodec.h" \ - "addon-instance/inputstream/StreamConstants.h" \ - "addon-instance/inputstream/StreamCrypto.h" \ - "addon-instance/inputstream/TimingConstants.h" - -#define ADDON_INSTANCE_VERSION_PERIPHERAL "2.0.0" -#define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "2.0.0" -#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 "8.0.1" -#define ADDON_INSTANCE_VERSION_PVR_MIN "8.0.0" -#define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr" -#define ADDON_INSTANCE_VERSION_PVR_DEPENDS "c-api/addon-instance/pvr.h" \ - "c-api/addon-instance/pvr/pvr_providers.h" \ - "c-api/addon-instance/pvr/pvr_channel_groups.h" \ - "c-api/addon-instance/pvr/pvr_channels.h" \ - "c-api/addon-instance/pvr/pvr_defines.h" \ - "c-api/addon-instance/pvr/pvr_edl.h" \ - "c-api/addon-instance/pvr/pvr_epg.h" \ - "c-api/addon-instance/pvr/pvr_general.h" \ - "c-api/addon-instance/pvr/pvr_menu_hook.h" \ - "c-api/addon-instance/pvr/pvr_recordings.h" \ - "c-api/addon-instance/pvr/pvr_stream.h" \ - "c-api/addon-instance/pvr/pvr_timers.h" \ - "addon-instance/PVR.h" \ - "addon-instance/pvr/ChannelGroups.h" \ - "addon-instance/pvr/Channels.h" \ - "addon-instance/pvr/EDL.h" \ - "addon-instance/pvr/EPG.h" \ - "addon-instance/pvr/General.h" \ - "addon-instance/pvr/MenuHook.h" \ - "addon-instance/pvr/Recordings.h" \ - "addon-instance/pvr/Stream.h" \ - "addon-instance/pvr/Timers.h" - -#define ADDON_INSTANCE_VERSION_SCREENSAVER "2.2.0" -#define ADDON_INSTANCE_VERSION_SCREENSAVER_MIN "2.2.0" -#define ADDON_INSTANCE_VERSION_SCREENSAVER_XML_ID "kodi.binary.instance.screensaver" -#define ADDON_INSTANCE_VERSION_SCREENSAVER_DEPENDS "c-api/addon-instance/screensaver.h" \ - "addon-instance/Screensaver.h" - -#define ADDON_INSTANCE_VERSION_VFS "3.0.1" -#define ADDON_INSTANCE_VERSION_VFS_MIN "3.0.1" -#define ADDON_INSTANCE_VERSION_VFS_XML_ID "kodi.binary.instance.vfs" -#define ADDON_INSTANCE_VERSION_VFS_DEPENDS "c-api/addon-instance/vfs.h" \ - "addon-instance/VFS.h" - -#define ADDON_INSTANCE_VERSION_VISUALIZATION "3.0.0" -#define ADDON_INSTANCE_VERSION_VISUALIZATION_MIN "3.0.0" -#define ADDON_INSTANCE_VERSION_VISUALIZATION_XML_ID "kodi.binary.instance.visualization" -#define ADDON_INSTANCE_VERSION_VISUALIZATION_DEPENDS "addon-instance/Visualization.h" \ - "c-api/addon-instance/visualization.h" - -#define ADDON_INSTANCE_VERSION_VIDEOCODEC "2.0.2" -#define ADDON_INSTANCE_VERSION_VIDEOCODEC_MIN "2.0.1" -#define ADDON_INSTANCE_VERSION_VIDEOCODEC_XML_ID "kodi.binary.instance.videocodec" -#define ADDON_INSTANCE_VERSION_VIDEOCODEC_DEPENDS "c-api/addon-instance/video_codec.h" \ - "c-api/addon-instance/inputstream/stream_codec.h" \ - "c-api/addon-instance/inputstream/stream_crypto.h" \ - "addon-instance/VideoCodec.h" \ - "addon-instance/inputstream/StreamCodec.h" \ - "addon-instance/inputstream/StreamCrypto.h" \ -// clang-format on - -//============================================================================== -/// @ingroup cpp_kodi_addon_addonbase_Defs -/// @defgroup cpp_kodi_addon_addonbase_Defs_ADDON_TYPE enum ADDON_TYPE -/// **The currently available instance types for Kodi add-ons**\n -/// This identifies the associated API part on the interface in Kodi and in the -/// addon. -/// -/// \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_TOOLS = 6, - // Last used global id, used in loops to check versions. - // Need to change if new global type becomes added! - ADDON_GLOBAL_MAX = 6, - - /* addon type instances */ - - /// Audio decoder instance, see @ref cpp_kodi_addon_audiodecoder "kodi::addon::CInstanceAudioDecoder" - ADDON_INSTANCE_AUDIODECODER = 102, - - /// Audio encoder instance, see @ref cpp_kodi_addon_audioencoder "kodi::addon::CInstanceAudioEncoder" - ADDON_INSTANCE_AUDIOENCODER = 103, - - /// Game instance, see @ref cpp_kodi_addon_game "kodi::addon::CInstanceGame" - ADDON_INSTANCE_GAME = 104, - - /// Input stream instance, see @ref cpp_kodi_addon_inputstream "kodi::addon::CInstanceInputStream" - ADDON_INSTANCE_INPUTSTREAM = 105, - - /// Peripheral instance, see @ref cpp_kodi_addon_peripheral "kodi::addon::CInstancePeripheral" - ADDON_INSTANCE_PERIPHERAL = 106, - - /// Game instance, see @ref cpp_kodi_addon_pvr "kodi::addon::CInstancePVRClient" - ADDON_INSTANCE_PVR = 107, - - /// PVR client instance, see @ref cpp_kodi_addon_screensaver "kodi::addon::CInstanceScreensaver" - ADDON_INSTANCE_SCREENSAVER = 108, - - /// Music visualization instance, see @ref cpp_kodi_addon_visualization "kodi::addon::CInstanceVisualization" - ADDON_INSTANCE_VISUALIZATION = 109, - - /// Virtual Filesystem (VFS) instance, see @ref cpp_kodi_addon_vfs "kodi::addon::CInstanceVFS" - ADDON_INSTANCE_VFS = 110, - - /// Image Decoder instance, see @ref cpp_kodi_addon_imagedecoder "kodi::addon::CInstanceImageDecoder" - ADDON_INSTANCE_IMAGEDECODER = 111, - - /// Video Decoder instance, see @ref cpp_kodi_addon_videocodec "kodi::addon::CInstanceVideoCodec" - 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 -#if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_TOOLS_USED) - case ADDON_GLOBAL_TOOLS: - return ADDON_GLOBAL_VERSION_TOOLS; -#endif - - /* addon type instances */ -#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; - case ADDON_GLOBAL_TOOLS: - return ADDON_GLOBAL_VERSION_TOOLS_MIN; - - /* addon type instances */ - 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"; - case ADDON_GLOBAL_TOOLS: - return "Tools"; - - /* addon type instances */ - 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, "tools") == 0) - return ADDON_GLOBAL_TOOLS; - 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 - -#endif /* !KODI_VERSIONS_H */ diff --git a/xbmc/addons/kodi-dev-kit/src/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/CMakeLists.txt new file mode 100644 index 0000000000000..74c6492a1f6c0 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(shared) + diff --git a/xbmc/addons/kodi-dev-kit/src/addon/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/CMakeLists.txt new file mode 100644 index 0000000000000..aeeabba38e552 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/CMakeLists.txt @@ -0,0 +1,70 @@ +# Addon helper library generator to allow operation between him and Kodi +# +# WARNING: This CMakeLists.txt is not complete autogenerated and need edited by +# hand. +# +project(kodidevkit) + +include(../../cmake/Macros.cmake) + +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../..) + +#---AUTO_GEN_PARSE--- +add_subdirectory(api) +add_subdirectory(api/addon-instance) +add_subdirectory(api/dl) +add_subdirectory(api/gui) +add_subdirectory(api/gui/controls) +add_subdirectory(api/gui/dialogs) +add_subdirectory(core) +#---AUTO_GEN_PARSE--- + +cmake_parse_arguments(arg "WRAPPED" "DEVKIT_OUTPUT_DIRECTORY" "" ${ARGN}) +if(arg_DEVKIT_OUTPUT_DIRECTORY) + set(DEVKIT_OUTPUT_DIRECTORY ${arg_DEVKIT_OUTPUT_DIRECTORY}) +else() + set(DEVKIT_OUTPUT_DIRECTORY "addons/kodi.binary.devkit") +endif() + +if(CORE_SYSTEM_NAME STREQUAL windows) + set(OUTPUT_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}) +else() + set(OUTPUT_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}-${ARCH}) +endif() + +set(DEVKIT_LIBRARY ${OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE STRING "Library used for dev-kit") + +add_library(${PROJECT_NAME} SHARED ${DEV_KIT_HEADER} ${DEVKIT_OBJECTS} $) +set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + POSITION_INDEPENDENT_CODE ON + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + OUTPUT_NAME ${OUTPUT_NAME} PREFIX "") +foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY}) +endforeach() + +if(CORE_SYSTEM_NAME STREQUAL android) + message(FATAL_ERROR "OS currently not supported and in TODO!!!") +elseif(CORE_SYSTEM_NAME STREQUAL darwin_embedded) + add_definitions(-DKODI_INHIBIT_SHARED) + message(FATAL_ERROR "OS currently not supported and in TODO!!!") +elseif(CORE_SYSTEM_NAME STREQUAL freebsd) + message(FATAL_ERROR "OS currently not supported and in TODO!!!") +elseif(CORE_SYSTEM_NAME STREQUAL linux) + target_link_libraries(${PROJECT_NAME} PRIVATE -static-libgcc -static-libstdc++ m c rt pthread) + #target_link_libraries(${PROJECT_NAME} PUBLIC stdc++ gcc pthread m c rt ) +elseif(CORE_SYSTEM_NAME STREQUAL osx) + message(FATAL_ERROR "OS currently not supported and in TODO!!!") +elseif(CORE_SYSTEM_NAME STREQUAL windows) + message(FATAL_ERROR "OS currently not supported and in TODO!!!") +else() + message(FATAL_ERROR "Not supported OS '${CORE_SYSTEM_NAME}' used for kodi-dev-kit!") +endif() + +set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY}/${OUTPUT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE STRING "" FORCE) diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/CMakeLists.txt new file mode 100644 index 0000000000000..344ba50f72e90 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/CMakeLists.txt @@ -0,0 +1,24 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + addon_base.cpp + audio_engine.cpp + filesystem.cpp + general.cpp + monitor.cpp + network.cpp +) + +set(HEADERS + addon_base.h + audio_engine.h + filesystem.h + general.h + monitor.h + network.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/CMakeLists.txt new file mode 100644 index 0000000000000..41f255eddd682 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/CMakeLists.txt @@ -0,0 +1,34 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + audiodecoder.cpp + audioencoder.cpp + game.cpp + imagedecoder.cpp + inputstream.cpp + peripheral.cpp + pvr.cpp + screensaver.cpp + vfs.cpp + videocodec.cpp + visualization.cpp +) + +set(HEADERS + audiodecoder.h + audioencoder.h + game.h + imagedecoder.h + inputstream.h + peripheral.h + pvr.h + screensaver.h + vfs.h + videocodec.h + visualization.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api_addon-instance) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.cpp new file mode 100644 index 0000000000000..c20f0ab761d00 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.cpp @@ -0,0 +1,318 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audiodecoder.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_audiodecoder_h::InitDirect( + directFuncToAddon_addoninstance_audiodecoder_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_audiodecoder_supports_file_v1 = kodi_addon_audiodecoder_supports_file_v1; + ifcToAddon->kodi_addon_audiodecoder_init_v1 = kodi_addon_audiodecoder_init_v1; + ifcToAddon->kodi_addon_audiodecoder_read_pcm_v1 = kodi_addon_audiodecoder_read_pcm_v1; + ifcToAddon->kodi_addon_audiodecoder_seek_v1 = kodi_addon_audiodecoder_seek_v1; + ifcToAddon->kodi_addon_audiodecoder_read_tag_v1 = kodi_addon_audiodecoder_read_tag_v1; + ifcToAddon->kodi_addon_audiodecoder_track_count_v1 = kodi_addon_audiodecoder_track_count_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_audiodecoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_audiodecoder_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_audiodecoder_supports_file_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_SUPPORTS_FILE_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_supports_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_supports_file_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_supports_file_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool auto_gen_ret = kodi_addon_audiodecoder_supports_file_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audiodecoder_supports_file_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_audiodecoder_init_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_INIT_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file, unsigned int filecache, int* channels, int* samplerate, int* bitspersample, int64_t* totaltime, int* bitrate, enum AudioEngineDataFormat* format, enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]); + // Tuple in: typedef std::tuple> msgChild__IN_kodi_addon_audiodecoder_init_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple> msgChild_OUT_kodi_addon_audiodecoder_init_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_init_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + unsigned int filecache = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + int channels = std::get<3>(t); /* CheckAPIUse_WAY_13 (0004) */ + int samplerate = std::get<4>(t); /* CheckAPIUse_WAY_13 (0004) */ + int bitspersample = std::get<5>(t); /* CheckAPIUse_WAY_13 (0004) */ + int64_t totaltime = std::get<6>(t); /* CheckAPIUse_WAY_13 (0004) */ + int bitrate = std::get<7>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum AudioEngineDataFormat format = std::get<8>(t); /* CheckAPIUse_WAY_14a (0004) */ + std::array& info = + std::get<9>(t); /* CheckAPIUse_WAY_5 (0004) */ + bool auto_gen_ret = kodi_addon_audiodecoder_init_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */, + filecache /* CheckAPIUse_WAY_9 (0004) */, &channels /* CheckAPIUse_WAY_13 (0004) */, + &samplerate /* CheckAPIUse_WAY_13 (0004) */, + &bitspersample /* CheckAPIUse_WAY_13 (0004) */, + &totaltime /* CheckAPIUse_WAY_13 (0004) */, &bitrate /* CheckAPIUse_WAY_13 (0004) */, + &format /* CheckAPIUse_WAY_14b (0004) */, info.data() /* CheckAPIUse_WAY_5 (0004) */); + + msgpack::pack( + out, + msgChild_OUT_kodi_addon_audiodecoder_init_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, channels /* CheckAPIUse_WAY_13 (0004) */, + samplerate /* CheckAPIUse_WAY_13 (0004) */, + bitspersample /* CheckAPIUse_WAY_13 (0004) */, + totaltime /* CheckAPIUse_WAY_13 (0004) */, bitrate /* CheckAPIUse_WAY_13 (0004) */, + format /* CheckAPIUse_WAY_14b (0004) */, info /* CheckAPIUse_WAY_5 (0004) */)); + return true; + } + case funcChild_kodi_addon_audiodecoder_read_pcm_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_READ_PCM_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, uint8_t* buffer, size_t size, size_t* actualsize); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_read_pcm_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */, size_t> msgChild_OUT_kodi_addon_audiodecoder_read_pcm_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_read_pcm_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + size_t size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + size_t actualsize = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + std::vector buffer(size); /* CheckAPIUse_WAY_10 (0004) */ + int auto_gen_ret = kodi_addon_audiodecoder_read_pcm_v1( + this, auto_gen_hdl, buffer.data() /* CheckAPIUse_WAY_10 (0004) */, + size /* CheckAPIUse_WAY_9 (0004) */, &actualsize /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audiodecoder_read_pcm_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, + buffer /* CheckAPIUse_WAY_10 (0004) */, + actualsize /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_audiodecoder_seek_v1: + { + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_SEEK_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, int64_t time); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_seek_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_seek_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int64_t time = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + int64_t auto_gen_ret = + kodi_addon_audiodecoder_seek_v1(this, auto_gen_hdl, time /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audiodecoder_seek_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_audiodecoder_read_tag_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_READ_TAG_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file, struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_read_tag_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_read_tag_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_read_tag_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + struct KODI_ADDON_AUDIODECODER_INFO_TAG tag = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + bool auto_gen_ret = kodi_addon_audiodecoder_read_tag_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */, + &tag /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_audiodecoder_read_tag_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, &tag /* CheckAPIUse_WAY_15 (0002-5) */)); + IFC_KODI_ADDON_AUDIODECODER_INFO_TAG::CleanCStructure(&tag); + return true; + } + case funcChild_kodi_addon_audiodecoder_track_count_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIODECODER_TRACK_COUNT_V1)(const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audiodecoder_track_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audiodecoder_track_count_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audiodecoder_track_count_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + int auto_gen_ret = kodi_addon_audiodecoder_track_count_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audiodecoder_track_count_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_supports_file_v1( + void* thisClassHdl, const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_audiodecoder.v1.supports_file) + { + auto_gen_ret = + union_data->types.kodi_addon_audiodecoder.v1.supports_file(union_data->hdl, file); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_init_v1( + void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + unsigned int filecache, + int* channels, + int* samplerate, + int* bitspersample, + int64_t* totaltime, + int* bitrate, + enum AudioEngineDataFormat* format, + enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_audiodecoder.v1.init) + { + auto_gen_ret = union_data->types.kodi_addon_audiodecoder.v1.init( + union_data->hdl, file, filecache, channels, samplerate, bitspersample, totaltime, bitrate, + format, info); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_read_pcm_v1( + void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + uint8_t* buffer, + size_t size, + size_t* actualsize) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_audiodecoder.v1.read_pcm) + { + auto_gen_ret = union_data->types.kodi_addon_audiodecoder.v1.read_pcm(union_data->hdl, buffer, + size, actualsize); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_seek_v1( + void* thisClassHdl, const KODI_ADDON_AUDIODECODER_HDL hdl, int64_t time) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_audiodecoder.v1.seek) + { + auto_gen_ret = union_data->types.kodi_addon_audiodecoder.v1.seek(union_data->hdl, time); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_read_tag_v1( + void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_audiodecoder.v1.read_tag) + { + auto_gen_ret = + union_data->types.kodi_addon_audiodecoder.v1.read_tag(union_data->hdl, file, tag); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_audiodecoder_h::kodi_addon_audiodecoder_track_count_v1( + void* thisClassHdl, const KODI_ADDON_AUDIODECODER_HDL hdl, const char* file) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_audiodecoder.v1.track_count) + { + auto_gen_ret = union_data->types.kodi_addon_audiodecoder.v1.track_count(union_data->hdl, file); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.h new file mode 100644 index 0000000000000..e883a056347c8 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audiodecoder.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/audiodecoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_audiodecoder_h; +struct directFuncToKodi_addoninstance_audiodecoder_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_audiodecoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_audiodecoder_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_audiodecoder_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static bool kodi_addon_audiodecoder_supports_file_v1(void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file); // Added with API 1 + + static bool kodi_addon_audiodecoder_init_v1( + void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + unsigned int filecache, + int* channels, + int* samplerate, + int* bitspersample, + int64_t* totaltime, + int* bitrate, + enum AudioEngineDataFormat* format, + enum AudioEngineChannel info[AUDIOENGINE_CH_MAX]); // Added with API 1 + + static int kodi_addon_audiodecoder_read_pcm_v1(void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + uint8_t* buffer, + size_t size, + size_t* actualsize); // Added with API 1 + + static int64_t kodi_addon_audiodecoder_seek_v1(void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + int64_t time); // Added with API 1 + + static bool kodi_addon_audiodecoder_read_tag_v1( + void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file, + struct KODI_ADDON_AUDIODECODER_INFO_TAG* tag); // Added with API 1 + + static int kodi_addon_audiodecoder_track_count_v1(void* thisClassHdl, + const KODI_ADDON_AUDIODECODER_HDL hdl, + const char* file); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.cpp new file mode 100644 index 0000000000000..b4ffab04eeb4b --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.cpp @@ -0,0 +1,310 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audioencoder.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_audioencoder_h::InitDirect( + directFuncToAddon_addoninstance_audioencoder_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_audioencoder_create_v1 = kodi_addon_audioencoder_create_v1; + ifcToAddon->kodi_addon_audioencoder_destroy_v1 = kodi_addon_audioencoder_destroy_v1; + ifcToAddon->kodi_addon_audioencoder_start_v1 = kodi_addon_audioencoder_start_v1; + ifcToAddon->kodi_addon_audioencoder_encode_v1 = kodi_addon_audioencoder_encode_v1; + ifcToAddon->kodi_addon_audioencoder_finish_v1 = kodi_addon_audioencoder_finish_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_audioencoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_audioencoder_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_audioencoder_create_v1: + { + // Original API call: typedef KODI_ADDON_AUDIOENCODER_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_create_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audioencoder_create_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + KODI_ADDON_AUDIOENCODER_HDL auto_gen_ret = + kodi_addon_audioencoder_create_v1(this, kodi_hdl /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audioencoder_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_audioencoder_destroy_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_DESTROY_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_destroy_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audioencoder_destroy_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_audioencoder_destroy_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_audioencoder_start_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_START_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl, const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_start_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audioencoder_start_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_AUDIOENCODER_INFO_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = kodi_addon_audioencoder_start_v1(this, auto_gen_hdl, + &tag /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audioencoder_start_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_audioencoder_encode_v1: + { + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_ENCODE_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl, const uint8_t* pbt_stream, size_t num_bytes_read); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_audioencoder_encode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_encode_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audioencoder_encode_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::vector& pbt_stream = std::get<1>(t); /* CheckAPIUse_WAY_11 (0004) */ + size_t num_bytes_read = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + ssize_t auto_gen_ret = kodi_addon_audioencoder_encode_v1( + this, auto_gen_hdl, pbt_stream.data() /* CheckAPIUse_WAY_11 (0004) */, + num_bytes_read /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audioencoder_encode_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_audioencoder_finish_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_AUDIOENCODER_FINISH_V1)(KODI_ADDON_AUDIOENCODER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_audioencoder_finish_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_audioencoder_finish_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_audioencoder_finish_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_audioencoder_finish_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_audioencoder_finish_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_AUDIOENCODER_HDL CHdl_kodi_addoninstance_audioencoder_h:: + kodi_addon_audioencoder_create_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_AUDIOENCODER_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_audioencoder.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_audioencoder.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_destroy_v1( + void* thisClassHdl, KODI_ADDON_AUDIOENCODER_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_audioencoder.v1.destroy) + { + union_data->types.kodi_addon_audioencoder.v1.destroy(union_data->hdl); + } +} + +bool CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_start_v1( + void* thisClassHdl, + KODI_ADDON_AUDIOENCODER_HDL hdl, + const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_audioencoder.v1.start) + { + auto_gen_ret = union_data->types.kodi_addon_audioencoder.v1.start(union_data->hdl, tag); + } + return auto_gen_ret; +} + +ssize_t CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_encode_v1( + void* thisClassHdl, + KODI_ADDON_AUDIOENCODER_HDL hdl, + const uint8_t* pbt_stream, + size_t num_bytes_read) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + ssize_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_audioencoder.v1.encode) + { + auto_gen_ret = union_data->types.kodi_addon_audioencoder.v1.encode(union_data->hdl, pbt_stream, + num_bytes_read); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_audioencoder_h::kodi_addon_audioencoder_finish_v1( + void* thisClassHdl, KODI_ADDON_AUDIOENCODER_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_audioencoder.v1.finish) + { + auto_gen_ret = union_data->types.kodi_addon_audioencoder.v1.finish(union_data->hdl); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_write(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const uint8_t* data, + size_t len) +{ + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_write(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const uint8_t* data, size_t len) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_addon_audioencoder_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_audioencoder_write_v1; /* Autogenerated */ + + if (hdl == nullptr || data == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_audioencoder_write_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + std::vector(data, data + len) /* CheckAPIUse_WAY_11 (0003) */, + len /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_audioencoder_h, funcParent_kodi_addon_audioencoder_write_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_audioencoder_write_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_audioencoder_h; + return auto_gen_group.kodi_addon_audioencoder_write_v1(auto_gen_group.thisClassHdl, hdl, data, + len); +} + +ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_seek(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + ssize_t pos, + int whence) +{ + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_addon_audioencoder_seek(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, ssize_t pos, int whence) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_audioencoder_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_audioencoder_seek_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_audioencoder_seek_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + pos /* CheckAPIUse_WAY_10 (0003) */, whence /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_audioencoder_h, funcParent_kodi_addon_audioencoder_seek_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_audioencoder_seek_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_audioencoder_h; + return auto_gen_group.kodi_addon_audioencoder_seek_v1(auto_gen_group.thisClassHdl, hdl, pos, + whence); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.h new file mode 100644 index 0000000000000..d3ff77347a58a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/audioencoder.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/audioencoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_audioencoder_h; +struct directFuncToKodi_addoninstance_audioencoder_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_audioencoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_audioencoder_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_audioencoder_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_AUDIOENCODER_HDL kodi_addon_audioencoder_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_audioencoder_destroy_v1( + void* thisClassHdl, KODI_ADDON_AUDIOENCODER_HDL hdl); // Added with API 1 + + static bool kodi_addon_audioencoder_start_v1( + void* thisClassHdl, + KODI_ADDON_AUDIOENCODER_HDL hdl, + const struct KODI_ADDON_AUDIOENCODER_INFO_TAG* tag); // Added with API 1 + + static ssize_t kodi_addon_audioencoder_encode_v1(void* thisClassHdl, + KODI_ADDON_AUDIOENCODER_HDL hdl, + const uint8_t* pbt_stream, + size_t num_bytes_read); // Added with API 1 + + static bool kodi_addon_audioencoder_finish_v1( + void* thisClassHdl, KODI_ADDON_AUDIOENCODER_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.cpp new file mode 100644 index 0000000000000..c629467592205 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.cpp @@ -0,0 +1,667 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "game.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_game_h::InitDirect(directFuncToAddon_addoninstance_game_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_game_create_v1 = kodi_addon_game_create_v1; + ifcToAddon->kodi_addon_game_destroy_v1 = kodi_addon_game_destroy_v1; + ifcToAddon->kodi_addon_game_load_game_v1 = kodi_addon_game_load_game_v1; + ifcToAddon->kodi_addon_game_load_game_special_v1 = kodi_addon_game_load_game_special_v1; + ifcToAddon->kodi_addon_game_load_standalone_v1 = kodi_addon_game_load_standalone_v1; + ifcToAddon->kodi_addon_game_unload_game_v1 = kodi_addon_game_unload_game_v1; + ifcToAddon->kodi_addon_game_get_game_timing_v1 = kodi_addon_game_get_game_timing_v1; + ifcToAddon->kodi_addon_game_get_region_v1 = kodi_addon_game_get_region_v1; + ifcToAddon->kodi_addon_game_requires_game_loop_v1 = kodi_addon_game_requires_game_loop_v1; + ifcToAddon->kodi_addon_game_run_frame_v1 = kodi_addon_game_run_frame_v1; + ifcToAddon->kodi_addon_game_reset_v1 = kodi_addon_game_reset_v1; + ifcToAddon->kodi_addon_game_hw_context_reset_v1 = kodi_addon_game_hw_context_reset_v1; + ifcToAddon->kodi_addon_game_hw_context_destroy_v1 = kodi_addon_game_hw_context_destroy_v1; + ifcToAddon->kodi_addon_game_has_feature_v1 = kodi_addon_game_has_feature_v1; + ifcToAddon->kodi_addon_game_get_topology_v1 = kodi_addon_game_get_topology_v1; + ifcToAddon->kodi_addon_game_free_topology_v1 = kodi_addon_game_free_topology_v1; + ifcToAddon->kodi_addon_game_set_controller_layouts_v1 = kodi_addon_game_set_controller_layouts_v1; + ifcToAddon->kodi_addon_game_enable_keyboard_v1 = kodi_addon_game_enable_keyboard_v1; + ifcToAddon->kodi_addon_game_enable_mouse_v1 = kodi_addon_game_enable_mouse_v1; + ifcToAddon->kodi_addon_game_connect_controller_v1 = kodi_addon_game_connect_controller_v1; + ifcToAddon->kodi_addon_game_input_event_v1 = kodi_addon_game_input_event_v1; + ifcToAddon->kodi_addon_game_serialize_size_v1 = kodi_addon_game_serialize_size_v1; + ifcToAddon->kodi_addon_game_serialize_v1 = kodi_addon_game_serialize_v1; + ifcToAddon->kodi_addon_game_deserialize_v1 = kodi_addon_game_deserialize_v1; + ifcToAddon->kodi_addon_game_cheat_reset_v1 = kodi_addon_game_cheat_reset_v1; + ifcToAddon->kodi_addon_game_get_memory_v1 = kodi_addon_game_get_memory_v1; + ifcToAddon->kodi_addon_game_set_cheat_v1 = kodi_addon_game_set_cheat_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_game_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_game_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_GAME_HDL CHdl_kodi_addoninstance_game_h::kodi_addon_game_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_GAME_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_game.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_destroy_v1( + void* thisClassHdl, KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_game.v1.destroy) + { + union_data->types.kodi_addon_game.v1.destroy(union_data->hdl); + } +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_game_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl, const char* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.load_game) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.load_game(union_data->hdl, url); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_game_special_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + enum SPECIAL_GAME_TYPE type, + const char** urls, + size_t urlCount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.load_game_special) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.load_game_special(union_data->hdl, type, + urls, urlCount); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_load_standalone_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.load_standalone) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.load_standalone(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_unload_game_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.unload_game) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.unload_game(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_game_timing_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + struct game_system_timing* timing_info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.get_game_timing) + { + auto_gen_ret = + union_data->types.kodi_addon_game.v1.get_game_timing(union_data->hdl, timing_info); + } + return auto_gen_ret; +} + +enum GAME_REGION CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_region_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_REGION_UNKNOWN; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_REGION auto_gen_ret = GAME_REGION_UNKNOWN; + if (union_data->types.kodi_addon_game.v1.get_region) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.get_region(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_requires_game_loop_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.requires_game_loop) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.requires_game_loop(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_run_frame_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.run_frame) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.run_frame(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.reset) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.reset(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_hw_context_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.hw_context_reset) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.hw_context_reset(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_hw_context_destroy_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.hw_context_destroy) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.hw_context_destroy(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_has_feature_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const char* controller_id, + const char* feature_name) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.has_feature) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.has_feature(union_data->hdl, controller_id, + feature_name); + } + return auto_gen_ret; +} + +struct game_input_topology* CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_topology_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + struct game_input_topology* auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_game.v1.get_topology) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.get_topology(union_data->hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_free_topology_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + struct game_input_topology* topology) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_game.v1.free_topology) + { + union_data->types.kodi_addon_game.v1.free_topology(union_data->hdl, topology); + } +} + +void CHdl_kodi_addoninstance_game_h::kodi_addon_game_set_controller_layouts_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const struct game_controller_layout* controllers, + size_t controller_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_game.v1.set_controller_layouts) + { + union_data->types.kodi_addon_game.v1.set_controller_layouts(union_data->hdl, controllers, + controller_count); + } +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_enable_keyboard_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.enable_keyboard) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.enable_keyboard(union_data->hdl, enable, + controller_id); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_enable_mouse_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.enable_mouse) + { + auto_gen_ret = + union_data->types.kodi_addon_game.v1.enable_mouse(union_data->hdl, enable, controller_id); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_connect_controller_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool connect, + const char* port_address, + const char* controller_id) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.connect_controller) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.connect_controller( + union_data->hdl, connect, port_address, controller_id); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_game_h::kodi_addon_game_input_event_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const struct game_input_event* event) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_game.v1.input_event) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.input_event(union_data->hdl, event); + } + return auto_gen_ret; +} + +size_t CHdl_kodi_addoninstance_game_h::kodi_addon_game_serialize_size_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + size_t auto_gen_ret = 0; + if (union_data->types.kodi_addon_game.v1.serialize_size) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.serialize_size(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_serialize_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + uint8_t* data, + size_t size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.serialize) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.serialize(union_data->hdl, data, size); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_deserialize_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const uint8_t* data, + size_t size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.deserialize) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.deserialize(union_data->hdl, data, size); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_cheat_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.cheat_reset) + { + auto_gen_ret = union_data->types.kodi_addon_game.v1.cheat_reset(union_data->hdl); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_get_memory_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + enum GAME_MEMORY type, + uint8_t** data, + size_t* size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.get_memory) + { + auto_gen_ret = + union_data->types.kodi_addon_game.v1.get_memory(union_data->hdl, type, data, size); + } + return auto_gen_ret; +} + +enum GAME_ERROR CHdl_kodi_addoninstance_game_h::kodi_addon_game_set_cheat_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + unsigned int index, + bool enabled, + const char* code) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return GAME_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum GAME_ERROR auto_gen_ret = GAME_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_game.v1.set_cheat) + { + auto_gen_ret = + union_data->types.kodi_addon_game.v1.set_cheat(union_data->hdl, index, enabled, code); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_addon_game_close(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_game_close(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + auto_gen_group.kodi_addon_game_close_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT KODI_GAME_STREAM_HANDLE kodi_addon_game_open_stream( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct game_stream_properties* properties) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GAME_STREAM_HANDLE kodi_addon_game_open_stream( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct game_stream_properties* properties) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || properties == nullptr) + return nullptr; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + return auto_gen_group.kodi_addon_game_open_stream_v1(auto_gen_group.thisClassHdl, hdl, + properties); +} + +ATTR_DLL_EXPORT bool kodi_addon_game_get_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + unsigned int width, + unsigned int height, + struct game_stream_buffer* buffer) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_game_get_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_GAME_STREAM_HANDLE game_hdl, unsigned int width, unsigned int height, struct game_stream_buffer* buffer) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || game_hdl == nullptr || buffer == nullptr) + return false; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + return auto_gen_group.kodi_addon_game_get_stream_buffer_v1(auto_gen_group.thisClassHdl, hdl, + game_hdl, width, height, buffer); +} + +ATTR_DLL_EXPORT void kodi_addon_game_add_stream_data(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + const struct game_stream_packet* packet) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_game_add_stream_data(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_GAME_STREAM_HANDLE game_hdl, const struct game_stream_packet* packet) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || game_hdl == nullptr || packet == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + auto_gen_group.kodi_addon_game_add_stream_data_v1(auto_gen_group.thisClassHdl, hdl, game_hdl, + packet); +} + +ATTR_DLL_EXPORT void kodi_addon_game_release_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl, + struct game_stream_buffer* buffer) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_game_release_stream_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_GAME_STREAM_HANDLE game_hdl, struct game_stream_buffer* buffer) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || game_hdl == nullptr || buffer == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + auto_gen_group.kodi_addon_game_release_stream_buffer_v1(auto_gen_group.thisClassHdl, hdl, + game_hdl, buffer); +} + +ATTR_DLL_EXPORT void kodi_addon_game_close_stream(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_GAME_STREAM_HANDLE game_hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_game_close_stream(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_GAME_STREAM_HANDLE game_hdl) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || game_hdl == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + auto_gen_group.kodi_addon_game_close_stream_v1(auto_gen_group.thisClassHdl, hdl, game_hdl); +} + +ATTR_DLL_EXPORT game_proc_address_t +kodi_addon_hw_get_proc_address(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* symbol) +{ + // Original API call: ATTR_DLL_EXPORT game_proc_address_t kodi_addon_hw_get_proc_address( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* symbol) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || symbol == nullptr) + return nullptr; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + return auto_gen_group.kodi_addon_hw_get_proc_address_v1(auto_gen_group.thisClassHdl, hdl, symbol); +} + +ATTR_DLL_EXPORT bool kodi_addon_game_input_event(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct game_input_event* event) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_game_input_event(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct game_input_event* event) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || event == nullptr) + return false; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_game_h; + return auto_gen_group.kodi_addon_game_input_event_v1(auto_gen_group.thisClassHdl, hdl, event); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.h new file mode 100644 index 0000000000000..b1f6def66dd4a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/game.h @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/game.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_game_h; +struct directFuncToKodi_addoninstance_game_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_game_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_game_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_game_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_GAME_HDL kodi_addon_game_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_game_destroy_v1(void* thisClassHdl, + KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_load_game_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const char* url); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_load_game_special_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + enum SPECIAL_GAME_TYPE type, + const char** urls, + size_t urlCount); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_load_standalone_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_unload_game_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_get_game_timing_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + struct game_system_timing* timing_info); // Added with API 1 + + static enum GAME_REGION kodi_addon_game_get_region_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static bool kodi_addon_game_requires_game_loop_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_run_frame_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_hw_context_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_hw_context_destroy_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static bool kodi_addon_game_has_feature_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const char* controller_id, + const char* feature_name); // Added with API 1 + + static struct game_input_topology* kodi_addon_game_get_topology_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static void kodi_addon_game_free_topology_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + struct game_input_topology* topology); // Added with API 1 + + static void kodi_addon_game_set_controller_layouts_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const struct game_controller_layout* controllers, + size_t controller_count); // Added with API 1 + + static bool kodi_addon_game_enable_keyboard_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); // Added with API 1 + + static bool kodi_addon_game_enable_mouse_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool enable, + const char* controller_id); // Added with API 1 + + static bool kodi_addon_game_connect_controller_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + bool connect, + const char* port_address, + const char* controller_id); // Added with API 1 + + static bool kodi_addon_game_input_event_v1( + void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const struct game_input_event* event); // Added with API 1 + + static size_t kodi_addon_game_serialize_size_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_serialize_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + uint8_t* data, + size_t size); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_deserialize_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + const uint8_t* data, + size_t size); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_cheat_reset_v1( + void* thisClassHdl, const KODI_ADDON_GAME_HDL hdl); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_get_memory_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + enum GAME_MEMORY type, + uint8_t** data, + size_t* size); // Added with API 1 + + static enum GAME_ERROR kodi_addon_game_set_cheat_v1(void* thisClassHdl, + const KODI_ADDON_GAME_HDL hdl, + unsigned int index, + bool enabled, + const char* code); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.cpp new file mode 100644 index 0000000000000..4cb6408abc462 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.cpp @@ -0,0 +1,243 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "imagedecoder.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_imagedecoder_h::InitDirect( + directFuncToAddon_addoninstance_imagedecoder_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_imagedecoder_supports_file_v1 = kodi_addon_imagedecoder_supports_file_v1; + ifcToAddon->kodi_addon_imagedecoder_read_tag_v1 = kodi_addon_imagedecoder_read_tag_v1; + ifcToAddon->kodi_addon_imagedecoder_load_image_from_memory_v1 = + kodi_addon_imagedecoder_load_image_from_memory_v1; + ifcToAddon->kodi_addon_imagedecoder_decode_v1 = kodi_addon_imagedecoder_decode_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_imagedecoder_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_imagedecoder_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_imagedecoder_supports_file_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_SUPPORTS_FILE_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_supports_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_supports_file_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_imagedecoder_supports_file_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool auto_gen_ret = kodi_addon_imagedecoder_supports_file_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_imagedecoder_supports_file_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_imagedecoder_read_tag_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_READ_TAG_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file, struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_read_tag_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_read_tag_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_imagedecoder_read_tag_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& file = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + struct KODI_ADDON_IMAGEDECODER_INFO_TAG info = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + bool auto_gen_ret = kodi_addon_imagedecoder_read_tag_v1( + this, auto_gen_hdl, file.c_str() /* CheckAPIUse_WAY_6a (0004) */, + &info /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_imagedecoder_read_tag_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, + &info /* CheckAPIUse_WAY_15 (0002-5) */)); + IFC_KODI_ADDON_IMAGEDECODER_INFO_TAG::CleanCStructure(&info); + return true; + } + case funcChild_kodi_addon_imagedecoder_load_image_from_memory_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_LOAD_IMAGE_FROM_MEMORY_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* mimetype, const uint8_t* buffer, size_t buf_size, unsigned int* width, unsigned int* height); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int, unsigned int> msgChild__IN_kodi_addon_imagedecoder_load_image_from_memory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_imagedecoder_load_image_from_memory_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_imagedecoder_load_image_from_memory_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& mimetype = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + const std::vector& buffer = std::get<2>(t); /* CheckAPIUse_WAY_11 (0004) */ + size_t buf_size = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + unsigned int width = std::get<4>(t); /* CheckAPIUse_WAY_13 (0004) */ + unsigned int height = std::get<5>(t); /* CheckAPIUse_WAY_13 (0004) */ + bool auto_gen_ret = kodi_addon_imagedecoder_load_image_from_memory_v1( + this, auto_gen_hdl, mimetype.c_str() /* CheckAPIUse_WAY_6a (0004) */, + buffer.data() /* CheckAPIUse_WAY_11 (0004) */, buf_size /* CheckAPIUse_WAY_9 (0004) */, + &width /* CheckAPIUse_WAY_13 (0004) */, &height /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_imagedecoder_load_image_from_memory_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, + width /* CheckAPIUse_WAY_13 (0004) */, + height /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_imagedecoder_decode_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_IMAGEDECODER_DECODE_V1)(const KODI_ADDON_IMAGEDECODER_HDL hdl, uint8_t* pixels, size_t pixels_size, unsigned int width, unsigned int height, unsigned int pitch, enum ADDON_IMG_FMT format); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_imagedecoder_decode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgChild_OUT_kodi_addon_imagedecoder_decode_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_imagedecoder_decode_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + size_t pixels_size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + unsigned int width = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + unsigned int height = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + unsigned int pitch = std::get<4>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_IMG_FMT format = std::get<5>(t); /* CheckAPIUse_WAY_14a (0004) */ + std::vector pixels(pixels_size); /* CheckAPIUse_WAY_10 (0004) */ + bool auto_gen_ret = kodi_addon_imagedecoder_decode_v1( + this, auto_gen_hdl, pixels.data() /* CheckAPIUse_WAY_10 (0004) */, + pixels_size /* CheckAPIUse_WAY_9 (0004) */, width /* CheckAPIUse_WAY_9 (0004) */, + height /* CheckAPIUse_WAY_9 (0004) */, pitch /* CheckAPIUse_WAY_9 (0004) */, + format /* CheckAPIUse_WAY_14a (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_imagedecoder_decode_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, pixels /* CheckAPIUse_WAY_10 (0004) */)); + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_supports_file_v1( + void* thisClassHdl, const KODI_ADDON_IMAGEDECODER_HDL hdl, const char* file) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_imagedecoder.v1.supports_file) + { + auto_gen_ret = + union_data->types.kodi_addon_imagedecoder.v1.supports_file(union_data->hdl, file); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_read_tag_v1( + void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file, + struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_imagedecoder.v1.read_tag) + { + auto_gen_ret = + union_data->types.kodi_addon_imagedecoder.v1.read_tag(union_data->hdl, file, info); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_load_image_from_memory_v1( + void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* mimetype, + const uint8_t* buffer, + size_t buf_size, + unsigned int* width, + unsigned int* height) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_imagedecoder.v1.load_image_from_memory) + { + auto_gen_ret = union_data->types.kodi_addon_imagedecoder.v1.load_image_from_memory( + union_data->hdl, mimetype, buffer, buf_size, width, height); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_imagedecoder_h::kodi_addon_imagedecoder_decode_v1( + void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + uint8_t* pixels, + size_t pixels_size, + unsigned int width, + unsigned int height, + unsigned int pitch, + enum ADDON_IMG_FMT format) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_imagedecoder.v1.decode) + { + auto_gen_ret = union_data->types.kodi_addon_imagedecoder.v1.decode( + union_data->hdl, pixels, pixels_size, width, height, pitch, format); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.h new file mode 100644 index 0000000000000..f7fa8d99c044f --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/imagedecoder.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/imagedecoder.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_imagedecoder_h; +struct directFuncToKodi_addoninstance_imagedecoder_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_imagedecoder_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_imagedecoder_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_imagedecoder_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static bool kodi_addon_imagedecoder_supports_file_v1(void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file); // Added with API 1 + + static bool kodi_addon_imagedecoder_read_tag_v1( + void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* file, + struct KODI_ADDON_IMAGEDECODER_INFO_TAG* info); // Added with API 1 + + static bool kodi_addon_imagedecoder_load_image_from_memory_v1( + void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + const char* mimetype, + const uint8_t* buffer, + size_t buf_size, + unsigned int* width, + unsigned int* height); // Added with API 1 + + static bool kodi_addon_imagedecoder_decode_v1(void* thisClassHdl, + const KODI_ADDON_IMAGEDECODER_HDL hdl, + uint8_t* pixels, + size_t pixels_size, + unsigned int width, + unsigned int height, + unsigned int pitch, + enum ADDON_IMG_FMT format); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.cpp new file mode 100644 index 0000000000000..c5ab92aa11b6f --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.cpp @@ -0,0 +1,676 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "inputstream.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_inputstream_h::InitDirect( + directFuncToAddon_addoninstance_inputstream_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_inputstream_create_v1 = kodi_addon_inputstream_create_v1; + ifcToAddon->kodi_addon_inputstream_destroy_v1 = kodi_addon_inputstream_destroy_v1; + ifcToAddon->kodi_addon_inputstream_open_v1 = kodi_addon_inputstream_open_v1; + ifcToAddon->kodi_addon_inputstream_close_v1 = kodi_addon_inputstream_close_v1; + ifcToAddon->kodi_addon_inputstream_get_path_list_v1 = kodi_addon_inputstream_get_path_list_v1; + ifcToAddon->kodi_addon_inputstream_get_capabilities_v1 = + kodi_addon_inputstream_get_capabilities_v1; + ifcToAddon->kodi_addon_inputstream_get_stream_ids_v1 = kodi_addon_inputstream_get_stream_ids_v1; + ifcToAddon->kodi_addon_inputstream_get_stream_v1 = kodi_addon_inputstream_get_stream_v1; + ifcToAddon->kodi_addon_inputstream_enable_stream_v1 = kodi_addon_inputstream_enable_stream_v1; + ifcToAddon->kodi_addon_inputstream_open_stream_v1 = kodi_addon_inputstream_open_stream_v1; + ifcToAddon->kodi_addon_inputstream_demux_reset_v1 = kodi_addon_inputstream_demux_reset_v1; + ifcToAddon->kodi_addon_inputstream_demux_abort_v1 = kodi_addon_inputstream_demux_abort_v1; + ifcToAddon->kodi_addon_inputstream_demux_flush_v1 = kodi_addon_inputstream_demux_flush_v1; + ifcToAddon->kodi_addon_inputstream_demux_read_v1 = kodi_addon_inputstream_demux_read_v1; + ifcToAddon->kodi_addon_inputstream_demux_seek_time_v1 = kodi_addon_inputstream_demux_seek_time_v1; + ifcToAddon->kodi_addon_inputstream_demux_set_speed_v1 = kodi_addon_inputstream_demux_set_speed_v1; + ifcToAddon->kodi_addon_inputstream_set_video_resolution_v1 = + kodi_addon_inputstream_set_video_resolution_v1; + ifcToAddon->kodi_addon_inputstream_get_total_time_v1 = kodi_addon_inputstream_get_total_time_v1; + ifcToAddon->kodi_addon_inputstream_get_time_v1 = kodi_addon_inputstream_get_time_v1; + ifcToAddon->kodi_addon_inputstream_get_times_v1 = kodi_addon_inputstream_get_times_v1; + ifcToAddon->kodi_addon_inputstream_pos_time_v1 = kodi_addon_inputstream_pos_time_v1; + ifcToAddon->kodi_addon_inputstream_read_stream_v1 = kodi_addon_inputstream_read_stream_v1; + ifcToAddon->kodi_addon_inputstream_seek_stream_v1 = kodi_addon_inputstream_seek_stream_v1; + ifcToAddon->kodi_addon_inputstream_position_stream_v1 = kodi_addon_inputstream_position_stream_v1; + ifcToAddon->kodi_addon_inputstream_length_stream_v1 = kodi_addon_inputstream_length_stream_v1; + ifcToAddon->kodi_addon_inputstream_is_real_time_stream_v1 = + kodi_addon_inputstream_is_real_time_stream_v1; + ifcToAddon->kodi_addon_inputstream_get_chapter_v1 = kodi_addon_inputstream_get_chapter_v1; + ifcToAddon->kodi_addon_inputstream_get_chapter_count_v1 = + kodi_addon_inputstream_get_chapter_count_v1; + ifcToAddon->kodi_addon_inputstream_get_chapter_name_v1 = + kodi_addon_inputstream_get_chapter_name_v1; + ifcToAddon->kodi_addon_inputstream_get_chapter_pos_v1 = kodi_addon_inputstream_get_chapter_pos_v1; + ifcToAddon->kodi_addon_inputstream_seek_chapter_v1 = kodi_addon_inputstream_seek_chapter_v1; + ifcToAddon->kodi_addon_inputstream_block_size_stream_v1 = + kodi_addon_inputstream_block_size_stream_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_inputstream_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_inputstream_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_INPUTSTREAM_HDL CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_INPUTSTREAM_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_inputstream.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_destroy_v1( + void* thisClassHdl, KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.destroy) + { + union_data->types.kodi_addon_inputstream.v1.destroy(union_data->hdl); + } +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_open_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_PROPERTY* props) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.open) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.open(union_data->hdl, props); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_close_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.close) + { + union_data->types.kodi_addon_inputstream.v1.close(union_data->hdl); + } +} + +const char* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_path_list_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + const char* auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_inputstream.v1.get_path_list) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_path_list(union_data->hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_capabilities_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_CAPABILITIES* capabilities) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.get_capabilities) + { + union_data->types.kodi_addon_inputstream.v1.get_capabilities(union_data->hdl, capabilities); + } +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_stream_ids_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_IDS* ids) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.get_stream_ids) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_stream_ids(union_data->hdl, ids); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_stream_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + struct INPUTSTREAM_INFO* info, + KODI_OWN_HDL* demuxStream, + PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.get_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_stream( + union_data->hdl, streamid, info, demuxStream, transfer_stream); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_enable_stream_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + bool enable) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.enable_stream) + { + union_data->types.kodi_addon_inputstream.v1.enable_stream(union_data->hdl, streamid, enable); + } +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_open_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int streamid) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.open_stream) + { + auto_gen_ret = + union_data->types.kodi_addon_inputstream.v1.open_stream(union_data->hdl, streamid); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_reset_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.demux_reset) + { + union_data->types.kodi_addon_inputstream.v1.demux_reset(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_abort_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.demux_abort) + { + union_data->types.kodi_addon_inputstream.v1.demux_abort(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_flush_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.demux_flush) + { + union_data->types.kodi_addon_inputstream.v1.demux_flush(union_data->hdl); + } +} + +struct DEMUX_PACKET* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_read_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + struct DEMUX_PACKET* auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_inputstream.v1.demux_read) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.demux_read(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_seek_time_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + double time, + bool backwards, + double* startpts) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.demux_seek_time) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.demux_seek_time( + union_data->hdl, time, backwards, startpts); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_demux_set_speed_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int speed) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.demux_set_speed) + { + union_data->types.kodi_addon_inputstream.v1.demux_set_speed(union_data->hdl, speed); + } +} + +void CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_set_video_resolution_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int width, + int height) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_inputstream.v1.set_video_resolution) + { + union_data->types.kodi_addon_inputstream.v1.set_video_resolution(union_data->hdl, width, + height); + } +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_total_time_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.get_total_time) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_total_time(union_data->hdl); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_time_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.get_time) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_time(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_times_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_TIMES* times) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.get_times) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_times(union_data->hdl, times); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_pos_time_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int ms) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.pos_time) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.pos_time(union_data->hdl, ms); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_read_stream_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + uint8_t* buffer, + unsigned int bufferSize) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.read_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.read_stream(union_data->hdl, buffer, + bufferSize); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_seek_stream_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int64_t position, + int whence) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.seek_stream) + { + auto_gen_ret = + union_data->types.kodi_addon_inputstream.v1.seek_stream(union_data->hdl, position, whence); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_position_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.position_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.position_stream(union_data->hdl); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_length_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.length_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.length_stream(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_is_real_time_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.is_real_time_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.is_real_time_stream(union_data->hdl); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.get_chapter) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_chapter(union_data->hdl); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_count_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.get_chapter_count) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_chapter_count(union_data->hdl); + } + return auto_gen_ret; +} + +const char* CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_name_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + const char* auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_inputstream.v1.get_chapter_name) + { + auto_gen_ret = + union_data->types.kodi_addon_inputstream.v1.get_chapter_name(union_data->hdl, ch); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_get_chapter_pos_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.get_chapter_pos) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.get_chapter_pos(union_data->hdl, ch); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_seek_chapter_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_inputstream.v1.seek_chapter) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.seek_chapter(union_data->hdl, ch); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_inputstream_h::kodi_addon_inputstream_block_size_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_inputstream.v1.block_size_stream) + { + auto_gen_ret = union_data->types.kodi_addon_inputstream.v1.block_size_stream(union_data->hdl); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_demux_packet( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, int data_size) +{ + // Original API call: ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_demux_packet( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, int data_size) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr) + return nullptr; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_inputstream_h; + return auto_gen_group.kodi_addon_inputstream_allocate_demux_packet_v1(auto_gen_group.thisClassHdl, + hdl, data_size); +} + +ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_encrypted_demux_packet( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int data_size, + unsigned int encrypted_subsample_count) +{ + // Original API call: ATTR_DLL_EXPORT struct DEMUX_PACKET* kodi_addon_inputstream_allocate_encrypted_demux_packet( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, unsigned int data_size, unsigned int encrypted_subsample_count) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr) + return nullptr; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_inputstream_h; + return auto_gen_group.kodi_addon_inputstream_allocate_encrypted_demux_packet_v1( + auto_gen_group.thisClassHdl, hdl, data_size, encrypted_subsample_count); +} + +ATTR_DLL_EXPORT void kodi_addon_inputstream_free_demux_packet(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct DEMUX_PACKET* packet) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_inputstream_free_demux_packet(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct DEMUX_PACKET* packet) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || packet == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_inputstream_h; + auto_gen_group.kodi_addon_inputstream_free_demux_packet_v1(auto_gen_group.thisClassHdl, hdl, + packet); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.h new file mode 100644 index 0000000000000..350947e0a054e --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/inputstream.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/inputstream.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_inputstream_h; +struct directFuncToKodi_addoninstance_inputstream_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_inputstream_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_inputstream_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_inputstream_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_INPUTSTREAM_HDL kodi_addon_inputstream_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_inputstream_destroy_v1(void* thisClassHdl, + KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static bool kodi_addon_inputstream_open_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_PROPERTY* props); // Added with API 1 + + static void kodi_addon_inputstream_close_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static const char* kodi_addon_inputstream_get_path_list_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static void kodi_addon_inputstream_get_capabilities_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_CAPABILITIES* capabilities); // Added with API 1 + + static bool kodi_addon_inputstream_get_stream_ids_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_IDS* ids); // Added with API 1 + + static bool kodi_addon_inputstream_get_stream_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + struct INPUTSTREAM_INFO* info, + KODI_OWN_HDL* demuxStream, + PFN_CB_KODI_ADDON_INPUTSTREAM_TRANSFER_STREAM transfer_stream); // Added with API 1 + + static void kodi_addon_inputstream_enable_stream_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid, + bool enable); // Added with API 1 + + static bool kodi_addon_inputstream_open_stream_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int streamid); // Added with API 1 + + static void kodi_addon_inputstream_demux_reset_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static void kodi_addon_inputstream_demux_abort_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static void kodi_addon_inputstream_demux_flush_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static struct DEMUX_PACKET* kodi_addon_inputstream_demux_read_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static bool kodi_addon_inputstream_demux_seek_time_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + double time, + bool backwards, + double* startpts); // Added with API 1 + + static void kodi_addon_inputstream_demux_set_speed_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int speed); // Added with API 1 + + static void kodi_addon_inputstream_set_video_resolution_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int width, + int height); // Added with API 1 + + static int kodi_addon_inputstream_get_total_time_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static int kodi_addon_inputstream_get_time_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static bool kodi_addon_inputstream_get_times_v1( + void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + struct INPUTSTREAM_TIMES* times); // Added with API 1 + + static bool kodi_addon_inputstream_pos_time_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ms); // Added with API 1 + + static int kodi_addon_inputstream_read_stream_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + uint8_t* buffer, + unsigned int bufferSize); // Added with API 1 + + static int64_t kodi_addon_inputstream_seek_stream_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int64_t position, + int whence); // Added with API 1 + + static int64_t kodi_addon_inputstream_position_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static int64_t kodi_addon_inputstream_length_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static bool kodi_addon_inputstream_is_real_time_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static int kodi_addon_inputstream_get_chapter_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static int kodi_addon_inputstream_get_chapter_count_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 + + static const char* kodi_addon_inputstream_get_chapter_name_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl, int ch); // Added with API 1 + + static int64_t kodi_addon_inputstream_get_chapter_pos_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ch); // Added with API 1 + + static bool kodi_addon_inputstream_seek_chapter_v1(void* thisClassHdl, + const KODI_ADDON_INPUTSTREAM_HDL hdl, + int ch); // Added with API 1 + + static int kodi_addon_inputstream_block_size_stream_v1( + void* thisClassHdl, const KODI_ADDON_INPUTSTREAM_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.cpp new file mode 100644 index 0000000000000..e68b05d5a08dc --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.cpp @@ -0,0 +1,507 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "peripheral.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_peripheral_h::InitDirect( + directFuncToAddon_addoninstance_peripheral_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_peripheral_create_v1 = kodi_addon_peripheral_create_v1; + ifcToAddon->kodi_addon_peripheral_destroy_v1 = kodi_addon_peripheral_destroy_v1; + ifcToAddon->kodi_addon_peripheral_get_capabilities_v1 = kodi_addon_peripheral_get_capabilities_v1; + ifcToAddon->kodi_addon_peripheral_perform_device_scan_v1 = + kodi_addon_peripheral_perform_device_scan_v1; + ifcToAddon->kodi_addon_peripheral_free_scan_results_v1 = + kodi_addon_peripheral_free_scan_results_v1; + ifcToAddon->kodi_addon_peripheral_get_events_v1 = kodi_addon_peripheral_get_events_v1; + ifcToAddon->kodi_addon_peripheral_free_events_v1 = kodi_addon_peripheral_free_events_v1; + ifcToAddon->kodi_addon_peripheral_send_event_v1 = kodi_addon_peripheral_send_event_v1; + ifcToAddon->kodi_addon_peripheral_get_joystick_info_v1 = + kodi_addon_peripheral_get_joystick_info_v1; + ifcToAddon->kodi_addon_peripheral_free_joystick_info_v1 = + kodi_addon_peripheral_free_joystick_info_v1; + ifcToAddon->kodi_addon_peripheral_get_features_v1 = kodi_addon_peripheral_get_features_v1; + ifcToAddon->kodi_addon_peripheral_free_features_v1 = kodi_addon_peripheral_free_features_v1; + ifcToAddon->kodi_addon_peripheral_map_features_v1 = kodi_addon_peripheral_map_features_v1; + ifcToAddon->kodi_addon_peripheral_get_ignored_primitives_v1 = + kodi_addon_peripheral_get_ignored_primitives_v1; + ifcToAddon->kodi_addon_peripheral_free_primitives_v1 = kodi_addon_peripheral_free_primitives_v1; + ifcToAddon->kodi_addon_peripheral_set_ignored_primitives_v1 = + kodi_addon_peripheral_set_ignored_primitives_v1; + ifcToAddon->kodi_addon_peripheral_save_button_map_v1 = kodi_addon_peripheral_save_button_map_v1; + ifcToAddon->kodi_addon_peripheral_revert_button_map_v1 = + kodi_addon_peripheral_revert_button_map_v1; + ifcToAddon->kodi_addon_peripheral_reset_button_map_v1 = kodi_addon_peripheral_reset_button_map_v1; + ifcToAddon->kodi_addon_peripheral_power_off_joystick_v1 = + kodi_addon_peripheral_power_off_joystick_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_peripheral_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_peripheral_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_PERIPHERAL_HDL CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_PERIPHERAL_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_peripheral.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_destroy_v1( + void* thisClassHdl, KODI_ADDON_PERIPHERAL_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.destroy) + { + union_data->types.kodi_addon_peripheral.v1.destroy(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_capabilities_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_CAPABILITIES* capabilities) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.get_capabilities) + { + union_data->types.kodi_addon_peripheral.v1.get_capabilities(union_data->hdl, capabilities); + } +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_perform_device_scan_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO** scan_results, + size_t* peripheral_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.perform_device_scan) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.perform_device_scan( + union_data->hdl, scan_results, peripheral_count); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_scan_results_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO* scan_results, + size_t peripheral_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.free_scan_results) + { + union_data->types.kodi_addon_peripheral.v1.free_scan_results(union_data->hdl, scan_results, + peripheral_count); + } +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_events_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT** events, + size_t* event_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.get_events) + { + auto_gen_ret = + union_data->types.kodi_addon_peripheral.v1.get_events(union_data->hdl, events, event_count); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_events_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT* events, + size_t event_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.free_events) + { + union_data->types.kodi_addon_peripheral.v1.free_events(union_data->hdl, events, event_count); + } +} + +bool CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_send_event_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct PERIPHERAL_EVENT* event) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_peripheral.v1.send_event) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.send_event(union_data->hdl, event); + } + return auto_gen_ret; +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_get_joystick_info_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index, + struct JOYSTICK_INFO* info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.get_joystick_info) + { + auto_gen_ret = + union_data->types.kodi_addon_peripheral.v1.get_joystick_info(union_data->hdl, index, info); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_joystick_info_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_INFO* info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.free_joystick_info) + { + union_data->types.kodi_addon_peripheral.v1.free_joystick_info(union_data->hdl, info); + } +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_get_features_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + struct JOYSTICK_FEATURE** features, + size_t* feature_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.get_features) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.get_features( + union_data->hdl, joystick, controller_id, features, feature_count); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_features_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_FEATURE* features, + size_t feature_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.free_features) + { + union_data->types.kodi_addon_peripheral.v1.free_features(union_data->hdl, features, + feature_count); + } +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_map_features_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + const struct JOYSTICK_FEATURE* features, + size_t feature_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.map_features) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.map_features( + union_data->hdl, joystick, controller_id, features, feature_count); + } + return auto_gen_ret; +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_get_ignored_primitives_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + struct JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.get_ignored_primitives) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.get_ignored_primitives( + union_data->hdl, joystick, primitives, primitive_count); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_free_primitives_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.free_primitives) + { + union_data->types.kodi_addon_peripheral.v1.free_primitives(union_data->hdl, primitives, + primitive_count); + } +} + +enum PERIPHERAL_ERROR CHdl_kodi_addoninstance_peripheral_h:: + kodi_addon_peripheral_set_ignored_primitives_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PERIPHERAL_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PERIPHERAL_ERROR auto_gen_ret = PERIPHERAL_NO_ERROR; + if (union_data->types.kodi_addon_peripheral.v1.set_ignored_primitives) + { + auto_gen_ret = union_data->types.kodi_addon_peripheral.v1.set_ignored_primitives( + union_data->hdl, joystick, primitives, primitive_count); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_save_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.save_button_map) + { + union_data->types.kodi_addon_peripheral.v1.save_button_map(union_data->hdl, joystick); + } +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_revert_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.revert_button_map) + { + union_data->types.kodi_addon_peripheral.v1.revert_button_map(union_data->hdl, joystick); + } +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_reset_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.reset_button_map) + { + union_data->types.kodi_addon_peripheral.v1.reset_button_map(union_data->hdl, joystick, + controller_id); + } +} + +void CHdl_kodi_addoninstance_peripheral_h::kodi_addon_peripheral_power_off_joystick_v1( + void* thisClassHdl, KODI_ADDON_PERIPHERAL_HDL hdl, unsigned int index) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_peripheral.v1.power_off_joystick) + { + union_data->types.kodi_addon_peripheral.v1.power_off_joystick(union_data->hdl, index); + } +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_addon_peripheral_trigger_scan(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_peripheral_trigger_scan(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_peripheral_h; + auto_gen_group.kodi_addon_peripheral_trigger_scan_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_peripheral_refresh_button_maps(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* device_name, + const char* controller_id) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_peripheral_refresh_button_maps( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* device_name, const char* controller_id) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || device_name == nullptr || controller_id == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_peripheral_h; + auto_gen_group.kodi_addon_peripheral_refresh_button_maps_v1(auto_gen_group.thisClassHdl, hdl, + device_name, controller_id); +} + +ATTR_DLL_EXPORT unsigned int kodi_addon_peripheral_feature_count( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* controller_id, enum JOYSTICK_FEATURE_TYPE type) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_addon_peripheral_feature_count( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* controller_id, enum JOYSTICK_FEATURE_TYPE type) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || controller_id == nullptr) + return 0; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_peripheral_h; + return auto_gen_group.kodi_addon_peripheral_feature_count_v1(auto_gen_group.thisClassHdl, hdl, + controller_id, type); +} + +ATTR_DLL_EXPORT enum JOYSTICK_FEATURE_TYPE kodi_addon_peripheral_feature_type( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* controller_id, const char* feature_name) +{ + // Original API call: ATTR_DLL_EXPORT enum JOYSTICK_FEATURE_TYPE kodi_addon_peripheral_feature_type( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* controller_id, const char* feature_name) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || controller_id == nullptr || feature_name == nullptr) + return JOYSTICK_FEATURE_TYPE_UNKNOWN; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_peripheral_h; + return auto_gen_group.kodi_addon_peripheral_feature_type_v1(auto_gen_group.thisClassHdl, hdl, + controller_id, feature_name); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.h new file mode 100644 index 0000000000000..ac6f153787b08 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/peripheral.h @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/peripheral.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_peripheral_h; +struct directFuncToKodi_addoninstance_peripheral_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_peripheral_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_peripheral_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_peripheral_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_PERIPHERAL_HDL kodi_addon_peripheral_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_peripheral_destroy_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl); // Added with API 1 + + static void kodi_addon_peripheral_get_capabilities_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_CAPABILITIES* capabilities); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_perform_device_scan_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO** scan_results, + size_t* peripheral_count); // Added with API 1 + + static void kodi_addon_peripheral_free_scan_results_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_INFO* scan_results, + size_t peripheral_count); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_get_events_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT** events, + size_t* event_count); // Added with API 1 + + static void kodi_addon_peripheral_free_events_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct PERIPHERAL_EVENT* events, + size_t event_count); // Added with API 1 + + static bool kodi_addon_peripheral_send_event_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct PERIPHERAL_EVENT* event); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_get_joystick_info_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index, + struct JOYSTICK_INFO* info); // Added with API 1 + + static void kodi_addon_peripheral_free_joystick_info_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_INFO* info); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_get_features_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + struct JOYSTICK_FEATURE** features, + size_t* feature_count); // Added with API 1 + + static void kodi_addon_peripheral_free_features_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_FEATURE* features, + size_t feature_count); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_map_features_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id, + const struct JOYSTICK_FEATURE* features, + size_t feature_count); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_get_ignored_primitives_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + struct JOYSTICK_DRIVER_PRIMITIVE** primitives, + size_t* primitive_count); // Added with API 1 + + static void kodi_addon_peripheral_free_primitives_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); // Added with API 1 + + static enum PERIPHERAL_ERROR kodi_addon_peripheral_set_ignored_primitives_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const struct JOYSTICK_DRIVER_PRIMITIVE* primitives, + size_t primitive_count); // Added with API 1 + + static void kodi_addon_peripheral_save_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick); // Added with API 1 + + static void kodi_addon_peripheral_revert_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick); // Added with API 1 + + static void kodi_addon_peripheral_reset_button_map_v1( + void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + const struct JOYSTICK_INFO* joystick, + const char* controller_id); // Added with API 1 + + static void kodi_addon_peripheral_power_off_joystick_v1(void* thisClassHdl, + KODI_ADDON_PERIPHERAL_HDL hdl, + unsigned int index); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.cpp new file mode 100644 index 0000000000000..60ae7069dadb7 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.cpp @@ -0,0 +1,2790 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "pvr.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_pvr_h::InitDirect(directFuncToAddon_addoninstance_pvr_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_pvr_get_capabilities_v1 = kodi_addon_pvr_get_capabilities_v1; + ifcToAddon->kodi_addon_pvr_get_backend_name_v1 = kodi_addon_pvr_get_backend_name_v1; + ifcToAddon->kodi_addon_pvr_get_backend_version_v1 = kodi_addon_pvr_get_backend_version_v1; + ifcToAddon->kodi_addon_pvr_get_backend_hostname_v1 = kodi_addon_pvr_get_backend_hostname_v1; + ifcToAddon->kodi_addon_pvr_get_connection_string_v1 = kodi_addon_pvr_get_connection_string_v1; + ifcToAddon->kodi_addon_pvr_get_drive_space_v1 = kodi_addon_pvr_get_drive_space_v1; + ifcToAddon->kodi_addon_pvr_call_settings_menu_hook_v1 = kodi_addon_pvr_call_settings_menu_hook_v1; + ifcToAddon->kodi_addon_pvr_get_channels_amount_v1 = kodi_addon_pvr_get_channels_amount_v1; + ifcToAddon->kodi_addon_pvr_get_channels_v1 = kodi_addon_pvr_get_channels_v1; + ifcToAddon->kodi_addon_pvr_get_channel_stream_properties_v1 = + kodi_addon_pvr_get_channel_stream_properties_v1; + ifcToAddon->kodi_addon_pvr_get_signal_status_v1 = kodi_addon_pvr_get_signal_status_v1; + ifcToAddon->kodi_addon_pvr_get_descramble_info_v1 = kodi_addon_pvr_get_descramble_info_v1; + ifcToAddon->kodi_addon_pvr_get_providers_amount_v1 = kodi_addon_pvr_get_providers_amount_v1; + ifcToAddon->kodi_addon_pvr_get_providers_v1 = kodi_addon_pvr_get_providers_v1; + ifcToAddon->kodi_addon_pvr_get_channel_groups_amount_v1 = + kodi_addon_pvr_get_channel_groups_amount_v1; + ifcToAddon->kodi_addon_pvr_get_channel_groups_v1 = kodi_addon_pvr_get_channel_groups_v1; + ifcToAddon->kodi_addon_pvr_get_channel_group_members_v1 = + kodi_addon_pvr_get_channel_group_members_v1; + ifcToAddon->kodi_addon_pvr_delete_channel_v1 = kodi_addon_pvr_delete_channel_v1; + ifcToAddon->kodi_addon_pvr_rename_channel_v1 = kodi_addon_pvr_rename_channel_v1; + ifcToAddon->kodi_addon_pvr_open_dialog_channel_settings_v1 = + kodi_addon_pvr_open_dialog_channel_settings_v1; + ifcToAddon->kodi_addon_pvr_open_dialog_channel_add_v1 = kodi_addon_pvr_open_dialog_channel_add_v1; + ifcToAddon->kodi_addon_pvr_open_dialog_channel_scan_v1 = + kodi_addon_pvr_open_dialog_channel_scan_v1; + ifcToAddon->kodi_addon_pvr_call_channel_menu_hook_v1 = kodi_addon_pvr_call_channel_menu_hook_v1; + ifcToAddon->kodi_addon_pvr_get_epg_for_channel_v1 = kodi_addon_pvr_get_epg_for_channel_v1; + ifcToAddon->kodi_addon_pvr_is_epg_tag_recordable_v1 = kodi_addon_pvr_is_epg_tag_recordable_v1; + ifcToAddon->kodi_addon_pvr_is_epg_tag_playable_v1 = kodi_addon_pvr_is_epg_tag_playable_v1; + ifcToAddon->kodi_addon_pvr_get_epg_tag_edl_v1 = kodi_addon_pvr_get_epg_tag_edl_v1; + ifcToAddon->kodi_addon_pvr_get_epg_tag_stream_properties_v1 = + kodi_addon_pvr_get_epg_tag_stream_properties_v1; + ifcToAddon->kodi_addon_pvr_set_epg_max_past_days_v1 = kodi_addon_pvr_set_epg_max_past_days_v1; + ifcToAddon->kodi_addon_pvr_set_epg_max_future_days_v1 = kodi_addon_pvr_set_epg_max_future_days_v1; + ifcToAddon->kodi_addon_pvr_call_epg_menu_hook_v1 = kodi_addon_pvr_call_epg_menu_hook_v1; + ifcToAddon->kodi_addon_pvr_get_recordings_amount_v1 = kodi_addon_pvr_get_recordings_amount_v1; + ifcToAddon->kodi_addon_pvr_get_recordings_v1 = kodi_addon_pvr_get_recordings_v1; + ifcToAddon->kodi_addon_pvr_delete_recording_v1 = kodi_addon_pvr_delete_recording_v1; + ifcToAddon->kodi_addon_pvr_undelete_recording_v1 = kodi_addon_pvr_undelete_recording_v1; + ifcToAddon->kodi_addon_pvr_delete_all_recordings_from_trash_v1 = + kodi_addon_pvr_delete_all_recordings_from_trash_v1; + ifcToAddon->kodi_addon_pvr_rename_recording_v1 = kodi_addon_pvr_rename_recording_v1; + ifcToAddon->kodi_addon_pvr_set_recording_lifetime_v1 = kodi_addon_pvr_set_recording_lifetime_v1; + ifcToAddon->kodi_addon_pvr_set_recording_play_count_v1 = + kodi_addon_pvr_set_recording_play_count_v1; + ifcToAddon->kodi_addon_pvr_set_recording_last_played_position_v1 = + kodi_addon_pvr_set_recording_last_played_position_v1; + ifcToAddon->kodi_addon_pvr_get_recording_last_played_position_v1 = + kodi_addon_pvr_get_recording_last_played_position_v1; + ifcToAddon->kodi_addon_pvr_get_recording_edl_v1 = kodi_addon_pvr_get_recording_edl_v1; + ifcToAddon->kodi_addon_pvr_get_recording_size_v1 = kodi_addon_pvr_get_recording_size_v1; + ifcToAddon->kodi_addon_pvr_get_recording_stream_properties_v1 = + kodi_addon_pvr_get_recording_stream_properties_v1; + ifcToAddon->kodi_addon_pvr_call_recording_menu_hook_v1 = + kodi_addon_pvr_call_recording_menu_hook_v1; + ifcToAddon->kodi_addon_pvr_get_timer_types_v1 = kodi_addon_pvr_get_timer_types_v1; + ifcToAddon->kodi_addon_pvr_get_timers_amount_v1 = kodi_addon_pvr_get_timers_amount_v1; + ifcToAddon->kodi_addon_pvr_get_timers_v1 = kodi_addon_pvr_get_timers_v1; + ifcToAddon->kodi_addon_pvr_add_timer_v1 = kodi_addon_pvr_add_timer_v1; + ifcToAddon->kodi_addon_pvr_delete_timer_v1 = kodi_addon_pvr_delete_timer_v1; + ifcToAddon->kodi_addon_pvr_update_timer_v1 = kodi_addon_pvr_update_timer_v1; + ifcToAddon->kodi_addon_pvr_call_timer_menu_hook_v1 = kodi_addon_pvr_call_timer_menu_hook_v1; + ifcToAddon->kodi_addon_pvr_on_system_sleep_v1 = kodi_addon_pvr_on_system_sleep_v1; + ifcToAddon->kodi_addon_pvr_on_system_wake_v1 = kodi_addon_pvr_on_system_wake_v1; + ifcToAddon->kodi_addon_pvr_on_power_saving_activated_v1 = + kodi_addon_pvr_on_power_saving_activated_v1; + ifcToAddon->kodi_addon_pvr_on_power_saving_deactivated_v1 = + kodi_addon_pvr_on_power_saving_deactivated_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_pvr_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_pvr_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_pvr_get_capabilities_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CAPABILITIES_V1)(KODI_ADDON_PVR_HDL hdl, struct PVR_ADDON_CAPABILITIES* capabilities); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_capabilities_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_capabilities_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_capabilities_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + struct PVR_ADDON_CAPABILITIES capabilities = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_capabilities_v1( + this, auto_gen_hdl, &capabilities /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_capabilities_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &capabilities /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_backend_name_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_NAME_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_name_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_name_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_backend_name_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + std::string str; /* CheckAPIUse_WAY_8 (0004) */ + size_t mem_size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + str.reserve(mem_size); /* CheckAPIUse_WAY_8 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_backend_name_v1( + this, auto_gen_hdl, &str[0], mem_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_backend_name_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, str /* CheckAPIUse_WAY_8 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_backend_version_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_VERSION_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_version_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_version_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_backend_version_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + std::string str; /* CheckAPIUse_WAY_8 (0004) */ + size_t mem_size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + str.reserve(mem_size); /* CheckAPIUse_WAY_8 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_backend_version_v1( + this, auto_gen_hdl, &str[0], mem_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_backend_version_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, str /* CheckAPIUse_WAY_8 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_backend_hostname_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_BACKEND_HOSTNAME_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_backend_hostname_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_backend_hostname_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_backend_hostname_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + std::string str; /* CheckAPIUse_WAY_8 (0004) */ + size_t mem_size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + str.reserve(mem_size); /* CheckAPIUse_WAY_8 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_backend_hostname_v1( + this, auto_gen_hdl, &str[0], mem_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_backend_hostname_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, str /* CheckAPIUse_WAY_8 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_connection_string_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CONNECTION_STRING_V1)(KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_connection_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_connection_string_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_connection_string_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + std::string str; /* CheckAPIUse_WAY_8 (0004) */ + size_t mem_size = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + str.reserve(mem_size); /* CheckAPIUse_WAY_8 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_connection_string_v1( + this, auto_gen_hdl, &str[0], mem_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_connection_string_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, str /* CheckAPIUse_WAY_8 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_drive_space_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DRIVE_SPACE_V1)(KODI_ADDON_PVR_HDL hdl, uint64_t* total, uint64_t* used); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_drive_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_drive_space_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_drive_space_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + uint64_t total = std::get<1>(t); /* CheckAPIUse_WAY_13 (0004) */ + uint64_t used = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_drive_space_v1( + this, auto_gen_hdl, &total /* CheckAPIUse_WAY_13 (0004) */, + &used /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_drive_space_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + total /* CheckAPIUse_WAY_13 (0004) */, + used /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_call_settings_menu_hook_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_SETTINGS_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_settings_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_settings_menu_hook_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_call_settings_menu_hook_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_MENUHOOK menuhook; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&menuhook); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_call_settings_menu_hook_v1( + this, auto_gen_hdl, &menuhook /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_call_settings_menu_hook_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channels_amount_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channels_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channels_amount_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channels_amount_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channels_amount_v1( + this, auto_gen_hdl, &amount /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_channels_amount_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, amount /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channels_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNELS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channels_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channels_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channels_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool radio = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channels_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */, + radio /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_channels_v1(auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channel_stream_properties_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_stream_properties_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channel_stream_properties_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + struct PVR_NAMED_VALUE properties = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + size_t properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channel_stream_properties_v1( + this, auto_gen_hdl, &channel /* CheckAPIUse_WAY_16 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-4) */, + &properties_count /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_channel_stream_properties_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-5) */, + properties_count /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_signal_status_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_SIGNAL_STATUS_V1)(KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_SIGNAL_STATUS* signal_status); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_signal_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_signal_status_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_signal_status_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int channel_uid = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + struct PVR_SIGNAL_STATUS signal_status = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_signal_status_v1( + this, auto_gen_hdl, channel_uid /* CheckAPIUse_WAY_9 (0004) */, + &signal_status /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_signal_status_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &signal_status /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_descramble_info_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_DESCRAMBLE_INFO_V1)(KODI_ADDON_PVR_HDL hdl, int channel_uid, struct PVR_DESCRAMBLE_INFO* descramble_info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_descramble_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_descramble_info_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_descramble_info_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int channel_uid = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + struct PVR_DESCRAMBLE_INFO descramble_info = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_descramble_info_v1( + this, auto_gen_hdl, channel_uid /* CheckAPIUse_WAY_9 (0004) */, + &descramble_info /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_descramble_info_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &descramble_info /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_providers_amount_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_providers_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_providers_amount_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_providers_amount_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_providers_amount_v1( + this, auto_gen_hdl, &amount /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_providers_amount_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, amount /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_providers_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_PROVIDERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_providers_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_providers_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_providers_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_providers_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_providers_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channel_groups_amount_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_groups_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_groups_amount_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channel_groups_amount_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channel_groups_amount_v1( + this, auto_gen_hdl, &amount /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_channel_groups_amount_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, amount /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channel_groups_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUPS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool radio); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_groups_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_groups_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channel_groups_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool radio = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channel_groups_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */, + radio /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_channel_groups_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_channel_group_members_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_CHANNEL_GROUP_MEMBERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP* group); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_channel_group_members_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_channel_group_members_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_channel_group_members_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL_GROUP group; /* CheckAPIUse_WAY_16 (0004) */ + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + std::get<2>(t).SetCStructure(&group); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_channel_group_members_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */, + &group /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_channel_group_members_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_delete_channel_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_channel_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_delete_channel_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_delete_channel_v1( + this, auto_gen_hdl, &channel /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_delete_channel_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_rename_channel_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_rename_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_rename_channel_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_rename_channel_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_rename_channel_v1( + this, auto_gen_hdl, &channel /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_rename_channel_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_open_dialog_channel_settings_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SETTINGS_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_settings_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_settings_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_open_dialog_channel_settings_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_open_dialog_channel_settings_v1( + this, auto_gen_hdl, &channel /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_open_dialog_channel_settings_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_open_dialog_channel_add_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_ADD_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_add_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_add_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_open_dialog_channel_add_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_open_dialog_channel_add_v1( + this, auto_gen_hdl, &channel /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_open_dialog_channel_add_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_open_dialog_channel_scan_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_OPEN_DIALOG_CHANNEL_SCAN_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_open_dialog_channel_scan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_open_dialog_channel_scan_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_open_dialog_channel_scan_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_open_dialog_channel_scan_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_open_dialog_channel_scan_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_call_channel_menu_hook_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_CHANNEL_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_CHANNEL* channel); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_channel_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_channel_menu_hook_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_call_channel_menu_hook_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_MENUHOOK menuhook; /* CheckAPIUse_WAY_16 (0004) */ + PVR_CHANNEL channel; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&menuhook); /* CheckAPIUse_WAY_16 (0004) */ + std::get<2>(t).SetCStructure(&channel); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_call_channel_menu_hook_v1( + this, auto_gen_hdl, &menuhook /* CheckAPIUse_WAY_16 (0004) */, + &channel /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_call_channel_menu_hook_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_epg_for_channel_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_FOR_CHANNEL_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, int channel_uid, time_t start, time_t end); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_epg_for_channel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_epg_for_channel_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_epg_for_channel_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int channel_uid = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + time_t start = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + time_t end = std::get<4>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_epg_for_channel_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */, + channel_uid /* CheckAPIUse_WAY_9 (0004) */, start /* CheckAPIUse_WAY_9 (0004) */, + end /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_epg_for_channel_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_is_epg_tag_recordable_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_RECORDABLE_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_recordable); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_is_epg_tag_recordable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_is_epg_tag_recordable_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_is_epg_tag_recordable_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + EPG_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + bool is_recordable = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_is_epg_tag_recordable_v1( + this, auto_gen_hdl, &tag /* CheckAPIUse_WAY_16 (0004) */, + &is_recordable /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_is_epg_tag_recordable_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + is_recordable /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_is_epg_tag_playable_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_IS_EPG_TAG_PLAYABLE_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, bool* is_playable); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_is_epg_tag_playable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_is_epg_tag_playable_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_is_epg_tag_playable_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + EPG_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + bool is_playable = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_is_epg_tag_playable_v1( + this, auto_gen_hdl, &tag /* CheckAPIUse_WAY_16 (0004) */, + &is_playable /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_is_epg_tag_playable_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + is_playable /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_epg_tag_edl_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_EDL_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_EDL_ENTRY edl[], size_t* size); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_epg_tag_edl_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_epg_tag_edl_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_epg_tag_edl_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + EPG_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + std::vector& ifc_edl = std::get<2>(t); /* CheckAPIUse_WAY_18 (0004) */ + size_t size = std::get<3>(t); /* CheckAPIUse_WAY_13 (0004) */ + std::vector edl(size); /* CheckAPIUse_WAY_18 (0004) */ + for (size_t i = 0; i < size; ++i) + { + ifc_edl[i].SetCStructure(&edl[i]); + } + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_epg_tag_edl_v1( + this, auto_gen_hdl, &tag /* CheckAPIUse_WAY_16 (0004) */, + edl.data() /* CheckAPIUse_WAY_18 (0004) */, &size /* CheckAPIUse_WAY_13 (0004) */); + + for (size_t i = 0; i < size; ++i) + { + ifc_edl[i] = IFC_PVR_EDL_ENTRY(&edl[i]); + } + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_epg_tag_edl_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + ifc_edl /* CheckAPIUse_WAY_18 (0004) */, + size /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_epg_tag_stream_properties_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_EPG_TAG_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct EPG_TAG* tag, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_epg_tag_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_epg_tag_stream_properties_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_epg_tag_stream_properties_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + EPG_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + struct PVR_NAMED_VALUE properties = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + size_t properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_epg_tag_stream_properties_v1( + this, auto_gen_hdl, &tag /* CheckAPIUse_WAY_16 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-4) */, + &properties_count /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_epg_tag_stream_properties_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-5) */, + properties_count /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_set_epg_max_past_days_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_PAST_DAYS_V1)(KODI_ADDON_PVR_HDL hdl, int past_days); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_epg_max_past_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_epg_max_past_days_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_set_epg_max_past_days_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int past_days = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_set_epg_max_past_days_v1( + this, auto_gen_hdl, past_days /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_set_epg_max_past_days_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_set_epg_max_future_days_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_EPG_MAX_FUTURE_DAYS_V1)(KODI_ADDON_PVR_HDL hdl, int future_days); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_epg_max_future_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_epg_max_future_days_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_set_epg_max_future_days_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int future_days = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_set_epg_max_future_days_v1( + this, auto_gen_hdl, future_days /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_set_epg_max_future_days_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_call_epg_menu_hook_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_EPG_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct EPG_TAG* tag); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_epg_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_epg_menu_hook_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_call_epg_menu_hook_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_MENUHOOK menuhook; /* CheckAPIUse_WAY_16 (0004) */ + EPG_TAG tag; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&menuhook); /* CheckAPIUse_WAY_16 (0004) */ + std::get<2>(t).SetCStructure(&tag); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_call_epg_menu_hook_v1( + this, auto_gen_hdl, &menuhook /* CheckAPIUse_WAY_16 (0004) */, + &tag /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_call_epg_menu_hook_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recordings_amount_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, bool deleted, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recordings_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recordings_amount_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recordings_amount_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool deleted = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + int amount = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recordings_amount_v1( + this, auto_gen_hdl, deleted /* CheckAPIUse_WAY_9 (0004) */, + &amount /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_recordings_amount_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, amount /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recordings_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDINGS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle, bool deleted); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recordings_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recordings_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recordings_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool deleted = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recordings_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */, + deleted /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_recordings_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_delete_recording_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_recording_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_delete_recording_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_delete_recording_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_delete_recording_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_undelete_recording_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UNDELETE_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_undelete_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_undelete_recording_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_undelete_recording_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_undelete_recording_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_undelete_recording_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_delete_all_recordings_from_trash_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_ALL_RECORDINGS_FROM_TRASH_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_all_recordings_from_trash_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_all_recordings_from_trash_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_delete_all_recordings_from_trash_v1 t = + in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = + kodi_addon_pvr_delete_all_recordings_from_trash_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_delete_all_recordings_from_trash_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_rename_recording_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_RENAME_RECORDING_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_rename_recording_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_rename_recording_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_rename_recording_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_rename_recording_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_rename_recording_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_set_recording_lifetime_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LIFETIME_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_lifetime_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_lifetime_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_set_recording_lifetime_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_set_recording_lifetime_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_set_recording_lifetime_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_set_recording_play_count_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_PLAY_COUNT_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_play_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_play_count_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_set_recording_play_count_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + int count = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_set_recording_play_count_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + count /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_set_recording_play_count_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_set_recording_last_played_position_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_SET_RECORDING_LAST_PLAYED_POSITION_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int last_played_position); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_set_recording_last_played_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_set_recording_last_played_position_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_set_recording_last_played_position_v1 t = + in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + int last_played_position = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_set_recording_last_played_position_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + last_played_position /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_set_recording_last_played_position_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recording_last_played_position_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_LAST_PLAYED_POSITION_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int* last_played_position); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_last_played_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_last_played_position_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recording_last_played_position_v1 t = + in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + int last_played_position = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recording_last_played_position_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + &last_played_position /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_recording_last_played_position_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + last_played_position /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recording_edl_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_EDL_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, struct PVR_EDL_ENTRY edl[], size_t* size); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_recording_edl_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_recording_edl_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recording_edl_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + std::vector& ifc_edl = std::get<2>(t); /* CheckAPIUse_WAY_18 (0004) */ + size_t size = std::get<3>(t); /* CheckAPIUse_WAY_13 (0004) */ + std::vector edl(size); /* CheckAPIUse_WAY_18 (0004) */ + for (size_t i = 0; i < size; ++i) + { + ifc_edl[i].SetCStructure(&edl[i]); + } + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recording_edl_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + edl.data() /* CheckAPIUse_WAY_18 (0004) */, &size /* CheckAPIUse_WAY_13 (0004) */); + + for (size_t i = 0; i < size; ++i) + { + ifc_edl[i] = IFC_PVR_EDL_ENTRY(&edl[i]); + } + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_recording_edl_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + ifc_edl /* CheckAPIUse_WAY_18 (0004) */, + size /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recording_size_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_SIZE_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, int64_t* size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_size_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recording_size_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + int64_t size = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recording_size_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + &size /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_recording_size_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, size /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_recording_stream_properties_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_RECORDING_STREAM_PROPERTIES_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_RECORDING* recording, struct PVR_NAMED_VALUE* properties, size_t* properties_count); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_recording_stream_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_recording_stream_properties_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_recording_stream_properties_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + struct PVR_NAMED_VALUE properties = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + size_t properties_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_recording_stream_properties_v1( + this, auto_gen_hdl, &recording /* CheckAPIUse_WAY_16 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-4) */, + &properties_count /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_recording_stream_properties_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + &properties /* CheckAPIUse_WAY_15 (0002-5) */, + properties_count /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_call_recording_menu_hook_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_RECORDING_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_RECORDING* recording); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_recording_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_recording_menu_hook_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_call_recording_menu_hook_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_MENUHOOK menuhook; /* CheckAPIUse_WAY_16 (0004) */ + PVR_RECORDING recording; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&menuhook); /* CheckAPIUse_WAY_16 (0004) */ + std::get<2>(t).SetCStructure(&recording); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_call_recording_menu_hook_v1( + this, auto_gen_hdl, &menuhook /* CheckAPIUse_WAY_16 (0004) */, + &recording /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_call_recording_menu_hook_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_timer_types_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMER_TYPES_V1)(KODI_ADDON_PVR_HDL hdl, struct PVR_TIMER_TYPE types[], size_t* types_count); + // Tuple in: typedef std::tuple, size_t> msgChild__IN_kodi_addon_pvr_get_timer_types_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_pvr_get_timer_types_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_timer_types_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + std::vector& ifc_types = std::get<1>(t); /* CheckAPIUse_WAY_18 (0004) */ + size_t types_count = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + std::vector types(types_count); /* CheckAPIUse_WAY_18 (0004) */ + for (size_t i = 0; i < types_count; ++i) + { + ifc_types[i].SetCStructure(&types[i]); + } + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_timer_types_v1( + this, auto_gen_hdl, types.data() /* CheckAPIUse_WAY_18 (0004) */, + &types_count /* CheckAPIUse_WAY_13 (0004) */); + + for (size_t i = 0; i < types_count; ++i) + { + ifc_types[i] = IFC_PVR_TIMER_TYPE(&types[i]); + } + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_get_timer_types_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, + ifc_types /* CheckAPIUse_WAY_18 (0004) */, + types_count /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_timers_amount_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_AMOUNT_V1)(KODI_ADDON_PVR_HDL hdl, int* amount); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_timers_amount_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_timers_amount_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_timers_amount_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int amount = std::get<1>(t); /* CheckAPIUse_WAY_13 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_timers_amount_v1( + this, auto_gen_hdl, &amount /* CheckAPIUse_WAY_13 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_timers_amount_v1( + auto_gen_ret /* Return_WAY_3 (0004) */, amount /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_get_timers_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_GET_TIMERS_V1)(KODI_ADDON_PVR_HDL hdl, KODI_ADDON_PVR_TRANSFER_HDL handle); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_get_timers_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_get_timers_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_get_timers_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_PVR_TRANSFER_HDL handle = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_get_timers_v1( + this, auto_gen_hdl, handle /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_get_timers_v1(auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_add_timer_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ADD_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_add_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_add_timer_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_add_timer_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_TIMER timer; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&timer); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = + kodi_addon_pvr_add_timer_v1(this, auto_gen_hdl, &timer /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_add_timer_v1(auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_delete_timer_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_DELETE_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer, bool force_delete); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_delete_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_delete_timer_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_delete_timer_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_TIMER timer; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&timer); /* CheckAPIUse_WAY_16 (0004) */ + bool force_delete = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum PVR_ERROR auto_gen_ret = + kodi_addon_pvr_delete_timer_v1(this, auto_gen_hdl, &timer /* CheckAPIUse_WAY_16 (0004) */, + force_delete /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_delete_timer_v1(auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_update_timer_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_UPDATE_TIMER_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_update_timer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_update_timer_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_update_timer_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_TIMER timer; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&timer); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_update_timer_v1( + this, auto_gen_hdl, &timer /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_pvr_update_timer_v1(auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_call_timer_menu_hook_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_CALL_TIMER_MENU_HOOK_V1)(KODI_ADDON_PVR_HDL hdl, const struct PVR_MENUHOOK* menuhook, const struct PVR_TIMER* timer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_call_timer_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_call_timer_menu_hook_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_call_timer_menu_hook_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + PVR_MENUHOOK menuhook; /* CheckAPIUse_WAY_16 (0004) */ + PVR_TIMER timer; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&menuhook); /* CheckAPIUse_WAY_16 (0004) */ + std::get<2>(t).SetCStructure(&timer); /* CheckAPIUse_WAY_16 (0004) */ + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_call_timer_menu_hook_v1( + this, auto_gen_hdl, &menuhook /* CheckAPIUse_WAY_16 (0004) */, + &timer /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_call_timer_menu_hook_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_on_system_sleep_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_SLEEP_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_system_sleep_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_system_sleep_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_on_system_sleep_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_on_system_sleep_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_on_system_sleep_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_on_system_wake_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_SYSTEM_WAKE_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_system_wake_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_system_wake_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_on_system_wake_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_on_system_wake_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_on_system_wake_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_on_power_saving_activated_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_ACTIVATED_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_power_saving_activated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_power_saving_activated_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_on_power_saving_activated_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = kodi_addon_pvr_on_power_saving_activated_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_on_power_saving_activated_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_pvr_on_power_saving_deactivated_v1: + { + // Original API call: typedef enum PVR_ERROR(ATTR_APIENTRYP PFN_KODI_ADDON_PVR_ON_POWER_SAVING_DEACTIVATED_V1)(KODI_ADDON_PVR_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_pvr_on_power_saving_deactivated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_pvr_on_power_saving_deactivated_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_pvr_on_power_saving_deactivated_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + enum PVR_ERROR auto_gen_ret = + kodi_addon_pvr_on_power_saving_deactivated_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_pvr_on_power_saving_deactivated_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_capabilities_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + struct PVR_ADDON_CAPABILITIES* capabilities) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_capabilities) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_capabilities(union_data->hdl, capabilities); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_name_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_backend_name) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_backend_name(union_data->hdl, str, mem_size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_version_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_backend_version) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_backend_version(union_data->hdl, str, mem_size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_backend_hostname_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_backend_hostname) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_backend_hostname(union_data->hdl, str, mem_size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_connection_string_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_connection_string) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_connection_string(union_data->hdl, str, mem_size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_drive_space_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, uint64_t* total, uint64_t* used) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_drive_space) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_drive_space(union_data->hdl, total, used); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_settings_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.call_settings_menu_hook) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.call_settings_menu_hook(union_data->hdl, menuhook); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channels_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int* amount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channels_amount) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_channels_amount(union_data->hdl, amount); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channels_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channels) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_channels(union_data->hdl, handle, radio); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channel_stream_properties) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_channel_stream_properties( + union_data->hdl, channel, properties, properties_count); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_signal_status_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_SIGNAL_STATUS* signal_status) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_signal_status) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_signal_status( + union_data->hdl, channel_uid, signal_status); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_descramble_info_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_DESCRAMBLE_INFO* descramble_info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_descramble_info) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_descramble_info( + union_data->hdl, channel_uid, descramble_info); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_providers_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int* amount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_providers_amount) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_providers_amount(union_data->hdl, amount); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_providers_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_providers) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_providers(union_data->hdl, handle); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_groups_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int* amount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channel_groups_amount) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_channel_groups_amount(union_data->hdl, amount); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_groups_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channel_groups) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_channel_groups(union_data->hdl, handle, radio); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_channel_group_members_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_channel_group_members) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_channel_group_members(union_data->hdl, + handle, group); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_channel_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.delete_channel) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.delete_channel(union_data->hdl, channel); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_rename_channel_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.rename_channel) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.rename_channel(union_data->hdl, channel); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_settings_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.open_dialog_channel_settings) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.open_dialog_channel_settings(union_data->hdl, channel); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_add_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.open_dialog_channel_add) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.open_dialog_channel_add(union_data->hdl, channel); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_open_dialog_channel_scan_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.open_dialog_channel_scan) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.open_dialog_channel_scan(union_data->hdl); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_channel_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_CHANNEL* channel) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.call_channel_menu_hook) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.call_channel_menu_hook(union_data->hdl, + menuhook, channel); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_for_channel_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + int channel_uid, + time_t start, + time_t end) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_epg_for_channel) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_epg_for_channel(union_data->hdl, handle, + channel_uid, start, end); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_is_epg_tag_recordable_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_recordable) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.is_epg_tag_recordable) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.is_epg_tag_recordable(union_data->hdl, tag, + is_recordable); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_is_epg_tag_playable_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_playable) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.is_epg_tag_playable) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.is_epg_tag_playable(union_data->hdl, tag, is_playable); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_tag_edl_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_EDL_ENTRY edl[], + size_t* size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_epg_tag_edl) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_epg_tag_edl(union_data->hdl, tag, edl, size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_epg_tag_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_epg_tag_stream_properties) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_epg_tag_stream_properties( + union_data->hdl, tag, properties, properties_count); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_epg_max_past_days_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int past_days) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.set_epg_max_past_days) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.set_epg_max_past_days(union_data->hdl, past_days); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_epg_max_future_days_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int future_days) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.set_epg_max_future_days) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.set_epg_max_future_days(union_data->hdl, future_days); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_epg_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct EPG_TAG* tag) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.call_epg_menu_hook) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.call_epg_menu_hook(union_data->hdl, menuhook, tag); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recordings_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, bool deleted, int* amount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recordings_amount) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_recordings_amount(union_data->hdl, deleted, amount); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recordings_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool deleted) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recordings) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_recordings(union_data->hdl, handle, deleted); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.delete_recording) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.delete_recording(union_data->hdl, recording); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_undelete_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.undelete_recording) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.undelete_recording(union_data->hdl, recording); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_all_recordings_from_trash_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.delete_all_recordings_from_trash) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.delete_all_recordings_from_trash(union_data->hdl); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_rename_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.rename_recording) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.rename_recording(union_data->hdl, recording); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_lifetime_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.set_recording_lifetime) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.set_recording_lifetime(union_data->hdl, recording); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_play_count_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.set_recording_play_count) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.set_recording_play_count(union_data->hdl, + recording, count); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_set_recording_last_played_position_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int last_played_position) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.set_recording_last_played_position) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.set_recording_last_played_position( + union_data->hdl, recording, last_played_position); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_last_played_position_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int* last_played_position) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recording_last_played_position) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_recording_last_played_position( + union_data->hdl, recording, last_played_position); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_edl_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_EDL_ENTRY edl[], + size_t* size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recording_edl) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_recording_edl(union_data->hdl, recording, + edl, size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_size_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int64_t* size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recording_size) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_recording_size(union_data->hdl, recording, size); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_recording_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_recording_stream_properties) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_recording_stream_properties( + union_data->hdl, recording, properties, properties_count); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_recording_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_RECORDING* recording) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.call_recording_menu_hook) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.call_recording_menu_hook( + union_data->hdl, menuhook, recording); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timer_types_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + struct PVR_TIMER_TYPE types[], + size_t* types_count) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_timer_types) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.get_timer_types(union_data->hdl, types, types_count); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timers_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int* amount) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_timers_amount) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_timers_amount(union_data->hdl, amount); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_get_timers_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.get_timers) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.get_timers(union_data->hdl, handle); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_add_timer_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.add_timer) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.add_timer(union_data->hdl, timer); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_delete_timer_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer, + bool force_delete) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.delete_timer) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.delete_timer(union_data->hdl, timer, force_delete); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_update_timer_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, const struct PVR_TIMER* timer) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.update_timer) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.update_timer(union_data->hdl, timer); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_call_timer_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_TIMER* timer) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.call_timer_menu_hook) + { + auto_gen_ret = + union_data->types.kodi_addon_pvr.v1.call_timer_menu_hook(union_data->hdl, menuhook, timer); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_system_sleep_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.on_system_sleep) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.on_system_sleep(union_data->hdl); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_system_wake_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.on_system_wake) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.on_system_wake(union_data->hdl); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_power_saving_activated_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.on_power_saving_activated) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.on_power_saving_activated(union_data->hdl); + } + return auto_gen_ret; +} + +enum PVR_ERROR CHdl_kodi_addoninstance_pvr_h::kodi_addon_pvr_on_power_saving_deactivated_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return PVR_ERROR_NO_ERROR; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum PVR_ERROR auto_gen_ret = PVR_ERROR_NO_ERROR; + if (union_data->types.kodi_addon_pvr.v1.on_power_saving_deactivated) + { + auto_gen_ret = union_data->types.kodi_addon_pvr.v1.on_power_saving_deactivated(union_data->hdl); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_future_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_future_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_get_epg_max_future_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_get_epg_max_future_days_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_get_epg_max_future_days_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_get_epg_max_future_days_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_pvr_get_epg_max_future_days_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + return auto_gen_group.kodi_addon_pvr_get_epg_max_future_days_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_past_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_addon_pvr_get_epg_max_past_days(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_get_epg_max_past_days_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_get_epg_max_past_days_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_get_epg_max_past_days_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_get_epg_max_past_days_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_pvr_get_epg_max_past_days_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + return auto_gen_group.kodi_addon_pvr_get_epg_max_past_days_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_add_menu_hook(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const struct PVR_MENUHOOK* hook) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_add_menu_hook(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const struct PVR_MENUHOOK* hook) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_add_menu_hook_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_add_menu_hook_v1; /* Autogenerated */ + + if (hdl == nullptr || hook == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_add_menu_hook_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + hook /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_add_menu_hook_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_add_menu_hook_v1(auto_gen_group.thisClassHdl, hdl, hook); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_recording_notification(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* name, + const char* fileName, + bool on) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_recording_notification(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* name, const char* fileName, bool on) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_recording_notification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_recording_notification_v1; /* Autogenerated */ + + if (hdl == nullptr || name == nullptr || fileName == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_addon_pvr_recording_notification_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, name /* CheckAPIUse_WAY_6b (0003) */, + fileName /* CheckAPIUse_WAY_6b (0003) */, on /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_recording_notification_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_recording_notification_v1(auto_gen_group.thisClassHdl, hdl, name, + fileName, on); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_connection_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* strConnectionString, + enum PVR_CONNECTION_STATE newState, + const char* strMessage) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_connection_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* strConnectionString, enum PVR_CONNECTION_STATE newState, const char* strMessage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_connection_state_change_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_connection_state_change_v1; /* Autogenerated */ + + if (hdl == nullptr || strConnectionString == nullptr || strMessage == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_connection_state_change_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + strConnectionString /* CheckAPIUse_WAY_6b (0003) */, + newState /* CheckAPIUse_WAY_14a (0003) */, + strMessage /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_connection_state_change_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_connection_state_change_v1( + auto_gen_group.thisClassHdl, hdl, strConnectionString, newState, strMessage); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_epg_event_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct EPG_TAG* tag, + enum EPG_EVENT_STATE newState) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_epg_event_state_change(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct EPG_TAG* tag, enum EPG_EVENT_STATE newState) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_epg_event_state_change_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_epg_event_state_change_v1; /* Autogenerated */ + + if (hdl == nullptr || tag == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_epg_event_state_change_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + newState /* CheckAPIUse_WAY_14a (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_epg_event_state_change_v1, in, + out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_pvr_epg_event_state_change_v1 t = ident.get().as(); + + std::get<0>(t).SetCStructure(tag); /* CheckAPIUse_WAY_15 (0003-2) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_epg_event_state_change_v1(auto_gen_group.thisClassHdl, hdl, tag, + newState); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL* chan) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL* chan) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_entry_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || chan == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_channel_entry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + chan /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_channel_entry_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_channel_entry_v1(auto_gen_group.thisClassHdl, hdl, handle, + chan); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_provider_entry( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_PROVIDER* chanProvider) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_provider_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_PROVIDER* chanProvider) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_provider_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_provider_entry_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || chanProvider == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_provider_entry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + chanProvider /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_provider_entry_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_provider_entry_v1(auto_gen_group.thisClassHdl, hdl, handle, + chanProvider); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP* group) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_group_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_group_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || group == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_channel_group_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + group /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_channel_group_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_channel_group_v1(auto_gen_group.thisClassHdl, hdl, handle, + group); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group_member( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP_MEMBER* member) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_channel_group_member( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_CHANNEL_GROUP_MEMBER* member) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_channel_group_member_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_channel_group_member_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || member == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_channel_group_member_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + member /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_channel_group_member_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_channel_group_member_v1(auto_gen_group.thisClassHdl, hdl, + handle, member); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_epg_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct EPG_TAG* epgentry) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_epg_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct EPG_TAG* epgentry) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_epg_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_epg_entry_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || epgentry == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_epg_entry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + epgentry /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_epg_entry_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_epg_entry_v1(auto_gen_group.thisClassHdl, hdl, handle, + epgentry); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_recording_entry( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_RECORDING* recording) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_recording_entry( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_RECORDING* recording) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_recording_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_recording_entry_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || recording == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_recording_entry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + recording /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_recording_entry_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_recording_entry_v1(auto_gen_group.thisClassHdl, hdl, + handle, recording); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_timer_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_TIMER* timer) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_transfer_timer_entry(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const KODI_ADDON_PVR_TRANSFER_HDL handle, const struct PVR_TIMER* timer) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_transfer_timer_entry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_transfer_timer_entry_v1; /* Autogenerated */ + + if (hdl == nullptr || handle == nullptr || timer == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_transfer_timer_entry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + timer /* CheckAPIUse_WAY_16 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_transfer_timer_entry_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_transfer_timer_entry_v1(auto_gen_group.thisClassHdl, hdl, handle, + timer); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_channel_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_channel_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_channel_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_channel_update_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_channel_update_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_providers_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_providers_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_providers_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_providers_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_providers_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_providers_update_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_providers_update_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_groups_update( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_channel_groups_update( KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_channel_groups_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_channel_groups_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_channel_groups_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_channel_groups_update_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_channel_groups_update_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_epg_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + unsigned int iChannelUid) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_epg_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, unsigned int iChannelUid) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_epg_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_epg_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_epg_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + iChannelUid /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_epg_update_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_epg_update_v1(auto_gen_group.thisClassHdl, hdl, + iChannelUid); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_recording_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_recording_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_recording_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_recording_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_recording_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_recording_update_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_recording_update_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_timer_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_pvr_trigger_timer_update(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_pvr_trigger_timer_update_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_pvr_trigger_timer_update_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_pvr_trigger_timer_update_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_pvr_h, funcParent_kodi_addon_pvr_trigger_timer_update_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_pvr_h; + auto_gen_group.kodi_addon_pvr_trigger_timer_update_v1(auto_gen_group.thisClassHdl, hdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.h new file mode 100644 index 0000000000000..b3f7ede654267 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/pvr.h @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/pvr.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_pvr_h; +struct directFuncToKodi_addoninstance_pvr_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_pvr_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_pvr_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_pvr_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static enum PVR_ERROR kodi_addon_pvr_get_capabilities_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + struct PVR_ADDON_CAPABILITIES* capabilities); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_backend_name_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_backend_version_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_backend_hostname_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + char* str, + size_t mem_size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_connection_string_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, char* str, size_t mem_size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_drive_space_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + uint64_t* total, + uint64_t* used); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_call_settings_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channels_amount_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channels_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channel_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_signal_status_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_SIGNAL_STATUS* signal_status); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_descramble_info_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int channel_uid, + struct PVR_DESCRAMBLE_INFO* descramble_info); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_providers_amount_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_providers_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channel_groups_amount_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int* amount); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channel_groups_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool radio); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_channel_group_members_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + const struct PVR_CHANNEL_GROUP* group); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_delete_channel_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_rename_channel_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_settings_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_add_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_CHANNEL* channel); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_open_dialog_channel_scan_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_call_channel_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_CHANNEL* channel); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_epg_for_channel_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + int channel_uid, + time_t start, + time_t end); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_is_epg_tag_recordable_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_recordable); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_is_epg_tag_playable_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + bool* is_playable); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_epg_tag_edl_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_EDL_ENTRY edl[], + size_t* size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_epg_tag_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct EPG_TAG* tag, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_set_epg_max_past_days_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int past_days); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_set_epg_max_future_days_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl, int future_days); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_call_epg_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct EPG_TAG* tag); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recordings_amount_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + bool deleted, + int* amount); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recordings_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle, + bool deleted); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_delete_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_undelete_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_delete_all_recordings_from_trash_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_rename_recording_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_set_recording_lifetime_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_set_recording_play_count_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int count); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_set_recording_last_played_position_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int last_played_position); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recording_last_played_position_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int* last_played_position); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recording_edl_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_EDL_ENTRY edl[], + size_t* size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recording_size_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + int64_t* size); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_recording_stream_properties_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_RECORDING* recording, + struct PVR_NAMED_VALUE* properties, + size_t* properties_count); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_call_recording_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_RECORDING* recording); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_timer_types_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + struct PVR_TIMER_TYPE types[], + size_t* types_count); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_timers_amount_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + int* amount); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_get_timers_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + KODI_ADDON_PVR_TRANSFER_HDL handle); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_add_timer_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_delete_timer_v1(void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer, + bool force_delete); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_update_timer_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_TIMER* timer); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_call_timer_menu_hook_v1( + void* thisClassHdl, + KODI_ADDON_PVR_HDL hdl, + const struct PVR_MENUHOOK* menuhook, + const struct PVR_TIMER* timer); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_on_system_sleep_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_on_system_wake_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_on_power_saving_activated_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 + + static enum PVR_ERROR kodi_addon_pvr_on_power_saving_deactivated_v1( + void* thisClassHdl, KODI_ADDON_PVR_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.cpp new file mode 100644 index 0000000000000..f15960e0fc0d9 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.cpp @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "screensaver.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_screensaver_h::InitDirect( + directFuncToAddon_addoninstance_screensaver_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_screensaver_start_v1 = kodi_addon_screensaver_start_v1; + ifcToAddon->kodi_addon_screensaver_stop_v1 = kodi_addon_screensaver_stop_v1; + ifcToAddon->kodi_addon_screensaver_render_v1 = kodi_addon_screensaver_render_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_screensaver_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_screensaver_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_screensaver_start_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_START_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_start_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_screensaver_start_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_screensaver_start_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_screensaver_start_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_screensaver_stop_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_STOP_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_stop_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_stop_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_screensaver_stop_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_screensaver_stop_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_screensaver_render_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_SCREENSAVER_RENDER_V1)(KODI_ADDON_SCREENSAVER_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_screensaver_render_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_screensaver_render_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_screensaver_render_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_screensaver_render_v1(this, auto_gen_hdl); + + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +bool CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_start_v1( + void* thisClassHdl, KODI_ADDON_SCREENSAVER_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_screensaver.v1.start) + { + auto_gen_ret = union_data->types.kodi_addon_screensaver.v1.start(union_data->hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_stop_v1( + void* thisClassHdl, KODI_ADDON_SCREENSAVER_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_screensaver.v1.stop) + { + union_data->types.kodi_addon_screensaver.v1.stop(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_screensaver_h::kodi_addon_screensaver_render_v1( + void* thisClassHdl, KODI_ADDON_SCREENSAVER_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_screensaver.v1.render) + { + union_data->types.kodi_addon_screensaver.v1.render(union_data->hdl); + } +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_addon_screensaver_get_properties( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_screensaver_get_properties( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct KODI_ADDON_SCREENSAVER_PROPS* props) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_screensaver_get_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_screensaver_get_properties_v1; /* Autogenerated */ + + if (hdl == nullptr || props == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_screensaver_get_properties_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_screensaver_h, + funcParent_kodi_addon_screensaver_get_properties_v1, in, out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_screensaver_get_properties_v1 t = ident.get().as(); + + std::get<0>(t).SetCStructure(props); /* CheckAPIUse_WAY_15 (0003-2) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_screensaver_h; + auto_gen_group.kodi_addon_screensaver_get_properties_v1(auto_gen_group.thisClassHdl, hdl, props); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.h new file mode 100644 index 0000000000000..956e67ce54c73 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/screensaver.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/screensaver.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_screensaver_h; +struct directFuncToKodi_addoninstance_screensaver_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_screensaver_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_screensaver_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_screensaver_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static bool kodi_addon_screensaver_start_v1(void* thisClassHdl, + KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 + + static void kodi_addon_screensaver_stop_v1(void* thisClassHdl, + KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 + + static void kodi_addon_screensaver_render_v1(void* thisClassHdl, + KODI_ADDON_SCREENSAVER_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.cpp new file mode 100644 index 0000000000000..575ecac5ac254 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.cpp @@ -0,0 +1,1215 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "vfs.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_vfs_h::InitDirect(directFuncToAddon_addoninstance_vfs_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_vfs_create_v1 = kodi_addon_vfs_create_v1; + ifcToAddon->kodi_addon_vfs_destroy_v1 = kodi_addon_vfs_destroy_v1; + ifcToAddon->kodi_addon_vfs_file_open_v1 = kodi_addon_vfs_file_open_v1; + ifcToAddon->kodi_addon_vfs_file_open_for_write_v1 = kodi_addon_vfs_file_open_for_write_v1; + ifcToAddon->kodi_addon_vfs_file_close_v1 = kodi_addon_vfs_file_close_v1; + ifcToAddon->kodi_addon_vfs_file_read_v1 = kodi_addon_vfs_file_read_v1; + ifcToAddon->kodi_addon_vfs_file_write_v1 = kodi_addon_vfs_file_write_v1; + ifcToAddon->kodi_addon_vfs_file_seek_v1 = kodi_addon_vfs_file_seek_v1; + ifcToAddon->kodi_addon_vfs_file_truncate_v1 = kodi_addon_vfs_file_truncate_v1; + ifcToAddon->kodi_addon_vfs_file_get_length_v1 = kodi_addon_vfs_file_get_length_v1; + ifcToAddon->kodi_addon_vfs_file_get_position_v1 = kodi_addon_vfs_file_get_position_v1; + ifcToAddon->kodi_addon_vfs_file_get_chunk_size_v1 = kodi_addon_vfs_file_get_chunk_size_v1; + ifcToAddon->kodi_addon_vfs_file_io_control_get_seek_possible_v1 = + kodi_addon_vfs_file_io_control_get_seek_possible_v1; + ifcToAddon->kodi_addon_vfs_file_io_control_get_cache_status_v1 = + kodi_addon_vfs_file_io_control_get_cache_status_v1; + ifcToAddon->kodi_addon_vfs_file_io_control_set_cache_rate_v1 = + kodi_addon_vfs_file_io_control_set_cache_rate_v1; + ifcToAddon->kodi_addon_vfs_file_io_control_set_retry_v1 = + kodi_addon_vfs_file_io_control_set_retry_v1; + ifcToAddon->kodi_addon_vfs_stat_v1 = kodi_addon_vfs_stat_v1; + ifcToAddon->kodi_addon_vfs_exists_v1 = kodi_addon_vfs_exists_v1; + ifcToAddon->kodi_addon_vfs_clear_out_idle_v1 = kodi_addon_vfs_clear_out_idle_v1; + ifcToAddon->kodi_addon_vfs_disconnect_all_v1 = kodi_addon_vfs_disconnect_all_v1; + ifcToAddon->kodi_addon_vfs_delete_it_v1 = kodi_addon_vfs_delete_it_v1; + ifcToAddon->kodi_addon_vfs_rename_v1 = kodi_addon_vfs_rename_v1; + ifcToAddon->kodi_addon_vfs_directory_exists_v1 = kodi_addon_vfs_directory_exists_v1; + ifcToAddon->kodi_addon_vfs_directory_remove_v1 = kodi_addon_vfs_directory_remove_v1; + ifcToAddon->kodi_addon_vfs_directory_create_v1 = kodi_addon_vfs_directory_create_v1; + ifcToAddon->kodi_addon_vfs_directory_get_v1 = kodi_addon_vfs_directory_get_v1; + ifcToAddon->kodi_addon_vfs_directory_contains_files_v1 = + kodi_addon_vfs_directory_contains_files_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_vfs_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_vfs_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_vfs_create_v1: + { + // Original API call: typedef KODI_ADDON_VFS_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_create_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_create_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + KODI_ADDON_VFS_HDL auto_gen_ret = + kodi_addon_vfs_create_v1(this, kodi_hdl /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_vfs_destroy_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DESTROY_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_destroy_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_destroy_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_vfs_destroy_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_vfs_file_open_v1: + { + // Original API call: typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_open_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_open_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + KODI_VFS_FILE_HDL auto_gen_ret = + kodi_addon_vfs_file_open_v1(this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_open_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_vfs_file_open_for_write_v1: + { + // Original API call: typedef KODI_VFS_FILE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_OPEN_FOR_WRITE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, bool overwrite); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_open_for_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_open_for_write_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_open_for_write_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool overwrite = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + KODI_VFS_FILE_HDL auto_gen_ret = kodi_addon_vfs_file_open_for_write_v1( + this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */, + overwrite /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_open_for_write_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_vfs_file_close_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_CLOSE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_close_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_close_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool auto_gen_ret = kodi_addon_vfs_file_close_v1(this, auto_gen_hdl, + context /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_vfs_file_close_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_read_v1: + { + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_READ_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint8_t* buffer, size_t buf_size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_read_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgChild_OUT_kodi_addon_vfs_file_read_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_read_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + size_t buf_size = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + std::vector buffer(buf_size); /* CheckAPIUse_WAY_10 (0004) */ + ssize_t auto_gen_ret = kodi_addon_vfs_file_read_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + buffer.data() /* CheckAPIUse_WAY_10 (0004) */, buf_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_vfs_file_read_v1(auto_gen_ret /* Return_WAY_2 (0004) */, + buffer /* CheckAPIUse_WAY_10 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_write_v1: + { + // Original API call: typedef ssize_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_WRITE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, const uint8_t* buffer, size_t buf_size); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_vfs_file_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_write_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_write_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + const std::vector& buffer = std::get<2>(t); /* CheckAPIUse_WAY_11 (0004) */ + size_t buf_size = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + ssize_t auto_gen_ret = kodi_addon_vfs_file_write_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + buffer.data() /* CheckAPIUse_WAY_11 (0004) */, buf_size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_vfs_file_write_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_seek_v1: + { + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_SEEK_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, int64_t position, int whence); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_seek_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_seek_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int64_t position = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + int whence = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + int64_t auto_gen_ret = kodi_addon_vfs_file_seek_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + position /* CheckAPIUse_WAY_9 (0004) */, whence /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_vfs_file_seek_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_truncate_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_TRUNCATE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, int64_t size); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_truncate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_truncate_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_truncate_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int64_t size = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + int auto_gen_ret = kodi_addon_vfs_file_truncate_v1(this, auto_gen_hdl, + context /* CheckAPIUse_WAY_12-C (0004) */, + size /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_truncate_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_get_length_v1: + { + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_LENGTH_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_length_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_length_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_get_length_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int64_t auto_gen_ret = kodi_addon_vfs_file_get_length_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_get_length_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_get_position_v1: + { + // Original API call: typedef int64_t(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_POSITION_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_position_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_get_position_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int64_t auto_gen_ret = kodi_addon_vfs_file_get_position_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_get_position_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_get_chunk_size_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_GET_CHUNK_SIZE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_get_chunk_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_get_chunk_size_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_get_chunk_size_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + int auto_gen_ret = kodi_addon_vfs_file_get_chunk_size_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_get_chunk_size_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_io_control_get_seek_possible_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_SEEK_POSSIBLE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_get_seek_possible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_get_seek_possible_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_io_control_get_seek_possible_v1 t = + in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool auto_gen_ret = kodi_addon_vfs_file_io_control_get_seek_possible_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_io_control_get_seek_possible_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_io_control_get_cache_status_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_GET_CACHE_STATUS_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, struct VFS_CACHE_STATUS* status); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_get_cache_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_get_cache_status_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_io_control_get_cache_status_v1 t = + in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + struct VFS_CACHE_STATUS status = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + bool auto_gen_ret = kodi_addon_vfs_file_io_control_get_cache_status_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + &status /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_io_control_get_cache_status_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, + &status /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_io_control_set_cache_rate_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_CACHE_RATE_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, uint32_t rate); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_set_cache_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_set_cache_rate_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_io_control_set_cache_rate_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + uint32_t rate = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + bool auto_gen_ret = kodi_addon_vfs_file_io_control_set_cache_rate_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + rate /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_io_control_set_cache_rate_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_file_io_control_set_retry_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_FILE_IO_CONTROL_SET_RETRY_V1)(const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context, bool retry); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_file_io_control_set_retry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_file_io_control_set_retry_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_file_io_control_set_retry_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_VFS_FILE_HDL context = + reinterpret_cast(std::get<1>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool retry = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + bool auto_gen_ret = kodi_addon_vfs_file_io_control_set_retry_v1( + this, auto_gen_hdl, context /* CheckAPIUse_WAY_12-C (0004) */, + retry /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_file_io_control_set_retry_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_stat_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_STAT_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_STAT_STRUCTURE* buffer); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_stat_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_stat_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_stat_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + struct VFS_STAT_STRUCTURE buffer = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + int auto_gen_ret = + kodi_addon_vfs_stat_v1(this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */, + &buffer /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, + msgChild_OUT_kodi_addon_vfs_stat_v1(auto_gen_ret /* Return_WAY_2 (0004) */, + &buffer /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_vfs_exists_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_EXISTS_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_exists_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_exists_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = + kodi_addon_vfs_exists_v1(this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, + msgChild_OUT_kodi_addon_vfs_exists_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_clear_out_idle_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_CLEAR_OUT_IDLE_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_clear_out_idle_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_clear_out_idle_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_clear_out_idle_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_vfs_clear_out_idle_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_vfs_disconnect_all_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DISCONNECT_ALL_V1)(const KODI_ADDON_VFS_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_disconnect_all_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_disconnect_all_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_disconnect_all_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_vfs_disconnect_all_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_vfs_delete_it_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DELETE_IT_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_delete_it_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_delete_it_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_delete_it_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = + kodi_addon_vfs_delete_it_v1(this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack( + out, msgChild_OUT_kodi_addon_vfs_delete_it_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_rename_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_RENAME_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, const struct KODI_ADDON_VFS_URL* url2); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_rename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_rename_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_rename_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + KODI_ADDON_VFS_URL url2; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + std::get<2>(t).SetCStructure(&url2); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = + kodi_addon_vfs_rename_v1(this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */, + &url2 /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, + msgChild_OUT_kodi_addon_vfs_rename_v1(auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_directory_exists_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_EXISTS_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_exists_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_directory_exists_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = kodi_addon_vfs_directory_exists_v1(this, auto_gen_hdl, + &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_directory_exists_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_directory_remove_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_REMOVE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_remove_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_remove_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_directory_remove_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = kodi_addon_vfs_directory_remove_v1(this, auto_gen_hdl, + &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_directory_remove_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_directory_create_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CREATE_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_vfs_directory_create_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_directory_create_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = kodi_addon_vfs_directory_create_v1(this, auto_gen_hdl, + &url /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_directory_create_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_directory_get_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_GET_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_DIR_ENTRY** entries, size_t* num_entries, KODI_CTX_CB_HDL ctx_cb_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_get_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgChild_OUT_kodi_addon_vfs_directory_get_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_directory_get_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + struct VFS_DIR_ENTRY* entries = nullptr; /* CheckAPIUse_WAY_17 (0004) */ + size_t num_entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + KODI_CTX_CB_HDL ctx_cb_hdl = + reinterpret_cast(std::get<3>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + bool auto_gen_ret = kodi_addon_vfs_directory_get_v1( + this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */, + &entries /* CheckAPIUse_WAY_17 (0004) */, &num_entries /* CheckAPIUse_WAY_13 (0004) */, + ctx_cb_hdl /* CheckAPIUse_WAY_12-C (0004) */); + + std::vector ifc_entries; /* CheckAPIUse_WAY_17 (0004) */ + if (entries) + { + ifc_entries.reserve(num_entries); + for (size_t i = 0; i < num_entries; ++i) + { + ifc_entries.emplace_back(&entries[i]); + ifc_entries[i].CleanCStructure(&entries[i]); + } + free(entries); + } + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_directory_get_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, ifc_entries, + num_entries /* CheckAPIUse_WAY_13 (0004) */)); + return true; + } + case funcChild_kodi_addon_vfs_directory_contains_files_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VFS_DIRECTORY_CONTAINS_FILES_V1)(const KODI_ADDON_VFS_HDL hdl, const struct KODI_ADDON_VFS_URL* url, struct VFS_DIR_ENTRY** entries, size_t* num_entries, char** rootpath); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_vfs_directory_contains_files_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t, std::string> msgChild_OUT_kodi_addon_vfs_directory_contains_files_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_vfs_directory_contains_files_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_VFS_URL url; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&url); /* CheckAPIUse_WAY_16 (0004) */ + struct VFS_DIR_ENTRY* entries = nullptr; /* CheckAPIUse_WAY_17 (0004) */ + size_t num_entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0004) */ + char* rootpath = nullptr; + bool auto_gen_ret = kodi_addon_vfs_directory_contains_files_v1( + this, auto_gen_hdl, &url /* CheckAPIUse_WAY_16 (0004) */, + &entries /* CheckAPIUse_WAY_17 (0004) */, &num_entries /* CheckAPIUse_WAY_13 (0004) */, + &rootpath /* CheckAPIUse_WAY_6 (0004) */); + + std::vector ifc_entries; /* CheckAPIUse_WAY_17 (0004) */ + if (entries) + { + ifc_entries.reserve(num_entries); + for (size_t i = 0; i < num_entries; ++i) + { + ifc_entries.emplace_back(&entries[i]); + ifc_entries[i].CleanCStructure(&entries[i]); + } + free(entries); + } + msgpack::pack(out, msgChild_OUT_kodi_addon_vfs_directory_contains_files_v1( + auto_gen_ret /* Return_WAY_2 (0004) */, ifc_entries, + num_entries /* CheckAPIUse_WAY_13 (0004) */, + rootpath ? rootpath : "" /* CheckAPIUse_WAY_6 (0004) */)); + if (rootpath) /* CheckAPIUse_WAY_6 (0004) */ + free(rootpath); /* CheckAPIUse_WAY_6 (0004) */ + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_VFS_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_VFS_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_vfs.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_destroy_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_vfs.v1.destroy) + { + union_data->types.kodi_addon_vfs.v1.destroy(union_data->hdl); + } +} + +KODI_VFS_FILE_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_open_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + KODI_VFS_FILE_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_vfs.v1.file_open) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_open(union_data->hdl, url); + } + return auto_gen_ret; +} + +KODI_VFS_FILE_HDL CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_open_for_write_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + bool overwrite) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + KODI_VFS_FILE_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_vfs.v1.file_open_for_write) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_open_for_write(union_data->hdl, url, overwrite); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_close_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.file_close) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_close(union_data->hdl, context); + } + return auto_gen_ret; +} + +ssize_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_read_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t buf_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + ssize_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_read) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_read(union_data->hdl, context, buffer, buf_size); + } + return auto_gen_ret; +} + +ssize_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_write_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t buf_size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + ssize_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_write) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_write(union_data->hdl, context, buffer, buf_size); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_seek_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_seek) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_seek(union_data->hdl, context, position, whence); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_truncate_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_truncate) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_truncate(union_data->hdl, context, size); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_length_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_get_length) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_get_length(union_data->hdl, context); + } + return auto_gen_ret; +} + +int64_t CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_position_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int64_t auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_get_position) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_get_position(union_data->hdl, context); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_get_chunk_size_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.file_get_chunk_size) + { + auto_gen_ret = + union_data->types.kodi_addon_vfs.v1.file_get_chunk_size(union_data->hdl, context); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_get_seek_possible_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl, KODI_VFS_FILE_HDL context) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.file_io_control_get_seek_possible) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_io_control_get_seek_possible( + union_data->hdl, context); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_get_cache_status_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + struct VFS_CACHE_STATUS* status) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.file_io_control_get_cache_status) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_io_control_get_cache_status( + union_data->hdl, context, status); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_set_cache_rate_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint32_t rate) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.file_io_control_set_cache_rate) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_io_control_set_cache_rate( + union_data->hdl, context, rate); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_file_io_control_set_retry_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + bool retry) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.file_io_control_set_retry) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.file_io_control_set_retry(union_data->hdl, + context, retry); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_stat_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_vfs.v1.stat) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.stat(union_data->hdl, url, buffer); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_exists_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.exists) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.exists(union_data->hdl, url); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_clear_out_idle_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_vfs.v1.clear_out_idle) + { + union_data->types.kodi_addon_vfs.v1.clear_out_idle(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_disconnect_all_v1( + void* thisClassHdl, const KODI_ADDON_VFS_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_vfs.v1.disconnect_all) + { + union_data->types.kodi_addon_vfs.v1.disconnect_all(union_data->hdl); + } +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_delete_it_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.delete_it) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.delete_it(union_data->hdl, url); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_rename_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + const struct KODI_ADDON_VFS_URL* url2) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.rename) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.rename(union_data->hdl, url, url2); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_exists_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.directory_exists) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.directory_exists(union_data->hdl, url); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_remove_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.directory_remove) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.directory_remove(union_data->hdl, url); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_create_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.directory_create) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.directory_create(union_data->hdl, url); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_get_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.directory_get) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.directory_get(union_data->hdl, url, entries, + num_entries, ctx_cb_hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_vfs_h::kodi_addon_vfs_directory_contains_files_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + char** rootpath) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_vfs.v1.directory_contains_files) + { + auto_gen_ret = union_data->types.kodi_addon_vfs.v1.directory_contains_files( + union_data->hdl, url, entries, num_entries, rootpath); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_addon_vfs_get_dir_cb__get_keyboard_input( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + char** input, + bool hidden_input) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_vfs_get_dir_cb__get_keyboard_input( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* heading, char** input, bool hidden_input) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1; /* Autogenerated */ + + if (hdl == nullptr || ctx_cb_hdl == nullptr || heading == nullptr || input == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(ctx_cb_hdl) /* CheckAPIUse_WAY_12 (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + hidden_input /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_vfs_h, + funcParent_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1 t = + ident.get().as(); + + *input = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_vfs_h; + return auto_gen_group.kodi_addon_vfs_get_dir_cb__get_keyboard_input_v1( + auto_gen_group.thisClassHdl, hdl, ctx_cb_hdl, heading, input, hidden_input); +} + +ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__set_error_dialog( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + KODI_CTX_CB_HDL ctx_cb_hdl, + const char* heading, + const char* line1, + const char* line2, + const char* line3) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__set_error_dialog( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* heading, const char* line1, const char* line2, const char* line3) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1; /* Autogenerated */ + + if (hdl == nullptr || ctx_cb_hdl == nullptr || heading == nullptr || line1 == nullptr || + line2 == nullptr || line3 == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(ctx_cb_hdl) /* CheckAPIUse_WAY_12 (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, line1 /* CheckAPIUse_WAY_6b (0003) */, + line2 /* CheckAPIUse_WAY_6b (0003) */, line3 /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_vfs_h, funcParent_kodi_addon_vfs_get_dir_cb__set_error_dialog_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_vfs_h; + auto_gen_group.kodi_addon_vfs_get_dir_cb__set_error_dialog_v1( + auto_gen_group.thisClassHdl, hdl, ctx_cb_hdl, heading, line1, line2, line3); +} + +ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__require_authentication( + KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* url) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_vfs_get_dir_cb__require_authentication( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, KODI_CTX_CB_HDL ctx_cb_hdl, const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_vfs_get_dir_cb__require_authentication_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_vfs_get_dir_cb__require_authentication_v1; /* Autogenerated */ + + if (hdl == nullptr || ctx_cb_hdl == nullptr || url == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_vfs_get_dir_cb__require_authentication_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(ctx_cb_hdl) /* CheckAPIUse_WAY_12 (0003) */, + url /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_vfs_h, + funcParent_kodi_addon_vfs_get_dir_cb__require_authentication_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_vfs_h; + auto_gen_group.kodi_addon_vfs_get_dir_cb__require_authentication_v1(auto_gen_group.thisClassHdl, + hdl, ctx_cb_hdl, url); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.h new file mode 100644 index 0000000000000..8ecda7900f2a9 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/vfs.h @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/vfs.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_vfs_h; +struct directFuncToKodi_addoninstance_vfs_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_vfs_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_vfs_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_vfs_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_VFS_HDL kodi_addon_vfs_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_vfs_destroy_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + static KODI_VFS_FILE_HDL kodi_addon_vfs_file_open_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static KODI_VFS_FILE_HDL kodi_addon_vfs_file_open_for_write_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + bool overwrite); // Added with API 1 + + static bool kodi_addon_vfs_file_close_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + static ssize_t kodi_addon_vfs_file_read_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint8_t* buffer, + size_t buf_size); // Added with API 1 + + static ssize_t kodi_addon_vfs_file_write_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + const uint8_t* buffer, + size_t buf_size); // Added with API 1 + + static int64_t kodi_addon_vfs_file_seek_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t position, + int whence); // Added with API 1 + + static int kodi_addon_vfs_file_truncate_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + int64_t size); // Added with API 1 + + static int64_t kodi_addon_vfs_file_get_length_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + static int64_t kodi_addon_vfs_file_get_position_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + static int kodi_addon_vfs_file_get_chunk_size_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + static bool kodi_addon_vfs_file_io_control_get_seek_possible_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context); // Added with API 1 + + static bool kodi_addon_vfs_file_io_control_get_cache_status_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + struct VFS_CACHE_STATUS* status); // Added with API 1 + + static bool kodi_addon_vfs_file_io_control_set_cache_rate_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + uint32_t rate); // Added with API 1 + + static bool kodi_addon_vfs_file_io_control_set_retry_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + KODI_VFS_FILE_HDL context, + bool retry); // Added with API 1 + + static int kodi_addon_vfs_stat_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_STAT_STRUCTURE* buffer); // Added with API 1 + + static bool kodi_addon_vfs_exists_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static void kodi_addon_vfs_clear_out_idle_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + static void kodi_addon_vfs_disconnect_all_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl); // Added with API 1 + + static bool kodi_addon_vfs_delete_it_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static bool kodi_addon_vfs_rename_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + const struct KODI_ADDON_VFS_URL* url2); // Added with API 1 + + static bool kodi_addon_vfs_directory_exists_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static bool kodi_addon_vfs_directory_remove_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static bool kodi_addon_vfs_directory_create_v1( + void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url); // Added with API 1 + + static bool kodi_addon_vfs_directory_get_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + KODI_CTX_CB_HDL ctx_cb_hdl); // Added with API 1 + + static bool kodi_addon_vfs_directory_contains_files_v1(void* thisClassHdl, + const KODI_ADDON_VFS_HDL hdl, + const struct KODI_ADDON_VFS_URL* url, + struct VFS_DIR_ENTRY** entries, + size_t* num_entries, + char** rootpath); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.cpp new file mode 100644 index 0000000000000..a85bd0f2bbda1 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.cpp @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "videocodec.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_videocodec_h::InitDirect( + directFuncToAddon_addoninstance_videocodec_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_videocodec_create_v1 = kodi_addon_videocodec_create_v1; + ifcToAddon->kodi_addon_videocodec_destroy_v1 = kodi_addon_videocodec_destroy_v1; + ifcToAddon->kodi_addon_videocodec_open_v1 = kodi_addon_videocodec_open_v1; + ifcToAddon->kodi_addon_videocodec_reconfigure_v1 = kodi_addon_videocodec_reconfigure_v1; + ifcToAddon->kodi_addon_videocodec_add_data_v1 = kodi_addon_videocodec_add_data_v1; + ifcToAddon->kodi_addon_videocodec_get_picture_v1 = kodi_addon_videocodec_get_picture_v1; + ifcToAddon->kodi_addon_videocodec_get_name_v1 = kodi_addon_videocodec_get_name_v1; + ifcToAddon->kodi_addon_videocodec_reset_v1 = kodi_addon_videocodec_reset_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_videocodec_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_videocodec_h) + return false; + + switch (func) + { + /* NOTE: Ignored as direct api only is set! */ + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_VIDEOCODEC_HDL CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_VIDEOCODEC_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_videocodec.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_videocodec.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_destroy_v1( + void* thisClassHdl, KODI_ADDON_VIDEOCODEC_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_videocodec.v1.destroy) + { + union_data->types.kodi_addon_videocodec.v1.destroy(union_data->hdl); + } +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_open_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_INITDATA* initData) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_videocodec.v1.open) + { + auto_gen_ret = union_data->types.kodi_addon_videocodec.v1.open(union_data->hdl, initData); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_reconfigure_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_INITDATA* initData) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_videocodec.v1.reconfigure) + { + auto_gen_ret = + union_data->types.kodi_addon_videocodec.v1.reconfigure(union_data->hdl, initData); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_add_data_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + const struct DEMUX_PACKET* packet) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_videocodec.v1.add_data) + { + auto_gen_ret = union_data->types.kodi_addon_videocodec.v1.add_data(union_data->hdl, packet); + } + return auto_gen_ret; +} + +enum VIDEOCODEC_RETVAL CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_get_picture_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_PICTURE* picture) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return VC_NONE; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum VIDEOCODEC_RETVAL auto_gen_ret = VC_NONE; + if (union_data->types.kodi_addon_videocodec.v1.get_picture) + { + auto_gen_ret = union_data->types.kodi_addon_videocodec.v1.get_picture(union_data->hdl, picture); + } + return auto_gen_ret; +} + +const char* CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_get_name_v1( + void* thisClassHdl, KODI_ADDON_VIDEOCODEC_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + const char* auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_videocodec.v1.get_name) + { + auto_gen_ret = union_data->types.kodi_addon_videocodec.v1.get_name(union_data->hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_videocodec_h::kodi_addon_videocodec_reset_v1( + void* thisClassHdl, KODI_ADDON_VIDEOCODEC_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_videocodec.v1.reset) + { + union_data->types.kodi_addon_videocodec.v1.reset(union_data->hdl); + } +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_addon_videocodec_get_frame_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIDEOCODEC_PICTURE* picture) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_videocodec_get_frame_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIDEOCODEC_PICTURE* picture) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || picture == nullptr) + return false; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_videocodec_h; + return auto_gen_group.kodi_addon_videocodec_get_frame_buffer_v1(auto_gen_group.thisClassHdl, hdl, + picture); +} + +ATTR_DLL_EXPORT void kodi_addon_videocodec_release_frame_buffer(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIDEOCODEC_PICTURE* picture) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_videocodec_release_frame_buffer( KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIDEOCODEC_PICTURE* picture) __INTRODUCED_IN_KODI(1); + if (hdl == nullptr || picture == nullptr) + return; + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_videocodec_h; + auto_gen_group.kodi_addon_videocodec_release_frame_buffer_v1(auto_gen_group.thisClassHdl, hdl, + picture); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.h new file mode 100644 index 0000000000000..bef8d52697fb7 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/videocodec.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/videocodec.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_videocodec_h; +struct directFuncToKodi_addoninstance_videocodec_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_videocodec_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_videocodec_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_videocodec_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_VIDEOCODEC_HDL kodi_addon_videocodec_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_videocodec_destroy_v1(void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 + + static bool kodi_addon_videocodec_open_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_INITDATA* initData); // Added with API 1 + + static bool kodi_addon_videocodec_reconfigure_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_INITDATA* initData); // Added with API 1 + + static bool kodi_addon_videocodec_add_data_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + const struct DEMUX_PACKET* packet); // Added with API 1 + + static enum VIDEOCODEC_RETVAL kodi_addon_videocodec_get_picture_v1( + void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl, + struct VIDEOCODEC_PICTURE* picture); // Added with API 1 + + static const char* kodi_addon_videocodec_get_name_v1( + void* thisClassHdl, KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 + + static void kodi_addon_videocodec_reset_v1(void* thisClassHdl, + KODI_ADDON_VIDEOCODEC_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.cpp new file mode 100644 index 0000000000000..be6b4b7ee4362 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.cpp @@ -0,0 +1,781 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "visualization.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addoninstance_visualization_h::InitDirect( + directFuncToAddon_addoninstance_visualization_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_visualization_create_v1 = kodi_addon_visualization_create_v1; + ifcToAddon->kodi_addon_visualization_destroy_v1 = kodi_addon_visualization_destroy_v1; + ifcToAddon->kodi_addon_visualization_start_v1 = kodi_addon_visualization_start_v1; + ifcToAddon->kodi_addon_visualization_stop_v1 = kodi_addon_visualization_stop_v1; + ifcToAddon->kodi_addon_visualization_get_info_v1 = kodi_addon_visualization_get_info_v1; + ifcToAddon->kodi_addon_visualization_audio_data_v1 = kodi_addon_visualization_audio_data_v1; + ifcToAddon->kodi_addon_visualization_is_dirty_v1 = kodi_addon_visualization_is_dirty_v1; + ifcToAddon->kodi_addon_visualization_render_v1 = kodi_addon_visualization_render_v1; + ifcToAddon->kodi_addon_visualization_get_presets_v1 = kodi_addon_visualization_get_presets_v1; + ifcToAddon->kodi_addon_visualization_get_active_preset_v1 = + kodi_addon_visualization_get_active_preset_v1; + ifcToAddon->kodi_addon_visualization_prev_preset_v1 = kodi_addon_visualization_prev_preset_v1; + ifcToAddon->kodi_addon_visualization_next_preset_v1 = kodi_addon_visualization_next_preset_v1; + ifcToAddon->kodi_addon_visualization_load_preset_v1 = kodi_addon_visualization_load_preset_v1; + ifcToAddon->kodi_addon_visualization_random_preset_v1 = kodi_addon_visualization_random_preset_v1; + ifcToAddon->kodi_addon_visualization_lock_preset_v1 = kodi_addon_visualization_lock_preset_v1; + ifcToAddon->kodi_addon_visualization_rate_preset_v1 = kodi_addon_visualization_rate_preset_v1; + ifcToAddon->kodi_addon_visualization_is_locked_v1 = kodi_addon_visualization_is_locked_v1; + ifcToAddon->kodi_addon_visualization_update_albumart_v1 = + kodi_addon_visualization_update_albumart_v1; + ifcToAddon->kodi_addon_visualization_update_track_v1 = kodi_addon_visualization_update_track_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addoninstance_visualization_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addoninstance_visualization_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_visualization_create_v1: + { + // Original API call: typedef KODI_ADDON_VISUALIZATION_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_create_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_create_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + KODI_ADDON_VISUALIZATION_HDL auto_gen_ret = + kodi_addon_visualization_create_v1(this, kodi_hdl /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_visualization_destroy_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_DESTROY_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_destroy_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_destroy_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_visualization_destroy_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_visualization_start_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_START_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, int channels, int samples_per_sec, int bits_per_sample, const char* song_name); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_start_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_start_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_start_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int channels = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + int samples_per_sec = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + int bits_per_sample = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + const std::string& song_name = std::get<4>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool auto_gen_ret = kodi_addon_visualization_start_v1( + this, auto_gen_hdl, channels /* CheckAPIUse_WAY_9 (0004) */, + samples_per_sec /* CheckAPIUse_WAY_9 (0004) */, + bits_per_sample /* CheckAPIUse_WAY_9 (0004) */, + song_name.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_start_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_stop_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_STOP_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_stop_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_stop_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_stop_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_visualization_stop_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_visualization_get_info_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_INFO_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, struct VIS_INFO* info); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_info_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_get_info_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + struct VIS_INFO info = {}; /* CheckAPIUse_WAY_15 (0002-3) */ + kodi_addon_visualization_get_info_v1(this, auto_gen_hdl, + &info /* CheckAPIUse_WAY_15 (0002-4) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_get_info_v1( + &info /* CheckAPIUse_WAY_15 (0002-5) */)); + return true; + } + case funcChild_kodi_addon_visualization_audio_data_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_AUDIO_DATA_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const float* audio_data, size_t audio_data_length, const float* freq_data, size_t freq_data_length); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, std::vector /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgChild__IN_kodi_addon_visualization_audio_data_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_audio_data_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_audio_data_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::vector& audio_data = std::get<1>(t); /* CheckAPIUse_WAY_11 (0004) */ + size_t audio_data_length = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + const std::vector& freq_data = std::get<3>(t); /* CheckAPIUse_WAY_11 (0004) */ + size_t freq_data_length = std::get<4>(t); /* CheckAPIUse_WAY_9 (0004) */ + kodi_addon_visualization_audio_data_v1(this, auto_gen_hdl, + audio_data.data() /* CheckAPIUse_WAY_11 (0004) */, + audio_data_length /* CheckAPIUse_WAY_9 (0004) */, + freq_data.data() /* CheckAPIUse_WAY_11 (0004) */, + freq_data_length /* CheckAPIUse_WAY_9 (0004) */); + + return true; + } + case funcChild_kodi_addon_visualization_is_dirty_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_DIRTY_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_is_dirty_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_is_dirty_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_is_dirty_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_is_dirty_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_is_dirty_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_render_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RENDER_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_render_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_render_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_render_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_visualization_render_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_visualization_get_presets_v1: + { + // Original API call: typedef unsigned int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_PRESETS_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_presets_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_presets_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_get_presets_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + unsigned int auto_gen_ret = kodi_addon_visualization_get_presets_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_get_presets_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_get_active_preset_v1: + { + // Original API call: typedef int(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_GET_ACTIVE_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_get_active_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_get_active_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_get_active_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int auto_gen_ret = kodi_addon_visualization_get_active_preset_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_get_active_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_prev_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_PREV_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_prev_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_prev_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_prev_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_prev_preset_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_prev_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_next_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_NEXT_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_next_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_next_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_next_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_next_preset_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_next_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_load_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOAD_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, int select); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_load_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_load_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_load_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + int select = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + bool auto_gen_ret = kodi_addon_visualization_load_preset_v1( + this, auto_gen_hdl, select /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_load_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_random_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RANDOM_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_random_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_random_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_random_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_random_preset_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_random_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_lock_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_LOCK_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_lock_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_lock_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_lock_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_lock_preset_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_lock_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_rate_preset_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_RATE_PRESET_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, bool plus_minus); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_rate_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_rate_preset_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_rate_preset_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool plus_minus = std::get<1>(t); /* CheckAPIUse_WAY_9 (0004) */ + bool auto_gen_ret = kodi_addon_visualization_rate_preset_v1( + this, auto_gen_hdl, plus_minus /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_rate_preset_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_is_locked_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_IS_LOCKED_V1)(KODI_ADDON_VISUALIZATION_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_is_locked_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_is_locked_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_is_locked_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + bool auto_gen_ret = kodi_addon_visualization_is_locked_v1(this, auto_gen_hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_is_locked_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_update_albumart_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_ALBUMART_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const char* albumart); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_update_albumart_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_update_albumart_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_update_albumart_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& albumart = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool auto_gen_ret = kodi_addon_visualization_update_albumart_v1( + this, auto_gen_hdl, albumart.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_update_albumart_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + case funcChild_kodi_addon_visualization_update_track_v1: + { + // Original API call: typedef bool(ATTR_APIENTRYP PFN_KODI_ADDON_VISUALIZATION_UPDATE_TRACK_V1)(KODI_ADDON_VISUALIZATION_HDL hdl, const struct VIS_TRACK* track); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_visualization_update_track_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_visualization_update_track_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_visualization_update_track_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + VIS_TRACK track; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&track); /* CheckAPIUse_WAY_16 (0004) */ + bool auto_gen_ret = kodi_addon_visualization_update_track_v1( + this, auto_gen_hdl, &track /* CheckAPIUse_WAY_16 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_visualization_update_track_v1( + auto_gen_ret /* Return_WAY_2 (0004) */)); + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + + +KODI_ADDON_VISUALIZATION_HDL CHdl_kodi_addoninstance_visualization_h:: + kodi_addon_visualization_create_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_VISUALIZATION_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_visualization.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_destroy_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_visualization.v1.destroy) + { + union_data->types.kodi_addon_visualization.v1.destroy(union_data->hdl); + } +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_start_v1( + void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + int channels, + int samples_per_sec, + int bits_per_sample, + const char* song_name) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.start) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.start( + union_data->hdl, channels, samples_per_sec, bits_per_sample, song_name); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_stop_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_visualization.v1.stop) + { + union_data->types.kodi_addon_visualization.v1.stop(union_data->hdl); + } +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_info_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl, struct VIS_INFO* info) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_visualization.v1.get_info) + { + union_data->types.kodi_addon_visualization.v1.get_info(union_data->hdl, info); + } +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_audio_data_v1( + void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + const float* audio_data, + size_t audio_data_length, + const float* freq_data, + size_t freq_data_length) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_visualization.v1.audio_data) + { + union_data->types.kodi_addon_visualization.v1.audio_data( + union_data->hdl, audio_data, audio_data_length, freq_data, freq_data_length); + } +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_is_dirty_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.is_dirty) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.is_dirty(union_data->hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_render_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_visualization.v1.render) + { + union_data->types.kodi_addon_visualization.v1.render(union_data->hdl); + } +} + +unsigned int CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_presets_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return 0; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + unsigned int auto_gen_ret = 0; + if (union_data->types.kodi_addon_visualization.v1.get_presets) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.get_presets(union_data->hdl); + } + return auto_gen_ret; +} + +int CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_get_active_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return -1; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + int auto_gen_ret = -1; + if (union_data->types.kodi_addon_visualization.v1.get_active_preset) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.get_active_preset(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_prev_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.prev_preset) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.prev_preset(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_next_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.next_preset) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.next_preset(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_load_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl, int select) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.load_preset) + { + auto_gen_ret = + union_data->types.kodi_addon_visualization.v1.load_preset(union_data->hdl, select); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_random_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.random_preset) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.random_preset(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_lock_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.lock_preset) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.lock_preset(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_rate_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl, bool plus_minus) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.rate_preset) + { + auto_gen_ret = + union_data->types.kodi_addon_visualization.v1.rate_preset(union_data->hdl, plus_minus); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_is_locked_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.is_locked) + { + auto_gen_ret = union_data->types.kodi_addon_visualization.v1.is_locked(union_data->hdl); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_update_albumart_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl, const char* albumart) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.update_albumart) + { + auto_gen_ret = + union_data->types.kodi_addon_visualization.v1.update_albumart(union_data->hdl, albumart); + } + return auto_gen_ret; +} + +bool CHdl_kodi_addoninstance_visualization_h::kodi_addon_visualization_update_track_v1( + void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + const struct VIS_TRACK* track) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return false; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + bool auto_gen_ret = false; + if (union_data->types.kodi_addon_visualization.v1.update_track) + { + auto_gen_ret = + union_data->types.kodi_addon_visualization.v1.update_track(union_data->hdl, track); + } + return auto_gen_ret; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_addon_visualization_get_properties(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + struct VIS_PROPS* props) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_get_properties(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, struct VIS_PROPS* props) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_get_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_get_properties_v1; /* Autogenerated */ + + if (hdl == nullptr || props == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_visualization_get_properties_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_visualization_h, + funcParent_kodi_addon_visualization_get_properties_v1, in, out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_visualization_get_properties_v1 t = ident.get().as(); + + std::get<0>(t).SetCStructure(props); /* CheckAPIUse_WAY_15 (0003-2) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_visualization_h; + auto_gen_group.kodi_addon_visualization_get_properties_v1(auto_gen_group.thisClassHdl, hdl, + props); +} + +ATTR_DLL_EXPORT void kodi_addon_visualization_transfer_preset(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* preset) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_transfer_preset(KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* preset) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_transfer_preset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_transfer_preset_v1; /* Autogenerated */ + + if (hdl == nullptr || preset == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_visualization_transfer_preset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + preset /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_visualization_h, + funcParent_kodi_addon_visualization_transfer_preset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_visualization_h; + auto_gen_group.kodi_addon_visualization_transfer_preset_v1(auto_gen_group.thisClassHdl, hdl, + preset); +} + +ATTR_DLL_EXPORT void kodi_addon_visualization_clear_presets(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_addon_visualization_clear_presets(KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_visualization_clear_presets_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_visualization_clear_presets_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_addon_visualization_clear_presets_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addoninstance_visualization_h, + funcParent_kodi_addon_visualization_clear_presets_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addoninstance_visualization_h; + auto_gen_group.kodi_addon_visualization_clear_presets_v1(auto_gen_group.thisClassHdl, hdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.h new file mode 100644 index 0000000000000..1900653288978 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon-instance/visualization.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon-instance/visualization.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addoninstance_visualization_h; +struct directFuncToKodi_addoninstance_visualization_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addoninstance_visualization_h : public IMsgHdl +{ +public: + CHdl_kodi_addoninstance_visualization_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_addoninstance_visualization_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static KODI_ADDON_VISUALIZATION_HDL kodi_addon_visualization_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_visualization_destroy_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_start_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + int channels, + int samples_per_sec, + int bits_per_sample, + const char* song_name); // Added with API 1 + + static void kodi_addon_visualization_stop_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static void kodi_addon_visualization_get_info_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + struct VIS_INFO* info); // Added with API 1 + + static void kodi_addon_visualization_audio_data_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + const float* audio_data, + size_t audio_data_length, + const float* freq_data, + size_t freq_data_length); // Added with API 1 + + static bool kodi_addon_visualization_is_dirty_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static void kodi_addon_visualization_render_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static unsigned int kodi_addon_visualization_get_presets_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static int kodi_addon_visualization_get_active_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_prev_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_next_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_load_preset_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + int select); // Added with API 1 + + static bool kodi_addon_visualization_random_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_lock_preset_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_rate_preset_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + bool plus_minus); // Added with API 1 + + static bool kodi_addon_visualization_is_locked_v1( + void* thisClassHdl, KODI_ADDON_VISUALIZATION_HDL hdl); // Added with API 1 + + static bool kodi_addon_visualization_update_albumart_v1(void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + const char* albumart); // Added with API 1 + + static bool kodi_addon_visualization_update_track_v1( + void* thisClassHdl, + KODI_ADDON_VISUALIZATION_HDL hdl, + const struct VIS_TRACK* track); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.cpp new file mode 100644 index 0000000000000..396bc6424d12e --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.cpp @@ -0,0 +1,1830 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "addon_base.h" + +#include "include/kodi/tools/StringUtils.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_addon_base_h::InitDirect(directFuncToAddon_addon_base_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; + ifcToAddon->kodi_addon_create_v1 = kodi_addon_create_v1; + ifcToAddon->kodi_addon_destroy_v1 = kodi_addon_destroy_v1; + ifcToAddon->kodi_addon_setting_change_string_v1 = kodi_addon_setting_change_string_v1; + ifcToAddon->kodi_addon_setting_change_boolean_v1 = kodi_addon_setting_change_boolean_v1; + ifcToAddon->kodi_addon_setting_change_integer_v1 = kodi_addon_setting_change_integer_v1; + ifcToAddon->kodi_addon_setting_change_float_v1 = kodi_addon_setting_change_float_v1; + ifcToAddon->kodi_addon_create_instance_v1 = kodi_addon_create_instance_v1; + ifcToAddon->kodi_addon_destroy_instance_v1 = kodi_addon_destroy_instance_v1; + ifcToAddon->kodi_addon_instance_setting_change_string_v1 = + kodi_addon_instance_setting_change_string_v1; + ifcToAddon->kodi_addon_instance_setting_change_boolean_v1 = + kodi_addon_instance_setting_change_boolean_v1; + ifcToAddon->kodi_addon_instance_setting_change_integer_v1 = + kodi_addon_instance_setting_change_integer_v1; + ifcToAddon->kodi_addon_instance_setting_change_float_v1 = + kodi_addon_instance_setting_change_float_v1; + ifcToAddon->kodi_addon_instance_create_v1 = kodi_addon_instance_create_v1; + ifcToAddon->kodi_addon_instance_destroy_v1 = kodi_addon_instance_destroy_v1; +} + +#ifndef KODI_INHIBIT_SHARED +bool CHdl_kodi_addon_base_h::HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (funcGroup != funcGroup_addon_base_h) + return false; + + switch (func) + { + case funcChild_kodi_addon_create_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_V1)(const struct KODI_ADDON_INSTANCE_INFO* first_instance, KODI_ADDON_HDL* hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_create_v1; /* OVERRIDE;USE_HAND_MAKE used, set this by hand */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_create_v1; /* OVERRIDE;USE_HAND_MAKE used, set this by hand */ + + /*---AUTO_GEN_PARSE---*/ + + msgChild__IN_kodi_addon_create_v1 t = in.get().as(); + + KODI_ADDON_HDL hdl = nullptr; + KODI_ADDON_INSTANCE_INFO info; + std::get<0>(t).SetCStructure(&info); + + enum ADDON_STATUS auto_gen_ret = kodi_addon_create_v1(this, &info, &hdl); + + msgpack::pack(out, msgChild_OUT_kodi_addon_create_v1(auto_gen_ret, PtrValue(hdl))); + + /*---AUTO_GEN_PARSE---*/ + return true; + } + case funcChild_kodi_addon_destroy_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_V1)(KODI_ADDON_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_destroy_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_destroy_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_destroy_v1(this, auto_gen_hdl); + + return true; + } + case funcChild_kodi_addon_setting_change_string_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_STRING_V1)(const KODI_ADDON_HDL hdl, const char* name, const char* value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_string_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_setting_change_string_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& name = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + const std::string& value = std::get<2>(t); /* CheckAPIUse_WAY_6a (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_setting_change_string_v1( + this, auto_gen_hdl, name.c_str() /* CheckAPIUse_WAY_6a (0004) */, + value.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_setting_change_string_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_setting_change_boolean_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_BOOLEAN_V1)(const KODI_ADDON_HDL hdl, const char* name, bool value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_boolean_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_boolean_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_setting_change_boolean_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& name = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool value = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_setting_change_boolean_v1( + this, auto_gen_hdl, name.c_str() /* CheckAPIUse_WAY_6a (0004) */, + value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_setting_change_boolean_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_setting_change_integer_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_INTEGER_V1)(const KODI_ADDON_HDL hdl, const char* name, int value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_integer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_integer_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_setting_change_integer_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& name = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + int value = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_setting_change_integer_v1( + this, auto_gen_hdl, name.c_str() /* CheckAPIUse_WAY_6a (0004) */, + value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_setting_change_integer_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_setting_change_float_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_SETTING_CHANGE_FLOAT_V1)(const KODI_ADDON_HDL hdl, const char* name, double value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_setting_change_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_setting_change_float_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_setting_change_float_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + const std::string& name = std::get<1>(t); /* CheckAPIUse_WAY_6a (0004) */ + double value = std::get<2>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_setting_change_float_v1( + this, auto_gen_hdl, name.c_str() /* CheckAPIUse_WAY_6a (0004) */, + value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_setting_change_float_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_create_instance_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_CREATE_INSTANCE_V1)(const KODI_ADDON_HDL hdl, const struct KODI_ADDON_INSTANCE_INFO* info, struct KODI_ADDON_INSTANCE_STRUCT* instance); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_create_instance_v1; /* OVERRIDE;USE_HAND_MAKE used, set this by hand */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_create_instance_v1; /* OVERRIDE;USE_HAND_MAKE used, set this by hand */ + + /*---AUTO_GEN_PARSE---*/ + msgChild__IN_kodi_addon_create_instance_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_HANDLE addonInstance = nullptr; + KODI_ADDON_INSTANCE_INFO info; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&info); /* CheckAPIUse_WAY_16 (0004) */ + ADDON_STATUS status = + kodi_addon_create_instance_v1(this, auto_gen_hdl, &info, &addonInstance); + msgpack::pack(out, + msgChild_OUT_kodi_addon_create_instance_v1(status, PtrValue(addonInstance))); + /*---AUTO_GEN_PARSE---*/ + return true; + } + case funcChild_kodi_addon_destroy_instance_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_DESTROY_INSTANCE_V1)(const KODI_ADDON_HDL hdl, const struct KODI_ADDON_INSTANCE_INFO* info, const KODI_ADDON_INSTANCE_HDL instance_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_destroy_instance_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_destroy_instance_v1; /* Autogenerated */ + + /*---AUTO_GEN_PARSE---*/ + msgChild__IN_kodi_addon_destroy_instance_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_HANDLE instance = reinterpret_cast(std::get<2>(t)); + if (instance) + { + KODI_ADDON_INSTANCE_INFO info; /* CheckAPIUse_WAY_16 (0004) */ + std::get<1>(t).SetCStructure(&info); /* CheckAPIUse_WAY_16 (0004) */ + kodi_addon_destroy_instance_v1(this, auto_gen_hdl, &info /* CheckAPIUse_WAY_16 (0004) */, + instance + /* CheckAPIUse_WAY_12 (0004) */); + } + + /*---AUTO_GEN_PARSE---*/ + return true; + } + case funcChild_kodi_addon_instance_setting_change_string_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_STRING_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, const char* value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_string_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_setting_change_string_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_STRUCT* instance_hdl = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-B (0004) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0004) */ + const std::string& value = std::get<3>(t); /* CheckAPIUse_WAY_6a (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_instance_setting_change_string_v1( + this, auto_gen_hdl, instance_hdl->hdl /* CheckAPIUse_WAY_12-B (0004) */, + name.c_str() /* CheckAPIUse_WAY_6a (0004) */, + value.c_str() /* CheckAPIUse_WAY_6a (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_instance_setting_change_string_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_instance_setting_change_boolean_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_BOOLEAN_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, bool value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_boolean_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_boolean_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_setting_change_boolean_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_STRUCT* instance_hdl = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-B (0004) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0004) */ + bool value = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_instance_setting_change_boolean_v1( + this, auto_gen_hdl, instance_hdl->hdl /* CheckAPIUse_WAY_12-B (0004) */, + name.c_str() /* CheckAPIUse_WAY_6a (0004) */, value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_instance_setting_change_boolean_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_instance_setting_change_integer_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_INTEGER_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, int value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_integer_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_integer_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_setting_change_integer_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_STRUCT* instance_hdl = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-B (0004) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0004) */ + int value = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_instance_setting_change_integer_v1( + this, auto_gen_hdl, instance_hdl->hdl /* CheckAPIUse_WAY_12-B (0004) */, + name.c_str() /* CheckAPIUse_WAY_6a (0004) */, value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_instance_setting_change_integer_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_instance_setting_change_float_v1: + { + // Original API call: typedef enum ADDON_STATUS(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_SETTING_CHANGE_FLOAT_V1)(const KODI_ADDON_HDL hdl, const KODI_ADDON_INSTANCE_HDL instance_hdl, const char* name, double value); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_setting_change_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_setting_change_float_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_setting_change_float_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_STRUCT* instance_hdl = reinterpret_cast( + std::get<1>(t)); /* CheckAPIUse_WAY_12-B (0004) */ + const std::string& name = std::get<2>(t); /* CheckAPIUse_WAY_6a (0004) */ + double value = std::get<3>(t); /* CheckAPIUse_WAY_9 (0004) */ + enum ADDON_STATUS auto_gen_ret = kodi_addon_instance_setting_change_float_v1( + this, auto_gen_hdl, instance_hdl->hdl /* CheckAPIUse_WAY_12-B (0004) */, + name.c_str() /* CheckAPIUse_WAY_6a (0004) */, value /* CheckAPIUse_WAY_9 (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_instance_setting_change_float_v1( + auto_gen_ret /* Return_WAY_3 (0004) */)); + return true; + } + case funcChild_kodi_addon_instance_create_v1: + { + // Original API call: typedef KODI_ADDON_INSTANCE_HDL(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_CREATE_V1)(KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_create_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_create_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl = reinterpret_cast( + std::get<0>(t)); /* CheckAPIUse_WAY_12-C (0004) */ + KODI_ADDON_INSTANCE_HDL auto_gen_ret = + kodi_addon_instance_create_v1(this, kodi_hdl /* CheckAPIUse_WAY_12-C (0004) */); + + msgpack::pack(out, msgChild_OUT_kodi_addon_instance_create_v1( + PtrValue(auto_gen_ret) /* Return_WAY_4 (0004) */ + )); + return true; + } + case funcChild_kodi_addon_instance_destroy_v1: + { + // Original API call: typedef void(ATTR_APIENTRYP PFN_KODI_ADDON_INSTANCE_DESTROY_V1)(KODI_ADDON_INSTANCE_HDL hdl); + // Tuple in: typedef std::tuple msgChild__IN_kodi_addon_instance_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgChild_OUT_kodi_addon_instance_destroy_v1; /* Autogenerated */ + + msgChild__IN_kodi_addon_instance_destroy_v1 t = in.get().as(); + KODI_ADDON_HDL auto_gen_hdl = reinterpret_cast(std::get<0>(t)); + kodi_addon_instance_destroy_v1(this, auto_gen_hdl); + + return true; + } + default: + break; + } + return false; +} +#endif /* !KODI_INHIBIT_SHARED */ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ + +KODI::ADDONS::INTERFACE::DirectAddonIfc* kodi_check_direct_api(int argc, char* argv[]) +{ + static const char* value = "--direct-api="; + static std::string direct_api = "0"; + + for (int i = 1; i < argc; ++i) + { + if (argv[i] == nullptr) + break; + + std::string arg = argv[i]; + if (arg.rfind(value, 0) == 0) + { + direct_api = arg.substr(strlen(value)); + break; + } + else if ((arg == "-d") || (arg == "--direct-api")) + { + if (i + 1 < argc) // Make sure we aren't at the end of argv! + { + direct_api = argv[++i]; // Increment 'i' so we don't get the argument as the next argv[i]. + break; + } + } + } + + return reinterpret_cast(stoull(direct_api, 0, 16)); +} + +/*---AUTO_GEN_PARSE---*/ + + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_create_v1( + void* thisClassHdl, + const KODI_ADDON_INSTANCE_INFO* first_instance, + KODI_ADDON_HDL* hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + /*---AUTO_GEN_PARSE---*/ + + ADDON_STATUS status; + if (thisClass->m_ifc->functions.types.kodi_addon.v1.create) + { + status = thisClass->m_ifc->functions.types.kodi_addon.v1.create(first_instance, hdl); + thisClass->m_ifc->functions.hdl = *hdl; + } + else + status = ADDON_STATUS_NOT_IMPLEMENTED; + *hdl = &thisClass->m_ifc->functions; + return status; + + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addon_base_h::kodi_addon_destroy_v1(void* thisClassHdl, + KODI_ADDON_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon.v1.destroy) + { + union_data->types.kodi_addon.v1.destroy(union_data->hdl); + } +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_string_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + const char* value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.setting_change_string) + { + auto_gen_ret = + union_data->types.kodi_addon.v1.setting_change_string(union_data->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_boolean_v1( + void* thisClassHdl, const KODI_ADDON_HDL hdl, const char* name, bool value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.setting_change_boolean) + { + auto_gen_ret = + union_data->types.kodi_addon.v1.setting_change_boolean(union_data->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_integer_v1( + void* thisClassHdl, const KODI_ADDON_HDL hdl, const char* name, int value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.setting_change_integer) + { + auto_gen_ret = + union_data->types.kodi_addon.v1.setting_change_integer(union_data->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_setting_change_float_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + double value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.setting_change_float) + { + auto_gen_ret = + union_data->types.kodi_addon.v1.setting_change_float(union_data->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_create_instance_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + KODI_HANDLE* instance) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + /*---AUTO_GEN_PARSE---*/ + // Autogenerated by "Generate_kodi_addon_instance_construct.py", edit this for code changes! + ADDON_STATUS status; + UnionAddonFunctions* data = reinterpret_cast(hdl); + if (data->types.kodi_addon.v1.create_instance) + { + UnionAddonFunctions* instanceStruct = new UnionAddonFunctions(); + instanceStruct->type = info->type; + instanceStruct->kodi = info->kodi; + + KODI_ADDON_INSTANCE_STRUCT addonInstance; + addonInstance.dummy = &instanceStruct->types.dummy; + + status = data->types.kodi_addon.v1.create_instance(data->hdl, info, &addonInstance); + if (!addonInstance.dummy && status == ADDON_STATUS_OK) + { + status = ADDON_STATUS_PERMANENT_FAILURE; + } + else if (addonInstance.dummy) + { + if (info->type == ADDON_INSTANCE_AUDIODECODER) + { + if (&instanceStruct->types.kodi_addon_audiodecoder.v1 != + reinterpret_casttypes.kodi_addon_audiodecoder.v1)*>( + addonInstance.audiodecoder)) + instanceStruct->types.kodi_addon_audiodecoder.v1 = + *reinterpret_casttypes.kodi_addon_audiodecoder.v1)*>( + addonInstance.audiodecoder); + if (instanceStruct->types.kodi_addon_audiodecoder.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_audiodecoder.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_AUDIOENCODER) + { + if (&instanceStruct->types.kodi_addon_audioencoder.v1 != + reinterpret_casttypes.kodi_addon_audioencoder.v1)*>( + addonInstance.audioencoder)) + instanceStruct->types.kodi_addon_audioencoder.v1 = + *reinterpret_casttypes.kodi_addon_audioencoder.v1)*>( + addonInstance.audioencoder); + if (instanceStruct->types.kodi_addon_audioencoder.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_audioencoder.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_GAME) + { + if (&instanceStruct->types.kodi_addon_game.v1 != + reinterpret_casttypes.kodi_addon_game.v1)*>( + addonInstance.game)) + instanceStruct->types.kodi_addon_game.v1 = + *reinterpret_casttypes.kodi_addon_game.v1)*>( + addonInstance.game); + if (instanceStruct->types.kodi_addon_game.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_game.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_IMAGEDECODER) + { + if (&instanceStruct->types.kodi_addon_imagedecoder.v1 != + reinterpret_casttypes.kodi_addon_imagedecoder.v1)*>( + addonInstance.imagedecoder)) + instanceStruct->types.kodi_addon_imagedecoder.v1 = + *reinterpret_casttypes.kodi_addon_imagedecoder.v1)*>( + addonInstance.imagedecoder); + if (instanceStruct->types.kodi_addon_imagedecoder.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_imagedecoder.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_INPUTSTREAM) + { + if (&instanceStruct->types.kodi_addon_inputstream.v1 != + reinterpret_casttypes.kodi_addon_inputstream.v1)*>( + addonInstance.inputstream)) + instanceStruct->types.kodi_addon_inputstream.v1 = + *reinterpret_casttypes.kodi_addon_inputstream.v1)*>( + addonInstance.inputstream); + if (instanceStruct->types.kodi_addon_inputstream.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_inputstream.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_PERIPHERAL) + { + if (&instanceStruct->types.kodi_addon_peripheral.v1 != + reinterpret_casttypes.kodi_addon_peripheral.v1)*>( + addonInstance.peripheral)) + instanceStruct->types.kodi_addon_peripheral.v1 = + *reinterpret_casttypes.kodi_addon_peripheral.v1)*>( + addonInstance.peripheral); + if (instanceStruct->types.kodi_addon_peripheral.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_peripheral.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_SCREENSAVER) + { + if (&instanceStruct->types.kodi_addon_screensaver.v1 != + reinterpret_casttypes.kodi_addon_screensaver.v1)*>( + addonInstance.screensaver)) + instanceStruct->types.kodi_addon_screensaver.v1 = + *reinterpret_casttypes.kodi_addon_screensaver.v1)*>( + addonInstance.screensaver); + if (instanceStruct->types.kodi_addon_screensaver.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_screensaver.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_VFS) + { + if (&instanceStruct->types.kodi_addon_vfs.v1 != + reinterpret_casttypes.kodi_addon_vfs.v1)*>(addonInstance.vfs)) + instanceStruct->types.kodi_addon_vfs.v1 = + *reinterpret_casttypes.kodi_addon_vfs.v1)*>( + addonInstance.vfs); + if (instanceStruct->types.kodi_addon_vfs.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_vfs.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_VIDEOCODEC) + { + if (&instanceStruct->types.kodi_addon_videocodec.v1 != + reinterpret_casttypes.kodi_addon_videocodec.v1)*>( + addonInstance.videocodec)) + instanceStruct->types.kodi_addon_videocodec.v1 = + *reinterpret_casttypes.kodi_addon_videocodec.v1)*>( + addonInstance.videocodec); + if (instanceStruct->types.kodi_addon_videocodec.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_videocodec.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + if (info->type == ADDON_INSTANCE_VISUALIZATION) + { + if (&instanceStruct->types.kodi_addon_visualization.v1 != + reinterpret_casttypes.kodi_addon_visualization.v1)*>( + addonInstance.visualization)) + instanceStruct->types.kodi_addon_visualization.v1 = + *reinterpret_casttypes.kodi_addon_visualization.v1)*>( + addonInstance.visualization); + if (instanceStruct->types.kodi_addon_visualization.v1.create) + instanceStruct->hdl = instanceStruct->types.kodi_addon_visualization.v1.create(instance); + else + instanceStruct->hdl = addonInstance.hdl; + goto done; + } + done: + *instance = instanceStruct; + return status; + } + + delete instanceStruct; + } + else + status = ADDON_STATUS_NOT_IMPLEMENTED; + + return status; + /*---AUTO_GEN_PARSE---*/ +} + +void CHdl_kodi_addon_base_h::kodi_addon_destroy_instance_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_HANDLE instance) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + /*---AUTO_GEN_PARSE---*/ + // Autogenerated by "Generate_kodi_addon_instance_construct.py", edit this for code changes! + UnionAddonFunctions* data = reinterpret_cast(hdl); + UnionAddonFunctions* instanceStruct = reinterpret_cast(instance); + if (instanceStruct) + { + if (info->type == ADDON_INSTANCE_AUDIODECODER) + { + if (instanceStruct->types.kodi_addon_audiodecoder.v1.destroy) + instanceStruct->types.kodi_addon_audiodecoder.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_AUDIOENCODER) + { + if (instanceStruct->types.kodi_addon_audioencoder.v1.destroy) + instanceStruct->types.kodi_addon_audioencoder.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_GAME) + { + if (instanceStruct->types.kodi_addon_game.v1.destroy) + instanceStruct->types.kodi_addon_game.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_IMAGEDECODER) + { + if (instanceStruct->types.kodi_addon_imagedecoder.v1.destroy) + instanceStruct->types.kodi_addon_imagedecoder.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_INPUTSTREAM) + { + if (instanceStruct->types.kodi_addon_inputstream.v1.destroy) + instanceStruct->types.kodi_addon_inputstream.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_PERIPHERAL) + { + if (instanceStruct->types.kodi_addon_peripheral.v1.destroy) + instanceStruct->types.kodi_addon_peripheral.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_SCREENSAVER) + { + if (instanceStruct->types.kodi_addon_screensaver.v1.destroy) + instanceStruct->types.kodi_addon_screensaver.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_VFS) + { + if (instanceStruct->types.kodi_addon_vfs.v1.destroy) + instanceStruct->types.kodi_addon_vfs.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_VIDEOCODEC) + { + if (instanceStruct->types.kodi_addon_videocodec.v1.destroy) + instanceStruct->types.kodi_addon_videocodec.v1.destroy(instanceStruct->hdl); + goto done; + } + if (info->type == ADDON_INSTANCE_VISUALIZATION) + { + if (instanceStruct->types.kodi_addon_visualization.v1.destroy) + instanceStruct->types.kodi_addon_visualization.v1.destroy(instanceStruct->hdl); + goto done; + } + done: + if (data->types.kodi_addon.v1.destroy_instance) + { + data->types.kodi_addon.v1.destroy_instance(data->hdl, info, instanceStruct->hdl); + } + delete instanceStruct; + } + /*---AUTO_GEN_PARSE---*/ +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_string_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + UnionAddonFunctions* instanceStruct = reinterpret_cast(instance_hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.instance_setting_change_string) + { + auto_gen_ret = union_data->types.kodi_addon.v1.instance_setting_change_string( + union_data->hdl, instanceStruct->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_boolean_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + UnionAddonFunctions* instanceStruct = reinterpret_cast(instance_hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.instance_setting_change_boolean) + { + auto_gen_ret = union_data->types.kodi_addon.v1.instance_setting_change_boolean( + union_data->hdl, instanceStruct->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_integer_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + UnionAddonFunctions* instanceStruct = reinterpret_cast(instance_hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.instance_setting_change_integer) + { + auto_gen_ret = union_data->types.kodi_addon.v1.instance_setting_change_integer( + union_data->hdl, instanceStruct->hdl, name, value); + } + return auto_gen_ret; +} + +enum ADDON_STATUS CHdl_kodi_addon_base_h::kodi_addon_instance_setting_change_float_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return ADDON_STATUS_OK; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + UnionAddonFunctions* instanceStruct = reinterpret_cast(instance_hdl); + enum ADDON_STATUS auto_gen_ret = ADDON_STATUS_OK; + if (union_data->types.kodi_addon.v1.instance_setting_change_float) + { + auto_gen_ret = union_data->types.kodi_addon.v1.instance_setting_change_float( + union_data->hdl, instanceStruct->hdl, name, value); + } + return auto_gen_ret; +} + +KODI_ADDON_INSTANCE_HDL CHdl_kodi_addon_base_h::kodi_addon_instance_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return nullptr; + + UnionAddonFunctions* union_data = reinterpret_cast(kodi_hdl); + KODI_ADDON_INSTANCE_HDL auto_gen_ret = nullptr; + if (union_data->types.kodi_addon_instance.v1.create) + { + auto_gen_ret = union_data->types.kodi_addon_instance.v1.create(kodi_hdl); + } + return auto_gen_ret; +} + +void CHdl_kodi_addon_base_h::kodi_addon_instance_destroy_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_HDL hdl) // Added with API 1 +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + UnionAddonFunctions* union_data = reinterpret_cast(hdl); + if (union_data->types.kodi_addon_instance.v1.destroy) + { + union_data->types.kodi_addon_instance.v1.destroy(union_data->hdl); + } +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT const char* kodi_check_main_shared(int argc, char* argv[]) +{ + // Original API call: ATTR_DLL_EXPORT const char* kodi_check_main_shared(int argc, char* argv[]) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_check_main_shared - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_check_main_shared - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + static const char* value = "--main-shared="; + static std::string main_shared; + + for (int i = 1; i < argc; ++i) + { + if (argv[i] == nullptr) + break; + + std::string arg = argv[i]; + if (arg.rfind(value, 0) == 0) + { + main_shared = arg.substr(strlen(value)); + break; + } + else if ((arg == "-m") || (arg == "--main-shared")) + { + if (i + 1 < argc) // Make sure we aren't at the end of argv! + { + main_shared = argv[++i]; // Increment 'i' so we don't get the argument as the next argv[i]. + break; + } + } + } + + return main_shared.c_str(); + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT KODI_IFC_HDL kodi_init(unsigned int api, + int argc, + char* argv[], + struct KODI_ADDON_FUNC* func, + bool via_main, + bool no_receive) +{ + // Original API call: ATTR_DLL_EXPORT KODI_IFC_HDL kodi_init(unsigned int api, int argc, char* argv[], struct KODI_ADDON_FUNC* func, bool via_main, bool no_receive) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_init - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_init - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + if (AddonIfc::g_ifc) + { + fprintf(stderr, R"error( +FATAL: This class "CChildProcessor" should only be used one time in App. + Here becomes a second time called and child app becomes destroyed now. + Inform developer about this addon to fix it! + )error"); + exit(1); + } + + KODI_ADDON::INTERNAL::AddonIfc* ifc = new AddonIfc(); + ifc->api = api; + ifc->identifier = kodi_check_main_shared(argc, argv); + if (ifc->identifier.empty()) + { + fprintf(stderr, "FATAL: Started addon without valid identifier, Addon not usable!\n"); + exit(1); + } + + // ifc->kodiFirstInstance = kodi_check_for_first_instance(argc, argv); + ifc->direct = kodi_check_direct_api(argc, argv); + if (ifc->direct) + ifc->direct_used = true; + + if (func) + ifc->functions.types.kodi_addon.v1 = + *reinterpret_castfunctions.types.kodi_addon.v1)*>(func); + ifc->viaMainThread = via_main; + ifc->noReceive = no_receive; + ifc->control = std::unique_ptr(new CAddonControl(ifc)); + if (!ifc->control->Create()) + { + fprintf(stderr, "FATAL: Started addon without valid identifier, Addon not usable!\n"); + delete ifc; + exit(1); + } + + AddonIfc::g_ifc = ifc; + return AddonIfc::g_ifc; + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT void kodi_deinit(KODI_IFC_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_deinit(KODI_IFC_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_deinit - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_deinit - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + if (!AddonIfc::g_ifc) + return; + + delete AddonIfc::g_ifc; + AddonIfc::g_ifc = nullptr; + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT bool kodi_process(KODI_IFC_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_process(KODI_IFC_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_process - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_process - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + if (!AddonIfc::g_ifc) + return false; + return AddonIfc::g_ifc->control->ProcessOutside(); + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT void kodi_log(enum ADDON_LOG loglevel, const char* format, ...) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_log(enum ADDON_LOG loglevel, const char* format, ...) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_log_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_log_v1; /* Autogenerated */ + + if (format == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + va_list args; /* CheckAPIUse_WAY_1 (0003) */ + va_start(args, format); /* CheckAPIUse_WAY_1 (0003) */ + const std::string cpp_format = + kodi::tools::StringUtils::FormatV(format, args); /* CheckAPIUse_WAY_1 (0003) */ + va_end(args); /* CheckAPIUse_WAY_1 (0003) */ + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_log_v1(loglevel /* CheckAPIUse_WAY_14a (0003) */, + cpp_format /* CheckAPIUse_WAY_6a (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_addon_base_h, + funcParent_kodi_log_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + auto_gen_group.kodi_log_v1(auto_gen_group.thisClassHdl, loglevel, format); +} + +ATTR_DLL_EXPORT char* kodi_addon_get_addon_path() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_addon_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_addon_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_addon_path_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_addon_base_h, funcParent_kodi_addon_get_addon_path_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_addon_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_addon_path_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT char* kodi_addon_get_lib_path() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_lib_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_lib_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_lib_path_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_addon_base_h, funcParent_kodi_addon_get_lib_path_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_lib_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_lib_path_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT char* kodi_addon_get_user_path() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_user_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_user_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_user_path_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_addon_base_h, funcParent_kodi_addon_get_user_path_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_user_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_user_path_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT char* kodi_addon_get_temp_path() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_temp_path() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_temp_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_temp_path_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_addon_base_h, funcParent_kodi_addon_get_temp_path_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_temp_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_temp_path_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT char* kodi_addon_localized_string(long label_id) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_localized_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_localized_string_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_localized_string_v1(label_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_localized_string_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_localized_string_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_localized_string_v1(auto_gen_group.thisClassHdl, label_id); +} + +ATTR_DLL_EXPORT char* kodi_addon_get_info(const char* id) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_get_info(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_info_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_info_v1; /* Autogenerated */ + + if (id == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_get_info_v1(id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_get_info_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_info_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_info_v1(auto_gen_group.thisClassHdl, id); +} + +ATTR_DLL_EXPORT bool kodi_addon_open_settings_dialog() +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_open_settings_dialog() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_open_settings_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_open_settings_dialog_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_addon_base_h, funcParent_kodi_addon_open_settings_dialog_v1, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_open_settings_dialog_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_open_settings_dialog_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT bool kodi_addon_is_setting_using_default(const char* id) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_is_setting_using_default(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_is_setting_using_default_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_is_setting_using_default_v1; /* Autogenerated */ + + if (id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_is_setting_using_default_v1( + id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_is_setting_using_default_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_is_setting_using_default_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_is_setting_using_default_v1(auto_gen_group.thisClassHdl, id); +} + +ATTR_DLL_EXPORT bool kodi_addon_get_setting_bool(const char* id, bool* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_bool(const char* id, bool* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_bool_v1; /* Autogenerated */ + + if (id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_get_setting_bool_v1(id /* CheckAPIUse_WAY_6b (0003) */, + *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_get_setting_bool_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_setting_bool_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_setting_bool_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_get_setting_int(const char* id, int* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_int(const char* id, int* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_int_v1; /* Autogenerated */ + + if (id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_get_setting_int_v1(id /* CheckAPIUse_WAY_6b (0003) */, + *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_get_setting_int_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_setting_int_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_setting_int_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_get_setting_float(const char* id, double* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_float(const char* id, double* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_float_v1; /* Autogenerated */ + + if (id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_get_setting_float_v1(id /* CheckAPIUse_WAY_6b (0003) */, + *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_get_setting_float_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_setting_float_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_setting_float_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_get_setting_string(const char* id, char** value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_get_setting_string(const char* id, char** value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_get_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_get_setting_string_v1; /* Autogenerated */ + + if (id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_get_setting_string_v1(id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_get_setting_string_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_get_setting_string_v1 t = ident.get().as(); + + *value = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_get_setting_string_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_set_setting_bool(const char* id, bool value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_bool(const char* id, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_bool_v1; /* Autogenerated */ + + if (id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_set_setting_bool_v1(id /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_set_setting_bool_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_set_setting_bool_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_set_setting_bool_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_set_setting_int(const char* id, int value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_int(const char* id, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_int_v1; /* Autogenerated */ + + if (id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_set_setting_int_v1(id /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_set_setting_int_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_set_setting_int_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_set_setting_int_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_set_setting_float(const char* id, double value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_float(const char* id, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_float_v1; /* Autogenerated */ + + if (id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_set_setting_float_v1(id /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_set_setting_float_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_set_setting_float_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_set_setting_float_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_set_setting_string(const char* id, const char* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_set_setting_string(const char* id, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_set_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_set_setting_string_v1; /* Autogenerated */ + + if (id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_set_setting_string_v1(id /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_set_setting_string_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_set_setting_string_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_set_setting_string_v1(auto_gen_group.thisClassHdl, id, value); +} + +ATTR_DLL_EXPORT char* kodi_addon_instance_get_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_addon_instance_get_user_path(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_user_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_user_path_v1; /* Autogenerated */ + + if (hdl == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_addon_instance_get_user_path_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_get_user_path_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_get_user_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_get_user_path_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_is_setting_using_default( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_is_setting_using_default( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_is_setting_using_default_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_is_setting_using_default_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_instance_is_setting_using_default_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_is_setting_using_default_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_is_setting_using_default_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_is_setting_using_default_v1(auto_gen_group.thisClassHdl, + hdl, id); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_bool( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_bool_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_get_setting_bool_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_get_setting_bool_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_get_setting_bool_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_get_setting_bool_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_int( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_int_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_get_setting_int_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_get_setting_int_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_get_setting_int_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_get_setting_int_v1(auto_gen_group.thisClassHdl, hdl, id, + value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_float( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_float( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_float_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_get_setting_float_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, *value /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_get_setting_float_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_get_setting_float_v1 t = ident.get().as(); + + *value = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_get_setting_float_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_string( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, char** value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_get_setting_string( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, char** value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_get_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_get_setting_string_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_addon_instance_get_setting_string_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_get_setting_string_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_get_setting_string_v1 t = ident.get().as(); + + *value = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_get_setting_string_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_bool(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + bool value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_bool( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_bool_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_set_setting_bool_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_set_setting_bool_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_set_setting_bool_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_set_setting_bool_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_int(const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, + const char* id, + int value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_int( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_int_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_set_setting_int_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_set_setting_int_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_set_setting_int_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_set_setting_int_v1(auto_gen_group.thisClassHdl, hdl, id, + value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_float( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_float( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_float_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_float_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_set_setting_float_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_set_setting_float_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_set_setting_float_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_set_setting_float_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_string( + const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, const char* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_addon_instance_set_setting_string( const KODI_ADDON_INSTANCE_BACKEND_HDL hdl, const char* id, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_addon_instance_set_setting_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_addon_instance_set_setting_string_v1; /* Autogenerated */ + + if (hdl == nullptr || id == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_addon_instance_set_setting_string_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + id /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_addon_base_h, funcParent_kodi_addon_instance_set_setting_string_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_addon_instance_set_setting_string_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.addon_base_h; + return auto_gen_group.kodi_addon_instance_set_setting_string_v1(auto_gen_group.thisClassHdl, hdl, + id, value); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.h b/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.h new file mode 100644 index 0000000000000..9cc5a334bbe98 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/addon_base.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/addon_base.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_addon_base_h; +struct directFuncToKodi_addon_base_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_addon_base_h : public IMsgHdl +{ +public: + CHdl_kodi_addon_base_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_addon_base_h* ifcToAddon); + +#ifndef KODI_INHIBIT_SHARED + bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) override; +#endif /* !KODI_INHIBIT_SHARED */ + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ + + // Calls from Kodi to addon + static enum ADDON_STATUS kodi_addon_create_v1(void* thisClassHdl, + const KODI_ADDON_INSTANCE_INFO* first_instance, + KODI_ADDON_HDL* hdl); // Added with API 1 + + static void kodi_addon_destroy_v1(void* thisClassHdl, KODI_ADDON_HDL hdl); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_setting_change_string_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + const char* value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_setting_change_boolean_v1(void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + bool value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_setting_change_integer_v1(void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + int value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_setting_change_float_v1(void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const char* name, + double value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_create_instance_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + KODI_HANDLE* instance); // Added with API 1 + + static void kodi_addon_destroy_instance_v1(void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const struct KODI_ADDON_INSTANCE_INFO* info, + const KODI_HANDLE instance); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_instance_setting_change_string_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + const char* value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_instance_setting_change_boolean_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + bool value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_instance_setting_change_integer_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + int value); // Added with API 1 + + static enum ADDON_STATUS kodi_addon_instance_setting_change_float_v1( + void* thisClassHdl, + const KODI_ADDON_HDL hdl, + const KODI_ADDON_INSTANCE_HDL instance_hdl, + const char* name, + double value); // Added with API 1 + + static KODI_ADDON_INSTANCE_HDL kodi_addon_instance_create_v1( + void* thisClassHdl, KODI_ADDON_INSTANCE_BACKEND_HDL kodi_hdl); // Added with API 1 + + static void kodi_addon_instance_destroy_v1(void* thisClassHdl, + KODI_ADDON_INSTANCE_HDL hdl); // Added with API 1 +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.cpp new file mode 100644 index 0000000000000..a7d20d2cc2f48 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.cpp @@ -0,0 +1,831 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "audio_engine.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_audio_engine_h::InitDirect(directFuncToAddon_audio_engine_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_audioengine_get_current_sink_format(struct AUDIO_ENGINE_FMT* fmt) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_get_current_sink_format(struct AUDIO_ENGINE_FMT* fmt) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_get_current_sink_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_get_current_sink_format_v1; /* Autogenerated */ + + if (fmt == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_get_current_sink_format_v1, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_get_current_sink_format_v1 t = ident.get().as(); + + std::get<1>(t).SetCStructure(fmt); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_get_current_sink_format_v1(auto_gen_group.thisClassHdl, + fmt); +} + +ATTR_DLL_EXPORT bool kodi_audioengine_is_planar_format(enum AudioEngineDataFormat format) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_is_planar_format(enum AudioEngineDataFormat format) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_is_planar_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_is_planar_format_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_is_planar_format_v1( + format /* CheckAPIUse_WAY_14a (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_is_planar_format_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_is_planar_format_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_is_planar_format_v1(auto_gen_group.thisClassHdl, format); +} + +ATTR_DLL_EXPORT KODI_AE_HDL kodi_audioengine_stream_make(const struct AUDIO_ENGINE_FMT* fmt, + unsigned int options) +{ + // Original API call: ATTR_DLL_EXPORT KODI_AE_HDL kodi_audioengine_stream_make(const struct AUDIO_ENGINE_FMT* fmt, unsigned int options) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_make_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_make_v1; /* Autogenerated */ + + if (fmt == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_audioengine_stream_make_v1(fmt /* CheckAPIUse_WAY_16 (0003) */, + options /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_make_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_make_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_make_v1(auto_gen_group.thisClassHdl, fmt, options); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_free(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_free(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_free_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_free_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_free_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_free_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_free_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_space(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_space(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_space_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_space_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_space_v1, in, out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_space_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_space_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_add_data(KODI_AE_HDL hdl, + uint8_t* const* data, + size_t planes, + size_t data_size, + unsigned int offset, + unsigned int frames, + unsigned int frame_size, + double pts, + bool hasDownmix, + double centerMixLevel) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_add_data(KODI_AE_HDL hdl, uint8_t* const* data, size_t planes, size_t data_size, unsigned int offset, unsigned int frames, unsigned int frame_size, double pts, bool hasDownmix, double centerMixLevel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple>, size_t /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */, double /* CheckAPIUse_WAY_11 (0006) */, bool /* CheckAPIUse_WAY_11 (0006) */, double /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_audioengine_stream_add_data_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_add_data_v1; /* Autogenerated */ + + if (hdl == nullptr || data == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + std::vector> ifc_data; /* CheckAPIUse_WAY_2 (0003) */ + ifc_data.resize(planes); /* CheckAPIUse_WAY_2 (0003) */ + for (size_t i = 0; i < planes; ++i) /* CheckAPIUse_WAY_2 (0003) */ + ifc_data[i] = + std::vector(data[i], data[i] + data_size); /* CheckAPIUse_WAY_2 (0003) */ + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_audioengine_stream_add_data_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + ifc_data /* CheckAPIUse_WAY_2 (0003) */, planes /* CheckAPIUse_WAY_10 (0003) */, + data_size /* CheckAPIUse_WAY_10 (0003) */, offset /* CheckAPIUse_WAY_10 (0003) */, + frames /* CheckAPIUse_WAY_10 (0003) */, frame_size /* CheckAPIUse_WAY_10 (0003) */, + pts /* CheckAPIUse_WAY_10 (0003) */, hasDownmix /* CheckAPIUse_WAY_10 (0003) */, + centerMixLevel /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_add_data_v1, in, out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_add_data_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_add_data_v1( + auto_gen_group.thisClassHdl, hdl, data, planes, data_size, offset, frames, frame_size, pts, + hasDownmix, centerMixLevel); +} + +ATTR_DLL_EXPORT double kodi_audioengine_stream_get_delay(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_delay(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_delay_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_delay_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_delay_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_delay_v1, in, out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_delay_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_delay_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_buffering(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_buffering(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_buffering_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_buffering_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_is_buffering_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_is_buffering_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_is_buffering_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_is_buffering_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_time(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_time(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_cache_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_cache_time_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_cache_time_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_cache_time_v1, in, + out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_cache_time_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_cache_time_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_total(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_cache_total(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_cache_total_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_cache_total_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_cache_total_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_cache_total_v1, in, + out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_cache_total_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_cache_total_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_pause(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_pause(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_pause_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_pause_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_pause_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_pause_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_pause_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_resume(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_resume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_resume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_resume_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_resume_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_resume_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_resume_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_drain(KODI_AE_HDL hdl, bool wait) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_drain(KODI_AE_HDL hdl, bool wait) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_drain_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_drain_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_drain_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + wait /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_drain_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_drain_v1(auto_gen_group.thisClassHdl, hdl, wait); +} + +ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_draining(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_draining(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_draining_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_draining_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_is_draining_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_is_draining_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_is_draining_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_is_draining_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_drained(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_audioengine_stream_is_drained(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_is_drained_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_is_drained_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_is_drained_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_is_drained_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_is_drained_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_is_drained_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_flush(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_flush(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_flush_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_flush_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_flush_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_flush_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_flush_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT float kodi_audioengine_stream_get_volume(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_audioengine_stream_get_volume(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_volume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_volume_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_volume_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_volume_v1, in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_volume_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_volume_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_set_volume(KODI_AE_HDL hdl, float volume) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_volume(KODI_AE_HDL hdl, float volume) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_volume_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_volume_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_set_volume_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + volume /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_set_volume_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_set_volume_v1(auto_gen_group.thisClassHdl, hdl, volume); +} + +ATTR_DLL_EXPORT float kodi_audioengine_stream_get_amplification(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_audioengine_stream_get_amplification(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_amplification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_amplification_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_amplification_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_amplification_v1, in, + out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_amplification_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_amplification_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_set_amplification(KODI_AE_HDL hdl, float amplify) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_amplification(KODI_AE_HDL hdl, float amplify) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_amplification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_amplification_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_set_amplification_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + amplify /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_set_amplification_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_set_amplification_v1(auto_gen_group.thisClassHdl, hdl, + amplify); +} + +ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_frame_size(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_frame_size(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_frame_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_frame_size_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_frame_size_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_frame_size_v1, in, + out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_frame_size_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_frame_size_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_channel_count(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_channel_count(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_channel_count_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_channel_count_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_channel_count_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_channel_count_v1, in, + out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_channel_count_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_channel_count_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_sample_rate(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_audioengine_stream_get_sample_rate(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_sample_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_sample_rate_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_sample_rate_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_sample_rate_v1, in, + out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_sample_rate_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_sample_rate_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT enum AudioEngineDataFormat kodi_audioengine_stream_get_data_format(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT enum AudioEngineDataFormat kodi_audioengine_stream_get_data_format( KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_data_format_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_data_format_v1; /* Autogenerated */ + + if (hdl == nullptr) + return AUDIOENGINE_FMT_INVALID; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_data_format_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_data_format_v1, in, + out)) + return AUDIOENGINE_FMT_INVALID; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_data_format_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_3 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_data_format_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT double kodi_audioengine_stream_get_resample_ratio(KODI_AE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_audioengine_stream_get_resample_ratio(KODI_AE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_get_resample_ratio_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_get_resample_ratio_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_get_resample_ratio_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_get_resample_ratio_v1, in, + out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_audioengine_stream_get_resample_ratio_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + return auto_gen_group.kodi_audioengine_stream_get_resample_ratio_v1(auto_gen_group.thisClassHdl, + hdl); +} + +ATTR_DLL_EXPORT void kodi_audioengine_stream_set_resample_ratio(KODI_AE_HDL hdl, double ratio) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_audioengine_stream_set_resample_ratio(KODI_AE_HDL hdl, double ratio) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_audioengine_stream_set_resample_ratio_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_audioengine_stream_set_resample_ratio_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_audioengine_stream_set_resample_ratio_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + ratio /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_audio_engine_h, funcParent_kodi_audioengine_stream_set_resample_ratio_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.audio_engine_h; + auto_gen_group.kodi_audioengine_stream_set_resample_ratio_v1(auto_gen_group.thisClassHdl, hdl, + ratio); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.h b/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.h new file mode 100644 index 0000000000000..cec070a014115 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/audio_engine.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/audio_engine.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_audio_engine_h; +struct directFuncToKodi_audio_engine_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_audio_engine_h : public IMsgHdl +{ +public: + CHdl_kodi_audio_engine_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_audio_engine_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/dl/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/dl/CMakeLists.txt new file mode 100644 index 0000000000000..42d26f54f98df --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/dl/CMakeLists.txt @@ -0,0 +1,13 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + kodi_api_1.c +) + +set(HEADERS +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api_dl) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/dl/kodi_api_1.c b/xbmc/addons/kodi-dev-kit/src/addon/api/dl/kodi_api_1.c new file mode 100644 index 0000000000000..593d684c99f15 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/dl/kodi_api_1.c @@ -0,0 +1,565 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +/* API_HASH<0c5b48e579a4964b3a084023b09d50aa83d1b386854ed07118e2cb192466c7c7> */ + +#include "../../../../include/kodi/c-api/dl/kodi_api_1.h" +#include "include/kodi/c-api/addon_base.h" +#include "include/kodi/c-api/audio_engine.h" +#include "include/kodi/c-api/filesystem.h" +#include "include/kodi/c-api/general.h" +#include "include/kodi/c-api/gui/dialogs/context_menu.h" +#include "include/kodi/c-api/gui/dialogs/filebrowser.h" +#include "include/kodi/c-api/gui/dialogs/keyboard.h" +#include "include/kodi/c-api/gui/dialogs/numeric.h" +#include "include/kodi/c-api/gui/dialogs/ok.h" +#include "include/kodi/c-api/gui/dialogs/select.h" +#include "include/kodi/c-api/gui/dialogs/text_viewer.h" +#include "include/kodi/c-api/gui/dialogs/yes_no.h" +#include "include/kodi/c-api/gui/general.h" +#include "include/kodi/c-api/monitor.h" +#include "include/kodi/c-api/network.h" + +ATTR_DL_DLL_EXPORT bool load_kodi_api_1(struct kodi_api_1* api) +{ + if (api == NULL) + { + return false; + } + + // addon_base.h + api->kodi_addon_get_addon_path = &kodi_addon_get_addon_path; + api->kodi_addon_get_info = &kodi_addon_get_info; + api->kodi_addon_get_lib_path = &kodi_addon_get_lib_path; + api->kodi_addon_get_setting_bool = &kodi_addon_get_setting_bool; + api->kodi_addon_get_setting_float = &kodi_addon_get_setting_float; + api->kodi_addon_get_setting_int = &kodi_addon_get_setting_int; + api->kodi_addon_get_setting_string = &kodi_addon_get_setting_string; + api->kodi_addon_get_temp_path = &kodi_addon_get_temp_path; + api->kodi_addon_get_user_path = &kodi_addon_get_user_path; + api->kodi_addon_instance_get_setting_bool = &kodi_addon_instance_get_setting_bool; + api->kodi_addon_instance_get_setting_float = &kodi_addon_instance_get_setting_float; + api->kodi_addon_instance_get_setting_int = &kodi_addon_instance_get_setting_int; + api->kodi_addon_instance_get_setting_string = &kodi_addon_instance_get_setting_string; + api->kodi_addon_instance_get_user_path = &kodi_addon_instance_get_user_path; + api->kodi_addon_instance_is_setting_using_default = &kodi_addon_instance_is_setting_using_default; + api->kodi_addon_instance_set_setting_bool = &kodi_addon_instance_set_setting_bool; + api->kodi_addon_instance_set_setting_float = &kodi_addon_instance_set_setting_float; + api->kodi_addon_instance_set_setting_int = &kodi_addon_instance_set_setting_int; + api->kodi_addon_instance_set_setting_string = &kodi_addon_instance_set_setting_string; + api->kodi_addon_is_setting_using_default = &kodi_addon_is_setting_using_default; + api->kodi_addon_localized_string = &kodi_addon_localized_string; + api->kodi_addon_open_settings_dialog = &kodi_addon_open_settings_dialog; + api->kodi_addon_set_setting_bool = &kodi_addon_set_setting_bool; + api->kodi_addon_set_setting_float = &kodi_addon_set_setting_float; + api->kodi_addon_set_setting_int = &kodi_addon_set_setting_int; + api->kodi_addon_set_setting_string = &kodi_addon_set_setting_string; + api->kodi_check_main_shared = &kodi_check_main_shared; + api->kodi_deinit = &kodi_deinit; + api->kodi_init = &kodi_init; + api->kodi_log = &kodi_log; + api->kodi_process = &kodi_process; + + // audio_engine.h + api->kodi_audioengine_get_current_sink_format = &kodi_audioengine_get_current_sink_format; + api->kodi_audioengine_is_planar_format = &kodi_audioengine_is_planar_format; + api->kodi_audioengine_stream_add_data = &kodi_audioengine_stream_add_data; + api->kodi_audioengine_stream_drain = &kodi_audioengine_stream_drain; + api->kodi_audioengine_stream_flush = &kodi_audioengine_stream_flush; + api->kodi_audioengine_stream_free = &kodi_audioengine_stream_free; + api->kodi_audioengine_stream_get_amplification = &kodi_audioengine_stream_get_amplification; + api->kodi_audioengine_stream_get_cache_time = &kodi_audioengine_stream_get_cache_time; + api->kodi_audioengine_stream_get_cache_total = &kodi_audioengine_stream_get_cache_total; + api->kodi_audioengine_stream_get_channel_count = &kodi_audioengine_stream_get_channel_count; + api->kodi_audioengine_stream_get_data_format = &kodi_audioengine_stream_get_data_format; + api->kodi_audioengine_stream_get_delay = &kodi_audioengine_stream_get_delay; + api->kodi_audioengine_stream_get_frame_size = &kodi_audioengine_stream_get_frame_size; + api->kodi_audioengine_stream_get_resample_ratio = &kodi_audioengine_stream_get_resample_ratio; + api->kodi_audioengine_stream_get_sample_rate = &kodi_audioengine_stream_get_sample_rate; + api->kodi_audioengine_stream_get_space = &kodi_audioengine_stream_get_space; + api->kodi_audioengine_stream_get_volume = &kodi_audioengine_stream_get_volume; + api->kodi_audioengine_stream_is_buffering = &kodi_audioengine_stream_is_buffering; + api->kodi_audioengine_stream_is_drained = &kodi_audioengine_stream_is_drained; + api->kodi_audioengine_stream_is_draining = &kodi_audioengine_stream_is_draining; + api->kodi_audioengine_stream_make = &kodi_audioengine_stream_make; + api->kodi_audioengine_stream_pause = &kodi_audioengine_stream_pause; + api->kodi_audioengine_stream_resume = &kodi_audioengine_stream_resume; + api->kodi_audioengine_stream_set_amplification = &kodi_audioengine_stream_set_amplification; + api->kodi_audioengine_stream_set_resample_ratio = &kodi_audioengine_stream_set_resample_ratio; + api->kodi_audioengine_stream_set_volume = &kodi_audioengine_stream_set_volume; + + // filesystem.h + api->kodi_vfs_can_open_directory = &kodi_vfs_can_open_directory; + api->kodi_vfs_copy_file = &kodi_vfs_copy_file; + api->kodi_vfs_create_directory = &kodi_vfs_create_directory; + api->kodi_vfs_delete_file = &kodi_vfs_delete_file; + api->kodi_vfs_directory_exists = &kodi_vfs_directory_exists; + api->kodi_vfs_file_at_end = &kodi_vfs_file_at_end; + api->kodi_vfs_file_close = &kodi_vfs_file_close; + api->kodi_vfs_file_curl_add_option = &kodi_vfs_file_curl_add_option; + api->kodi_vfs_file_curl_create = &kodi_vfs_file_curl_create; + api->kodi_vfs_file_curl_open = &kodi_vfs_file_curl_open; + api->kodi_vfs_file_exists = &kodi_vfs_file_exists; + api->kodi_vfs_file_flush = &kodi_vfs_file_flush; + api->kodi_vfs_file_get_chunk_size = &kodi_vfs_file_get_chunk_size; + api->kodi_vfs_file_get_download_speed = &kodi_vfs_file_get_download_speed; + api->kodi_vfs_file_get_length = &kodi_vfs_file_get_length; + api->kodi_vfs_file_get_position = &kodi_vfs_file_get_position; + api->kodi_vfs_file_get_property_value = &kodi_vfs_file_get_property_value; + api->kodi_vfs_file_get_property_values = &kodi_vfs_file_get_property_values; + api->kodi_vfs_file_io_ctl_get_cache_status = &kodi_vfs_file_io_ctl_get_cache_status; + api->kodi_vfs_file_io_ctl_get_seek_possible = &kodi_vfs_file_io_ctl_get_seek_possible; + api->kodi_vfs_file_io_ctl_set_cache_rate = &kodi_vfs_file_io_ctl_set_cache_rate; + api->kodi_vfs_file_io_ctl_set_retry = &kodi_vfs_file_io_ctl_set_retry; + api->kodi_vfs_file_open = &kodi_vfs_file_open; + api->kodi_vfs_file_open_for_write = &kodi_vfs_file_open_for_write; + api->kodi_vfs_file_read = &kodi_vfs_file_read; + api->kodi_vfs_file_read_line = &kodi_vfs_file_read_line; + api->kodi_vfs_file_seek = &kodi_vfs_file_seek; + api->kodi_vfs_file_truncate = &kodi_vfs_file_truncate; + api->kodi_vfs_file_write = &kodi_vfs_file_write; + api->kodi_vfs_free_directory = &kodi_vfs_free_directory; + api->kodi_vfs_get_cache_thumb_name = &kodi_vfs_get_cache_thumb_name; + api->kodi_vfs_get_content_type = &kodi_vfs_get_content_type; + api->kodi_vfs_get_cookies = &kodi_vfs_get_cookies; + api->kodi_vfs_get_directory = &kodi_vfs_get_directory; + api->kodi_vfs_get_disk_space = &kodi_vfs_get_disk_space; + api->kodi_vfs_get_file_md5 = &kodi_vfs_get_file_md5; + api->kodi_vfs_get_mime_type = &kodi_vfs_get_mime_type; + api->kodi_vfs_http_header_close = &kodi_vfs_http_header_close; + api->kodi_vfs_http_header_get_charset = &kodi_vfs_http_header_get_charset; + api->kodi_vfs_http_header_get_header = &kodi_vfs_http_header_get_header; + api->kodi_vfs_http_header_get_mime_type = &kodi_vfs_http_header_get_mime_type; + api->kodi_vfs_http_header_get_proto_line = &kodi_vfs_http_header_get_proto_line; + api->kodi_vfs_http_header_get_value = &kodi_vfs_http_header_get_value; + api->kodi_vfs_http_header_get_values = &kodi_vfs_http_header_get_values; + api->kodi_vfs_http_header_open = &kodi_vfs_http_header_open; + api->kodi_vfs_is_internet_stream = &kodi_vfs_is_internet_stream; + api->kodi_vfs_is_local = &kodi_vfs_is_local; + api->kodi_vfs_is_on_lan = &kodi_vfs_is_on_lan; + api->kodi_vfs_is_remote = &kodi_vfs_is_remote; + api->kodi_vfs_is_url = &kodi_vfs_is_url; + api->kodi_vfs_make_legal_filename = &kodi_vfs_make_legal_filename; + api->kodi_vfs_make_legal_path = &kodi_vfs_make_legal_path; + api->kodi_vfs_remove_directory = &kodi_vfs_remove_directory; + api->kodi_vfs_remove_directory_recursive = &kodi_vfs_remove_directory_recursive; + api->kodi_vfs_rename_file = &kodi_vfs_rename_file; + api->kodi_vfs_stat_file = &kodi_vfs_stat_file; + api->kodi_vfs_translate_special_protocol = &kodi_vfs_translate_special_protocol; + + // general.h + api->kodi_change_keyboard_layout = &kodi_change_keyboard_layout; + api->kodi_get_current_skin_id = &kodi_get_current_skin_id; + api->kodi_get_digest = &kodi_get_digest; + api->kodi_get_free_mem = &kodi_get_free_mem; + api->kodi_get_global_idle_time = &kodi_get_global_idle_time; + api->kodi_get_keyboard_layout = &kodi_get_keyboard_layout; + api->kodi_get_language = &kodi_get_language; + api->kodi_get_localized_string = &kodi_get_localized_string; + api->kodi_get_region = &kodi_get_region; + api->kodi_is_addon_avilable = &kodi_is_addon_avilable; + api->kodi_play_sfx = &kodi_play_sfx; + api->kodi_queue_notification = &kodi_queue_notification; + api->kodi_stop_sfx = &kodi_stop_sfx; + api->kodi_unknown_to_utf8 = &kodi_unknown_to_utf8; + api->kodi_version = &kodi_version; + + // monitor.h + api->kodi_monitor_abort_requested = &kodi_monitor_abort_requested; + api->kodi_monitor_wait_for_abort = &kodi_monitor_wait_for_abort; + + // network.h + api->kodi_network_dns_lookup = &kodi_network_dns_lookup; + api->kodi_network_get_hostname = &kodi_network_get_hostname; + api->kodi_network_get_ip_address = &kodi_network_get_ip_address; + api->kodi_network_get_user_agent = &kodi_network_get_user_agent; + api->kodi_network_is_host_on_lan = &kodi_network_is_host_on_lan; + api->kodi_network_is_local_host = &kodi_network_is_local_host; + api->kodi_network_url_encode = &kodi_network_url_encode; + api->kodi_network_wake_on_lan = &kodi_network_wake_on_lan; + + // addon-instance/audioencoder.h + api->kodi_addon_audioencoder_seek = &kodi_addon_audioencoder_seek; + api->kodi_addon_audioencoder_write = &kodi_addon_audioencoder_write; + + // addon-instance/game.h + api->kodi_addon_game_add_stream_data = &kodi_addon_game_add_stream_data; + api->kodi_addon_game_close = &kodi_addon_game_close; + api->kodi_addon_game_close_stream = &kodi_addon_game_close_stream; + api->kodi_addon_game_get_stream_buffer = &kodi_addon_game_get_stream_buffer; + api->kodi_addon_game_input_event = &kodi_addon_game_input_event; + api->kodi_addon_game_open_stream = &kodi_addon_game_open_stream; + api->kodi_addon_game_release_stream_buffer = &kodi_addon_game_release_stream_buffer; + api->kodi_addon_hw_get_proc_address = &kodi_addon_hw_get_proc_address; + + // addon-instance/inputstream.h + api->kodi_addon_inputstream_allocate_demux_packet = &kodi_addon_inputstream_allocate_demux_packet; + api->kodi_addon_inputstream_allocate_encrypted_demux_packet = + &kodi_addon_inputstream_allocate_encrypted_demux_packet; + api->kodi_addon_inputstream_free_demux_packet = &kodi_addon_inputstream_free_demux_packet; + + // addon-instance/peripheral.h + api->kodi_addon_peripheral_feature_count = &kodi_addon_peripheral_feature_count; + api->kodi_addon_peripheral_feature_type = &kodi_addon_peripheral_feature_type; + api->kodi_addon_peripheral_refresh_button_maps = &kodi_addon_peripheral_refresh_button_maps; + api->kodi_addon_peripheral_trigger_scan = &kodi_addon_peripheral_trigger_scan; + + // addon-instance/pvr.h + api->kodi_addon_pvr_add_menu_hook = &kodi_addon_pvr_add_menu_hook; + api->kodi_addon_pvr_connection_state_change = &kodi_addon_pvr_connection_state_change; + api->kodi_addon_pvr_epg_event_state_change = &kodi_addon_pvr_epg_event_state_change; + api->kodi_addon_pvr_get_epg_max_future_days = &kodi_addon_pvr_get_epg_max_future_days; + api->kodi_addon_pvr_get_epg_max_past_days = &kodi_addon_pvr_get_epg_max_past_days; + api->kodi_addon_pvr_recording_notification = &kodi_addon_pvr_recording_notification; + api->kodi_addon_pvr_transfer_channel_entry = &kodi_addon_pvr_transfer_channel_entry; + api->kodi_addon_pvr_transfer_channel_group = &kodi_addon_pvr_transfer_channel_group; + api->kodi_addon_pvr_transfer_channel_group_member = &kodi_addon_pvr_transfer_channel_group_member; + api->kodi_addon_pvr_transfer_epg_entry = &kodi_addon_pvr_transfer_epg_entry; + api->kodi_addon_pvr_transfer_provider_entry = &kodi_addon_pvr_transfer_provider_entry; + api->kodi_addon_pvr_transfer_recording_entry = &kodi_addon_pvr_transfer_recording_entry; + api->kodi_addon_pvr_transfer_timer_entry = &kodi_addon_pvr_transfer_timer_entry; + api->kodi_addon_pvr_trigger_channel_groups_update = &kodi_addon_pvr_trigger_channel_groups_update; + api->kodi_addon_pvr_trigger_channel_update = &kodi_addon_pvr_trigger_channel_update; + api->kodi_addon_pvr_trigger_epg_update = &kodi_addon_pvr_trigger_epg_update; + api->kodi_addon_pvr_trigger_providers_update = &kodi_addon_pvr_trigger_providers_update; + api->kodi_addon_pvr_trigger_recording_update = &kodi_addon_pvr_trigger_recording_update; + api->kodi_addon_pvr_trigger_timer_update = &kodi_addon_pvr_trigger_timer_update; + + // addon-instance/screensaver.h + api->kodi_addon_screensaver_get_properties = &kodi_addon_screensaver_get_properties; + + // addon-instance/vfs.h + api->kodi_addon_vfs_get_dir_cb__get_keyboard_input = + &kodi_addon_vfs_get_dir_cb__get_keyboard_input; + api->kodi_addon_vfs_get_dir_cb__require_authentication = + &kodi_addon_vfs_get_dir_cb__require_authentication; + api->kodi_addon_vfs_get_dir_cb__set_error_dialog = &kodi_addon_vfs_get_dir_cb__set_error_dialog; + + // addon-instance/videocodec.h + api->kodi_addon_videocodec_get_frame_buffer = &kodi_addon_videocodec_get_frame_buffer; + api->kodi_addon_videocodec_release_frame_buffer = &kodi_addon_videocodec_release_frame_buffer; + + // addon-instance/visualization.h + api->kodi_addon_visualization_clear_presets = &kodi_addon_visualization_clear_presets; + api->kodi_addon_visualization_get_properties = &kodi_addon_visualization_get_properties; + api->kodi_addon_visualization_transfer_preset = &kodi_addon_visualization_transfer_preset; + + // gui/general.h + api->kodi_gui_get_current_window_dialog_id = &kodi_gui_get_current_window_dialog_id; + api->kodi_gui_get_current_window_id = &kodi_gui_get_current_window_id; + api->kodi_gui_get_hw_context = &kodi_gui_get_hw_context; + api->kodi_gui_get_screen_height = &kodi_gui_get_screen_height; + api->kodi_gui_get_screen_width = &kodi_gui_get_screen_width; + api->kodi_gui_get_video_resolution = &kodi_gui_get_video_resolution; + api->kodi_gui_lock = &kodi_gui_lock; + api->kodi_gui_unlock = &kodi_gui_unlock; + + // gui/list_item.h + api->kodi_gui_listitem_create = &kodi_gui_listitem_create; + api->kodi_gui_listitem_destroy = &kodi_gui_listitem_destroy; + api->kodi_gui_listitem_get_art = &kodi_gui_listitem_get_art; + api->kodi_gui_listitem_get_label = &kodi_gui_listitem_get_label; + api->kodi_gui_listitem_get_label2 = &kodi_gui_listitem_get_label2; + api->kodi_gui_listitem_get_path = &kodi_gui_listitem_get_path; + api->kodi_gui_listitem_get_property = &kodi_gui_listitem_get_property; + api->kodi_gui_listitem_is_selected = &kodi_gui_listitem_is_selected; + api->kodi_gui_listitem_select = &kodi_gui_listitem_select; + api->kodi_gui_listitem_set_art = &kodi_gui_listitem_set_art; + api->kodi_gui_listitem_set_label = &kodi_gui_listitem_set_label; + api->kodi_gui_listitem_set_label2 = &kodi_gui_listitem_set_label2; + api->kodi_gui_listitem_set_path = &kodi_gui_listitem_set_path; + api->kodi_gui_listitem_set_property = &kodi_gui_listitem_set_property; + + // gui/window.h + api->kodi_gui_window_add_list_item = &kodi_gui_window_add_list_item; + api->kodi_gui_window_clear_item_list = &kodi_gui_window_clear_item_list; + api->kodi_gui_window_clear_properties = &kodi_gui_window_clear_properties; + api->kodi_gui_window_clear_property = &kodi_gui_window_clear_property; + api->kodi_gui_window_close = &kodi_gui_window_close; + api->kodi_gui_window_create = &kodi_gui_window_create; + api->kodi_gui_window_destroy = &kodi_gui_window_destroy; + api->kodi_gui_window_do_modal = &kodi_gui_window_do_modal; + api->kodi_gui_window_get_control_button = &kodi_gui_window_get_control_button; + api->kodi_gui_window_get_control_edit = &kodi_gui_window_get_control_edit; + api->kodi_gui_window_get_control_fade_label = &kodi_gui_window_get_control_fade_label; + api->kodi_gui_window_get_control_image = &kodi_gui_window_get_control_image; + api->kodi_gui_window_get_control_label = &kodi_gui_window_get_control_label; + api->kodi_gui_window_get_control_progress = &kodi_gui_window_get_control_progress; + api->kodi_gui_window_get_control_radio_button = &kodi_gui_window_get_control_radio_button; + api->kodi_gui_window_get_control_render_addon = &kodi_gui_window_get_control_render_addon; + api->kodi_gui_window_get_control_settings_slider = &kodi_gui_window_get_control_settings_slider; + api->kodi_gui_window_get_control_slider = &kodi_gui_window_get_control_slider; + api->kodi_gui_window_get_control_spin = &kodi_gui_window_get_control_spin; + api->kodi_gui_window_get_control_text_box = &kodi_gui_window_get_control_text_box; + api->kodi_gui_window_get_current_container_id = &kodi_gui_window_get_current_container_id; + api->kodi_gui_window_get_current_list_position = &kodi_gui_window_get_current_list_position; + api->kodi_gui_window_get_focus_id = &kodi_gui_window_get_focus_id; + api->kodi_gui_window_get_list_item = &kodi_gui_window_get_list_item; + api->kodi_gui_window_get_list_size = &kodi_gui_window_get_list_size; + api->kodi_gui_window_get_property = &kodi_gui_window_get_property; + api->kodi_gui_window_get_property_bool = &kodi_gui_window_get_property_bool; + api->kodi_gui_window_get_property_double = &kodi_gui_window_get_property_double; + api->kodi_gui_window_get_property_int = &kodi_gui_window_get_property_int; + api->kodi_gui_window_mark_dirty_region = &kodi_gui_window_mark_dirty_region; + api->kodi_gui_window_remove_list_item = &kodi_gui_window_remove_list_item; + api->kodi_gui_window_remove_list_item_from_position = + &kodi_gui_window_remove_list_item_from_position; + api->kodi_gui_window_set_container_content = &kodi_gui_window_set_container_content; + api->kodi_gui_window_set_container_property = &kodi_gui_window_set_container_property; + api->kodi_gui_window_set_control_label = &kodi_gui_window_set_control_label; + api->kodi_gui_window_set_control_selected = &kodi_gui_window_set_control_selected; + api->kodi_gui_window_set_control_visible = &kodi_gui_window_set_control_visible; + api->kodi_gui_window_set_current_list_position = &kodi_gui_window_set_current_list_position; + api->kodi_gui_window_set_focus_id = &kodi_gui_window_set_focus_id; + api->kodi_gui_window_set_property = &kodi_gui_window_set_property; + api->kodi_gui_window_set_property_bool = &kodi_gui_window_set_property_bool; + api->kodi_gui_window_set_property_double = &kodi_gui_window_set_property_double; + api->kodi_gui_window_set_property_int = &kodi_gui_window_set_property_int; + api->kodi_gui_window_show = &kodi_gui_window_show; + + // gui/controls/button.h + api->kodi_gui_controls_button_get_label = &kodi_gui_controls_button_get_label; + api->kodi_gui_controls_button_get_label2 = &kodi_gui_controls_button_get_label2; + api->kodi_gui_controls_button_set_enabled = &kodi_gui_controls_button_set_enabled; + api->kodi_gui_controls_button_set_label = &kodi_gui_controls_button_set_label; + api->kodi_gui_controls_button_set_label2 = &kodi_gui_controls_button_set_label2; + api->kodi_gui_controls_button_set_visible = &kodi_gui_controls_button_set_visible; + + // gui/controls/edit.h + api->kodi_gui_controls_edit_get_cursor_position = &kodi_gui_controls_edit_get_cursor_position; + api->kodi_gui_controls_edit_get_label = &kodi_gui_controls_edit_get_label; + api->kodi_gui_controls_edit_get_text = &kodi_gui_controls_edit_get_text; + api->kodi_gui_controls_edit_set_cursor_position = &kodi_gui_controls_edit_set_cursor_position; + api->kodi_gui_controls_edit_set_enabled = &kodi_gui_controls_edit_set_enabled; + api->kodi_gui_controls_edit_set_input_type = &kodi_gui_controls_edit_set_input_type; + api->kodi_gui_controls_edit_set_label = &kodi_gui_controls_edit_set_label; + api->kodi_gui_controls_edit_set_text = &kodi_gui_controls_edit_set_text; + api->kodi_gui_controls_edit_set_visible = &kodi_gui_controls_edit_set_visible; + + // gui/controls/fade_label.h + api->kodi_gui_controls_fade_label_add_label = &kodi_gui_controls_fade_label_add_label; + api->kodi_gui_controls_fade_label_get_label = &kodi_gui_controls_fade_label_get_label; + api->kodi_gui_controls_fade_label_reset = &kodi_gui_controls_fade_label_reset; + api->kodi_gui_controls_fade_label_set_scrolling = &kodi_gui_controls_fade_label_set_scrolling; + api->kodi_gui_controls_fade_label_set_visible = &kodi_gui_controls_fade_label_set_visible; + + // gui/controls/image.h + api->kodi_gui_controls_image_set_color_diffuse = &kodi_gui_controls_image_set_color_diffuse; + api->kodi_gui_controls_image_set_filename = &kodi_gui_controls_image_set_filename; + api->kodi_gui_controls_image_set_visible = &kodi_gui_controls_image_set_visible; + + // gui/controls/label.h + api->kodi_gui_controls_label_get_label = &kodi_gui_controls_label_get_label; + api->kodi_gui_controls_label_set_label = &kodi_gui_controls_label_set_label; + api->kodi_gui_controls_label_set_visible = &kodi_gui_controls_label_set_visible; + + // gui/controls/progress.h + api->kodi_gui_controls_progress_get_percentage = &kodi_gui_controls_progress_get_percentage; + api->kodi_gui_controls_progress_set_percentage = &kodi_gui_controls_progress_set_percentage; + api->kodi_gui_controls_progress_set_visible = &kodi_gui_controls_progress_set_visible; + + // gui/controls/radio_button.h + api->kodi_gui_controls_radio_button_get_label = &kodi_gui_controls_radio_button_get_label; + api->kodi_gui_controls_radio_button_is_selected = &kodi_gui_controls_radio_button_is_selected; + api->kodi_gui_controls_radio_button_set_enabled = &kodi_gui_controls_radio_button_set_enabled; + api->kodi_gui_controls_radio_button_set_label = &kodi_gui_controls_radio_button_set_label; + api->kodi_gui_controls_radio_button_set_selected = &kodi_gui_controls_radio_button_set_selected; + api->kodi_gui_controls_radio_button_set_visible = &kodi_gui_controls_radio_button_set_visible; + + // gui/controls/rendering.h + api->kodi_gui_controls_radio_rendering_destroy = &kodi_gui_controls_radio_rendering_destroy; + + // gui/controls/settings_slider.h + api->kodi_gui_controls_settings_slider_get_float_value = + &kodi_gui_controls_settings_slider_get_float_value; + api->kodi_gui_controls_settings_slider_get_int_value = + &kodi_gui_controls_settings_slider_get_int_value; + api->kodi_gui_controls_settings_slider_get_percentage = + &kodi_gui_controls_settings_slider_get_percentage; + api->kodi_gui_controls_settings_slider_reset = &kodi_gui_controls_settings_slider_reset; + api->kodi_gui_controls_settings_slider_set_enabled = + &kodi_gui_controls_settings_slider_set_enabled; + api->kodi_gui_controls_settings_slider_set_float_interval = + &kodi_gui_controls_settings_slider_set_float_interval; + api->kodi_gui_controls_settings_slider_set_float_range = + &kodi_gui_controls_settings_slider_set_float_range; + api->kodi_gui_controls_settings_slider_set_float_value = + &kodi_gui_controls_settings_slider_set_float_value; + api->kodi_gui_controls_settings_slider_set_int_interval = + &kodi_gui_controls_settings_slider_set_int_interval; + api->kodi_gui_controls_settings_slider_set_int_range = + &kodi_gui_controls_settings_slider_set_int_range; + api->kodi_gui_controls_settings_slider_set_int_value = + &kodi_gui_controls_settings_slider_set_int_value; + api->kodi_gui_controls_settings_slider_set_percentage = + &kodi_gui_controls_settings_slider_set_percentage; + api->kodi_gui_controls_settings_slider_set_text = &kodi_gui_controls_settings_slider_set_text; + api->kodi_gui_controls_settings_slider_set_visible = + &kodi_gui_controls_settings_slider_set_visible; + + // gui/controls/slider.h + api->kodi_gui_controls_slider_get_description = &kodi_gui_controls_slider_get_description; + api->kodi_gui_controls_slider_get_float_value = &kodi_gui_controls_slider_get_float_value; + api->kodi_gui_controls_slider_get_int_value = &kodi_gui_controls_slider_get_int_value; + api->kodi_gui_controls_slider_get_percentage = &kodi_gui_controls_slider_get_percentage; + api->kodi_gui_controls_slider_reset = &kodi_gui_controls_slider_reset; + api->kodi_gui_controls_slider_set_enabled = &kodi_gui_controls_slider_set_enabled; + api->kodi_gui_controls_slider_set_float_interval = &kodi_gui_controls_slider_set_float_interval; + api->kodi_gui_controls_slider_set_float_range = &kodi_gui_controls_slider_set_float_range; + api->kodi_gui_controls_slider_set_float_value = &kodi_gui_controls_slider_set_float_value; + api->kodi_gui_controls_slider_set_int_interval = &kodi_gui_controls_slider_set_int_interval; + api->kodi_gui_controls_slider_set_int_range = &kodi_gui_controls_slider_set_int_range; + api->kodi_gui_controls_slider_set_int_value = &kodi_gui_controls_slider_set_int_value; + api->kodi_gui_controls_slider_set_percentage = &kodi_gui_controls_slider_set_percentage; + api->kodi_gui_controls_slider_set_visible = &kodi_gui_controls_slider_set_visible; + + // gui/controls/spin.h + api->kodi_gui_controls_spin_add_int_label = &kodi_gui_controls_spin_add_int_label; + api->kodi_gui_controls_spin_add_string_label = &kodi_gui_controls_spin_add_string_label; + api->kodi_gui_controls_spin_get_float_value = &kodi_gui_controls_spin_get_float_value; + api->kodi_gui_controls_spin_get_int_value = &kodi_gui_controls_spin_get_int_value; + api->kodi_gui_controls_spin_get_string_value = &kodi_gui_controls_spin_get_string_value; + api->kodi_gui_controls_spin_reset = &kodi_gui_controls_spin_reset; + api->kodi_gui_controls_spin_set_enabled = &kodi_gui_controls_spin_set_enabled; + api->kodi_gui_controls_spin_set_float_interval = &kodi_gui_controls_spin_set_float_interval; + api->kodi_gui_controls_spin_set_float_range = &kodi_gui_controls_spin_set_float_range; + api->kodi_gui_controls_spin_set_float_value = &kodi_gui_controls_spin_set_float_value; + api->kodi_gui_controls_spin_set_int_range = &kodi_gui_controls_spin_set_int_range; + api->kodi_gui_controls_spin_set_int_value = &kodi_gui_controls_spin_set_int_value; + api->kodi_gui_controls_spin_set_string_value = &kodi_gui_controls_spin_set_string_value; + api->kodi_gui_controls_spin_set_text = &kodi_gui_controls_spin_set_text; + api->kodi_gui_controls_spin_set_type = &kodi_gui_controls_spin_set_type; + api->kodi_gui_controls_spin_set_visible = &kodi_gui_controls_spin_set_visible; + + // gui/controls/text_box.h + api->kodi_gui_controls_text_box_get_text = &kodi_gui_controls_text_box_get_text; + api->kodi_gui_controls_text_box_reset = &kodi_gui_controls_text_box_reset; + api->kodi_gui_controls_text_box_scroll = &kodi_gui_controls_text_box_scroll; + api->kodi_gui_controls_text_box_set_auto_scrolling = + &kodi_gui_controls_text_box_set_auto_scrolling; + api->kodi_gui_controls_text_box_set_text = &kodi_gui_controls_text_box_set_text; + api->kodi_gui_controls_text_box_set_visible = &kodi_gui_controls_text_box_set_visible; + + // gui/dialogs/context_menu.h + api->kodi_gui_dialogs_context_menu_open = &kodi_gui_dialogs_context_menu_open; + + // gui/dialogs/extended_progress.h + api->kodi_gui_dialogs_extended_progress_delete_dialog = + &kodi_gui_dialogs_extended_progress_delete_dialog; + api->kodi_gui_dialogs_extended_progress_get_percentage = + &kodi_gui_dialogs_extended_progress_get_percentage; + api->kodi_gui_dialogs_extended_progress_get_text = &kodi_gui_dialogs_extended_progress_get_text; + api->kodi_gui_dialogs_extended_progress_get_title = &kodi_gui_dialogs_extended_progress_get_title; + api->kodi_gui_dialogs_extended_progress_is_finished = + &kodi_gui_dialogs_extended_progress_is_finished; + api->kodi_gui_dialogs_extended_progress_mark_finished = + &kodi_gui_dialogs_extended_progress_mark_finished; + api->kodi_gui_dialogs_extended_progress_new_dialog = + &kodi_gui_dialogs_extended_progress_new_dialog; + api->kodi_gui_dialogs_extended_progress_set_percentage = + &kodi_gui_dialogs_extended_progress_set_percentage; + api->kodi_gui_dialogs_extended_progress_set_progress = + &kodi_gui_dialogs_extended_progress_set_progress; + api->kodi_gui_dialogs_extended_progress_set_text = &kodi_gui_dialogs_extended_progress_set_text; + api->kodi_gui_dialogs_extended_progress_set_title = &kodi_gui_dialogs_extended_progress_set_title; + + // gui/dialogs/filebrowser.h + api->kodi_gui_dialogs_file_browser_clear_file_list = + &kodi_gui_dialogs_file_browser_clear_file_list; + api->kodi_gui_dialogs_file_browser_show_and_get_directory = + &kodi_gui_dialogs_file_browser_show_and_get_directory; + api->kodi_gui_dialogs_file_browser_show_and_get_file = + &kodi_gui_dialogs_file_browser_show_and_get_file; + api->kodi_gui_dialogs_file_browser_show_and_get_file_from_dir = + &kodi_gui_dialogs_file_browser_show_and_get_file_from_dir; + api->kodi_gui_dialogs_file_browser_show_and_get_file_list = + &kodi_gui_dialogs_file_browser_show_and_get_file_list; + api->kodi_gui_dialogs_file_browser_show_and_get_image = + &kodi_gui_dialogs_file_browser_show_and_get_image; + api->kodi_gui_dialogs_file_browser_show_and_get_image_list = + &kodi_gui_dialogs_file_browser_show_and_get_image_list; + api->kodi_gui_dialogs_file_browser_show_and_get_source = + &kodi_gui_dialogs_file_browser_show_and_get_source; + + // gui/dialogs/keyboard.h + api->kodi_gui_dialogs_keyboard_is_keyboard_activated = + &kodi_gui_dialogs_keyboard_is_keyboard_activated; + api->kodi_gui_dialogs_keyboard_send_text_to_active_keyboard = + &kodi_gui_dialogs_keyboard_send_text_to_active_keyboard; + api->kodi_gui_dialogs_keyboard_show_and_get_filter = + &kodi_gui_dialogs_keyboard_show_and_get_filter; + api->kodi_gui_dialogs_keyboard_show_and_get_input = &kodi_gui_dialogs_keyboard_show_and_get_input; + api->kodi_gui_dialogs_keyboard_show_and_get_input_with_head = + &kodi_gui_dialogs_keyboard_show_and_get_input_with_head; + api->kodi_gui_dialogs_keyboard_show_and_get_new_password = + &kodi_gui_dialogs_keyboard_show_and_get_new_password; + api->kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head = + &kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head; + api->kodi_gui_dialogs_keyboard_show_and_verify_new_password = + &kodi_gui_dialogs_keyboard_show_and_verify_new_password; + api->kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head = + &kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head; + api->kodi_gui_dialogs_keyboard_show_and_verify_password = + &kodi_gui_dialogs_keyboard_show_and_verify_password; + + // gui/dialogs/numeric.h + api->kodi_gui_dialogs_numeric_show_and_get_date = &kodi_gui_dialogs_numeric_show_and_get_date; + api->kodi_gui_dialogs_numeric_show_and_get_ip_address = + &kodi_gui_dialogs_numeric_show_and_get_ip_address; + api->kodi_gui_dialogs_numeric_show_and_get_number = &kodi_gui_dialogs_numeric_show_and_get_number; + api->kodi_gui_dialogs_numeric_show_and_get_seconds = + &kodi_gui_dialogs_numeric_show_and_get_seconds; + api->kodi_gui_dialogs_numeric_show_and_get_time = &kodi_gui_dialogs_numeric_show_and_get_time; + api->kodi_gui_dialogs_numeric_show_and_verify_input = + &kodi_gui_dialogs_numeric_show_and_verify_input; + api->kodi_gui_dialogs_numeric_show_and_verify_new_password = + &kodi_gui_dialogs_numeric_show_and_verify_new_password; + api->kodi_gui_dialogs_numeric_show_and_verify_password = + &kodi_gui_dialogs_numeric_show_and_verify_password; + + // gui/dialogs/ok.h + api->kodi_gui_dialogs_ok_show_and_get_input_line_text = + &kodi_gui_dialogs_ok_show_and_get_input_line_text; + api->kodi_gui_dialogs_ok_show_and_get_input_single_text = + &kodi_gui_dialogs_ok_show_and_get_input_single_text; + + // gui/dialogs/progress.h + api->kodi_gui_dialogs_progress_abort = &kodi_gui_dialogs_progress_abort; + api->kodi_gui_dialogs_progress_delete_dialog = &kodi_gui_dialogs_progress_delete_dialog; + api->kodi_gui_dialogs_progress_get_percentage = &kodi_gui_dialogs_progress_get_percentage; + api->kodi_gui_dialogs_progress_is_canceled = &kodi_gui_dialogs_progress_is_canceled; + api->kodi_gui_dialogs_progress_new_dialog = &kodi_gui_dialogs_progress_new_dialog; + api->kodi_gui_dialogs_progress_open = &kodi_gui_dialogs_progress_open; + api->kodi_gui_dialogs_progress_set_can_cancel = &kodi_gui_dialogs_progress_set_can_cancel; + api->kodi_gui_dialogs_progress_set_heading = &kodi_gui_dialogs_progress_set_heading; + api->kodi_gui_dialogs_progress_set_line = &kodi_gui_dialogs_progress_set_line; + api->kodi_gui_dialogs_progress_set_percentage = &kodi_gui_dialogs_progress_set_percentage; + api->kodi_gui_dialogs_progress_set_progress_advance = + &kodi_gui_dialogs_progress_set_progress_advance; + api->kodi_gui_dialogs_progress_set_progress_max = &kodi_gui_dialogs_progress_set_progress_max; + api->kodi_gui_dialogs_progress_show_progress_bar = &kodi_gui_dialogs_progress_show_progress_bar; + + // gui/dialogs/select.h + api->kodi_gui_dialogs_select_open = &kodi_gui_dialogs_select_open; + api->kodi_gui_dialogs_select_open_multi_select = &kodi_gui_dialogs_select_open_multi_select; + + // gui/dialogs/text_viewer.h + api->kodi_gui_dialogs_text_viewer_show = &kodi_gui_dialogs_text_viewer_show; + + // gui/dialogs/yes_no.h + api->kodi_gui_dialogs_yesno_show_and_get_input_line_button_text = + &kodi_gui_dialogs_yesno_show_and_get_input_line_button_text; + api->kodi_gui_dialogs_yesno_show_and_get_input_line_text = + &kodi_gui_dialogs_yesno_show_and_get_input_line_text; + api->kodi_gui_dialogs_yesno_show_and_get_input_single_text = + &kodi_gui_dialogs_yesno_show_and_get_input_single_text; + + return true; +} diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.cpp new file mode 100644 index 0000000000000..24bd98b56cce5 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.cpp @@ -0,0 +1,1841 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "filesystem.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_filesystem_h::InitDirect(directFuncToAddon_filesystem_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_vfs_can_open_directory(const char* url) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_can_open_directory(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_can_open_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_can_open_directory_v1; /* Autogenerated */ + + if (url == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_can_open_directory_v1(url /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_can_open_directory_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_can_open_directory_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_can_open_directory_v1(auto_gen_group.thisClassHdl, url); +} + +ATTR_DLL_EXPORT bool kodi_vfs_create_directory(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_create_directory(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_create_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_create_directory_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_create_directory_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_create_directory_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_create_directory_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_create_directory_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_remove_directory(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_remove_directory(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_remove_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_remove_directory_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_remove_directory_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_remove_directory_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_remove_directory_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_remove_directory_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_remove_directory_recursive(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_remove_directory_recursive(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_remove_directory_recursive_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_remove_directory_recursive_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_remove_directory_recursive_v1( + path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_remove_directory_recursive_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_remove_directory_recursive_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_remove_directory_recursive_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_directory_exists(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_directory_exists(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_directory_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_directory_exists_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_directory_exists_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_directory_exists_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_directory_exists_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_directory_exists_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_get_directory(const char* path, + const char* mask, + struct VFS_DIR_ENTRY** items, + size_t* num_items) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_directory(const char* path, const char* mask, struct VFS_DIR_ENTRY** items, size_t* num_items) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_get_directory_v1; /* Autogenerated */ + + if (path == nullptr || mask == nullptr || items == nullptr || num_items == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_get_directory_v1(path /* CheckAPIUse_WAY_6b (0003) */, + mask /* CheckAPIUse_WAY_6b (0003) */, + *num_items /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_directory_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_directory_v1 t = ident.get().as(); + + std::vector& ifc_items = std::get<1>(t); + *num_items = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + *items = static_cast( + calloc(ifc_items.size(), sizeof(VFS_DIR_ENTRY))); /* CheckAPIUse_WAY_17 (0003) */ + for (size_t i = 0; i < ifc_items.size(); ++i) + ifc_items[i].SetCStructure(&(*items)[i]); + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_directory_v1(auto_gen_group.thisClassHdl, path, mask, items, + num_items); +} + +ATTR_DLL_EXPORT void kodi_vfs_free_directory(struct VFS_DIR_ENTRY* items, size_t num_items) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_free_directory(struct VFS_DIR_ENTRY* items, size_t num_items) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_vfs_free_directory - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_vfs_free_directory - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + for (unsigned int i = 0; i < num_items; ++i) + { + if (items[i].label) + { + free(items[i].label); + items[i].label = nullptr; + } + if (items[i].title) + { + free(items[i].title); + items[i].title = nullptr; + } + if (items[i].path) + { + free(items[i].path); + items[i].path = nullptr; + } + if (items[i].properties) + { + free(items[i].properties); + items[i].properties = nullptr; + } + } + free(items); + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_exists(const char* filename, bool useCache) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_exists(const char* filename, bool useCache) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_exists_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_exists_v1; /* Autogenerated */ + + if (filename == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_exists_v1(filename /* CheckAPIUse_WAY_6b (0003) */, + useCache /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_exists_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_exists_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_exists_v1(auto_gen_group.thisClassHdl, filename, useCache); +} + +ATTR_DLL_EXPORT bool kodi_vfs_stat_file(const char* filename, struct VFS_STAT_STRUCTURE* buffer) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_stat_file(const char* filename, struct VFS_STAT_STRUCTURE* buffer) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_stat_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_stat_file_v1; /* Autogenerated */ + + if (filename == nullptr || buffer == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_stat_file_v1(filename /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_stat_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_stat_file_v1 t = ident.get().as(); + + std::get<1>(t).SetCStructure(buffer); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_stat_file_v1(auto_gen_group.thisClassHdl, filename, buffer); +} + +ATTR_DLL_EXPORT bool kodi_vfs_delete_file(const char* filename) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_delete_file(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_delete_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_delete_file_v1; /* Autogenerated */ + + if (filename == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_delete_file_v1(filename /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_delete_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_delete_file_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_delete_file_v1(auto_gen_group.thisClassHdl, filename); +} + +ATTR_DLL_EXPORT bool kodi_vfs_rename_file(const char* filename, const char* newFileName) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_rename_file(const char* filename, const char* newFileName) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_rename_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_rename_file_v1; /* Autogenerated */ + + if (filename == nullptr || newFileName == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_rename_file_v1(filename /* CheckAPIUse_WAY_6b (0003) */, + newFileName /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_rename_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_rename_file_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_rename_file_v1(auto_gen_group.thisClassHdl, filename, newFileName); +} + +ATTR_DLL_EXPORT bool kodi_vfs_copy_file(const char* filename, const char* dest) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_copy_file(const char* filename, const char* dest) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_copy_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_copy_file_v1; /* Autogenerated */ + + if (filename == nullptr || dest == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_copy_file_v1(filename /* CheckAPIUse_WAY_6b (0003) */, + dest /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_copy_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_copy_file_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_copy_file_v1(auto_gen_group.thisClassHdl, filename, dest); +} + +ATTR_DLL_EXPORT char* kodi_vfs_get_file_md5(const char* filename) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_get_file_md5(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_file_md5_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_file_md5_v1; /* Autogenerated */ + + if (filename == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_get_file_md5_v1(filename /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_file_md5_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_file_md5_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_file_md5_v1(auto_gen_group.thisClassHdl, filename); +} + +ATTR_DLL_EXPORT char* kodi_vfs_get_cache_thumb_name(const char* filename) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_get_cache_thumb_name(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_cache_thumb_name_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_cache_thumb_name_v1; /* Autogenerated */ + + if (filename == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_get_cache_thumb_name_v1( + filename /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_cache_thumb_name_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_cache_thumb_name_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_cache_thumb_name_v1(auto_gen_group.thisClassHdl, filename); +} + +ATTR_DLL_EXPORT char* kodi_vfs_make_legal_filename(const char* filename) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_make_legal_filename(const char* filename) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_make_legal_filename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_make_legal_filename_v1; /* Autogenerated */ + + if (filename == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_make_legal_filename_v1( + filename /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_make_legal_filename_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_make_legal_filename_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_make_legal_filename_v1(auto_gen_group.thisClassHdl, filename); +} + +ATTR_DLL_EXPORT char* kodi_vfs_make_legal_path(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_make_legal_path(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_make_legal_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_make_legal_path_v1; /* Autogenerated */ + + if (path == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_make_legal_path_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_make_legal_path_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_make_legal_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_make_legal_path_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT char* kodi_vfs_translate_special_protocol(const char* strSource) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_translate_special_protocol(const char* strSource) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_translate_special_protocol_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_translate_special_protocol_v1; /* Autogenerated */ + + if (strSource == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_translate_special_protocol_v1( + strSource /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_translate_special_protocol_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_translate_special_protocol_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_translate_special_protocol_v1(auto_gen_group.thisClassHdl, + strSource); +} + +ATTR_DLL_EXPORT bool kodi_vfs_is_internet_stream(const char* path, bool strictCheck) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_internet_stream(const char* path, bool strictCheck) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_internet_stream_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_internet_stream_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_is_internet_stream_v1( + path /* CheckAPIUse_WAY_6b (0003) */, strictCheck /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_is_internet_stream_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_is_internet_stream_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_is_internet_stream_v1(auto_gen_group.thisClassHdl, path, + strictCheck); +} + +ATTR_DLL_EXPORT bool kodi_vfs_is_on_lan(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_on_lan(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_on_lan_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_is_on_lan_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_is_on_lan_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_is_on_lan_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_is_on_lan_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_is_remote(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_remote(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_remote_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_remote_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_is_remote_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_is_remote_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_is_remote_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_is_remote_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_is_local(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_local(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_local_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_local_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_is_local_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_is_local_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_is_local_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_is_local_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_is_url(const char* path) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_is_url(const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_is_url_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_is_url_v1; /* Autogenerated */ + + if (path == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_is_url_v1(path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_is_url_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_is_url_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_is_url_v1(auto_gen_group.thisClassHdl, path); +} + +ATTR_DLL_EXPORT bool kodi_vfs_get_mime_type(const char* url, char** content, const char* useragent) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_mime_type(const char* url, char** content, const char* useragent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_mime_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_mime_type_v1; /* Autogenerated */ + + if (url == nullptr || content == nullptr || useragent == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_get_mime_type_v1(url /* CheckAPIUse_WAY_6b (0003) */, + useragent /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_mime_type_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_mime_type_v1 t = ident.get().as(); + + *content = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_mime_type_v1(auto_gen_group.thisClassHdl, url, content, + useragent); +} + +ATTR_DLL_EXPORT bool kodi_vfs_get_content_type(const char* url, + char** content, + const char* useragent) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_content_type(const char* url, char** content, const char* useragent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_content_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_content_type_v1; /* Autogenerated */ + + if (url == nullptr || content == nullptr || useragent == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_get_content_type_v1(url /* CheckAPIUse_WAY_6b (0003) */, + useragent /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_content_type_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_content_type_v1 t = ident.get().as(); + + *content = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_content_type_v1(auto_gen_group.thisClassHdl, url, content, + useragent); +} + +ATTR_DLL_EXPORT bool kodi_vfs_get_cookies(const char* url, char** cookies) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_cookies(const char* url, char** cookies) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_cookies_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_cookies_v1; /* Autogenerated */ + + if (url == nullptr || cookies == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_get_cookies_v1(url /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_cookies_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_cookies_v1 t = ident.get().as(); + + *cookies = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_cookies_v1(auto_gen_group.thisClassHdl, url, cookies); +} + +ATTR_DLL_EXPORT bool kodi_vfs_get_disk_space(const char* path, + uint64_t* capacity, + uint64_t* free, + uint64_t* available) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_get_disk_space(const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_get_disk_space_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_get_disk_space_v1; /* Autogenerated */ + + if (path == nullptr || capacity == nullptr || free == nullptr || available == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_get_disk_space_v1( + path /* CheckAPIUse_WAY_6b (0003) */, *capacity /* CheckAPIUse_WAY_13 (0003) */, + *free /* CheckAPIUse_WAY_13 (0003) */, *available /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_get_disk_space_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_get_disk_space_v1 t = ident.get().as(); + + *capacity = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + *free = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + *available = std::get<3>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_get_disk_space_v1(auto_gen_group.thisClassHdl, path, capacity, + free, available); +} + +ATTR_DLL_EXPORT KODI_HTTP_HEADER_HDL kodi_vfs_http_header_open(const char* url) +{ + // Original API call: ATTR_DLL_EXPORT KODI_HTTP_HEADER_HDL kodi_vfs_http_header_open(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_open_v1; /* Autogenerated */ + + if (url == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_http_header_open_v1(url /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_open_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_open_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_open_v1(auto_gen_group.thisClassHdl, url); +} + +ATTR_DLL_EXPORT void kodi_vfs_http_header_close(KODI_HTTP_HEADER_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_http_header_close(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_close_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_close_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_close_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + auto_gen_group.kodi_vfs_http_header_close_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_value(KODI_HTTP_HEADER_HDL hdl, const char* param) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_value(KODI_HTTP_HEADER_HDL hdl, const char* param) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_value_v1; /* Autogenerated */ + + if (hdl == nullptr || param == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_value_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + param /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_value_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_value_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_value_v1(auto_gen_group.thisClassHdl, hdl, param); +} + +ATTR_DLL_EXPORT char** kodi_vfs_http_header_get_values(KODI_HTTP_HEADER_HDL hdl, + const char* param, + size_t* length) +{ + // Original API call: ATTR_DLL_EXPORT char** kodi_vfs_http_header_get_values(KODI_HTTP_HEADER_HDL hdl, const char* param, size_t* length) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_values_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_http_header_get_values_v1; /* Autogenerated */ + + if (hdl == nullptr || param == nullptr || length == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_values_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + param /* CheckAPIUse_WAY_6b (0003) */, + *length /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_values_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_values_v1 t = ident.get().as(); + + *length = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + const std::vector& values = std::get<0>(t); + char** ret = static_cast(malloc(sizeof(char*) * values.size())); + for (size_t i = 0; i < *length; ++i) + { + ret[i] = strdup(values[i].c_str()); + } + return ret; /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_values_v1(auto_gen_group.thisClassHdl, hdl, param, + length); +} + +ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_header(KODI_HTTP_HEADER_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_header(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_header_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_header_v1; /* Autogenerated */ + + if (hdl == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_header_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_header_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_header_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_header_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_mime_type(KODI_HTTP_HEADER_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_mime_type(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_mime_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_mime_type_v1; /* Autogenerated */ + + if (hdl == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_mime_type_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_mime_type_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_mime_type_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_mime_type_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_charset(KODI_HTTP_HEADER_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_charset(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_charset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_charset_v1; /* Autogenerated */ + + if (hdl == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_charset_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_charset_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_charset_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_charset_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_proto_line(KODI_HTTP_HEADER_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_http_header_get_proto_line(KODI_HTTP_HEADER_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_http_header_get_proto_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_http_header_get_proto_line_v1; /* Autogenerated */ + + if (hdl == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_http_header_get_proto_line_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_http_header_get_proto_line_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_http_header_get_proto_line_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_http_header_get_proto_line_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open(const char* filename, unsigned int flags) +{ + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open(const char* filename, unsigned int flags) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_open_v1; /* Autogenerated */ + + if (filename == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_open_v1(filename /* CheckAPIUse_WAY_6b (0003) */, + flags /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_open_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_open_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_open_v1(auto_gen_group.thisClassHdl, filename, flags); +} + +ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open_for_write(const char* filename, bool overwrite) +{ + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_open_for_write(const char* filename, bool overwrite) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_open_for_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_open_for_write_v1; /* Autogenerated */ + + if (filename == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_open_for_write_v1( + filename /* CheckAPIUse_WAY_6b (0003) */, + overwrite /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_open_for_write_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_open_for_write_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_open_for_write_v1(auto_gen_group.thisClassHdl, filename, + overwrite); +} + +ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_curl_create(const char* url) +{ + // Original API call: ATTR_DLL_EXPORT KODI_FILE_HDL kodi_vfs_file_curl_create(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_create_v1; /* Autogenerated */ + + if (url == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_curl_create_v1(url /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_curl_create_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_curl_create_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_curl_create_v1(auto_gen_group.thisClassHdl, url); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_curl_add_option(KODI_FILE_HDL hdl, + enum CURLOptiontype type, + const char* name, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_curl_add_option(KODI_FILE_HDL hdl, enum CURLOptiontype type, const char* name, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_add_option_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_add_option_v1; /* Autogenerated */ + + if (hdl == nullptr || name == nullptr || value == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_curl_add_option_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_14a (0003) */, name /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_curl_add_option_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_curl_add_option_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_curl_add_option_v1(auto_gen_group.thisClassHdl, hdl, type, + name, value); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_curl_open(KODI_FILE_HDL hdl, unsigned int flags) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_curl_open(KODI_FILE_HDL hdl, unsigned int flags) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_curl_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_curl_open_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_curl_open_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + flags /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_curl_open_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_curl_open_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_curl_open_v1(auto_gen_group.thisClassHdl, hdl, flags); +} + +ATTR_DLL_EXPORT void kodi_vfs_file_close(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_file_close(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_close_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_close_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_filesystem_h, + funcParent_kodi_vfs_file_close_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + auto_gen_group.kodi_vfs_file_close_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT ssize_t kodi_vfs_file_read(KODI_FILE_HDL hdl, uint8_t* ptr, size_t size) +{ + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_vfs_file_read(KODI_FILE_HDL hdl, uint8_t* ptr, size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_read_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_9 (0006) */> msgParent_OUT_kodi_vfs_file_read_v1; /* Autogenerated */ + + if (hdl == nullptr || ptr == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_read_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_read_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_read_v1 t = ident.get().as(); + + std::memcpy(ptr, std::get<1>(t).data(), sizeof(uint8_t) * size); /* CheckAPIUse_WAY_10 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_read_v1(auto_gen_group.thisClassHdl, hdl, ptr, size); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_read_line(KODI_FILE_HDL hdl, char* szLine, size_t lineLength) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_read_line(KODI_FILE_HDL hdl, char* szLine, size_t lineLength) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_read_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_read_line_v1; /* Autogenerated */ + + if (hdl == nullptr || szLine == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_read_line_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + lineLength /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_read_line_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_read_line_v1 t = ident.get().as(); + + strncpy(szLine, std::get<1>(t).c_str(), lineLength); /* CheckAPIUse_WAY_8 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_read_line_v1(auto_gen_group.thisClassHdl, hdl, szLine, + lineLength); +} + +ATTR_DLL_EXPORT ssize_t kodi_vfs_file_write(KODI_FILE_HDL hdl, const uint8_t* ptr, size_t size) +{ + // Original API call: ATTR_DLL_EXPORT ssize_t kodi_vfs_file_write(KODI_FILE_HDL hdl, const uint8_t* ptr, size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_11 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_vfs_file_write_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_write_v1; /* Autogenerated */ + + if (hdl == nullptr || ptr == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_write_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + std::vector(ptr, ptr + size) /* CheckAPIUse_WAY_11 (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_write_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_write_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_write_v1(auto_gen_group.thisClassHdl, hdl, ptr, size); +} + +ATTR_DLL_EXPORT void kodi_vfs_file_flush(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_vfs_file_flush(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_flush_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_flush_v1; /* Autogenerated */ + + if (hdl == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_flush_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_filesystem_h, + funcParent_kodi_vfs_file_flush_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + auto_gen_group.kodi_vfs_file_flush_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT int64_t kodi_vfs_file_seek(KODI_FILE_HDL hdl, int64_t position, int whence) +{ + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_seek(KODI_FILE_HDL hdl, int64_t position, int whence) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_seek_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_seek_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_seek_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + position /* CheckAPIUse_WAY_10 (0003) */, + whence /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_seek_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_seek_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_seek_v1(auto_gen_group.thisClassHdl, hdl, position, whence); +} + +ATTR_DLL_EXPORT int kodi_vfs_file_truncate(KODI_FILE_HDL hdl, int64_t size) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_vfs_file_truncate(KODI_FILE_HDL hdl, int64_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_truncate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_truncate_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_truncate_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_truncate_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_truncate_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_truncate_v1(auto_gen_group.thisClassHdl, hdl, size); +} + +ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_position(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_position(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_position_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_get_position_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_position_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_position_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_position_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_length(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT int64_t kodi_vfs_file_get_length(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_length_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_length_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_get_length_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_length_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_length_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_length_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_at_end(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_at_end(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_at_end_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_at_end_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_vfs_file_at_end_v1(PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_at_end_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_at_end_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_at_end_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT double kodi_vfs_file_get_download_speed(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_vfs_file_get_download_speed(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_download_speed_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_download_speed_v1; /* Autogenerated */ + + if (hdl == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_get_download_speed_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_download_speed_v1, in, out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_download_speed_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_download_speed_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT int kodi_vfs_file_get_chunk_size(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_vfs_file_get_chunk_size(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_chunk_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_chunk_size_v1; /* Autogenerated */ + + if (hdl == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_get_chunk_size_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_chunk_size_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_chunk_size_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_chunk_size_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_seek_possible(KODI_FILE_HDL hdl) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_seek_possible(KODI_FILE_HDL hdl) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_get_seek_possible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_get_seek_possible_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_io_ctl_get_seek_possible_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_io_ctl_get_seek_possible_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_io_ctl_get_seek_possible_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_io_ctl_get_seek_possible_v1(auto_gen_group.thisClassHdl, hdl); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_cache_status(KODI_FILE_HDL hdl, + struct VFS_CACHE_STATUS* status) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_get_cache_status(KODI_FILE_HDL hdl, struct VFS_CACHE_STATUS* status) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_get_cache_status_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_get_cache_status_v1; /* Autogenerated */ + + if (hdl == nullptr || status == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_io_ctl_get_cache_status_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_io_ctl_get_cache_status_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_io_ctl_get_cache_status_v1 t = ident.get().as(); + + std::get<1>(t).SetCStructure(status); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_io_ctl_get_cache_status_v1(auto_gen_group.thisClassHdl, hdl, + status); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_cache_rate(KODI_FILE_HDL hdl, uint32_t rate) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_cache_rate(KODI_FILE_HDL hdl, uint32_t rate) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_set_cache_rate_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_set_cache_rate_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_io_ctl_set_cache_rate_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + rate /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_io_ctl_set_cache_rate_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_io_ctl_set_cache_rate_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_io_ctl_set_cache_rate_v1(auto_gen_group.thisClassHdl, hdl, + rate); +} + +ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_retry(KODI_FILE_HDL hdl, bool retry) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_vfs_file_io_ctl_set_retry(KODI_FILE_HDL hdl, bool retry) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_io_ctl_set_retry_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_io_ctl_set_retry_v1; /* Autogenerated */ + + if (hdl == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_vfs_file_io_ctl_set_retry_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + retry /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_io_ctl_set_retry_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_io_ctl_set_retry_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_io_ctl_set_retry_v1(auto_gen_group.thisClassHdl, hdl, retry); +} + +ATTR_DLL_EXPORT char* kodi_vfs_file_get_property_value(KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_vfs_file_get_property_value(KODI_FILE_HDL hdl, enum FilePropertyTypes type, const char* name) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_property_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_vfs_file_get_property_value_v1; /* Autogenerated */ + + if (hdl == nullptr || name == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_get_property_value_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_14a (0003) */, name /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_property_value_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_property_value_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_property_value_v1(auto_gen_group.thisClassHdl, hdl, type, + name); +} + +ATTR_DLL_EXPORT char** kodi_vfs_file_get_property_values(KODI_FILE_HDL hdl, + enum FilePropertyTypes type, + const char* name, + size_t* length) +{ + // Original API call: ATTR_DLL_EXPORT char** kodi_vfs_file_get_property_values(KODI_FILE_HDL hdl, enum FilePropertyTypes type, const char* name, size_t* length) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_vfs_file_get_property_values_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple, size_t> msgParent_OUT_kodi_vfs_file_get_property_values_v1; /* Autogenerated */ + + if (hdl == nullptr || name == nullptr || length == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_vfs_file_get_property_values_v1( + PtrValue(hdl) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_14a (0003) */, name /* CheckAPIUse_WAY_6b (0003) */, + *length /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_filesystem_h, funcParent_kodi_vfs_file_get_property_values_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_vfs_file_get_property_values_v1 t = ident.get().as(); + + *length = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + const std::vector& values = std::get<0>(t); + char** ret = static_cast(malloc(sizeof(char*) * values.size())); + for (size_t i = 0; i < *length; ++i) + { + ret[i] = strdup(values[i].c_str()); + } + return ret; /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.filesystem_h; + return auto_gen_group.kodi_vfs_file_get_property_values_v1(auto_gen_group.thisClassHdl, hdl, type, + name, length); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.h b/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.h new file mode 100644 index 0000000000000..2a7f94e53cf2a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/filesystem.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/filesystem.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_filesystem_h; +struct directFuncToKodi_filesystem_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_filesystem_h : public IMsgHdl +{ +public: + CHdl_kodi_filesystem_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_filesystem_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/general.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/general.cpp new file mode 100644 index 0000000000000..4eb4e9b8fbc52 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/general.cpp @@ -0,0 +1,496 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "general.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_general_h::InitDirect(directFuncToAddon_general_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT char* kodi_get_localized_string(long label_id) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_get_localized_string(long label_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_localized_string_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_localized_string_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_get_localized_string_v1(label_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_localized_string_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_localized_string_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_localized_string_v1(auto_gen_group.thisClassHdl, label_id); +} + +ATTR_DLL_EXPORT void kodi_get_free_mem(long* free, long* total, bool as_bytes) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_get_free_mem(long* free, long* total, bool as_bytes) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_free_mem_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_free_mem_v1; /* Autogenerated */ + + if (free == nullptr || total == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_get_free_mem_v1(*free /* CheckAPIUse_WAY_13 (0003) */, + *total /* CheckAPIUse_WAY_13 (0003) */, + as_bytes /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_free_mem_v1, in, out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_free_mem_v1 t = ident.get().as(); + + *free = std::get<0>(t); /* CheckAPIUse_WAY_13 (0003) */ + *total = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + auto_gen_group.kodi_get_free_mem_v1(auto_gen_group.thisClassHdl, free, total, as_bytes); +} + +ATTR_DLL_EXPORT char* kodi_unknown_to_utf8(const char* source, bool* ret, bool failOnBadChar) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_unknown_to_utf8(const char* source, bool* ret, bool failOnBadChar) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_unknown_to_utf8_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_unknown_to_utf8_v1; /* Autogenerated */ + + if (source == nullptr || ret == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_unknown_to_utf8_v1(source /* CheckAPIUse_WAY_6b (0003) */, + *ret /* CheckAPIUse_WAY_13 (0003) */, + failOnBadChar /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_unknown_to_utf8_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_unknown_to_utf8_v1 t = ident.get().as(); + + *ret = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_unknown_to_utf8_v1(auto_gen_group.thisClassHdl, source, ret, + failOnBadChar); +} + +ATTR_DLL_EXPORT char* kodi_get_language(enum LangFormats format, bool region) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_get_language(enum LangFormats format, bool region) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_language_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_language_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_get_language_v1(format /* CheckAPIUse_WAY_14a (0003) */, + region /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_language_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_language_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_language_v1(auto_gen_group.thisClassHdl, format, region); +} + +ATTR_DLL_EXPORT void kodi_queue_notification(enum QueueMsg type, + const char* header, + const char* message, + const char* imageFile, + unsigned int displayTime, + bool withSound, + unsigned int messageTime) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_queue_notification(enum QueueMsg type, const char* header, const char* message, const char* imageFile, unsigned int displayTime, bool withSound, unsigned int messageTime) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_queue_notification_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_queue_notification_v1; /* Autogenerated */ + + if (header == nullptr || message == nullptr || imageFile == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, + msgParent__IN_kodi_queue_notification_v1( + type /* CheckAPIUse_WAY_14a (0003) */, header /* CheckAPIUse_WAY_6b (0003) */, + message /* CheckAPIUse_WAY_6b (0003) */, imageFile /* CheckAPIUse_WAY_6b (0003) */, + displayTime /* CheckAPIUse_WAY_10 (0003) */, withSound /* CheckAPIUse_WAY_10 (0003) */, + messageTime /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_queue_notification_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + auto_gen_group.kodi_queue_notification_v1(auto_gen_group.thisClassHdl, type, header, message, + imageFile, displayTime, withSound, messageTime); +} + +ATTR_DLL_EXPORT char* kodi_get_digest(enum DigestType type, const char* text) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_get_digest(enum DigestType type, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_digest_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_digest_v1; /* Autogenerated */ + + if (text == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_get_digest_v1(type /* CheckAPIUse_WAY_14a (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_digest_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_digest_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_digest_v1(auto_gen_group.thisClassHdl, type, text); +} + +ATTR_DLL_EXPORT char* kodi_get_region(const char* id) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_get_region(const char* id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_region_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_region_v1; /* Autogenerated */ + + if (id == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_get_region_v1(id /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_region_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_region_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_region_v1(auto_gen_group.thisClassHdl, id); +} + +ATTR_DLL_EXPORT int kodi_get_global_idle_time() +{ + // Original API call: ATTR_DLL_EXPORT int kodi_get_global_idle_time() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_global_idle_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_global_idle_time_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_general_h, funcParent_kodi_get_global_idle_time_v1, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_global_idle_time_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_global_idle_time_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT bool kodi_is_addon_avilable(const char* id, char** version, bool* enabled) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_is_addon_avilable(const char* id, char** version, bool* enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_is_addon_avilable_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_is_addon_avilable_v1; /* Autogenerated */ + + if (id == nullptr || version == nullptr || enabled == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_is_addon_avilable_v1(id /* CheckAPIUse_WAY_6b (0003) */, + *enabled /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_is_addon_avilable_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_is_addon_avilable_v1 t = ident.get().as(); + + *version = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + *enabled = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_is_addon_avilable_v1(auto_gen_group.thisClassHdl, id, version, + enabled); +} + +ATTR_DLL_EXPORT void kodi_version( + char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_version( char** compile_name, int* major, int* minor, char** revision, char** tag, char** tagversion) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_version_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_version_v1; /* Autogenerated */ + + if (compile_name == nullptr || major == nullptr || minor == nullptr || revision == nullptr || + tag == nullptr || tagversion == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_version_v1(*major /* CheckAPIUse_WAY_13 (0003) */, + *minor /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_general_h, + funcParent_kodi_version_v1, in, out)) + return; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_version_v1 t = ident.get().as(); + + *compile_name = strdup(std::get<0>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + *major = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + *minor = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + *revision = strdup(std::get<3>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + *tag = strdup(std::get<4>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + *tagversion = strdup(std::get<5>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + auto_gen_group.kodi_version_v1(auto_gen_group.thisClassHdl, compile_name, major, minor, revision, + tag, tagversion); +} + +ATTR_DLL_EXPORT char* kodi_get_current_skin_id() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_get_current_skin_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_current_skin_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_current_skin_id_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_general_h, funcParent_kodi_get_current_skin_id_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_current_skin_id_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_current_skin_id_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT bool kodi_get_keyboard_layout(int modifier_key, + char** layout_name, + struct AddonKeyboardKeyTable* layout) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_get_keyboard_layout(int modifier_key, char** layout_name, struct AddonKeyboardKeyTable* layout) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_get_keyboard_layout_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_get_keyboard_layout_v1; /* Autogenerated */ + + if (layout_name == nullptr || layout == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_get_keyboard_layout_v1( + modifier_key /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_general_h, funcParent_kodi_get_keyboard_layout_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_get_keyboard_layout_v1 t = ident.get().as(); + + *layout_name = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + std::get<2>(t).SetCStructure(layout); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_get_keyboard_layout_v1(auto_gen_group.thisClassHdl, modifier_key, + layout_name, layout); +} + +ATTR_DLL_EXPORT bool kodi_change_keyboard_layout(char** layout_name) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_change_keyboard_layout(char** layout_name) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_change_keyboard_layout_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_change_keyboard_layout_v1; /* Autogenerated */ + + if (layout_name == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_general_h, funcParent_kodi_change_keyboard_layout_v1, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_change_keyboard_layout_v1 t = ident.get().as(); + + *layout_name = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + return auto_gen_group.kodi_change_keyboard_layout_v1(auto_gen_group.thisClassHdl, layout_name); +} + +ATTR_DLL_EXPORT void kodi_play_sfx(const char* filename, bool use_cached) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_play_sfx(const char* filename, bool use_cached) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_play_sfx_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_play_sfx_v1; /* Autogenerated */ + + if (filename == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_play_sfx_v1(filename /* CheckAPIUse_WAY_6b (0003) */, + use_cached /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_general_h, + funcParent_kodi_play_sfx_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + auto_gen_group.kodi_play_sfx_v1(auto_gen_group.thisClassHdl, filename, use_cached); +} + +ATTR_DLL_EXPORT void kodi_stop_sfx() +{ + // Original API call: ATTR_DLL_EXPORT void kodi_stop_sfx() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_stop_sfx_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_stop_sfx_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_general_h, + funcParent_kodi_stop_sfx_v1); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.general_h; + auto_gen_group.kodi_stop_sfx_v1(auto_gen_group.thisClassHdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/general.h b/xbmc/addons/kodi-dev-kit/src/addon/api/general.h new file mode 100644 index 0000000000000..331139752b669 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/general.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/general.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_general_h; +struct directFuncToKodi_general_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_general_h : public IMsgHdl +{ +public: + CHdl_kodi_general_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_general_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/CMakeLists.txt new file mode 100644 index 0000000000000..d8b03d03c33a5 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/CMakeLists.txt @@ -0,0 +1,18 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + general.cpp + list_item.cpp + window.cpp +) + +set(HEADERS + general.h + list_item.h + window.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api_gui) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/CMakeLists.txt new file mode 100644 index 0000000000000..1a88a865432b6 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/CMakeLists.txt @@ -0,0 +1,36 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + button.cpp + edit.cpp + fade_label.cpp + image.cpp + label.cpp + progress.cpp + radio_button.cpp + rendering.cpp + settings_slider.cpp + slider.cpp + spin.cpp + text_box.cpp +) + +set(HEADERS + button.h + edit.h + fade_label.h + image.h + label.h + progress.h + radio_button.h + rendering.h + settings_slider.h + slider.h + spin.h + text_box.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api_gui_controls) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.cpp new file mode 100644 index 0000000000000..ae2aebc74d458 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "button.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_button_h::InitDirect( + directFuncToAddon_gui_controls_button_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + auto_gen_group.kodi_gui_controls_button_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + auto_gen_group.kodi_gui_controls_button_set_enabled_v1(auto_gen_group.thisClassHdl, handle, + enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_set_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_set_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + auto_gen_group.kodi_gui_controls_button_set_label_v1(auto_gen_group.thisClassHdl, handle, label); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_get_label_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_button_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + return auto_gen_group.kodi_gui_controls_button_get_label_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label2(KODI_GUI_CONTROL_HANDLE handle, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_button_set_label2(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_set_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_set_label2_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_set_label2_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_set_label2_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + auto_gen_group.kodi_gui_controls_button_set_label2_v1(auto_gen_group.thisClassHdl, handle, label); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label2(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_button_get_label2(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_button_get_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_button_get_label2_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_button_get_label2_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_button_h, funcParent_kodi_gui_controls_button_get_label2_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_button_get_label2_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_button_h; + return auto_gen_group.kodi_gui_controls_button_get_label2_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.h new file mode 100644 index 0000000000000..091d3d11bd71d --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/button.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/button.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_button_h; +struct directFuncToKodi_gui_controls_button_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_button_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_button_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_button_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.cpp new file mode 100644 index 0000000000000..bf562e0b98bb4 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.cpp @@ -0,0 +1,313 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "edit.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_edit_h::InitDirect(directFuncToAddon_gui_controls_edit_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_enabled_v1(auto_gen_group.thisClassHdl, handle, + enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_label_v1(auto_gen_group.thisClassHdl, handle, label); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_label(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_get_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_edit_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + return auto_gen_group.kodi_gui_controls_edit_get_label_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_text_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_text_v1(auto_gen_group.thisClassHdl, handle, text); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_text(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_edit_get_text(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_text_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_get_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_get_text_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_edit_get_text_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + return auto_gen_group.kodi_gui_controls_edit_get_text_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_cursor_position(KODI_GUI_CONTROL_HANDLE handle, + unsigned int position) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_cursor_position(KODI_GUI_CONTROL_HANDLE handle, unsigned int position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_cursor_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_cursor_position_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_cursor_position_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + position /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_cursor_position_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_cursor_position_v1(auto_gen_group.thisClassHdl, handle, + position); +} + +ATTR_DLL_EXPORT unsigned int kodi_gui_controls_edit_get_cursor_position( + KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT unsigned int kodi_gui_controls_edit_get_cursor_position( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_get_cursor_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_get_cursor_position_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_get_cursor_position_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_get_cursor_position_v1, + in, out)) + return 0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_edit_get_cursor_position_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + return auto_gen_group.kodi_gui_controls_edit_get_cursor_position_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_input_type(KODI_GUI_CONTROL_HANDLE handle, + int type, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_edit_set_input_type(KODI_GUI_CONTROL_HANDLE handle, int type, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_edit_set_input_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_edit_set_input_type_v1; /* Autogenerated */ + + if (handle == nullptr || heading == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_edit_set_input_type_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_10 (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_edit_h, funcParent_kodi_gui_controls_edit_set_input_type_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_edit_h; + auto_gen_group.kodi_gui_controls_edit_set_input_type_v1(auto_gen_group.thisClassHdl, handle, type, + heading); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.h new file mode 100644 index 0000000000000..b1825ea47d7b7 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/edit.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/edit.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_edit_h; +struct directFuncToKodi_gui_controls_edit_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_edit_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_edit_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_edit_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.cpp new file mode 100644 index 0000000000000..8f812fa4d5d18 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.cpp @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "fade_label.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_fade_label_h::InitDirect( + directFuncToAddon_gui_controls_fade_label_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_fade_label_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_fade_label_h, funcParent_kodi_gui_controls_fade_label_set_visible_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_fade_label_h; + auto_gen_group.kodi_gui_controls_fade_label_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_add_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_add_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_add_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_add_label_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_fade_label_add_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_fade_label_h, funcParent_kodi_gui_controls_fade_label_add_label_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_fade_label_h; + auto_gen_group.kodi_gui_controls_fade_label_add_label_v1(auto_gen_group.thisClassHdl, handle, + text); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_fade_label_get_label(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_fade_label_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_fade_label_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_fade_label_h, + funcParent_kodi_gui_controls_fade_label_get_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_fade_label_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_fade_label_h; + return auto_gen_group.kodi_gui_controls_fade_label_get_label_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_scrolling(KODI_GUI_CONTROL_HANDLE handle, + bool scroll) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_set_scrolling(KODI_GUI_CONTROL_HANDLE handle, bool scroll) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_set_scrolling_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_set_scrolling_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_fade_label_set_scrolling_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + scroll /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_fade_label_h, + funcParent_kodi_gui_controls_fade_label_set_scrolling_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_fade_label_h; + auto_gen_group.kodi_gui_controls_fade_label_set_scrolling_v1(auto_gen_group.thisClassHdl, handle, + scroll); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_reset(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_fade_label_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_fade_label_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_fade_label_reset_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_fade_label_reset_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_fade_label_h, funcParent_kodi_gui_controls_fade_label_reset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_fade_label_h; + auto_gen_group.kodi_gui_controls_fade_label_reset_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.h new file mode 100644 index 0000000000000..252dc537629dd --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/fade_label.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/fade_label.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_fade_label_h; +struct directFuncToKodi_gui_controls_fade_label_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_fade_label_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_fade_label_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_fade_label_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.cpp new file mode 100644 index 0000000000000..7a80168d0dbd3 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "image.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_image_h::InitDirect(directFuncToAddon_gui_controls_image_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_image_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_image_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_image_h, funcParent_kodi_gui_controls_image_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_image_h; + auto_gen_group.kodi_gui_controls_image_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_image_set_filename(KODI_GUI_CONTROL_HANDLE handle, + const char* filename, + bool use_cache) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_filename(KODI_GUI_CONTROL_HANDLE handle, const char* filename, bool use_cache) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_filename_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_filename_v1; /* Autogenerated */ + + if (handle == nullptr || filename == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_image_set_filename_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + filename /* CheckAPIUse_WAY_6b (0003) */, + use_cache /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_image_h, funcParent_kodi_gui_controls_image_set_filename_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_image_h; + auto_gen_group.kodi_gui_controls_image_set_filename_v1(auto_gen_group.thisClassHdl, handle, + filename, use_cache); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_image_set_color_diffuse(KODI_GUI_CONTROL_HANDLE handle, + uint32_t color_diffuse) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_image_set_color_diffuse(KODI_GUI_CONTROL_HANDLE handle, uint32_t color_diffuse) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_image_set_color_diffuse_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_image_set_color_diffuse_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_image_set_color_diffuse_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + color_diffuse /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_image_h, funcParent_kodi_gui_controls_image_set_color_diffuse_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_image_h; + auto_gen_group.kodi_gui_controls_image_set_color_diffuse_v1(auto_gen_group.thisClassHdl, handle, + color_diffuse); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.h new file mode 100644 index 0000000000000..929bd0a38d26d --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/image.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/image.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_image_h; +struct directFuncToKodi_gui_controls_image_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_image_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_image_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_image_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.cpp new file mode 100644 index 0000000000000..6573c97227d46 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "label.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_label_h::InitDirect(directFuncToAddon_gui_controls_label_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_label_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_label_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_label_h, funcParent_kodi_gui_controls_label_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_label_h; + auto_gen_group.kodi_gui_controls_label_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_label_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_label_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_set_label_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_label_set_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_label_h, funcParent_kodi_gui_controls_label_set_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_label_h; + auto_gen_group.kodi_gui_controls_label_set_label_v1(auto_gen_group.thisClassHdl, handle, text); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_label_get_label(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_label_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_label_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_label_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_label_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_label_h, funcParent_kodi_gui_controls_label_get_label_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_label_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_label_h; + return auto_gen_group.kodi_gui_controls_label_get_label_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.h new file mode 100644 index 0000000000000..3fddde73e8d5b --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/label.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/label.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_label_h; +struct directFuncToKodi_gui_controls_label_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_label_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_label_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_label_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.cpp new file mode 100644 index 0000000000000..d3be8765984c7 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.cpp @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "progress.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_progress_h::InitDirect( + directFuncToAddon_gui_controls_progress_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_progress_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_progress_h, funcParent_kodi_gui_controls_progress_set_visible_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_progress_h; + auto_gen_group.kodi_gui_controls_progress_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_percentage(KODI_GUI_CONTROL_HANDLE handle, + float percent) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_progress_set_percentage(KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_set_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_progress_set_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + percent /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_progress_h, funcParent_kodi_gui_controls_progress_set_percentage_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_progress_h; + auto_gen_group.kodi_gui_controls_progress_set_percentage_v1(auto_gen_group.thisClassHdl, handle, + percent); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_progress_get_percentage(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_progress_get_percentage(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_progress_get_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_progress_get_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_progress_h, + funcParent_kodi_gui_controls_progress_get_percentage_v1, in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_progress_get_percentage_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_progress_h; + return auto_gen_group.kodi_gui_controls_progress_get_percentage_v1(auto_gen_group.thisClassHdl, + handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.h new file mode 100644 index 0000000000000..3069a191db429 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/progress.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_progress_h; +struct directFuncToKodi_gui_controls_progress_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_progress_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_progress_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.cpp new file mode 100644 index 0000000000000..2bcf80be6805f --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "radio_button.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_radio_button_h::InitDirect( + directFuncToAddon_gui_controls_radio_button_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + auto_gen_group.kodi_gui_controls_radio_button_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + auto_gen_group.kodi_gui_controls_radio_button_set_enabled_v1(auto_gen_group.thisClassHdl, handle, + enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_label(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_label(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_label_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_set_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_set_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + auto_gen_group.kodi_gui_controls_radio_button_set_label_v1(auto_gen_group.thisClassHdl, handle, + text); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_radio_button_get_label(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_radio_button_get_label(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_get_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_radio_button_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + return auto_gen_group.kodi_gui_controls_radio_button_get_label_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_selected(KODI_GUI_CONTROL_HANDLE handle, + bool selected) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_button_set_selected(KODI_GUI_CONTROL_HANDLE handle, bool selected) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_set_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_set_selected_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_set_selected_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + selected /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_set_selected_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + auto_gen_group.kodi_gui_controls_radio_button_set_selected_v1(auto_gen_group.thisClassHdl, handle, + selected); +} + +ATTR_DLL_EXPORT bool kodi_gui_controls_radio_button_is_selected(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_controls_radio_button_is_selected(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_button_is_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_button_is_selected_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_button_is_selected_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_radio_button_h, + funcParent_kodi_gui_controls_radio_button_is_selected_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_radio_button_is_selected_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_radio_button_h; + return auto_gen_group.kodi_gui_controls_radio_button_is_selected_v1(auto_gen_group.thisClassHdl, + handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.h new file mode 100644 index 0000000000000..f7ad06474de37 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/radio_button.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/radio_button.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_radio_button_h; +struct directFuncToKodi_gui_controls_radio_button_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_radio_button_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_radio_button_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_radio_button_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.cpp new file mode 100644 index 0000000000000..3649f91751d46 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "rendering.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_rendering_h::InitDirect( + directFuncToAddon_gui_controls_rendering_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_radio_rendering_destroy(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_radio_rendering_destroy(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_radio_rendering_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_radio_rendering_destroy_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_radio_rendering_destroy_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_rendering_h, funcParent_kodi_gui_controls_radio_rendering_destroy_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_rendering_h; + auto_gen_group.kodi_gui_controls_radio_rendering_destroy_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.h new file mode 100644 index 0000000000000..658be59115667 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/rendering.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/rendering.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_rendering_h; +struct directFuncToKodi_gui_controls_rendering_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_rendering_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_rendering_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_rendering_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.cpp new file mode 100644 index 0000000000000..013b250d21964 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.cpp @@ -0,0 +1,472 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "settings_slider.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_settings_slider_h::InitDirect( + directFuncToAddon_gui_controls_settings_slider_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_visible_v1(auto_gen_group.thisClassHdl, + handle, visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_enabled_v1(auto_gen_group.thisClassHdl, + handle, enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_text_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_text_v1(auto_gen_group.thisClassHdl, handle, + label); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_reset(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_reset_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_reset_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_reset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_reset_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_range(KODI_GUI_CONTROL_HANDLE handle, + int start, + int end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_range( KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_settings_slider_set_int_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_int_range_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_int_range_v1(auto_gen_group.thisClassHdl, + handle, start, end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_value(KODI_GUI_CONTROL_HANDLE handle, + int value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_value( KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_int_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_int_value_v1(auto_gen_group.thisClassHdl, + handle, value); +} + +ATTR_DLL_EXPORT int kodi_gui_controls_settings_slider_get_int_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_settings_slider_get_int_value( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_get_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_get_int_value_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_settings_slider_get_int_value_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + return auto_gen_group.kodi_gui_controls_settings_slider_get_int_value_v1( + auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_interval( + KODI_GUI_CONTROL_HANDLE handle, int interval) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_int_interval( KODI_GUI_CONTROL_HANDLE handle, int interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_int_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_int_interval_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_int_interval_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + interval /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_int_interval_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_int_interval_v1(auto_gen_group.thisClassHdl, + handle, interval); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_percentage( + KODI_GUI_CONTROL_HANDLE handle, float percent) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_percentage( KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + percent /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_percentage_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_percentage_v1(auto_gen_group.thisClassHdl, + handle, percent); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_percentage( + KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_percentage( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_get_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_get_percentage_v1, in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_settings_slider_get_percentage_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + return auto_gen_group.kodi_gui_controls_settings_slider_get_percentage_v1( + auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_range( + KODI_GUI_CONTROL_HANDLE handle, float start, float end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_range( KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_settings_slider_set_float_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_float_range_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_float_range_v1(auto_gen_group.thisClassHdl, + handle, start, end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_value( + KODI_GUI_CONTROL_HANDLE handle, float value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_value( KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_float_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_float_value_v1(auto_gen_group.thisClassHdl, + handle, value); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_float_value( + KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_settings_slider_get_float_value( KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_get_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_get_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_get_float_value_v1, in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_settings_slider_get_float_value_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + return auto_gen_group.kodi_gui_controls_settings_slider_get_float_value_v1( + auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_interval( + KODI_GUI_CONTROL_HANDLE handle, float interval) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_settings_slider_set_float_interval( KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_settings_slider_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_settings_slider_set_float_interval_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_settings_slider_set_float_interval_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + interval /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_settings_slider_h, + funcParent_kodi_gui_controls_settings_slider_set_float_interval_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_settings_slider_h; + auto_gen_group.kodi_gui_controls_settings_slider_set_float_interval_v1( + auto_gen_group.thisClassHdl, handle, interval); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.h new file mode 100644 index 0000000000000..ca05a66431eb1 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/settings_slider.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/settings_slider.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_settings_slider_h; +struct directFuncToKodi_gui_controls_settings_slider_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_settings_slider_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_settings_slider_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_settings_slider_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.cpp new file mode 100644 index 0000000000000..15b7223fcbe42 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.cpp @@ -0,0 +1,465 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "slider.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_slider_h::InitDirect( + directFuncToAddon_gui_controls_slider_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_enabled_v1(auto_gen_group.thisClassHdl, handle, + enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_reset(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_reset_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_reset_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_reset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_reset_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_slider_get_description(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_slider_get_description(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_description_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_description_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_get_description_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_get_description_v1, + in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_slider_get_description_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + return auto_gen_group.kodi_gui_controls_slider_get_description_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_range(KODI_GUI_CONTROL_HANDLE handle, + int start, + int end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_range(KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_slider_set_int_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_int_range_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_int_range_v1(auto_gen_group.thisClassHdl, handle, + start, end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_value(KODI_GUI_CONTROL_HANDLE handle, + int value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_value(KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_int_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_int_value_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT int kodi_gui_controls_slider_get_int_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_slider_get_int_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_get_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_get_int_value_v1, + in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_slider_get_int_value_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + return auto_gen_group.kodi_gui_controls_slider_get_int_value_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_interval(KODI_GUI_CONTROL_HANDLE handle, + int interval) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_int_interval(KODI_GUI_CONTROL_HANDLE handle, int interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_int_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_int_interval_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_int_interval_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + interval /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_int_interval_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_int_interval_v1(auto_gen_group.thisClassHdl, handle, + interval); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_percentage(KODI_GUI_CONTROL_HANDLE handle, + float percent) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_percentage(KODI_GUI_CONTROL_HANDLE handle, float percent) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + percent /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_percentage_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_percentage_v1(auto_gen_group.thisClassHdl, handle, + percent); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_percentage(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_percentage(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_get_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_get_percentage_v1, + in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_slider_get_percentage_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + return auto_gen_group.kodi_gui_controls_slider_get_percentage_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_range(KODI_GUI_CONTROL_HANDLE handle, + float start, + float end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_range(KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_slider_set_float_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_float_range_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_float_range_v1(auto_gen_group.thisClassHdl, handle, + start, end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_value(KODI_GUI_CONTROL_HANDLE handle, + float value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_value(KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_float_value_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_float_value_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_float_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_slider_get_float_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_get_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_get_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_get_float_value_v1, + in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_slider_get_float_value_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + return auto_gen_group.kodi_gui_controls_slider_get_float_value_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, + float interval) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_slider_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_slider_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_slider_set_float_interval_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_slider_set_float_interval_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + interval /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_slider_h, funcParent_kodi_gui_controls_slider_set_float_interval_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_slider_h; + auto_gen_group.kodi_gui_controls_slider_set_float_interval_v1(auto_gen_group.thisClassHdl, handle, + interval); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.h new file mode 100644 index 0000000000000..c2a1d4355ed8a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/slider.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/slider.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_slider_h; +struct directFuncToKodi_gui_controls_slider_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_slider_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_slider_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_slider_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.cpp new file mode 100644 index 0000000000000..8574b20808e09 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.cpp @@ -0,0 +1,512 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "spin.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_spin_h::InitDirect(directFuncToAddon_gui_controls_spin_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_enabled(KODI_GUI_CONTROL_HANDLE handle, + bool enabled) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_enabled(KODI_GUI_CONTROL_HANDLE handle, bool enabled) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_enabled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_enabled_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_enabled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + enabled /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_enabled_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_enabled_v1(auto_gen_group.thisClassHdl, handle, + enabled); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_text_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_text_v1(auto_gen_group.thisClassHdl, handle, text); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_reset(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_reset_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_reset_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_reset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_reset_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_type(KODI_GUI_CONTROL_HANDLE handle, int type) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_type(KODI_GUI_CONTROL_HANDLE handle, int type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_type_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_type_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_type_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_type_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_type_v1(auto_gen_group.thisClassHdl, handle, type); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_string_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_string_label(KODI_GUI_CONTROL_HANDLE handle, const char* label, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_add_string_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_add_string_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_add_string_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_add_string_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_add_string_label_v1(auto_gen_group.thisClassHdl, handle, + label, value); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_string_value(KODI_GUI_CONTROL_HANDLE handle, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_string_value(KODI_GUI_CONTROL_HANDLE handle, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_string_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_string_value_v1; /* Autogenerated */ + + if (handle == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_string_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_string_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_string_value_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_spin_get_string_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_spin_get_string_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_string_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_string_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_get_string_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_get_string_value_v1, + in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_spin_get_string_value_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + return auto_gen_group.kodi_gui_controls_spin_get_string_value_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_int_label(KODI_GUI_CONTROL_HANDLE handle, + const char* label, + int value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_add_int_label(KODI_GUI_CONTROL_HANDLE handle, const char* label, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_add_int_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_add_int_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_add_int_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_add_int_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_add_int_label_v1(auto_gen_group.thisClassHdl, handle, label, + value); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_range(KODI_GUI_CONTROL_HANDLE handle, + int start, + int end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_range(KODI_GUI_CONTROL_HANDLE handle, int start, int end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_int_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_int_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_spin_set_int_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_int_range_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_int_range_v1(auto_gen_group.thisClassHdl, handle, start, + end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_value(KODI_GUI_CONTROL_HANDLE handle, int value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_int_value(KODI_GUI_CONTROL_HANDLE handle, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_int_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_int_value_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT int kodi_gui_controls_spin_get_int_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_controls_spin_get_int_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_int_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_int_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_get_int_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_get_int_value_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_spin_get_int_value_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + return auto_gen_group.kodi_gui_controls_spin_get_int_value_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_range(KODI_GUI_CONTROL_HANDLE handle, + float start, + float end) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_range(KODI_GUI_CONTROL_HANDLE handle, float start, float end) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_range_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_range_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_spin_set_float_range_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + start /* CheckAPIUse_WAY_10 (0003) */, end /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_float_range_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_float_range_v1(auto_gen_group.thisClassHdl, handle, + start, end); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_value(KODI_GUI_CONTROL_HANDLE handle, + float value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_value(KODI_GUI_CONTROL_HANDLE handle, float value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_float_value_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_float_value_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT float kodi_gui_controls_spin_get_float_value(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_controls_spin_get_float_value(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_get_float_value_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_get_float_value_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_get_float_value_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_get_float_value_v1, in, + out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_spin_get_float_value_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + return auto_gen_group.kodi_gui_controls_spin_get_float_value_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, + float interval) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_spin_set_float_interval(KODI_GUI_CONTROL_HANDLE handle, float interval) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_spin_set_float_interval_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_spin_set_float_interval_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_spin_set_float_interval_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + interval /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_spin_h, funcParent_kodi_gui_controls_spin_set_float_interval_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_spin_h; + auto_gen_group.kodi_gui_controls_spin_set_float_interval_v1(auto_gen_group.thisClassHdl, handle, + interval); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.h new file mode 100644 index 0000000000000..adc0684444b87 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/spin.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/spin.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_spin_h; +struct directFuncToKodi_gui_controls_spin_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_spin_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_spin_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_spin_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.cpp new file mode 100644 index 0000000000000..fe0a2cee15ab0 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "text_box.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_controls_text_box_h::InitDirect( + directFuncToAddon_gui_controls_text_box_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_visible(KODI_GUI_CONTROL_HANDLE handle, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_visible(KODI_GUI_CONTROL_HANDLE handle, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_text_box_set_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, funcParent_kodi_gui_controls_text_box_set_visible_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + auto_gen_group.kodi_gui_controls_text_box_set_visible_v1(auto_gen_group.thisClassHdl, handle, + visible); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_text_box_reset(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_reset(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_reset_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_reset_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_text_box_reset_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, funcParent_kodi_gui_controls_text_box_reset_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + auto_gen_group.kodi_gui_controls_text_box_reset_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_text(KODI_GUI_CONTROL_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_text(KODI_GUI_CONTROL_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_text_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_text_box_set_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, funcParent_kodi_gui_controls_text_box_set_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + auto_gen_group.kodi_gui_controls_text_box_set_text_v1(auto_gen_group.thisClassHdl, handle, text); +} + +ATTR_DLL_EXPORT char* kodi_gui_controls_text_box_get_text(KODI_GUI_CONTROL_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_controls_text_box_get_text(KODI_GUI_CONTROL_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_get_text_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_text_box_get_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, funcParent_kodi_gui_controls_text_box_get_text_v1, + in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_controls_text_box_get_text_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + return auto_gen_group.kodi_gui_controls_text_box_get_text_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_text_box_scroll(KODI_GUI_CONTROL_HANDLE handle, + unsigned int position) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_scroll(KODI_GUI_CONTROL_HANDLE handle, unsigned int position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_scroll_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_scroll_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_controls_text_box_scroll_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + position /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, funcParent_kodi_gui_controls_text_box_scroll_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + auto_gen_group.kodi_gui_controls_text_box_scroll_v1(auto_gen_group.thisClassHdl, handle, + position); +} + +ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_auto_scrolling(KODI_GUI_CONTROL_HANDLE handle, + int delay, + int time, + int repeat) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_controls_text_box_set_auto_scrolling( KODI_GUI_CONTROL_HANDLE handle, int delay, int time, int repeat) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_controls_text_box_set_auto_scrolling_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_controls_text_box_set_auto_scrolling_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_controls_text_box_set_auto_scrolling_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + delay /* CheckAPIUse_WAY_10 (0003) */, time /* CheckAPIUse_WAY_10 (0003) */, + repeat /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_controls_text_box_h, + funcParent_kodi_gui_controls_text_box_set_auto_scrolling_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_controls_text_box_h; + auto_gen_group.kodi_gui_controls_text_box_set_auto_scrolling_v1(auto_gen_group.thisClassHdl, + handle, delay, time, repeat); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.h new file mode 100644 index 0000000000000..f3c903fce4421 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/controls/text_box.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/controls/text_box.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_controls_text_box_h; +struct directFuncToKodi_gui_controls_text_box_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_controls_text_box_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_controls_text_box_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_controls_text_box_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/CMakeLists.txt new file mode 100644 index 0000000000000..72a59708dbd6c --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/CMakeLists.txt @@ -0,0 +1,32 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + context_menu.cpp + extended_progress.cpp + filebrowser.cpp + keyboard.cpp + numeric.cpp + ok.cpp + progress.cpp + select.cpp + text_viewer.cpp + yes_no.cpp +) + +set(HEADERS + context_menu.h + extended_progress.h + filebrowser.h + keyboard.h + numeric.h + ok.h + progress.h + select.h + text_viewer.h + yes_no.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_api_gui_dialogs) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.cpp new file mode 100644 index 0000000000000..e3e6da187c266 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "context_menu.h" + +#include +#include + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_context_menu_h::InitDirect( + directFuncToAddon_gui_dialogs_context_menu_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT int kodi_gui_dialogs_context_menu_open(const char* heading, + const char* entries[], + size_t size) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_context_menu_open(const char* heading, const char* entries[], size_t size) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_context_menu_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_context_menu_open_v1; /* Autogenerated */ + + if (heading == nullptr || entries == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + std::vector cpp_entries; /* CheckAPIUse_WAY_6c (0003) */ + cpp_entries.reserve(size); /* CheckAPIUse_WAY_6c (0003) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0003) */ + { + cpp_entries.emplace_back(entries[i] != nullptr ? entries[i] + : ""); /* CheckAPIUse_WAY_6c (0003) */ + } + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_context_menu_open_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, + cpp_entries /* CheckAPIUse_WAY_6c (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_context_menu_h, funcParent_kodi_gui_dialogs_context_menu_open_v1, + in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_context_menu_open_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_context_menu_h; + return auto_gen_group.kodi_gui_dialogs_context_menu_open_v1(auto_gen_group.thisClassHdl, heading, + entries, size); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.h new file mode 100644 index 0000000000000..31bef254257e9 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/context_menu.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/context_menu.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_context_menu_h; +struct directFuncToKodi_gui_dialogs_context_menu_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_context_menu_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_context_menu_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_context_menu_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.cpp new file mode 100644 index 0000000000000..12b01000c67f6 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.cpp @@ -0,0 +1,387 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "extended_progress.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_extended_progress_h::InitDirect( + directFuncToAddon_gui_dialogs_extended_progress_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_extended_progress_new_dialog(const char* title) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_extended_progress_new_dialog(const char* title) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_new_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_new_dialog_v1; /* Autogenerated */ + + if (title == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_new_dialog_v1( + title /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_new_dialog_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_extended_progress_new_dialog_v1 t = + ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + return auto_gen_group.kodi_gui_dialogs_extended_progress_new_dialog_v1( + auto_gen_group.thisClassHdl, title); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_delete_dialog(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_delete_dialog(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_delete_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_delete_dialog_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_delete_dialog_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_delete_dialog_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_delete_dialog_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_title(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_title(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_title_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_title_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_get_title_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_get_title_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_extended_progress_get_title_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + return auto_gen_group.kodi_gui_dialogs_extended_progress_get_title_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_title(KODI_GUI_HANDLE handle, + const char* title) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_title(KODI_GUI_HANDLE handle, const char* title) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_title_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_title_v1; /* Autogenerated */ + + if (handle == nullptr || title == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_set_title_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + title /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_set_title_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_set_title_v1(auto_gen_group.thisClassHdl, + handle, title); +} + +ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_text(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_dialogs_extended_progress_get_text(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_text_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_get_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_get_text_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_extended_progress_get_text_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + return auto_gen_group.kodi_gui_dialogs_extended_progress_get_text_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_text(KODI_GUI_HANDLE handle, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_text(KODI_GUI_HANDLE handle, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_text_v1; /* Autogenerated */ + + if (handle == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_set_text_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_set_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_set_text_v1(auto_gen_group.thisClassHdl, handle, + text); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_extended_progress_is_finished(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_extended_progress_is_finished(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_is_finished_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_is_finished_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_is_finished_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_is_finished_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_extended_progress_is_finished_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + return auto_gen_group.kodi_gui_dialogs_extended_progress_is_finished_v1( + auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_mark_finished(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_mark_finished(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_mark_finished_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_mark_finished_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_mark_finished_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_mark_finished_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_mark_finished_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT float kodi_gui_dialogs_extended_progress_get_percentage(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_dialogs_extended_progress_get_percentage(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_get_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return 0.0f; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_get_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_get_percentage_v1, in, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_extended_progress_get_percentage_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + return auto_gen_group.kodi_gui_dialogs_extended_progress_get_percentage_v1( + auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_percentage(KODI_GUI_HANDLE handle, + float percentage) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_percentage(KODI_GUI_HANDLE handle, float percentage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_set_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + percentage /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_set_percentage_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_set_percentage_v1(auto_gen_group.thisClassHdl, + handle, percentage); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_progress(KODI_GUI_HANDLE handle, + int currentItem, + int itemCount) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_extended_progress_set_progress(KODI_GUI_HANDLE handle, int currentItem, int itemCount) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_extended_progress_set_progress_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_extended_progress_set_progress_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_extended_progress_set_progress_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + currentItem /* CheckAPIUse_WAY_10 (0003) */, + itemCount /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_extended_progress_h, + funcParent_kodi_gui_dialogs_extended_progress_set_progress_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_extended_progress_h; + auto_gen_group.kodi_gui_dialogs_extended_progress_set_progress_v1(auto_gen_group.thisClassHdl, + handle, currentItem, itemCount); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.h new file mode 100644 index 0000000000000..e4c12337d7f4e --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/extended_progress.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/extended_progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_extended_progress_h; +struct directFuncToKodi_gui_dialogs_extended_progress_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_extended_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_extended_progress_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect( + KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_extended_progress_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.cpp new file mode 100644 index 0000000000000..4a1ad6ec24e36 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.cpp @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "filebrowser.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_filebrowser_h::InitDirect( + directFuncToAddon_gui_dialogs_filebrowser_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_directory( + const char* shares, const char* heading, const char* path_in, char** path_out, bool write_only) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_directory(const char* shares, const char* heading, const char* path_in, char** path_out, bool write_only) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_directory_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_directory_v1; /* Autogenerated */ + + if (shares == nullptr || heading == nullptr || path_in == nullptr || path_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + shares /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + path_in /* CheckAPIUse_WAY_6b (0003) */, + write_only /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_directory_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_directory_v1 t = + ident.get().as(); + + *path_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_directory_v1( + auto_gen_group.thisClassHdl, shares, heading, path_in, path_out, write_only); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file(const char* shares, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file(const char* shares, const char* mask, const char* heading, const char* path_in, char** path_out, bool use_thumbs, bool use_file_directories) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_v1; /* Autogenerated */ + + if (shares == nullptr || mask == nullptr || heading == nullptr || path_in == nullptr || + path_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_v1( + shares /* CheckAPIUse_WAY_6b (0003) */, mask /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, path_in /* CheckAPIUse_WAY_6b (0003) */, + use_thumbs /* CheckAPIUse_WAY_10 (0003) */, + use_file_directories /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_v1 t = + ident.get().as(); + + *path_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_file_v1( + auto_gen_group.thisClassHdl, shares, mask, heading, path_in, path_out, use_thumbs, + use_file_directories); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_from_dir( + const char* directory, + const char* mask, + const char* heading, + const char* path_in, + char** path_out, + bool use_thumbs, + bool use_file_directories, + bool single_list) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_from_dir( const char* directory, const char* mask, const char* heading, const char* path_in, char** path_out, bool use_thumbs, bool use_file_directories, bool single_list) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1; /* Autogenerated */ + + if (directory == nullptr || mask == nullptr || heading == nullptr || path_in == nullptr || + path_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1( + directory /* CheckAPIUse_WAY_6b (0003) */, mask /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, path_in /* CheckAPIUse_WAY_6b (0003) */, + use_thumbs /* CheckAPIUse_WAY_10 (0003) */, + use_file_directories /* CheckAPIUse_WAY_10 (0003) */, + single_list /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1 t = + ident.get().as(); + + *path_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_file_from_dir_v1( + auto_gen_group.thisClassHdl, directory, mask, heading, path_in, path_out, use_thumbs, + use_file_directories, single_list); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_list(const char* shares, + const char* mask, + const char* heading, + char*** file_list, + size_t* entries, + bool use_thumbs, + bool use_file_directories) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_file_list( const char* shares, const char* mask, const char* heading, char*** file_list, size_t* entries, bool use_thumbs, bool use_file_directories) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_8_1 (0006) */, size_t> msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1; /* Autogenerated */ + + if (shares == nullptr || mask == nullptr || heading == nullptr || file_list == nullptr || + entries == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + shares /* CheckAPIUse_WAY_6b (0003) */, mask /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, *entries /* CheckAPIUse_WAY_13 (0003) */, + use_thumbs /* CheckAPIUse_WAY_10 (0003) */, + use_file_directories /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_file_list_v1 t = + ident.get().as(); + + const std::vector& cpp_file_list = std::get<1>(t); /* CheckAPIUse_WAY_8_1 (0003) */ + *entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + assert(cpp_file_list.size() == *entries); /* CheckAPIUse_WAY_8_1 (0003) */ + if (!cpp_file_list.empty()) + { + *file_list = + static_cast(malloc(*entries * sizeof(char*))); /* CheckAPIUse_WAY_8_1 (0003) */ + for (size_t i = 0; i < *entries; ++i) /* CheckAPIUse_WAY_8_1 (0003) */ + (*file_list)[i] = strdup(cpp_file_list[i].c_str()); /* CheckAPIUse_WAY_8_1 (0003) */ + } + else + { + *file_list = nullptr; + } + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_file_list_v1( + auto_gen_group.thisClassHdl, shares, mask, heading, file_list, entries, use_thumbs, + use_file_directories); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_source(const char* path_in, + char** path_out, + bool allow_network_shares, + const char* additional_share, + const char* type) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_source( const char* path_in, char** path_out, bool allow_network_shares, const char* additional_share, const char* type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_source_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_source_v1; /* Autogenerated */ + + if (path_in == nullptr || path_out == nullptr || additional_share == nullptr || type == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_source_v1( + path_in /* CheckAPIUse_WAY_6b (0003) */, + allow_network_shares /* CheckAPIUse_WAY_10 (0003) */, + additional_share /* CheckAPIUse_WAY_6b (0003) */, + type /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_source_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_source_v1 t = + ident.get().as(); + + *path_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_source_v1( + auto_gen_group.thisClassHdl, path_in, path_out, allow_network_shares, additional_share, type); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image(const char* shares, + const char* heading, + const char* path_in, + char** path_out) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image(const char* shares, const char* heading, const char* path_in, char** path_out) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_v1; /* Autogenerated */ + + if (shares == nullptr || heading == nullptr || path_in == nullptr || path_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_v1( + shares /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + path_in /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_image_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_v1 t = + ident.get().as(); + + *path_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_image_v1( + auto_gen_group.thisClassHdl, shares, heading, path_in, path_out); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image_list(const char* shares, + const char* heading, + char*** file_list, + size_t* entries) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_file_browser_show_and_get_image_list(const char* shares, const char* heading, char*** file_list, size_t* entries) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_8_1 (0006) */, size_t> msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1; /* Autogenerated */ + + if (shares == nullptr || heading == nullptr || file_list == nullptr || entries == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + shares /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + *entries /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_filebrowser_h, + funcParent_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_file_browser_show_and_get_image_list_v1 t = + ident.get().as(); + + const std::vector& cpp_file_list = std::get<1>(t); /* CheckAPIUse_WAY_8_1 (0003) */ + *entries = std::get<2>(t); /* CheckAPIUse_WAY_13 (0003) */ + assert(cpp_file_list.size() == *entries); /* CheckAPIUse_WAY_8_1 (0003) */ + if (!cpp_file_list.empty()) + { + *file_list = + static_cast(malloc(*entries * sizeof(char*))); /* CheckAPIUse_WAY_8_1 (0003) */ + for (size_t i = 0; i < *entries; ++i) /* CheckAPIUse_WAY_8_1 (0003) */ + (*file_list)[i] = strdup(cpp_file_list[i].c_str()); /* CheckAPIUse_WAY_8_1 (0003) */ + } + else + { + *file_list = nullptr; + } + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_filebrowser_h; + return auto_gen_group.kodi_gui_dialogs_file_browser_show_and_get_image_list_v1( + auto_gen_group.thisClassHdl, shares, heading, file_list, entries); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_file_browser_clear_file_list(char*** file_list, + size_t entries) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_file_browser_clear_file_list(char*** file_list, size_t entries) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_gui_dialogs_file_browser_clear_file_list - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_gui_dialogs_file_browser_clear_file_list - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + if (*file_list) + { + for (size_t i = 0; i < entries; ++i) + free((*file_list)[i]); + free(*file_list); + *file_list = nullptr; + } + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.h new file mode 100644 index 0000000000000..aa0cc46f670bc --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/filebrowser.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/filebrowser.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_filebrowser_h; +struct directFuncToKodi_gui_dialogs_filebrowser_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_filebrowser_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_filebrowser_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_filebrowser_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.cpp new file mode 100644 index 0000000000000..89e3a19879ff8 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.cpp @@ -0,0 +1,432 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "keyboard.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_keyboard_h::InitDirect( + directFuncToAddon_gui_dialogs_keyboard_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input_with_head( + const char* text_in, + char** text_out, + const char* heading, + bool allow_empty_result, + bool hidden_input, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input_with_head( const char* text_in, char** text_out, const char* heading, bool allow_empty_result, bool hidden_input, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1; /* Autogenerated */ + + if (text_in == nullptr || text_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + text_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0003) */, + hidden_input /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1 t = + ident.get().as(); + + *text_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_get_input_with_head_v1( + auto_gen_group.thisClassHdl, text_in, text_out, heading, allow_empty_result, hidden_input, + auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input(const char* text_in, + char** text_out, + bool allow_empty_result, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_input(const char* text_in, char** text_out, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_v1; /* Autogenerated */ + + if (text_in == nullptr || text_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_input_v1( + text_in /* CheckAPIUse_WAY_6b (0003) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_get_input_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_input_v1 t = ident.get().as(); + + *text_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_get_input_v1( + auto_gen_group.thisClassHdl, text_in, text_out, allow_empty_result, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head( + const char* password_in, + char** password_out, + const char* heading, + bool allow_empty_result, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head( const char* password_in, char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1; /* Autogenerated */ + + if (password_in == nullptr || password_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1( + password_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1 t = + ident.get().as(); + + *password_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_get_new_password_with_head_v1( + auto_gen_group.thisClassHdl, password_in, password_out, heading, allow_empty_result, + auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password(const char* password_in, + char** password_out, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_new_password( const char* password_in, char** password_out, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1; /* Autogenerated */ + + if (password_in == nullptr || password_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + password_in /* CheckAPIUse_WAY_6b (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_new_password_v1 t = + ident.get().as(); + + *password_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_get_new_password_v1( + auto_gen_group.thisClassHdl, password_in, password_out, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head( + char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head( char** password_out, const char* heading, bool allow_empty_result, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1; /* Autogenerated */ + + if (password_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, + allow_empty_result /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1 t = + ident.get().as(); + + *password_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_verify_new_password_with_head_v1( + auto_gen_group.thisClassHdl, password_out, heading, allow_empty_result, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password( + char** password_out, unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_verify_new_password( char** password_out, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1; /* Autogenerated */ + + if (password_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1 t = + ident.get().as(); + + *password_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_verify_new_password_v1( + auto_gen_group.thisClassHdl, password_out, auto_close_ms); +} + +ATTR_DLL_EXPORT int kodi_gui_dialogs_keyboard_show_and_verify_password(const char* password_in, + char** password_out, + const char* heading, + int retries, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_keyboard_show_and_verify_password(const char* password_in, char** password_out, const char* heading, int retries, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_password_v1; /* Autogenerated */ + + if (password_in == nullptr || password_out == nullptr || heading == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + password_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + retries /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_verify_password_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_verify_password_v1 t = + ident.get().as(); + + *password_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_verify_password_v1( + auto_gen_group.thisClassHdl, password_in, password_out, heading, retries, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_filter(const char* text_in, + char** text_out, + bool searching, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_show_and_get_filter(const char* text_in, char** text_out, bool searching, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_filter_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_filter_v1; /* Autogenerated */ + + if (text_in == nullptr || text_out == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + text_in /* CheckAPIUse_WAY_6b (0003) */, + searching /* CheckAPIUse_WAY_10 (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_show_and_get_filter_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_show_and_get_filter_v1 t = + ident.get().as(); + + *text_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_show_and_get_filter_v1( + auto_gen_group.thisClassHdl, text_in, text_out, searching, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_send_text_to_active_keyboard(const char* text, + bool close_keyboard) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_send_text_to_active_keyboard(const char* text, bool close_keyboard) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1; /* Autogenerated */ + + if (text == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + text /* CheckAPIUse_WAY_6b (0003) */, + close_keyboard /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_send_text_to_active_keyboard_v1( + auto_gen_group.thisClassHdl, text, close_keyboard); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_is_keyboard_activated() +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_keyboard_is_keyboard_activated() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_dialogs_keyboard_h, + funcParent_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_keyboard_is_keyboard_activated_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_keyboard_h; + return auto_gen_group.kodi_gui_dialogs_keyboard_is_keyboard_activated_v1( + auto_gen_group.thisClassHdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.h new file mode 100644 index 0000000000000..e22c5857da5e9 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/keyboard.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/keyboard.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_keyboard_h; +struct directFuncToKodi_gui_dialogs_keyboard_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_keyboard_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_keyboard_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_keyboard_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.cpp new file mode 100644 index 0000000000000..509f0dc0c8b8c --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.cpp @@ -0,0 +1,341 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "numeric.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_numeric_h::InitDirect( + directFuncToAddon_gui_dialogs_numeric_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_new_password(char** password) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_new_password(char** password) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1; /* Autogenerated */ + + if (password == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_new_password_v1 t = + ident.get().as(); + + *password = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_verify_new_password_v1( + auto_gen_group.thisClassHdl, password); +} + +ATTR_DLL_EXPORT int kodi_gui_dialogs_numeric_show_and_verify_password(const char* password, + const char* heading, + int retries) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_numeric_show_and_verify_password(const char* password, const char* heading, int retries) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_password_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_password_v1; /* Autogenerated */ + + if (password == nullptr || heading == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_password_v1( + password /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + retries /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_verify_password_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_password_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_verify_password_v1( + auto_gen_group.thisClassHdl, password, heading, retries); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_input(const char* verify_in, + char** verify_out, + const char* heading, + bool verify_input) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_verify_input(const char* verify_in, char** verify_out, const char* heading, bool verify_input) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_input_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_input_v1; /* Autogenerated */ + + if (verify_in == nullptr || verify_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_verify_input_v1( + verify_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + verify_input /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_verify_input_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_verify_input_v1 t = + ident.get().as(); + + *verify_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_verify_input_v1( + auto_gen_group.thisClassHdl, verify_in, verify_out, heading, verify_input); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_time(struct tm* time, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_time(struct tm* time, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_time_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_time_v1; /* Autogenerated */ + + if (time == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_time_v1( + time /* CheckAPIUse_WAY_15 (0003-1) */, heading /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_get_time_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_time_v1 t = ident.get().as(); + + std::get<1>(t).SetCStructure(time); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_get_time_v1(auto_gen_group.thisClassHdl, + time, heading); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_date(struct tm* date, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_date(struct tm* date, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_date_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_date_v1; /* Autogenerated */ + + if (date == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_date_v1( + date /* CheckAPIUse_WAY_15 (0003-1) */, heading /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_get_date_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_date_v1 t = ident.get().as(); + + std::get<1>(t).SetCStructure(date); /* CheckAPIUse_WAY_15 (0003-2) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_get_date_v1(auto_gen_group.thisClassHdl, + date, heading); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_ip_address(const char* ip_address_in, + char** ip_address_out, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_ip_address(const char* ip_address_in, char** ip_address_out, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1; /* Autogenerated */ + + if (ip_address_in == nullptr || ip_address_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + ip_address_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_ip_address_v1 t = + ident.get().as(); + + *ip_address_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_get_ip_address_v1( + auto_gen_group.thisClassHdl, ip_address_in, ip_address_out, heading); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_number(const char* number_in, + char** number_out, + const char* heading, + unsigned int auto_close_ms) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_number(const char* number_in, char** number_out, const char* heading, unsigned int auto_close_ms) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_number_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_number_v1; /* Autogenerated */ + + if (number_in == nullptr || number_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_number_v1( + number_in /* CheckAPIUse_WAY_6b (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */, + auto_close_ms /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_get_number_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_number_v1 t = ident.get().as(); + + *number_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_get_number_v1( + auto_gen_group.thisClassHdl, number_in, number_out, heading, auto_close_ms); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_seconds(const char* time_in, + char** time_out, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_numeric_show_and_get_seconds(const char* time_in, char** time_out, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_seconds_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_seconds_v1; /* Autogenerated */ + + if (time_in == nullptr || time_out == nullptr || heading == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + time_in /* CheckAPIUse_WAY_6b (0003) */, heading /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_numeric_h, + funcParent_kodi_gui_dialogs_numeric_show_and_get_seconds_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_numeric_show_and_get_seconds_v1 t = + ident.get().as(); + + *time_out = strdup(std::get<1>(t).c_str()); /* CheckAPIUse_WAY_7 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_numeric_h; + return auto_gen_group.kodi_gui_dialogs_numeric_show_and_get_seconds_v1( + auto_gen_group.thisClassHdl, time_in, time_out, heading); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.h new file mode 100644 index 0000000000000..cdf5fe3c258e8 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/numeric.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/numeric.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_numeric_h; +struct directFuncToKodi_gui_dialogs_numeric_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_numeric_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_numeric_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_numeric_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.cpp new file mode 100644 index 0000000000000..0a5d873af37ad --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.cpp @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "ok.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_ok_h::InitDirect(directFuncToAddon_gui_dialogs_ok_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_single_text(const char* heading, + const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_single_text(const char* heading, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1; /* Autogenerated */ + + if (heading == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_ok_h, + funcParent_kodi_gui_dialogs_ok_show_and_get_input_single_text_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_ok_h; + auto_gen_group.kodi_gui_dialogs_ok_show_and_get_input_single_text_v1(auto_gen_group.thisClassHdl, + heading, text); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_line_text(const char* heading, + const char* line0, + const char* line1, + const char* line2) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_ok_show_and_get_input_line_text(const char* heading, const char* line0, const char* line1, const char* line2) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1; /* Autogenerated */ + + if (heading == nullptr || line0 == nullptr || line1 == nullptr || line2 == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, line0 /* CheckAPIUse_WAY_6b (0003) */, + line1 /* CheckAPIUse_WAY_6b (0003) */, line2 /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_ok_h, funcParent_kodi_gui_dialogs_ok_show_and_get_input_line_text_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_ok_h; + auto_gen_group.kodi_gui_dialogs_ok_show_and_get_input_line_text_v1(auto_gen_group.thisClassHdl, + heading, line0, line1, line2); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.h new file mode 100644 index 0000000000000..2044996b59bca --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/ok.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/ok.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_ok_h; +struct directFuncToKodi_gui_dialogs_ok_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_ok_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_ok_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_ok_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.cpp new file mode 100644 index 0000000000000..c30d018c836fe --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.cpp @@ -0,0 +1,425 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "progress.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_progress_h::InitDirect( + directFuncToAddon_gui_dialogs_progress_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_progress_new_dialog() +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_HANDLE kodi_gui_dialogs_progress_new_dialog() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_new_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_new_dialog_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_new_dialog_v1, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_progress_new_dialog_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + return auto_gen_group.kodi_gui_dialogs_progress_new_dialog_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_delete_dialog(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_delete_dialog(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_delete_dialog_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_delete_dialog_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_delete_dialog_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_delete_dialog_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_delete_dialog_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_open(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_open(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_open_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_open_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_open_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_open_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_heading(KODI_GUI_HANDLE handle, + const char* heading) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_heading(KODI_GUI_HANDLE handle, const char* heading) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_heading_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_heading_v1; /* Autogenerated */ + + if (handle == nullptr || heading == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_heading_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + heading /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_set_heading_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_heading_v1(auto_gen_group.thisClassHdl, handle, + heading); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_line(KODI_GUI_HANDLE handle, + unsigned int line_no, + const char* line) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_line(KODI_GUI_HANDLE handle, unsigned int line_no, const char* line) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_line_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_line_v1; /* Autogenerated */ + + if (handle == nullptr || line == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_line_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + line_no /* CheckAPIUse_WAY_10 (0003) */, + line /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_set_line_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_line_v1(auto_gen_group.thisClassHdl, handle, line_no, + line); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_can_cancel(KODI_GUI_HANDLE handle, + bool can_cancel) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_can_cancel(KODI_GUI_HANDLE handle, bool can_cancel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_can_cancel_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_can_cancel_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_can_cancel_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + can_cancel /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_set_can_cancel_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_can_cancel_v1(auto_gen_group.thisClassHdl, handle, + can_cancel); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_is_canceled(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_is_canceled(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_is_canceled_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_is_canceled_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_is_canceled_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_is_canceled_v1, + in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_progress_is_canceled_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + return auto_gen_group.kodi_gui_dialogs_progress_is_canceled_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_percentage(KODI_GUI_HANDLE handle, + int percentage) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_percentage(KODI_GUI_HANDLE handle, int percentage) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + percentage /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_set_percentage_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_percentage_v1(auto_gen_group.thisClassHdl, handle, + percentage); +} + +ATTR_DLL_EXPORT int kodi_gui_dialogs_progress_get_percentage(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_progress_get_percentage(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_get_percentage_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_get_percentage_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_get_percentage_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, + funcParent_kodi_gui_dialogs_progress_get_percentage_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_progress_get_percentage_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + return auto_gen_group.kodi_gui_dialogs_progress_get_percentage_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_show_progress_bar(KODI_GUI_HANDLE handle, + bool on_off) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_show_progress_bar(KODI_GUI_HANDLE handle, bool on_off) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_show_progress_bar_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_show_progress_bar_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_show_progress_bar_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + on_off /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_show_progress_bar_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_show_progress_bar_v1(auto_gen_group.thisClassHdl, handle, + on_off); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_max(KODI_GUI_HANDLE handle, int max) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_max(KODI_GUI_HANDLE handle, int max) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_progress_max_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_progress_max_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_progress_max_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + max /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_set_progress_max_v1, + in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_progress_max_v1(auto_gen_group.thisClassHdl, handle, + max); +} + +ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_advance(KODI_GUI_HANDLE handle, + int n_steps) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_progress_set_progress_advance(KODI_GUI_HANDLE handle, int n_steps) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_set_progress_advance_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_set_progress_advance_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_set_progress_advance_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + n_steps /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, + funcParent_kodi_gui_dialogs_progress_set_progress_advance_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + auto_gen_group.kodi_gui_dialogs_progress_set_progress_advance_v1(auto_gen_group.thisClassHdl, + handle, n_steps); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_abort(KODI_GUI_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_progress_abort(KODI_GUI_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_progress_abort_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_progress_abort_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_progress_abort_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_progress_h, funcParent_kodi_gui_dialogs_progress_abort_v1, in, + out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_progress_abort_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_progress_h; + return auto_gen_group.kodi_gui_dialogs_progress_abort_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.h new file mode 100644 index 0000000000000..d0b5611b3c6e3 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/progress.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/progress.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_progress_h; +struct directFuncToKodi_gui_dialogs_progress_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_progress_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_progress_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_progress_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.cpp new file mode 100644 index 0000000000000..f44a803d5a4ba --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "select.h" + +#include +#include + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_select_h::InitDirect(directFuncToAddon_gui_dialogs_select_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT int kodi_gui_dialogs_select_open( + const char* heading, const char* entries[], size_t size, int selected, unsigned int autoclose) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_dialogs_select_open(const char* heading, const char* entries[], size_t size, int selected, unsigned int autoclose) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, int /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_select_open_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_select_open_v1; /* Autogenerated */ + + if (heading == nullptr || entries == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + std::vector cpp_entries; /* CheckAPIUse_WAY_6c (0003) */ + cpp_entries.reserve(size); /* CheckAPIUse_WAY_6c (0003) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0003) */ + { + cpp_entries.emplace_back(entries[i] != nullptr ? entries[i] + : ""); /* CheckAPIUse_WAY_6c (0003) */ + } + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_dialogs_select_open_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, + cpp_entries /* CheckAPIUse_WAY_6c (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */, + selected /* CheckAPIUse_WAY_10 (0003) */, + autoclose /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_select_h, funcParent_kodi_gui_dialogs_select_open_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_select_open_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_select_h; + return auto_gen_group.kodi_gui_dialogs_select_open_v1(auto_gen_group.thisClassHdl, heading, + entries, size, selected, autoclose); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_select_open_multi_select(const char* heading, + const char* entryIDs[], + const char* entryNames[], + uint8_t entriesSelected[], + size_t size, + unsigned int autoclose) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_select_open_multi_select(const char* heading, const char* entryIDs[], const char* entryNames[], uint8_t entriesSelected[], size_t size, unsigned int autoclose) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple /* CheckAPIUse_WAY_6b (0006) */, std::vector /* CheckAPIUse_WAY_6b (0006) */, std::vector /* CheckAPIUse_WAY_10 (0006) */, size_t /* CheckAPIUse_WAY_11 (0006) */, unsigned int /* CheckAPIUse_WAY_11 (0006) */> msgParent__IN_kodi_gui_dialogs_select_open_multi_select_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple /* CheckAPIUse_WAY_10 (0006) */> msgParent_OUT_kodi_gui_dialogs_select_open_multi_select_v1; /* Autogenerated */ + + if (heading == nullptr || entryIDs == nullptr || entryNames == nullptr || + entriesSelected == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + std::vector cpp_entryIDs; /* CheckAPIUse_WAY_6c (0003) */ + cpp_entryIDs.reserve(size); /* CheckAPIUse_WAY_6c (0003) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0003) */ + { + cpp_entryIDs.emplace_back(entryIDs[i] != nullptr ? entryIDs[i] + : ""); /* CheckAPIUse_WAY_6c (0003) */ + } + std::vector cpp_entryNames; /* CheckAPIUse_WAY_6c (0003) */ + cpp_entryNames.reserve(size); /* CheckAPIUse_WAY_6c (0003) */ + for (size_t i = 0; i < size; ++i) /* CheckAPIUse_WAY_6c (0003) */ + { + cpp_entryNames.emplace_back(entryNames[i] != nullptr ? entryNames[i] + : ""); /* CheckAPIUse_WAY_6c (0003) */ + } + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, + msgParent__IN_kodi_gui_dialogs_select_open_multi_select_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, cpp_entryIDs /* CheckAPIUse_WAY_6c (0003) */, + cpp_entryNames /* CheckAPIUse_WAY_6c (0003) */, + std::vector(entriesSelected, + entriesSelected + size) /* CheckAPIUse_WAY_9 (0003) */, + size /* CheckAPIUse_WAY_10 (0003) */, autoclose /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_select_h, funcParent_kodi_gui_dialogs_select_open_multi_select_v1, + in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_select_open_multi_select_v1 t = ident.get().as(); + + std::memcpy(entriesSelected, std::get<1>(t).data(), + sizeof(uint8_t) * size); /* CheckAPIUse_WAY_9 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_select_h; + return auto_gen_group.kodi_gui_dialogs_select_open_multi_select_v1( + auto_gen_group.thisClassHdl, heading, entryIDs, entryNames, entriesSelected, size, autoclose); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.h new file mode 100644 index 0000000000000..97dcc3f1281db --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/select.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/select.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_select_h; +struct directFuncToKodi_gui_dialogs_select_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_select_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_select_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_select_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.cpp new file mode 100644 index 0000000000000..976df4cc4487d --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "text_viewer.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_text_viewer_h::InitDirect( + directFuncToAddon_gui_dialogs_text_viewer_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_dialogs_text_viewer_show(const char* heading, const char* text) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_dialogs_text_viewer_show(const char* heading, const char* text) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_text_viewer_show_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_text_viewer_show_v1; /* Autogenerated */ + + if (heading == nullptr || text == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_text_viewer_show_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, text /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_text_viewer_h, funcParent_kodi_gui_dialogs_text_viewer_show_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_text_viewer_h; + auto_gen_group.kodi_gui_dialogs_text_viewer_show_v1(auto_gen_group.thisClassHdl, heading, text); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.h new file mode 100644 index 0000000000000..6ea6a1660dde1 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/text_viewer.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/text_viewer.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_text_viewer_h; +struct directFuncToKodi_gui_dialogs_text_viewer_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_text_viewer_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_text_viewer_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_text_viewer_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.cpp new file mode 100644 index 0000000000000..1010b1a495e73 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "yes_no.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_dialogs_yes_no_h::InitDirect(directFuncToAddon_gui_dialogs_yes_no_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_single_text(const char* heading, + const char* text, + bool* canceled, + const char* noLabel, + const char* yesLabel) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_single_text(const char* heading, const char* text, bool* canceled, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1; /* Autogenerated */ + + if (heading == nullptr || text == nullptr || canceled == nullptr || noLabel == nullptr || + yesLabel == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, text /* CheckAPIUse_WAY_6b (0003) */, + *canceled /* CheckAPIUse_WAY_13 (0003) */, noLabel /* CheckAPIUse_WAY_6b (0003) */, + yesLabel /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_yes_no_h, + funcParent_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1 t = + ident.get().as(); + + *canceled = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_yes_no_h; + return auto_gen_group.kodi_gui_dialogs_yesno_show_and_get_input_single_text_v1( + auto_gen_group.thisClassHdl, heading, text, canceled, noLabel, yesLabel); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_text(const char* heading, + const char* line0, + const char* line1, + const char* line2, + const char* noLabel, + const char* yesLabel) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_text(const char* heading, const char* line0, const char* line1, const char* line2, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1; /* Autogenerated */ + + if (heading == nullptr || line0 == nullptr || line1 == nullptr || line2 == nullptr || + noLabel == nullptr || yesLabel == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, line0 /* CheckAPIUse_WAY_6b (0003) */, + line1 /* CheckAPIUse_WAY_6b (0003) */, line2 /* CheckAPIUse_WAY_6b (0003) */, + noLabel /* CheckAPIUse_WAY_6b (0003) */, yesLabel /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_yes_no_h, + funcParent_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1 t = + ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_yes_no_h; + return auto_gen_group.kodi_gui_dialogs_yesno_show_and_get_input_line_text_v1( + auto_gen_group.thisClassHdl, heading, line0, line1, line2, noLabel, yesLabel); +} + +ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_button_text( + const char* heading, + const char* line0, + const char* line1, + const char* line2, + bool* canceled, + const char* noLabel, + const char* yesLabel) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_dialogs_yesno_show_and_get_input_line_button_text( const char* heading, const char* line0, const char* line1, const char* line2, bool* canceled, const char* noLabel, const char* yesLabel) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1; /* Autogenerated */ + + if (heading == nullptr || line0 == nullptr || line1 == nullptr || line2 == nullptr || + canceled == nullptr || noLabel == nullptr || yesLabel == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + heading /* CheckAPIUse_WAY_6b (0003) */, line0 /* CheckAPIUse_WAY_6b (0003) */, + line1 /* CheckAPIUse_WAY_6b (0003) */, line2 /* CheckAPIUse_WAY_6b (0003) */, + *canceled /* CheckAPIUse_WAY_13 (0003) */, noLabel /* CheckAPIUse_WAY_6b (0003) */, + yesLabel /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_dialogs_yes_no_h, + funcParent_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1 t = + ident.get().as(); + + *canceled = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_dialogs_yes_no_h; + return auto_gen_group.kodi_gui_dialogs_yesno_show_and_get_input_line_button_text_v1( + auto_gen_group.thisClassHdl, heading, line0, line1, line2, canceled, noLabel, yesLabel); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.h new file mode 100644 index 0000000000000..4bc05a5576718 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/dialogs/yes_no.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/dialogs/yes_no.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_dialogs_yes_no_h; +struct directFuncToKodi_gui_dialogs_yes_no_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_dialogs_yes_no_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_dialogs_yes_no_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_dialogs_yes_no_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.cpp new file mode 100644 index 0000000000000..3dee09197c653 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.cpp @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "general.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_general_h::InitDirect(directFuncToAddon_gui_general_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT void kodi_gui_lock() +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_lock() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_lock_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_lock_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_gui_general_h, + funcParent_kodi_gui_lock_v1); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + auto_gen_group.kodi_gui_lock_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT void kodi_gui_unlock() +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_unlock() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_unlock_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_unlock_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage(funcGroup_gui_general_h, + funcParent_kodi_gui_unlock_v1); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + auto_gen_group.kodi_gui_unlock_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT int kodi_gui_get_screen_height() +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_screen_height() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_screen_height_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_screen_height_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_screen_height_v1, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_screen_height_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_screen_height_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT int kodi_gui_get_screen_width() +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_screen_width() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_screen_width_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_screen_width_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_screen_width_v1, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_screen_width_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_screen_width_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT float kodi_gui_get_video_resolution() +{ + // Original API call: ATTR_DLL_EXPORT float kodi_gui_get_video_resolution() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_video_resolution_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_video_resolution_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_video_resolution_v1, out)) + return 0.0f; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_video_resolution_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_video_resolution_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT int kodi_gui_get_current_window_dialog_id() +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_current_window_dialog_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_current_window_dialog_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_current_window_dialog_id_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_current_window_dialog_id_v1, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_current_window_dialog_id_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_current_window_dialog_id_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT int kodi_gui_get_current_window_id() +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_get_current_window_id() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_current_window_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_current_window_id_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_current_window_id_v1, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_current_window_id_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_current_window_id_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT ADDON_HARDWARE_CONTEXT kodi_gui_get_hw_context() +{ + // Original API call: ATTR_DLL_EXPORT ADDON_HARDWARE_CONTEXT kodi_gui_get_hw_context() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_get_hw_context_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_get_hw_context_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_gui_general_h, funcParent_kodi_gui_get_hw_context_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_get_hw_context_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_general_h; + return auto_gen_group.kodi_gui_get_hw_context_v1(auto_gen_group.thisClassHdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.h new file mode 100644 index 0000000000000..97ae12cc39d60 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/general.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/general.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_general_h; +struct directFuncToKodi_gui_general_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_general_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_general_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_general_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.cpp new file mode 100644 index 0000000000000..3d357ed1d1777 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.cpp @@ -0,0 +1,457 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "list_item.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_list_item_h::InitDirect(directFuncToAddon_gui_list_item_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_listitem_create(const char* label, + const char* label2, + const char* path) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_listitem_create(const char* label, const char* label2, const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_create_v1; /* Autogenerated */ + + if (label == nullptr || label2 == nullptr || path == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_gui_listitem_create_v1(label /* CheckAPIUse_WAY_6b (0003) */, + label2 /* CheckAPIUse_WAY_6b (0003) */, + path /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_create_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_create_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_create_v1(auto_gen_group.thisClassHdl, label, label2, + path); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_destroy(KODI_GUI_LISTITEM_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_destroy(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_destroy_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_destroy_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_destroy_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label(KODI_GUI_LISTITEM_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_get_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_get_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_get_label_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_get_label_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_set_label(KODI_GUI_LISTITEM_HANDLE handle, const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_label(KODI_GUI_LISTITEM_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_set_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_set_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_set_label_v1(auto_gen_group.thisClassHdl, handle, label); +} + +ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label2(KODI_GUI_LISTITEM_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_label2(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_label2_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_get_label2_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_get_label2_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_get_label2_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_get_label2_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_set_label2(KODI_GUI_LISTITEM_HANDLE handle, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_label2(KODI_GUI_LISTITEM_HANDLE handle, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_label2_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_label2_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_set_label2_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_set_label2_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_set_label2_v1(auto_gen_group.thisClassHdl, handle, label); +} + +ATTR_DLL_EXPORT char* kodi_gui_listitem_get_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_art_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_art_v1; /* Autogenerated */ + + if (handle == nullptr || type == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_get_art_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_get_art_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_get_art_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_get_art_v1(auto_gen_group.thisClassHdl, handle, type); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_set_art(KODI_GUI_LISTITEM_HANDLE handle, + const char* type, + const char* image) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_art(KODI_GUI_LISTITEM_HANDLE handle, const char* type, const char* image) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_art_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_art_v1; /* Autogenerated */ + + if (handle == nullptr || type == nullptr || image == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_listitem_set_art_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + type /* CheckAPIUse_WAY_6b (0003) */, image /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_set_art_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_set_art_v1(auto_gen_group.thisClassHdl, handle, type, image); +} + +ATTR_DLL_EXPORT char* kodi_gui_listitem_get_path(KODI_GUI_LISTITEM_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_path(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_path_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_get_path_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_get_path_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_get_path_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_get_path_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_set_path(KODI_GUI_LISTITEM_HANDLE handle, const char* path) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_path(KODI_GUI_LISTITEM_HANDLE handle, const char* path) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_path_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_path_v1; /* Autogenerated */ + + if (handle == nullptr || path == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_set_path_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + path /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_set_path_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_set_path_v1(auto_gen_group.thisClassHdl, handle, path); +} + +ATTR_DLL_EXPORT char* kodi_gui_listitem_get_property(KODI_GUI_LISTITEM_HANDLE handle, + const char* key) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_listitem_get_property(KODI_GUI_LISTITEM_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_get_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_get_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_get_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_get_property_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_get_property_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_get_property_v1(auto_gen_group.thisClassHdl, handle, key); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_set_property(KODI_GUI_LISTITEM_HANDLE handle, + const char* key, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_set_property(KODI_GUI_LISTITEM_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_set_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_set_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_listitem_set_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_set_property_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_set_property_v1(auto_gen_group.thisClassHdl, handle, key, value); +} + +ATTR_DLL_EXPORT void kodi_gui_listitem_select(KODI_GUI_LISTITEM_HANDLE handle, bool select) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_listitem_select(KODI_GUI_LISTITEM_HANDLE handle, bool select) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_select_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_select_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_select_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + select /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_select_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + auto_gen_group.kodi_gui_listitem_select_v1(auto_gen_group.thisClassHdl, handle, select); +} + +ATTR_DLL_EXPORT bool kodi_gui_listitem_is_selected(KODI_GUI_LISTITEM_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_listitem_is_selected(KODI_GUI_LISTITEM_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_listitem_is_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_listitem_is_selected_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_listitem_is_selected_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_list_item_h, funcParent_kodi_gui_listitem_is_selected_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_listitem_is_selected_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_list_item_h; + return auto_gen_group.kodi_gui_listitem_is_selected_v1(auto_gen_group.thisClassHdl, handle); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.h new file mode 100644 index 0000000000000..c7e6688fd569d --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/list_item.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/list_item.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_list_item_h; +struct directFuncToKodi_gui_list_item_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_list_item_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_list_item_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_list_item_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.cpp new file mode 100644 index 0000000000000..29380f32f4818 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.cpp @@ -0,0 +1,1403 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "window.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_gui_window_h::InitDirect(directFuncToAddon_gui_window_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT KODI_GUI_WINDOW_HANDLE kodi_gui_window_create(KODI_HANDLE kodiBase, + const char* xml_filename, + const char* default_skin, + bool as_dialog, + bool is_media) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_WINDOW_HANDLE kodi_gui_window_create(KODI_HANDLE kodiBase, const char* xml_filename, const char* default_skin, bool as_dialog, bool is_media) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_create_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_create_v1; /* Autogenerated */ + + if (kodiBase == nullptr || xml_filename == nullptr || default_skin == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_create_v1( + PtrValue(kodiBase) /* CheckAPIUse_WAY_12 (0003) */, + xml_filename /* CheckAPIUse_WAY_6b (0003) */, + default_skin /* CheckAPIUse_WAY_6b (0003) */, + as_dialog /* CheckAPIUse_WAY_10 (0003) */, + is_media /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_create_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_create_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_create_v1(auto_gen_group.thisClassHdl, kodiBase, + xml_filename, default_skin, as_dialog, is_media); +} + +ATTR_DLL_EXPORT void kodi_gui_window_destroy(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_destroy(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_destroy_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_destroy_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_destroy_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_destroy_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_destroy_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT bool kodi_gui_window_show(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_show(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_show_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_show_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_show_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_show_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_show_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_show_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT bool kodi_gui_window_close(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_close(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_close_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_close_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_close_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_close_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_close_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_close_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT bool kodi_gui_window_do_modal(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_do_modal(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_do_modal_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_do_modal_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_do_modal_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_do_modal_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_do_modal_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_do_modal_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT bool kodi_gui_window_set_focus_id(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_set_focus_id(KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_focus_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_focus_id_v1; /* Autogenerated */ + + if (handle == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_focus_id_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_focus_id_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_set_focus_id_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_set_focus_id_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT int kodi_gui_window_get_focus_id(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_focus_id(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_focus_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_focus_id_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_focus_id_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_focus_id_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_focus_id_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_focus_id_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_control_label(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + const char* label) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_label(KODI_GUI_WINDOW_HANDLE handle, int control_id, const char* label) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_label_v1; /* Autogenerated */ + + if (handle == nullptr || label == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_control_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */, + label /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_control_label_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_control_label_v1(auto_gen_group.thisClassHdl, handle, + control_id, label); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_control_visible(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool visible) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_visible(KODI_GUI_WINDOW_HANDLE handle, int control_id, bool visible) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_visible_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_visible_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_control_visible_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */, + visible /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_control_visible_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_control_visible_v1(auto_gen_group.thisClassHdl, handle, + control_id, visible); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_control_selected(KODI_GUI_WINDOW_HANDLE handle, + int control_id, + bool selected) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_control_selected(KODI_GUI_WINDOW_HANDLE handle, int control_id, bool selected) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_control_selected_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_control_selected_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_control_selected_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */, + selected /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_control_selected_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_control_selected_v1(auto_gen_group.thisClassHdl, handle, + control_id, selected); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_property(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property(KODI_GUI_WINDOW_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_window_set_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_property_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_property_v1(auto_gen_group.thisClassHdl, handle, key, value); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_property_int(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + int value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_int(KODI_GUI_WINDOW_HANDLE handle, const char* key, int value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_int_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_window_set_property_int_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_property_int_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_property_int_v1(auto_gen_group.thisClassHdl, handle, key, + value); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_property_bool(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + bool value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_bool(KODI_GUI_WINDOW_HANDLE handle, const char* key, bool value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_bool_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_window_set_property_bool_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_property_bool_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_property_bool_v1(auto_gen_group.thisClassHdl, handle, key, + value); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_property_double(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + double value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_property_double(KODI_GUI_WINDOW_HANDLE handle, const char* key, double value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_property_double_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_property_double_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_window_set_property_double_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_property_double_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_property_double_v1(auto_gen_group.thisClassHdl, handle, key, + value); +} + +ATTR_DLL_EXPORT char* kodi_gui_window_get_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_gui_window_get_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_property_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_property_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_property_v1(auto_gen_group.thisClassHdl, handle, key); +} + +ATTR_DLL_EXPORT int kodi_gui_window_get_property_int(KODI_GUI_WINDOW_HANDLE handle, const char* key) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_property_int(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_int_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_int_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_property_int_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_property_int_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_property_int_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_property_int_v1(auto_gen_group.thisClassHdl, handle, + key); +} + +ATTR_DLL_EXPORT bool kodi_gui_window_get_property_bool(KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_gui_window_get_property_bool(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_bool_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_bool_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_property_bool_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_property_bool_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_property_bool_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_property_bool_v1(auto_gen_group.thisClassHdl, handle, + key); +} + +ATTR_DLL_EXPORT double kodi_gui_window_get_property_double(KODI_GUI_WINDOW_HANDLE handle, + const char* key) +{ + // Original API call: ATTR_DLL_EXPORT double kodi_gui_window_get_property_double(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_property_double_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_property_double_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return 0.0; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_property_double_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_property_double_v1, in, out)) + return 0.0; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_property_double_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_property_double_v1(auto_gen_group.thisClassHdl, handle, + key); +} + +ATTR_DLL_EXPORT void kodi_gui_window_clear_properties(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_properties(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_properties_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_properties_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_clear_properties_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_clear_properties_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_clear_properties_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_window_clear_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_property(KODI_GUI_WINDOW_HANDLE handle, const char* key) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_clear_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_clear_property_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_clear_property_v1(auto_gen_group.thisClassHdl, handle, key); +} + +ATTR_DLL_EXPORT void kodi_gui_window_clear_item_list(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_clear_item_list(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_clear_item_list_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_clear_item_list_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_clear_item_list_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_clear_item_list_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_clear_item_list_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_window_add_list_item(KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item, + int list_position) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_add_list_item(KODI_GUI_WINDOW_HANDLE handle, KODI_GUI_LISTITEM_HANDLE item, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_add_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_add_list_item_v1; /* Autogenerated */ + + if (handle == nullptr || item == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_add_list_item_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(item) /* CheckAPIUse_WAY_12 (0003) */, + list_position /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_add_list_item_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_add_list_item_v1(auto_gen_group.thisClassHdl, handle, item, + list_position); +} + +ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item_from_position(KODI_GUI_WINDOW_HANDLE handle, + int list_position) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item_from_position(KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_remove_list_item_from_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_remove_list_item_from_position_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_remove_list_item_from_position_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + list_position /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_remove_list_item_from_position_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_remove_list_item_from_position_v1(auto_gen_group.thisClassHdl, + handle, list_position); +} + +ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item(KODI_GUI_WINDOW_HANDLE handle, + KODI_GUI_LISTITEM_HANDLE item) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_remove_list_item(KODI_GUI_WINDOW_HANDLE handle, KODI_GUI_LISTITEM_HANDLE item) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_remove_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_remove_list_item_v1; /* Autogenerated */ + + if (handle == nullptr || item == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_remove_list_item_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + PtrValue(item) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_remove_list_item_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_remove_list_item_v1(auto_gen_group.thisClassHdl, handle, item); +} + +ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE +kodi_gui_window_get_list_item(KODI_GUI_WINDOW_HANDLE handle, int list_position) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_LISTITEM_HANDLE kodi_gui_window_get_list_item( KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_list_item_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_list_item_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_list_item_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + list_position /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_list_item_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_list_item_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_list_item_v1(auto_gen_group.thisClassHdl, handle, + list_position); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_current_list_position(KODI_GUI_WINDOW_HANDLE handle, + int list_position) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_current_list_position(KODI_GUI_WINDOW_HANDLE handle, int list_position) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_current_list_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_current_list_position_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_current_list_position_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + list_position /* CheckAPIUse_WAY_10 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_current_list_position_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_current_list_position_v1(auto_gen_group.thisClassHdl, handle, + list_position); +} + +ATTR_DLL_EXPORT int kodi_gui_window_get_current_list_position(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_current_list_position(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_current_list_position_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_current_list_position_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_current_list_position_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_current_list_position_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_current_list_position_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_current_list_position_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT int kodi_gui_window_get_list_size(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_list_size(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_list_size_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_list_size_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_list_size_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_list_size_v1, in, out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_list_size_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_list_size_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_container_property(KODI_GUI_WINDOW_HANDLE handle, + const char* key, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_container_property(KODI_GUI_WINDOW_HANDLE handle, const char* key, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_container_property_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_container_property_v1; /* Autogenerated */ + + if (handle == nullptr || key == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, + msgParent__IN_kodi_gui_window_set_container_property_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + key /* CheckAPIUse_WAY_6b (0003) */, value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_container_property_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_container_property_v1(auto_gen_group.thisClassHdl, handle, key, + value); +} + +ATTR_DLL_EXPORT void kodi_gui_window_set_container_content(KODI_GUI_WINDOW_HANDLE handle, + const char* value) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_set_container_content(KODI_GUI_WINDOW_HANDLE handle, const char* value) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_set_container_content_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_set_container_content_v1; /* Autogenerated */ + + if (handle == nullptr || value == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_set_container_content_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + value /* CheckAPIUse_WAY_6b (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_set_container_content_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_set_container_content_v1(auto_gen_group.thisClassHdl, handle, + value); +} + +ATTR_DLL_EXPORT int kodi_gui_window_get_current_container_id(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT int kodi_gui_window_get_current_container_id(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_current_container_id_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_current_container_id_v1; /* Autogenerated */ + + if (handle == nullptr) + return -1; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_current_container_id_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_current_container_id_v1, in, + out)) + return -1; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_current_container_id_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_current_container_id_v1(auto_gen_group.thisClassHdl, + handle); +} + +ATTR_DLL_EXPORT void kodi_gui_window_mark_dirty_region(KODI_GUI_WINDOW_HANDLE handle) +{ + // Original API call: ATTR_DLL_EXPORT void kodi_gui_window_mark_dirty_region(KODI_GUI_WINDOW_HANDLE handle) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_mark_dirty_region_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_mark_dirty_region_v1; /* Autogenerated */ + + if (handle == nullptr) + return; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::pack(in, msgParent__IN_kodi_gui_window_mark_dirty_region_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */)); + AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_mark_dirty_region_v1, in); + return; + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + auto_gen_group.kodi_gui_window_mark_dirty_region_v1(auto_gen_group.thisClassHdl, handle); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_button(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_button( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_button_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_button_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_button_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_button_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_button_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_button_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_edit(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_edit( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_edit_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_edit_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_edit_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_edit_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_edit_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_edit_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_fade_label(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_fade_label( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_fade_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_fade_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_fade_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_fade_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_fade_label_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_fade_label_v1(auto_gen_group.thisClassHdl, + handle, control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_image(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_image( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_image_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_image_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_image_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_image_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_image_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_image_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_label(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_label( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_label_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_label_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_label_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_label_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_label_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_label_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_progress(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_progress( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_progress_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_progress_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_progress_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_progress_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_progress_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_progress_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_radio_button(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_radio_button( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_radio_button_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_radio_button_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_radio_button_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_radio_button_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_radio_button_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_radio_button_v1(auto_gen_group.thisClassHdl, + handle, control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_render_addon(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_render_addon( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_render_addon_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_render_addon_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_render_addon_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_render_addon_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_render_addon_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_render_addon_v1(auto_gen_group.thisClassHdl, + handle, control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_settings_slider(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_settings_slider( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_settings_slider_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_settings_slider_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_settings_slider_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_settings_slider_v1, in, + out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_settings_slider_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_settings_slider_v1(auto_gen_group.thisClassHdl, + handle, control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_slider(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_slider( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_slider_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_slider_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_slider_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_slider_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_slider_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_slider_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_spin(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_spin( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_spin_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_spin_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_spin_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_spin_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_spin_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_spin_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE +kodi_gui_window_get_control_text_box(KODI_GUI_WINDOW_HANDLE handle, int control_id) +{ + // Original API call: ATTR_DLL_EXPORT KODI_GUI_CONTROL_HANDLE kodi_gui_window_get_control_text_box( KODI_GUI_WINDOW_HANDLE handle, int control_id) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_gui_window_get_control_text_box_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_gui_window_get_control_text_box_v1; /* Autogenerated */ + + if (handle == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_gui_window_get_control_text_box_v1( + PtrValue(handle) /* CheckAPIUse_WAY_12 (0003) */, + control_id /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_gui_window_h, funcParent_kodi_gui_window_get_control_text_box_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_gui_window_get_control_text_box_v1 t = ident.get().as(); + + return reinterpret_cast(std::get<0>(t)); /* Return_WAY_4 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.gui_window_h; + return auto_gen_group.kodi_gui_window_get_control_text_box_v1(auto_gen_group.thisClassHdl, handle, + control_id); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.h b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.h new file mode 100644 index 0000000000000..739e0a3e0ad86 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/gui/window.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/gui/window.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_gui_window_h; +struct directFuncToKodi_gui_window_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_gui_window_h : public IMsgHdl +{ +public: + CHdl_kodi_gui_window_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_gui_window_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.cpp new file mode 100644 index 0000000000000..657b1cdf6325a --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "monitor.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_monitor_h::InitDirect(directFuncToAddon_monitor_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_monitor_wait_for_abort(double timeout) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_monitor_wait_for_abort(double timeout) __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_monitor_wait_for_abort - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_monitor_wait_for_abort - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + std::mutex mtx; + std::unique_lock lck(mtx); + AddonIfc::g_ifc->m_cv.wait_for(lck, std::chrono::duration(timeout)); + return AddonIfc::g_ifc->killCalled; + + /*---AUTO_GEN_PARSE---*/ +} + +ATTR_DLL_EXPORT bool kodi_monitor_abort_requested() +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_monitor_abort_requested() __INTRODUCED_IN_KODI(1); + // Tuple in: /* NOTE: msgParent__IN_kodi_monitor_abort_requested - Override active to use inside dev-kit library only */ + // Tuple out: /* NOTE: msgParent_OUT_kodi_monitor_abort_requested - Override active to use inside dev-kit library only */ + + /*---AUTO_GEN_PARSE---*/ + + return AddonIfc::g_ifc->killCalled; + + /*---AUTO_GEN_PARSE---*/ +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.h b/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.h new file mode 100644 index 0000000000000..f7c5519559059 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/monitor.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/monitor.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_monitor_h; +struct directFuncToKodi_monitor_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_monitor_h : public IMsgHdl +{ +public: + CHdl_kodi_monitor_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_monitor_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/network.cpp b/xbmc/addons/kodi-dev-kit/src/addon/api/network.cpp new file mode 100644 index 0000000000000..7a1ad69fae8a1 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/network.cpp @@ -0,0 +1,277 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#include "network.h" + +// Shared API +#include "src/shared/Instances.h" + +// Lib code +#include "core/addon_control.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using namespace KODI_ADDON::INTERNAL; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +void CHdl_kodi_network_h::InitDirect(directFuncToAddon_network_h* ifcToAddon) +{ + ifcToAddon->thisClassHdl = this; +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +/* NOTE: unused (no functions from Kodi to addon here) */ + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ + +ATTR_DLL_EXPORT bool kodi_network_wake_on_lan(const char* mac) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_network_wake_on_lan(const char* mac) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_wake_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_wake_on_lan_v1; /* Autogenerated */ + + if (mac == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_network_wake_on_lan_v1(mac /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_network_h, funcParent_kodi_network_wake_on_lan_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_wake_on_lan_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_wake_on_lan_v1(auto_gen_group.thisClassHdl, mac); +} + +ATTR_DLL_EXPORT char* kodi_network_get_ip_address() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_ip_address() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_ip_address_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_ip_address_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_network_h, funcParent_kodi_network_get_ip_address_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_get_ip_address_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_get_ip_address_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT char* kodi_network_dns_lookup(const char* url, bool* ret) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_network_dns_lookup(const char* url, bool* ret) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_dns_lookup_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_dns_lookup_v1; /* Autogenerated */ + + if (url == nullptr || ret == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_network_dns_lookup_v1(url /* CheckAPIUse_WAY_6b (0003) */, + *ret /* CheckAPIUse_WAY_13 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_network_h, funcParent_kodi_network_dns_lookup_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_dns_lookup_v1 t = ident.get().as(); + + *ret = std::get<1>(t); /* CheckAPIUse_WAY_13 (0003) */ + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_dns_lookup_v1(auto_gen_group.thisClassHdl, url, ret); +} + +ATTR_DLL_EXPORT char* kodi_network_url_encode(const char* url) +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_network_url_encode(const char* url) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_url_encode_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_url_encode_v1; /* Autogenerated */ + + if (url == nullptr) + return nullptr; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, + msgParent__IN_kodi_network_url_encode_v1(url /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_network_h, funcParent_kodi_network_url_encode_v1, in, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_url_encode_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_url_encode_v1(auto_gen_group.thisClassHdl, url); +} + +ATTR_DLL_EXPORT char* kodi_network_get_hostname() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_hostname() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_hostname_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_hostname_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_network_h, funcParent_kodi_network_get_hostname_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_get_hostname_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_get_hostname_v1(auto_gen_group.thisClassHdl); +} + +ATTR_DLL_EXPORT bool kodi_network_is_local_host(const char* hostname) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_network_is_local_host(const char* hostname) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_is_local_host_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_is_local_host_v1; /* Autogenerated */ + + if (hostname == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack( + in, msgParent__IN_kodi_network_is_local_host_v1(hostname /* CheckAPIUse_WAY_6b (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_network_h, funcParent_kodi_network_is_local_host_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_is_local_host_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_is_local_host_v1(auto_gen_group.thisClassHdl, hostname); +} + +ATTR_DLL_EXPORT bool kodi_network_is_host_on_lan(const char* hostname, bool offLineCheck) +{ + // Original API call: ATTR_DLL_EXPORT bool kodi_network_is_host_on_lan(const char* hostname, bool offLineCheck) __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_is_host_on_lan_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_is_host_on_lan_v1; /* Autogenerated */ + + if (hostname == nullptr) + return false; + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_network_is_host_on_lan_v1( + hostname /* CheckAPIUse_WAY_6b (0003) */, + offLineCheck /* CheckAPIUse_WAY_10 (0003) */)); + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessage( + funcGroup_network_h, funcParent_kodi_network_is_host_on_lan_v1, in, out)) + return false; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_is_host_on_lan_v1 t = ident.get().as(); + + return std::get<0>(t); /* Return_WAY_2 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_is_host_on_lan_v1(auto_gen_group.thisClassHdl, hostname, + offLineCheck); +} + +ATTR_DLL_EXPORT char* kodi_network_get_user_agent() +{ + // Original API call: ATTR_DLL_EXPORT char* kodi_network_get_user_agent() __INTRODUCED_IN_KODI(1); + // Tuple in: typedef std::tuple msgParent__IN_kodi_network_get_user_agent_v1; /* Autogenerated */ + // Tuple out: typedef std::tuple msgParent_OUT_kodi_network_get_user_agent_v1; /* Autogenerated */ + +#ifndef KODI_INHIBIT_SHARED + if (!AddonIfc::g_ifc->direct_used) + { + msgpack::sbuffer out; + if (!AddonIfc::g_ifc->control->GetThreadIfc()->SendMessageOnlyGetReturn( + funcGroup_network_h, funcParent_kodi_network_get_user_agent_v1, out)) + return nullptr; + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_network_get_user_agent_v1 t = ident.get().as(); + + return strdup(std::get<0>(t).c_str()); /* Return_WAY_1 (0003) */ + } +#endif /* !KODI_INHIBIT_SHARED */ + + const auto& auto_gen_group = AddonIfc::g_ifc->direct->to_kodi.network_h; + return auto_gen_group.kodi_network_get_user_agent_v1(auto_gen_group.thisClassHdl); +} + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/api/network.h b/xbmc/addons/kodi-dev-kit/src/addon/api/network.h new file mode 100644 index 0000000000000..4d1b30b0f1232 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/api/network.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2022 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +/* File autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator/code_generator.py */ + +#pragma once + +#include "core/IMsgHdl.h" +#include "src/shared/api/network.h" + +/* Code below becomes on auto generation reused, hand edited parts should included here */ +/*---AUTO_GEN_PARSE---*/ +/*---AUTO_GEN_PARSE---*/ + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +struct directFuncToAddon_network_h; +struct directFuncToKodi_network_h; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class ATTR_DLL_LOCAL CHdl_kodi_network_h : public IMsgHdl +{ +public: + CHdl_kodi_network_h(AddonIfc* ifc) : IMsgHdl(ifc) {} + + void InitDirect(KODI::ADDONS::INTERFACE::directFuncToAddon_network_h* ifcToAddon); + + /* Code below becomes on auto generation reused, hand edited parts should included here */ + /*---AUTO_GEN_PARSE---*/ + /*---AUTO_GEN_PARSE---*/ +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon/core/CMakeLists.txt new file mode 100644 index 0000000000000..9412a79a2a529 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/CMakeLists.txt @@ -0,0 +1,17 @@ +# Auto generated CMakeLists.txt. +# See xbmc/addons/kodi-dev-kit/tools/code-generator.py. + +set(SOURCES + addon_control.cpp + addon_thread_control.cpp +) + +set(HEADERS + IMsgHdl.h + addon_control.h + addon_thread_control.h +) + +if(SOURCES OR HEADERS) + devkit_add_object(devkit_core) +endif() diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/IMsgHdl.h b/xbmc/addons/kodi-dev-kit/src/addon/core/IMsgHdl.h new file mode 100644 index 0000000000000..4944f8767f1d5 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/IMsgHdl.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "../../../src/shared/SharedGroups.h" +#include "../../../src/shared/api/addon_base.h" + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +struct AddonIfc; + +class ATTR_DLL_LOCAL IMsgHdl +{ +public: + IMsgHdl(AddonIfc* ifc) : m_ifc(ifc) {} + virtual ~IMsgHdl() = default; + + virtual bool HandleMessage(int funcGroup, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) + { + return false; + } + +protected: + AddonIfc* m_ifc; +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.cpp b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.cpp new file mode 100644 index 0000000000000..f86bd236a3243 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.cpp @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "addon_control.h" + +#include "../../../include/kodi/tools/StringUtils.h" +#include "../../../src/shared/api/processor.h" + +/*---AUTO_GEN_PARSE---*/ +/* Code below autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator.py */ +#include "api/addon-instance/audiodecoder.h" +#include "api/addon-instance/audioencoder.h" +#include "api/addon-instance/game.h" +#include "api/addon-instance/imagedecoder.h" +#include "api/addon-instance/inputstream.h" +#include "api/addon-instance/peripheral.h" +#include "api/addon-instance/pvr.h" +#include "api/addon-instance/screensaver.h" +#include "api/addon-instance/vfs.h" +#include "api/addon-instance/videocodec.h" +#include "api/addon-instance/visualization.h" +#include "api/addon_base.h" +#include "api/gui/window.h" +/*---AUTO_GEN_PARSE---*/ + +using namespace KODI::ADDONS::INTERFACE; +using kodi::tools::StringUtils; +using KODI_ADDON::INTERNAL::AddonIfc; +using KODI_ADDON::INTERNAL::CAddonControl; +using KODI_ADDON::INTERNAL::CAddonThreadIfc; + +AddonIfc* AddonIfc::g_ifc = nullptr; + + +CAddonControl::CAddonControl(AddonIfc* ifc) + : m_ifc(ifc), + m_mainThreadId(std::this_thread::get_id()), + m_mainThread(std::make_shared(0, this, ifc->viaMainThread)) +{ + /*---AUTO_GEN_PARSE---*/ + /* Code below autogenerated, see xbmc/addons/kodi-dev-kit/tools/code-generator.py */ + CHdl_kodi_addon_base_h* addon_base_h = new CHdl_kodi_addon_base_h(m_ifc); + m_handlers[funcGroup_addon_base_h] = addon_base_h; + CHdl_kodi_addoninstance_audiodecoder_h* addoninstance_audiodecoder_h = + new CHdl_kodi_addoninstance_audiodecoder_h(m_ifc); + m_handlers[funcGroup_addoninstance_audiodecoder_h] = addoninstance_audiodecoder_h; + CHdl_kodi_addoninstance_audioencoder_h* addoninstance_audioencoder_h = + new CHdl_kodi_addoninstance_audioencoder_h(m_ifc); + m_handlers[funcGroup_addoninstance_audioencoder_h] = addoninstance_audioencoder_h; + CHdl_kodi_addoninstance_game_h* addoninstance_game_h = new CHdl_kodi_addoninstance_game_h(m_ifc); + m_handlers[funcGroup_addoninstance_game_h] = addoninstance_game_h; + CHdl_kodi_addoninstance_imagedecoder_h* addoninstance_imagedecoder_h = + new CHdl_kodi_addoninstance_imagedecoder_h(m_ifc); + m_handlers[funcGroup_addoninstance_imagedecoder_h] = addoninstance_imagedecoder_h; + CHdl_kodi_addoninstance_inputstream_h* addoninstance_inputstream_h = + new CHdl_kodi_addoninstance_inputstream_h(m_ifc); + m_handlers[funcGroup_addoninstance_inputstream_h] = addoninstance_inputstream_h; + CHdl_kodi_addoninstance_peripheral_h* addoninstance_peripheral_h = + new CHdl_kodi_addoninstance_peripheral_h(m_ifc); + m_handlers[funcGroup_addoninstance_peripheral_h] = addoninstance_peripheral_h; + CHdl_kodi_addoninstance_pvr_h* addoninstance_pvr_h = new CHdl_kodi_addoninstance_pvr_h(m_ifc); + m_handlers[funcGroup_addoninstance_pvr_h] = addoninstance_pvr_h; + CHdl_kodi_addoninstance_screensaver_h* addoninstance_screensaver_h = + new CHdl_kodi_addoninstance_screensaver_h(m_ifc); + m_handlers[funcGroup_addoninstance_screensaver_h] = addoninstance_screensaver_h; + CHdl_kodi_addoninstance_vfs_h* addoninstance_vfs_h = new CHdl_kodi_addoninstance_vfs_h(m_ifc); + m_handlers[funcGroup_addoninstance_vfs_h] = addoninstance_vfs_h; + CHdl_kodi_addoninstance_videocodec_h* addoninstance_videocodec_h = + new CHdl_kodi_addoninstance_videocodec_h(m_ifc); + m_handlers[funcGroup_addoninstance_videocodec_h] = addoninstance_videocodec_h; + CHdl_kodi_addoninstance_visualization_h* addoninstance_visualization_h = + new CHdl_kodi_addoninstance_visualization_h(m_ifc); + m_handlers[funcGroup_addoninstance_visualization_h] = addoninstance_visualization_h; + CHdl_kodi_gui_window_h* gui_window_h = new CHdl_kodi_gui_window_h(m_ifc); + m_handlers[funcGroup_gui_window_h] = gui_window_h; + + if (m_ifc->direct != nullptr) + { + addon_base_h->InitDirect(&m_ifc->direct->to_addon.addon_base_h); + addoninstance_audiodecoder_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_audiodecoder_h); + addoninstance_audioencoder_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_audioencoder_h); + addoninstance_game_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_game_h); + addoninstance_imagedecoder_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_imagedecoder_h); + addoninstance_inputstream_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_inputstream_h); + addoninstance_peripheral_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_peripheral_h); + addoninstance_pvr_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_pvr_h); + addoninstance_screensaver_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_screensaver_h); + addoninstance_vfs_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_vfs_h); + addoninstance_videocodec_h->InitDirect(&m_ifc->direct->to_addon.addoninstance_videocodec_h); + addoninstance_visualization_h->InitDirect( + &m_ifc->direct->to_addon.addoninstance_visualization_h); + gui_window_h->InitDirect(&m_ifc->direct->to_addon.gui_window_h); + } + /*---AUTO_GEN_PARSE---*/ + + if (m_ifc->direct != nullptr) + { + m_ifc->direct->to_addon.processor_h.thisClassHdl = this; + m_ifc->direct->to_addon.processor_h.kodi_kill_child = kodi_kill_child; + } +} + +CAddonControl::~CAddonControl() +{ + for (auto& handler : m_handlers) + { + delete handler; + } +} + +bool CAddonControl::Create() +{ + if (!m_mainThread->Create()) + return false; + + return true; +} + +std::shared_ptr CAddonControl::GetThreadIfc() +{ + const std::thread::id threadId = std::this_thread::get_id(); + + if (m_mainThreadId == threadId) + { + return m_mainThread; + } + + std::unique_lock lock(m_mutex); + + auto it = std::find_if(m_runningSubThreads.begin(), m_runningSubThreads.end(), + [](std::shared_ptr entry) { return !entry->Active(); }); + if (it == m_runningSubThreads.end()) + { + msgpack::sbuffer in; + msgpack::sbuffer out; + msgpack::pack(in, msgParent__IN_kodi_processor_CreateForNewThread(m_mainThread->GetID())); + m_mainThread->SendMessage(funcGroup_Main, kodi_processor_CreateForNewThread, in, out); + msgpack::unpacked ident = msgpack::unpack(out.data(), out.size()); + msgParent_OUT_kodi_processor_CreateForNewThread t = ident.get().as(); + const std::string identifier = std::get<0>(t); + + auto newIfc = std::make_shared(std::get<1>(t), this, false); + if (!newIfc->Create()) + { + return nullptr; + } + m_runningSubThreads.emplace(newIfc); + return newIfc; + } + + return *it; +} + +bool CAddonControl::ProcessOutside() +{ + return GetThreadIfc()->ProcessOutside(); +} + +bool CAddonControl::FuncCall(int group, + int func, + const msgpack::unpacked& in, + msgpack::sbuffer& out) +{ + if (group == funcGroup_Main) + { + switch (func) + { + case kodi_processor_KillChild: + { + msgChild__IN_kodi_processor_KillChild t = in.get().as(); + if (m_ifc->identifier != std::get<0>(t)) + { + fprintf(stderr, "FATAL: Addon called with invalid identifier to kill!\n"); + } + + m_ifc->killCalled = true; + m_ifc->m_cv.notify_all(); + // False return here stops the related thread process. + return false; + } + default: + break; + } + + return false; + } + + if (m_handlers[group]) + return m_handlers[group]->HandleMessage(group, func, in, out); + + fprintf(stderr, "FATAL: Addon called with invalid group %i!\n", group); + return false; +} + +void CAddonControl::kodi_kill_child(void* thisClassHdl, const char* uuid) +{ + auto thisClass = reinterpret_cast(thisClassHdl); + if (thisClass == nullptr) + return; + + if (thisClass->m_ifc->identifier != uuid) + { + fprintf(stderr, "FATAL: Addon called with invalid identifier to kill!\n"); + } + + thisClass->m_ifc->killCalled = true; + thisClass->m_ifc->m_cv.notify_all(); + thisClass->m_mainThread->DestroyReceiver(); +} diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.h b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.h new file mode 100644 index 0000000000000..8877b5df946af --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_control.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "../../../include/kodi/c-api/addon_base.h" +#include "../../shared/DirectData.h" +#include "../../shared/Instances.h" +#include "IMsgHdl.h" +#include "addon_thread_control.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class CAddonControl; + + +struct ATTR_DLL_LOCAL AddonIfc +{ + unsigned int api; + std::string identifier; + std::unique_ptr control{nullptr}; + bool viaMainThread{false}; + bool noReceive{false}; + bool killCalled{false}; + KODI::ADDONS::INTERFACE::UnionAddonFunctions functions{}; + std::condition_variable m_cv; + + // Data for case addon used without shared mem, not as independent app and direct to Kodi + KODI::ADDONS::INTERFACE::DirectAddonIfc* direct{nullptr}; + bool direct_used{false}; + + // Handle where contains first instance handle pointer in Kodi for addons where accessed + // by Kodi, e.g. PVR. + // This always set with first used instace pointer in Kodi, but only be used by C++ API and + // if CAddonBase and IAddonInstance in same child. + // On other addons where works itself, e.g. service or video addon, is it unused and 0. + // KODI_ADDON_INSTANCE_INFO* kodiFirstInstance{nullptr}; + + static AddonIfc* g_ifc; +}; + +class ATTR_DLL_LOCAL CAddonControl +{ +public: + CAddonControl(AddonIfc* ifc); + ~CAddonControl(); + + bool Create(); + std::shared_ptr GetThreadIfc(); + bool ProcessOutside(); + bool FuncCall(int group, int func, const msgpack::unpacked& in, msgpack::sbuffer& out); + + const std::string& GetUUID() const { return m_ifc->identifier; } + +private: + AddonIfc* const m_ifc; + + const std::thread::id m_mainThreadId; + const std::shared_ptr m_mainThread; + std::set> m_runningSubThreads; + std::set> m_unusedThreads; + std::array m_handlers{nullptr}; + + std::mutex m_mutex; + + static void kodi_kill_child(void* thisClassHdl, const char* uuid); +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.cpp b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.cpp new file mode 100644 index 0000000000000..6e5859259f4dd --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "addon_thread_control.h" + +#include "../../../include/kodi/tools/StringUtils.h" +#include "../../shared/ShareProcessReceiver.h" +#include "../../shared/ShareProcessTransmitter.h" +#include "addon_control.h" + +using kodi::tools::StringUtils; +using namespace KODI::ADDONS::INTERFACE; + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +CAddonThreadIfc::CAddonThreadIfc(int64_t identifier, CAddonControl* process, bool processOutside) + : m_mainThread(identifier == 0), + m_identifier(identifier), + m_id(StringUtils::Format("%s-ifc-%05i", process->GetUUID().c_str(), m_identifier)), + m_processOutside(processOutside), + m_process(process) +{ + m_shareProcessReceiver = new CShareProcessReceiver(m_id + "-srvchl", m_mainThread); + m_shareProcessTransmitter = new CShareProcessTransmitter(m_id + "-chlsrv", m_mainThread); + + fprintf(stderr, "DEBUG: Started thread class with id '%s'\n", m_id.c_str()); +} + +CAddonThreadIfc::~CAddonThreadIfc() +{ + Destroy(); + delete m_shareProcessReceiver; + delete m_shareProcessTransmitter; +} + +bool CAddonThreadIfc::Create() +{ + if (!m_shareProcessTransmitter->Create(false)) + { + fprintf(stderr, + "FATAL: Failed to create shared process memory from addon to Kodi (id '%s') (Last " + "error: %s)\n", + m_id.c_str(), m_shareProcessTransmitter->GetLastErrorText().c_str()); + return false; + } + + if (!m_shareProcessReceiver->Create(false, !m_processOutside)) + { + fprintf(stderr, + "FATAL: Failed to create shared process memory from Kodi to addon (id '%s') (Last " + "error: %s)\n", + m_id.c_str(), m_shareProcessReceiver->GetLastErrorText().c_str()); + return false; + } + + m_shareProcessReceiver->RegisterReceiver(std::bind(&CAddonControl::FuncCall, m_process, + std::placeholders::_1, std::placeholders::_2, + std::placeholders::_3, std::placeholders::_4)); + + return true; +} + +void CAddonThreadIfc::Destroy() +{ + m_shareProcessTransmitter->Destroy(); + m_shareProcessReceiver->Destroy(); +} + +void CAddonThreadIfc::DestroyReceiver() +{ + m_shareProcessReceiver->Destroy(); +} + +bool CAddonThreadIfc::SendMessage(int group, int func) +{ + return m_shareProcessTransmitter->SendMessage(group, func); +} + +bool CAddonThreadIfc::SendMessage(int group, int func, const msgpack::sbuffer& in) +{ + return m_shareProcessTransmitter->SendMessage(group, func, in); +} + +bool CAddonThreadIfc::SendMessage(int group, + int func, + const msgpack::sbuffer& in, + msgpack::sbuffer& ret) +{ + return m_shareProcessTransmitter->SendMessage(group, func, in, ret); +} + +bool CAddonThreadIfc::SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret) +{ + return m_shareProcessTransmitter->SendMessageOnlyGetReturn(group, func, ret); +} + +bool CAddonThreadIfc::ProcessOutside() +{ + if (!m_processOutside) + return false; + + return m_shareProcessReceiver->ProcessOutside(); +} + +bool CAddonThreadIfc::Active() const +{ + return m_shareProcessTransmitter->m_active || m_shareProcessReceiver->m_active; +} + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.h b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.h new file mode 100644 index 0000000000000..fb2e1d264f1f2 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon/core/addon_thread_control.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "../../../include/kodi/c-api/addon_base.h" +#include "../../../src/shared/SharedData.h" + +#include +#include +#include + +namespace KODI +{ +namespace ADDONS +{ +namespace INTERFACE +{ + +class CShareProcessReceiver; +class CShareProcessTransmitter; + +} /* namespace INTERFACE */ +} /* namespace ADDONS */ +} /* namespace KODI */ + +namespace KODI_ADDON +{ +namespace INTERNAL +{ + +class CAddonControl; + +class ATTR_DLL_LOCAL CAddonThreadIfc +{ +public: + CAddonThreadIfc(int64_t identifier, CAddonControl* process, bool processOutside); + ~CAddonThreadIfc(); + + bool Create(); + void Destroy(); + void DestroyReceiver(); + + bool SendMessage(int group, int func); + bool SendMessage(int group, int func, const msgpack::sbuffer& in); + bool SendMessage(int group, int func, const msgpack::sbuffer& in, msgpack::sbuffer& ret); + bool SendMessageOnlyGetReturn(int group, int func, msgpack::sbuffer& ret); + + bool ProcessOutside(); + + bool Active() const; + const std::string& GetID() const { return m_id; } + +private: + const bool m_mainThread; + const int64_t m_identifier; + const std::string m_id; + const bool m_processOutside; + CAddonControl* const m_process; + + int64_t m_pid{-1}; + KODI::ADDONS::INTERFACE::CShareProcessReceiver* m_shareProcessReceiver{nullptr}; + KODI::ADDONS::INTERFACE::CShareProcessTransmitter* m_shareProcessTransmitter{nullptr}; +}; + +} /* namespace INTERNAL */ +} /* namespace KODI_ADDON */ diff --git a/xbmc/addons/kodi-dev-kit/src/addon_run_exe/CMakeLists.txt b/xbmc/addons/kodi-dev-kit/src/addon_run_exe/CMakeLists.txt new file mode 100644 index 0000000000000..cd9bcfc57c2d8 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon_run_exe/CMakeLists.txt @@ -0,0 +1,36 @@ +# Add-on helper executable to launch an add-on library as executable in Kodi +# + +cmake_minimum_required(VERSION 3.5) +project(addon_run_exe) + +cmake_parse_arguments(arg "WRAPPED" "DEVKIT_OUTPUT_DIRECTORY" "" ${ARGN}) +if(arg_DEVKIT_OUTPUT_DIRECTORY) + set(DEVKIT_OUTPUT_DIRECTORY ${arg_DEVKIT_OUTPUT_DIRECTORY}) +else() + set(DEVKIT_OUTPUT_DIRECTORY "addons/kodi.binary.devkit") +endif() + +set(SOURCES main.cpp) + +set(DEVKIT_LAUNCH_EXE ${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX} CACHE STRING "Launch executable used for dev-kit") + +add_executable(${PROJECT_NAME} ${SOURCES}) +set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + POSITION_INDEPENDENT_CODE ON + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + OUTPUT_NAME ${DEVKIT_LAUNCH_EXE} PREFIX "") +foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) + set_target_properties(${name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY}) +endforeach() + +target_link_libraries(${PROJECT_NAME} PUBLIC dl) +target_include_directories(${PROJECT_NAME} PRIVATE ../../include) +target_compile_definitions(${PROJECT_NAME} PRIVATE APP_NAME="${PROJECT_NAME}") + +set(LIBRARY_FILES ${LIBRARY_FILES} ${CMAKE_BINARY_DIR}/${DEVKIT_OUTPUT_DIRECTORY}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX} CACHE STRING "" FORCE) diff --git a/xbmc/addons/kodi-dev-kit/src/addon_run_exe/cxxopts.hpp b/xbmc/addons/kodi-dev-kit/src/addon_run_exe/cxxopts.hpp new file mode 100644 index 0000000000000..2dd4da6b73d10 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/src/addon_run_exe/cxxopts.hpp @@ -0,0 +1,2714 @@ +/* + +Copyright (c) 2014, 2015, 2016, 2017 Jarryd Beck + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#ifndef CXXOPTS_HPP_INCLUDED +#define CXXOPTS_HPP_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__GNUC__) && !defined(__clang__) +# if (__GNUC__ * 10 + __GNUC_MINOR__) < 49 +# define CXXOPTS_NO_REGEX true +# endif +#endif + +#ifndef CXXOPTS_NO_REGEX +# include +#endif // CXXOPTS_NO_REGEX + +// Nonstandard before C++17, which is coincidentally what we also need for +#ifdef __has_include +# if __has_include() +# include +# ifdef __cpp_lib_optional +# define CXXOPTS_HAS_OPTIONAL +# endif +# endif +#endif + +#if __cplusplus >= 201603L +#define CXXOPTS_NODISCARD [[nodiscard]] +#else +#define CXXOPTS_NODISCARD +#endif + +#ifndef CXXOPTS_VECTOR_DELIMITER +#define CXXOPTS_VECTOR_DELIMITER ',' +#endif + +#define CXXOPTS__VERSION_MAJOR 3 +#define CXXOPTS__VERSION_MINOR 0 +#define CXXOPTS__VERSION_PATCH 0 + +#if (__GNUC__ < 10 || (__GNUC__ == 10 && __GNUC_MINOR__ < 1)) && __GNUC__ >= 6 + #define CXXOPTS_NULL_DEREF_IGNORE +#endif + +namespace cxxopts +{ + static constexpr struct { + uint8_t major, minor, patch; + } version = { + CXXOPTS__VERSION_MAJOR, + CXXOPTS__VERSION_MINOR, + CXXOPTS__VERSION_PATCH + }; +} // namespace cxxopts + +//when we ask cxxopts to use Unicode, help strings are processed using ICU, +//which results in the correct lengths being computed for strings when they +//are formatted for the help output +//it is necessary to make sure that can be found by the +//compiler, and that icu-uc is linked in to the binary. + +#ifdef CXXOPTS_USE_UNICODE +#include + +namespace cxxopts +{ + using String = icu::UnicodeString; + + inline + String + toLocalString(std::string s) + { + return icu::UnicodeString::fromUTF8(std::move(s)); + } + +#if defined(__GNUC__) +// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: +// warning: base class 'class std::enable_shared_from_this' has accessible non-virtual destructor +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnon-virtual-dtor" +#pragma GCC diagnostic ignored "-Weffc++" +// This will be ignored under other compilers like LLVM clang. +#endif + class UnicodeStringIterator : public + std::iterator + { + public: + + UnicodeStringIterator(const icu::UnicodeString* string, int32_t pos) + : s(string) + , i(pos) + { + } + + value_type + operator*() const + { + return s->char32At(i); + } + + bool + operator==(const UnicodeStringIterator& rhs) const + { + return s == rhs.s && i == rhs.i; + } + + bool + operator!=(const UnicodeStringIterator& rhs) const + { + return !(*this == rhs); + } + + UnicodeStringIterator& + operator++() + { + ++i; + return *this; + } + + UnicodeStringIterator + operator+(int32_t v) + { + return UnicodeStringIterator(s, i + v); + } + + private: + const icu::UnicodeString* s; + int32_t i; + }; +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + + inline + String& + stringAppend(String&s, String a) + { + return s.append(std::move(a)); + } + + inline + String& + stringAppend(String& s, size_t n, UChar32 c) + { + for (size_t i = 0; i != n; ++i) + { + s.append(c); + } + + return s; + } + + template + String& + stringAppend(String& s, Iterator begin, Iterator end) + { + while (begin != end) + { + s.append(*begin); + ++begin; + } + + return s; + } + + inline + size_t + stringLength(const String& s) + { + return s.length(); + } + + inline + std::string + toUTF8String(const String& s) + { + std::string result; + s.toUTF8String(result); + + return result; + } + + inline + bool + empty(const String& s) + { + return s.isEmpty(); + } +} + +namespace std +{ + inline + cxxopts::UnicodeStringIterator + begin(const icu::UnicodeString& s) + { + return cxxopts::UnicodeStringIterator(&s, 0); + } + + inline + cxxopts::UnicodeStringIterator + end(const icu::UnicodeString& s) + { + return cxxopts::UnicodeStringIterator(&s, s.length()); + } +} + +//ifdef CXXOPTS_USE_UNICODE +#else + +namespace cxxopts +{ + using String = std::string; + + template + T + toLocalString(T&& t) + { + return std::forward(t); + } + + inline + size_t + stringLength(const String& s) + { + return s.length(); + } + + inline + String& + stringAppend(String&s, const String& a) + { + return s.append(a); + } + + inline + String& + stringAppend(String& s, size_t n, char c) + { + return s.append(n, c); + } + + template + String& + stringAppend(String& s, Iterator begin, Iterator end) + { + return s.append(begin, end); + } + + template + std::string + toUTF8String(T&& t) + { + return std::forward(t); + } + + inline + bool + empty(const std::string& s) + { + return s.empty(); + } +} // namespace cxxopts + +//ifdef CXXOPTS_USE_UNICODE +#endif + +namespace cxxopts +{ + namespace + { +#ifdef _WIN32 + const std::string LQUOTE("\'"); + const std::string RQUOTE("\'"); +#else + const std::string LQUOTE("‘"); + const std::string RQUOTE("’"); +#endif + } // namespace + +#if defined(__GNUC__) +// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: +// warning: base class 'class std::enable_shared_from_this' has accessible non-virtual destructor +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnon-virtual-dtor" +#pragma GCC diagnostic ignored "-Weffc++" +// This will be ignored under other compilers like LLVM clang. +#endif + class Value : public std::enable_shared_from_this + { + public: + + virtual ~Value() = default; + + virtual + std::shared_ptr + clone() const = 0; + + virtual void + parse(const std::string& text) const = 0; + + virtual void + parse() const = 0; + + virtual bool + has_default() const = 0; + + virtual bool + is_container() const = 0; + + virtual bool + has_implicit() const = 0; + + virtual std::string + get_default_value() const = 0; + + virtual std::string + get_implicit_value() const = 0; + + virtual std::shared_ptr + default_value(const std::string& value) = 0; + + virtual std::shared_ptr + implicit_value(const std::string& value) = 0; + + virtual std::shared_ptr + no_implicit_value() = 0; + + virtual bool + is_boolean() const = 0; + }; +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + class OptionException : public std::exception + { + public: + explicit OptionException(std::string message) + : m_message(std::move(message)) + { + } + + CXXOPTS_NODISCARD + const char* + what() const noexcept override + { + return m_message.c_str(); + } + + private: + std::string m_message; + }; + + class OptionSpecException : public OptionException + { + public: + + explicit OptionSpecException(const std::string& message) + : OptionException(message) + { + } + }; + + class OptionParseException : public OptionException + { + public: + explicit OptionParseException(const std::string& message) + : OptionException(message) + { + } + }; + + class option_exists_error : public OptionSpecException + { + public: + explicit option_exists_error(const std::string& option) + : OptionSpecException("Option " + LQUOTE + option + RQUOTE + " already exists") + { + } + }; + + class invalid_option_format_error : public OptionSpecException + { + public: + explicit invalid_option_format_error(const std::string& format) + : OptionSpecException("Invalid option format " + LQUOTE + format + RQUOTE) + { + } + }; + + class option_syntax_exception : public OptionParseException { + public: + explicit option_syntax_exception(const std::string& text) + : OptionParseException("Argument " + LQUOTE + text + RQUOTE + + " starts with a - but has incorrect syntax") + { + } + }; + + class option_not_exists_exception : public OptionParseException + { + public: + explicit option_not_exists_exception(const std::string& option) + : OptionParseException("Option " + LQUOTE + option + RQUOTE + " does not exist") + { + } + }; + + class missing_argument_exception : public OptionParseException + { + public: + explicit missing_argument_exception(const std::string& option) + : OptionParseException( + "Option " + LQUOTE + option + RQUOTE + " is missing an argument" + ) + { + } + }; + + class option_requires_argument_exception : public OptionParseException + { + public: + explicit option_requires_argument_exception(const std::string& option) + : OptionParseException( + "Option " + LQUOTE + option + RQUOTE + " requires an argument" + ) + { + } + }; + + class option_not_has_argument_exception : public OptionParseException + { + public: + option_not_has_argument_exception + ( + const std::string& option, + const std::string& arg + ) + : OptionParseException( + "Option " + LQUOTE + option + RQUOTE + + " does not take an argument, but argument " + + LQUOTE + arg + RQUOTE + " given" + ) + { + } + }; + + class option_not_present_exception : public OptionParseException + { + public: + explicit option_not_present_exception(const std::string& option) + : OptionParseException("Option " + LQUOTE + option + RQUOTE + " not present") + { + } + }; + + class option_has_no_value_exception : public OptionException + { + public: + explicit option_has_no_value_exception(const std::string& option) + : OptionException( + !option.empty() ? + ("Option " + LQUOTE + option + RQUOTE + " has no value") : + "Option has no value") + { + } + }; + + class argument_incorrect_type : public OptionParseException + { + public: + explicit argument_incorrect_type + ( + const std::string& arg + ) + : OptionParseException( + "Argument " + LQUOTE + arg + RQUOTE + " failed to parse" + ) + { + } + }; + + class option_required_exception : public OptionParseException + { + public: + explicit option_required_exception(const std::string& option) + : OptionParseException( + "Option " + LQUOTE + option + RQUOTE + " is required but not present" + ) + { + } + }; + + template + void throw_or_mimic(const std::string& text) + { + static_assert(std::is_base_of::value, + "throw_or_mimic only works on std::exception and " + "deriving classes"); + +#ifndef CXXOPTS_NO_EXCEPTIONS + // If CXXOPTS_NO_EXCEPTIONS is not defined, just throw + throw T{text}; +#else + // Otherwise manually instantiate the exception, print what() to stderr, + // and exit + T exception{text}; + std::cerr << exception.what() << std::endl; + std::exit(EXIT_FAILURE); +#endif + } + + namespace values + { + namespace parser_tool + { + struct IntegerDesc + { + std::string negative = ""; + std::string base = ""; + std::string value = ""; + }; + struct ArguDesc { + std::string arg_name = ""; + bool grouping = false; + bool set_value = false; + std::string value = ""; + }; +#ifdef CXXOPTS_NO_REGEX + inline IntegerDesc SplitInteger(const std::string &text) + { + if (text.empty()) + { + throw_or_mimic(text); + } + IntegerDesc desc; + const char *pdata = text.c_str(); + if (*pdata == '-') + { + pdata += 1; + desc.negative = "-"; + } + if (strncmp(pdata, "0x", 2) == 0) + { + pdata += 2; + desc.base = "0x"; + } + if (*pdata != '\0') + { + desc.value = std::string(pdata); + } + else + { + throw_or_mimic(text); + } + return desc; + } + + inline bool IsTrueText(const std::string &text) + { + const char *pdata = text.c_str(); + if (*pdata == 't' || *pdata == 'T') + { + pdata += 1; + if (strncmp(pdata, "rue\0", 4) == 0) + { + return true; + } + } + else if (strncmp(pdata, "1\0", 2) == 0) + { + return true; + } + return false; + } + + inline bool IsFalseText(const std::string &text) + { + const char *pdata = text.c_str(); + if (*pdata == 'f' || *pdata == 'F') + { + pdata += 1; + if (strncmp(pdata, "alse\0", 5) == 0) + { + return true; + } + } + else if (strncmp(pdata, "0\0", 2) == 0) + { + return true; + } + return false; + } + + inline std::pair SplitSwitchDef(const std::string &text) + { + std::string short_sw, long_sw; + const char *pdata = text.c_str(); + if (isalnum(*pdata) && *(pdata + 1) == ',') { + short_sw = std::string(1, *pdata); + pdata += 2; + } + while (*pdata == ' ') { pdata += 1; } + if (isalnum(*pdata)) { + const char *store = pdata; + pdata += 1; + while (isalnum(*pdata) || *pdata == '-' || *pdata == '_') { + pdata += 1; + } + if (*pdata == '\0') { + long_sw = std::string(store, pdata - store); + } else { + throw_or_mimic(text); + } + } + return std::pair(short_sw, long_sw); + } + + inline ArguDesc ParseArgument(const char *arg, bool &matched) + { + ArguDesc argu_desc; + const char *pdata = arg; + matched = false; + if (strncmp(pdata, "--", 2) == 0) + { + pdata += 2; + if (isalnum(*pdata)) + { + argu_desc.arg_name.push_back(*pdata); + pdata += 1; + while (isalnum(*pdata) || *pdata == '-' || *pdata == '_') + { + argu_desc.arg_name.push_back(*pdata); + pdata += 1; + } + if (argu_desc.arg_name.length() > 1) + { + if (*pdata == '=') + { + argu_desc.set_value = true; + pdata += 1; + if (*pdata != '\0') + { + argu_desc.value = std::string(pdata); + } + matched = true; + } + else if (*pdata == '\0') + { + matched = true; + } + } + } + } + else if (strncmp(pdata, "-", 1) == 0) + { + pdata += 1; + argu_desc.grouping = true; + while (isalnum(*pdata)) + { + argu_desc.arg_name.push_back(*pdata); + pdata += 1; + } + matched = !argu_desc.arg_name.empty() && *pdata == '\0'; + } + return argu_desc; + } + +#else // CXXOPTS_NO_REGEX + + namespace + { + + std::basic_regex integer_pattern + ("(-)?(0x)?([0-9a-zA-Z]+)|((0x)?0)"); + std::basic_regex truthy_pattern + ("(t|T)(rue)?|1"); + std::basic_regex falsy_pattern + ("(f|F)(alse)?|0"); + + std::basic_regex option_matcher + ("--([[:alnum:]][-_[:alnum:]]+)(=(.*))?|-([[:alnum:]]+)"); + std::basic_regex option_specifier + ("(([[:alnum:]]),)?[ ]*([[:alnum:]][-_[:alnum:]]*)?"); + + } // namespace + + inline IntegerDesc SplitInteger(const std::string &text) + { + std::smatch match; + std::regex_match(text, match, integer_pattern); + + if (match.length() == 0) + { + throw_or_mimic(text); + } + + IntegerDesc desc; + desc.negative = match[1]; + desc.base = match[2]; + desc.value = match[3]; + + if (match.length(4) > 0) + { + desc.base = match[5]; + desc.value = "0"; + return desc; + } + + return desc; + } + + inline bool IsTrueText(const std::string &text) + { + std::smatch result; + std::regex_match(text, result, truthy_pattern); + return !result.empty(); + } + + inline bool IsFalseText(const std::string &text) + { + std::smatch result; + std::regex_match(text, result, falsy_pattern); + return !result.empty(); + } + + inline std::pair SplitSwitchDef(const std::string &text) + { + std::match_results result; + std::regex_match(text.c_str(), result, option_specifier); + if (result.empty()) + { + throw_or_mimic(text); + } + + const std::string& short_sw = result[2]; + const std::string& long_sw = result[3]; + + return std::pair(short_sw, long_sw); + } + + inline ArguDesc ParseArgument(const char *arg, bool &matched) + { + std::match_results result; + std::regex_match(arg, result, option_matcher); + matched = !result.empty(); + + ArguDesc argu_desc; + if (matched) { + argu_desc.arg_name = result[1].str(); + argu_desc.set_value = result[2].length() > 0; + argu_desc.value = result[3].str(); + if (result[4].length() > 0) + { + argu_desc.grouping = true; + argu_desc.arg_name = result[4].str(); + } + } + + return argu_desc; + } + +#endif // CXXOPTS_NO_REGEX +#undef CXXOPTS_NO_REGEX + } + + namespace detail + { + template + struct SignedCheck; + + template + struct SignedCheck + { + template + void + operator()(bool negative, U u, const std::string& text) + { + if (negative) + { + if (u > static_cast((std::numeric_limits::min)())) + { + throw_or_mimic(text); + } + } + else + { + if (u > static_cast((std::numeric_limits::max)())) + { + throw_or_mimic(text); + } + } + } + }; + + template + struct SignedCheck + { + template + void + operator()(bool, U, const std::string&) const {} + }; + + template + void + check_signed_range(bool negative, U value, const std::string& text) + { + SignedCheck::is_signed>()(negative, value, text); + } + } // namespace detail + + template + void + checked_negate(R& r, T&& t, const std::string&, std::true_type) + { + // if we got to here, then `t` is a positive number that fits into + // `R`. So to avoid MSVC C4146, we first cast it to `R`. + // See https://github.com/jarro2783/cxxopts/issues/62 for more details. + r = static_cast(-static_cast(t-1)-1); + } + + template + void + checked_negate(R&, T&&, const std::string& text, std::false_type) + { + throw_or_mimic(text); + } + + template + void + integer_parser(const std::string& text, T& value) + { + parser_tool::IntegerDesc int_desc = parser_tool::SplitInteger(text); + + using US = typename std::make_unsigned::type; + constexpr bool is_signed = std::numeric_limits::is_signed; + + const bool negative = int_desc.negative.length() > 0; + const uint8_t base = int_desc.base.length() > 0 ? 16 : 10; + const std::string & value_match = int_desc.value; + + US result = 0; + + for (char ch : value_match) + { + US digit = 0; + + if (ch >= '0' && ch <= '9') + { + digit = static_cast(ch - '0'); + } + else if (base == 16 && ch >= 'a' && ch <= 'f') + { + digit = static_cast(ch - 'a' + 10); + } + else if (base == 16 && ch >= 'A' && ch <= 'F') + { + digit = static_cast(ch - 'A' + 10); + } + else + { + throw_or_mimic(text); + } + + const US next = static_cast(result * base + digit); + if (result > next) + { + throw_or_mimic(text); + } + + result = next; + } + + detail::check_signed_range(negative, result, text); + + if (negative) + { + checked_negate(value, result, text, std::integral_constant()); + } + else + { + value = static_cast(result); + } + } + + template + void stringstream_parser(const std::string& text, T& value) + { + std::stringstream in(text); + in >> value; + if (!in) { + throw_or_mimic(text); + } + } + + template ::value>::type* = nullptr + > + void parse_value(const std::string& text, T& value) + { + integer_parser(text, value); + } + + inline + void + parse_value(const std::string& text, bool& value) + { + if (parser_tool::IsTrueText(text)) + { + value = true; + return; + } + + if (parser_tool::IsFalseText(text)) + { + value = false; + return; + } + + throw_or_mimic(text); + } + + inline + void + parse_value(const std::string& text, std::string& value) + { + value = text; + } + + // The fallback parser. It uses the stringstream parser to parse all types + // that have not been overloaded explicitly. It has to be placed in the + // source code before all other more specialized templates. + template ::value>::type* = nullptr + > + void + parse_value(const std::string& text, T& value) { + stringstream_parser(text, value); + } + + template + void + parse_value(const std::string& text, std::vector& value) + { + if (text.empty()) { + T v; + parse_value(text, v); + value.emplace_back(std::move(v)); + return; + } + std::stringstream in(text); + std::string token; + while(!in.eof() && std::getline(in, token, CXXOPTS_VECTOR_DELIMITER)) { + T v; + parse_value(token, v); + value.emplace_back(std::move(v)); + } + } + +#ifdef CXXOPTS_HAS_OPTIONAL + template + void + parse_value(const std::string& text, std::optional& value) + { + T result; + parse_value(text, result); + value = std::move(result); + } +#endif + + inline + void parse_value(const std::string& text, char& c) + { + if (text.length() != 1) + { + throw_or_mimic(text); + } + + c = text[0]; + } + + template + struct type_is_container + { + static constexpr bool value = false; + }; + + template + struct type_is_container> + { + static constexpr bool value = true; + }; + + template + class abstract_value : public Value + { + using Self = abstract_value; + + public: + abstract_value() + : m_result(std::make_shared()) + , m_store(m_result.get()) + { + } + + explicit abstract_value(T* t) + : m_store(t) + { + } + + ~abstract_value() override = default; + + abstract_value& operator=(const abstract_value&) = default; + + abstract_value(const abstract_value& rhs) + { + if (rhs.m_result) + { + m_result = std::make_shared(); + m_store = m_result.get(); + } + else + { + m_store = rhs.m_store; + } + + m_default = rhs.m_default; + m_implicit = rhs.m_implicit; + m_default_value = rhs.m_default_value; + m_implicit_value = rhs.m_implicit_value; + } + + void + parse(const std::string& text) const override + { + parse_value(text, *m_store); + } + + bool + is_container() const override + { + return type_is_container::value; + } + + void + parse() const override + { + parse_value(m_default_value, *m_store); + } + + bool + has_default() const override + { + return m_default; + } + + bool + has_implicit() const override + { + return m_implicit; + } + + std::shared_ptr + default_value(const std::string& value) override + { + m_default = true; + m_default_value = value; + return shared_from_this(); + } + + std::shared_ptr + implicit_value(const std::string& value) override + { + m_implicit = true; + m_implicit_value = value; + return shared_from_this(); + } + + std::shared_ptr + no_implicit_value() override + { + m_implicit = false; + return shared_from_this(); + } + + std::string + get_default_value() const override + { + return m_default_value; + } + + std::string + get_implicit_value() const override + { + return m_implicit_value; + } + + bool + is_boolean() const override + { + return std::is_same::value; + } + + const T& + get() const + { + if (m_store == nullptr) + { + return *m_result; + } + return *m_store; + } + + protected: + std::shared_ptr m_result{}; + T* m_store{}; + + bool m_default = false; + bool m_implicit = false; + + std::string m_default_value{}; + std::string m_implicit_value{}; + }; + + template + class standard_value : public abstract_value + { + public: + using abstract_value::abstract_value; + + CXXOPTS_NODISCARD + std::shared_ptr + clone() const override + { + return std::make_shared>(*this); + } + }; + + template <> + class standard_value : public abstract_value + { + public: + ~standard_value() override = default; + + standard_value() + { + set_default_and_implicit(); + } + + explicit standard_value(bool* b) + : abstract_value(b) + { + set_default_and_implicit(); + } + + std::shared_ptr + clone() const override + { + return std::make_shared>(*this); + } + + private: + + void + set_default_and_implicit() + { + m_default = true; + m_default_value = "false"; + m_implicit = true; + m_implicit_value = "true"; + } + }; + } // namespace values + + template + std::shared_ptr + value() + { + return std::make_shared>(); + } + + template + std::shared_ptr + value(T& t) + { + return std::make_shared>(&t); + } + + class OptionAdder; + + class OptionDetails + { + public: + OptionDetails + ( + std::string short_, + std::string long_, + String desc, + std::shared_ptr val + ) + : m_short(std::move(short_)) + , m_long(std::move(long_)) + , m_desc(std::move(desc)) + , m_value(std::move(val)) + , m_count(0) + { + m_hash = std::hash{}(m_long + m_short); + } + + OptionDetails(const OptionDetails& rhs) + : m_desc(rhs.m_desc) + , m_value(rhs.m_value->clone()) + , m_count(rhs.m_count) + { + } + + OptionDetails(OptionDetails&& rhs) = default; + + CXXOPTS_NODISCARD + const String& + description() const + { + return m_desc; + } + + CXXOPTS_NODISCARD + const Value& + value() const { + return *m_value; + } + + CXXOPTS_NODISCARD + std::shared_ptr + make_storage() const + { + return m_value->clone(); + } + + CXXOPTS_NODISCARD + const std::string& + short_name() const + { + return m_short; + } + + CXXOPTS_NODISCARD + const std::string& + long_name() const + { + return m_long; + } + + size_t + hash() const + { + return m_hash; + } + + private: + std::string m_short{}; + std::string m_long{}; + String m_desc{}; + std::shared_ptr m_value{}; + int m_count; + + size_t m_hash{}; + }; + + struct HelpOptionDetails + { + std::string s; + std::string l; + String desc; + bool has_default; + std::string default_value; + bool has_implicit; + std::string implicit_value; + std::string arg_help; + bool is_container; + bool is_boolean; + }; + + struct HelpGroupDetails + { + std::string name{}; + std::string description{}; + std::vector options{}; + }; + + class OptionValue + { + public: + void + parse + ( + const std::shared_ptr& details, + const std::string& text + ) + { + ensure_value(details); + ++m_count; + m_value->parse(text); + m_long_name = &details->long_name(); + } + + void + parse_default(const std::shared_ptr& details) + { + ensure_value(details); + m_default = true; + m_long_name = &details->long_name(); + m_value->parse(); + } + + void + parse_no_value(const std::shared_ptr& details) + { + m_long_name = &details->long_name(); + } + +#if defined(CXXOPTS_NULL_DEREF_IGNORE) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnull-dereference" +#endif + + CXXOPTS_NODISCARD + size_t + count() const noexcept + { + return m_count; + } + +#if defined(CXXOPTS_NULL_DEREF_IGNORE) +#pragma GCC diagnostic pop +#endif + + // TODO: maybe default options should count towards the number of arguments + CXXOPTS_NODISCARD + bool + has_default() const noexcept + { + return m_default; + } + + template + const T& + as() const + { + if (m_value == nullptr) { + throw_or_mimic( + m_long_name == nullptr ? "" : *m_long_name); + } + +#ifdef CXXOPTS_NO_RTTI + return static_cast&>(*m_value).get(); +#else + return dynamic_cast&>(*m_value).get(); +#endif + } + + private: + void + ensure_value(const std::shared_ptr& details) + { + if (m_value == nullptr) + { + m_value = details->make_storage(); + } + } + + + const std::string* m_long_name = nullptr; + // Holding this pointer is safe, since OptionValue's only exist in key-value pairs, + // where the key has the string we point to. + std::shared_ptr m_value{}; + size_t m_count = 0; + bool m_default = false; + }; + + class KeyValue + { + public: + KeyValue(std::string key_, std::string value_) + : m_key(std::move(key_)) + , m_value(std::move(value_)) + { + } + + CXXOPTS_NODISCARD + const std::string& + key() const + { + return m_key; + } + + CXXOPTS_NODISCARD + const std::string& + value() const + { + return m_value; + } + + template + T + as() const + { + T result; + values::parse_value(m_value, result); + return result; + } + + private: + std::string m_key; + std::string m_value; + }; + + using ParsedHashMap = std::unordered_map; + using NameHashMap = std::unordered_map; + + class ParseResult + { + public: + class Iterator + { + public: + using iterator_category = std::forward_iterator_tag; + using value_type = KeyValue; + using difference_type = void; + using pointer = const KeyValue*; + using reference = const KeyValue&; + + Iterator() = default; + Iterator(const Iterator&) = default; + + Iterator(const ParseResult *pr, bool end=false) + : m_pr(pr) + , m_iter(end? pr->m_defaults.end(): pr->m_sequential.begin()) + { + } + + Iterator& operator++() + { + ++m_iter; + if(m_iter == m_pr->m_sequential.end()) + { + m_iter = m_pr->m_defaults.begin(); + return *this; + } + return *this; + } + + Iterator operator++(int) + { + Iterator retval = *this; + ++(*this); + return retval; + } + + bool operator==(const Iterator& other) const + { + return m_iter == other.m_iter; + } + + bool operator!=(const Iterator& other) const + { + return !(*this == other); + } + + const KeyValue& operator*() + { + return *m_iter; + } + + const KeyValue* operator->() + { + return m_iter.operator->(); + } + + private: + const ParseResult* m_pr; + std::vector::const_iterator m_iter; + }; + + ParseResult() = default; + ParseResult(const ParseResult&) = default; + + ParseResult(NameHashMap&& keys, ParsedHashMap&& values, std::vector sequential, + std::vector default_opts, std::vector&& unmatched_args) + : m_keys(std::move(keys)) + , m_values(std::move(values)) + , m_sequential(std::move(sequential)) + , m_defaults(std::move(default_opts)) + , m_unmatched(std::move(unmatched_args)) + { + } + + ParseResult& operator=(ParseResult&&) = default; + ParseResult& operator=(const ParseResult&) = default; + + Iterator + begin() const + { + return Iterator(this); + } + + Iterator + end() const + { + return Iterator(this, true); + } + + size_t + count(const std::string& o) const + { + auto iter = m_keys.find(o); + if (iter == m_keys.end()) + { + return 0; + } + + auto viter = m_values.find(iter->second); + + if (viter == m_values.end()) + { + return 0; + } + + return viter->second.count(); + } + + const OptionValue& + operator[](const std::string& option) const + { + auto iter = m_keys.find(option); + + if (iter == m_keys.end()) + { + throw_or_mimic(option); + } + + auto viter = m_values.find(iter->second); + + if (viter == m_values.end()) + { + throw_or_mimic(option); + } + + return viter->second; + } + + const std::vector& + arguments() const + { + return m_sequential; + } + + const std::vector& + unmatched() const + { + return m_unmatched; + } + + const std::vector& + defaults() const + { + return m_defaults; + } + + const std::string + arguments_string() const + { + std::string result; + for(const auto& kv: m_sequential) + { + result += kv.key() + " = " + kv.value() + "\n"; + } + for(const auto& kv: m_defaults) + { + result += kv.key() + " = " + kv.value() + " " + "(default)" + "\n"; + } + return result; + } + + private: + NameHashMap m_keys{}; + ParsedHashMap m_values{}; + std::vector m_sequential{}; + std::vector m_defaults{}; + std::vector m_unmatched{}; + }; + + struct Option + { + Option + ( + std::string opts, + std::string desc, + std::shared_ptr value = ::cxxopts::value(), + std::string arg_help = "" + ) + : opts_(std::move(opts)) + , desc_(std::move(desc)) + , value_(std::move(value)) + , arg_help_(std::move(arg_help)) + { + } + + std::string opts_; + std::string desc_; + std::shared_ptr value_; + std::string arg_help_; + }; + + using OptionMap = std::unordered_map>; + using PositionalList = std::vector; + using PositionalListIterator = PositionalList::const_iterator; + + class OptionParser + { + public: + OptionParser(const OptionMap& options, const PositionalList& positional, bool allow_unrecognised) + : m_options(options) + , m_positional(positional) + , m_allow_unrecognised(allow_unrecognised) + { + } + + ParseResult + parse(int argc, const char* const* argv); + + bool + consume_positional(const std::string& a, PositionalListIterator& next); + + void + checked_parse_arg + ( + int argc, + const char* const* argv, + int& current, + const std::shared_ptr& value, + const std::string& name + ); + + void + add_to_option(OptionMap::const_iterator iter, const std::string& option, const std::string& arg); + + void + parse_option + ( + const std::shared_ptr& value, + const std::string& name, + const std::string& arg = "" + ); + + void + parse_default(const std::shared_ptr& details); + + void + parse_no_value(const std::shared_ptr& details); + + private: + + void finalise_aliases(); + + const OptionMap& m_options; + const PositionalList& m_positional; + + std::vector m_sequential{}; + std::vector m_defaults{}; + bool m_allow_unrecognised; + + ParsedHashMap m_parsed{}; + NameHashMap m_keys{}; + }; + + class Options + { + public: + + explicit Options(std::string program, std::string help_string = "") + : m_program(std::move(program)) + , m_help_string(toLocalString(std::move(help_string))) + , m_custom_help("[OPTION...]") + , m_positional_help("positional parameters") + , m_show_positional(false) + , m_allow_unrecognised(false) + , m_width(76) + , m_tab_expansion(false) + , m_options(std::make_shared()) + { + } + + Options& + positional_help(std::string help_text) + { + m_positional_help = std::move(help_text); + return *this; + } + + Options& + custom_help(std::string help_text) + { + m_custom_help = std::move(help_text); + return *this; + } + + Options& + show_positional_help() + { + m_show_positional = true; + return *this; + } + + Options& + allow_unrecognised_options() + { + m_allow_unrecognised = true; + return *this; + } + + Options& + set_width(size_t width) + { + m_width = width; + return *this; + } + + Options& + set_tab_expansion(bool expansion=true) + { + m_tab_expansion = expansion; + return *this; + } + + ParseResult + parse(int argc, const char* const* argv); + + OptionAdder + add_options(std::string group = ""); + + void + add_options + ( + const std::string& group, + std::initializer_list