diff options
57 files changed, 6543 insertions, 100 deletions
diff --git a/.gitignore b/.gitignore index 838a08b654..5aa70e0cd4 100644 --- a/.gitignore +++ b/.gitignore @@ -402,7 +402,16 @@ lib/cpluff/stamp-h1 # /xbmc/addons/ /xbmc/addons/Makefile +/xbmc/addons/binary/Makefile /xbmc/addons/binary/interfaces/Makefile +/xbmc/addons/binary/interfaces/api2/Makefile +/xbmc/addons/binary/interfaces/api2/Addon/Makefile +/xbmc/addons/binary/interfaces/api2/AudioEngine/Makefile +/xbmc/addons/binary/interfaces/api2/GUI/Makefile +/xbmc/addons/binary/interfaces/api2/InputStream/Makefile +/xbmc/addons/binary/interfaces/api2/PVR/Makefile +/xbmc/addons/binary/interfaces/api2/Peripheral/Makefile +/xbmc/addons/binary/interfaces/api2/Player/Makefile # /xbmc/platform/android /xbmc/platform/android/Makefile diff --git a/Kodi.xcodeproj/project.pbxproj b/Kodi.xcodeproj/project.pbxproj index c45291f557..447251c20a 100644 --- a/Kodi.xcodeproj/project.pbxproj +++ b/Kodi.xcodeproj/project.pbxproj @@ -318,6 +318,166 @@ 68AE5C341C9243A000C4D527 /* ControllerTranslator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 68AE5C2A1C9243A000C4D527 /* ControllerTranslator.cpp */; }; 761170901C8B85F8006C6366 /* AddonGUIRenderingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7611708C1C8B85F8006C6366 /* AddonGUIRenderingControl.cpp */; }; 761170911C8B85F8006C6366 /* AddonGUIWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7611708E1C8B85F8006C6366 /* AddonGUIWindow.cpp */; }; + 764697711CA72DCC00AB1347 /* AddonInterfaceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646976F1CA72DCC00AB1347 /* AddonInterfaceBase.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7646977F1CA72E1F00AB1347 /* Addon_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697751CA72E1F00AB1347 /* Addon_Audio.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697801CA72E1F00AB1347 /* Addon_Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697771CA72E1F00AB1347 /* Addon_Directory.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697811CA72E1F00AB1347 /* Addon_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697791CA72E1F00AB1347 /* Addon_File.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697821CA72E1F00AB1347 /* Addon_General.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646977B1CA72E1F00AB1347 /* Addon_General.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697831CA72E1F00AB1347 /* Addon_Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646977D1CA72E1F00AB1347 /* Addon_Network.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697891CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697851CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7646978A1CA72E6100AB1347 /* Addon_AudioEngineStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697871CA72E6100AB1347 /* Addon_AudioEngineStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697BC1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646978C1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697BD1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646978E1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697BE1CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697901CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697BF1CA72E8D00AB1347 /* Addon_GUIControlImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697921CA72E8D00AB1347 /* Addon_GUIControlImage.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C01CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697941CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C11CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697961CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C21CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697981CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C31CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979A1CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C41CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979C1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C51CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979E1CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C61CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A01CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C71CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A21CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C81CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A41CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697C91CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A61CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CA1CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A81CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CB1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AA1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CD1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AE1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CE1CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B01CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697CF1CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B21CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697D01CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B41CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697D11CA72E8D00AB1347 /* Addon_GUIGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B61CA72E8D00AB1347 /* Addon_GUIGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697D21CA72E8D00AB1347 /* Addon_GUIListItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B81CA72E8D00AB1347 /* Addon_GUIListItem.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697D31CA72E8D00AB1347 /* Addon_GUIWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697BA1CA72E8D00AB1347 /* Addon_GUIWindow.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697D71CA72EC300AB1347 /* Addon_PVR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697D51CA72EC300AB1347 /* Addon_PVR.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697E11CA72EE900AB1347 /* Addon_InfoTagMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697D91CA72EE900AB1347 /* Addon_InfoTagMusic.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697E21CA72EE900AB1347 /* Addon_InfoTagVideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DB1CA72EE900AB1347 /* Addon_InfoTagVideo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697E31CA72EE900AB1347 /* Addon_Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DD1CA72EE900AB1347 /* Addon_Player.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697E41CA72EE900AB1347 /* Addon_PlayList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DF1CA72EE900AB1347 /* Addon_PlayList.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697E81CA72F3200AB1347 /* Addon_Peripheral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697E61CA72F3200AB1347 /* Addon_Peripheral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697EC1CA72F6800AB1347 /* Addon_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697EA1CA72F6800AB1347 /* Addon_InputStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697EF1CA72FC600AB1347 /* AddonInterfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697ED1CA72FC600AB1347 /* AddonInterfaceManager.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 764697F21CA72FE200AB1347 /* ExceptionHandling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697F01CA72FE200AB1347 /* ExceptionHandling.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615141CB8063A008C7A67 /* AddonInterfaceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615121CB8063A008C7A67 /* AddonInterfaceBase.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615151CB8064B008C7A67 /* AddonInterfaceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615121CB8063A008C7A67 /* AddonInterfaceBase.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615271CB806DB008C7A67 /* Addon_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676151D1CB806DB008C7A67 /* Addon_Audio.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615281CB806DB008C7A67 /* Addon_Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676151F1CB806DB008C7A67 /* Addon_Directory.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615291CB806DB008C7A67 /* Addon_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615211CB806DB008C7A67 /* Addon_File.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676152A1CB806DB008C7A67 /* Addon_General.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615231CB806DB008C7A67 /* Addon_General.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676152B1CB806DB008C7A67 /* Addon_Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615251CB806DB008C7A67 /* Addon_Network.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615301CB806F2008C7A67 /* Addon_AudioEngineGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676152C1CB806F2008C7A67 /* Addon_AudioEngineGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615311CB806F2008C7A67 /* Addon_AudioEngineStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676152E1CB806F2008C7A67 /* Addon_AudioEngineStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615621CB80720008C7A67 /* Addon_GUIControlButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615321CB80720008C7A67 /* Addon_GUIControlButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615631CB80720008C7A67 /* Addon_GUIControlEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615341CB80720008C7A67 /* Addon_GUIControlEdit.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615641CB80720008C7A67 /* Addon_GUIControlFadeLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615361CB80720008C7A67 /* Addon_GUIControlFadeLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615651CB80720008C7A67 /* Addon_GUIControlImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615381CB80720008C7A67 /* Addon_GUIControlImage.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615661CB80720008C7A67 /* Addon_GUIControlLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153A1CB80720008C7A67 /* Addon_GUIControlLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615671CB80720008C7A67 /* Addon_GUIControlProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153C1CB80720008C7A67 /* Addon_GUIControlProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615681CB80720008C7A67 /* Addon_GUIControlRadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153E1CB80720008C7A67 /* Addon_GUIControlRadioButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615691CB80720008C7A67 /* Addon_GUIControlRendering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615401CB80720008C7A67 /* Addon_GUIControlRendering.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156A1CB80720008C7A67 /* Addon_GUIControlSettingsSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615421CB80720008C7A67 /* Addon_GUIControlSettingsSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156B1CB80720008C7A67 /* Addon_GUIControlSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615441CB80720008C7A67 /* Addon_GUIControlSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156C1CB80720008C7A67 /* Addon_GUIControlSpin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615461CB80720008C7A67 /* Addon_GUIControlSpin.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156D1CB80720008C7A67 /* Addon_GUIControlTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615481CB80720008C7A67 /* Addon_GUIControlTextBox.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156E1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154A1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676156F1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154C1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615701CB80720008C7A67 /* Addon_GUIDialogKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154E1CB80720008C7A67 /* Addon_GUIDialogKeyboard.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615711CB80720008C7A67 /* Addon_GUIDialogNumeric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615501CB80720008C7A67 /* Addon_GUIDialogNumeric.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615721CB80720008C7A67 /* Addon_GUIDialogOK.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615521CB80720008C7A67 /* Addon_GUIDialogOK.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615731CB80720008C7A67 /* Addon_GUIDialogProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615541CB80720008C7A67 /* Addon_GUIDialogProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615741CB80720008C7A67 /* Addon_GUIDialogSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615561CB80720008C7A67 /* Addon_GUIDialogSelect.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615751CB80720008C7A67 /* Addon_GUIDialogTextViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615581CB80720008C7A67 /* Addon_GUIDialogTextViewer.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615761CB80720008C7A67 /* Addon_GUIDialogYesNo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155A1CB80720008C7A67 /* Addon_GUIDialogYesNo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615771CB80720008C7A67 /* Addon_GUIGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155C1CB80720008C7A67 /* Addon_GUIGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615781CB80720008C7A67 /* Addon_GUIListItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155E1CB80720008C7A67 /* Addon_GUIListItem.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615791CB80720008C7A67 /* Addon_GUIWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615601CB80720008C7A67 /* Addon_GUIWindow.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676157C1CB8074C008C7A67 /* Addon_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676157A1CB8074C008C7A67 /* Addon_InputStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676157F1CB8075E008C7A67 /* Addon_Peripheral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676157D1CB8075E008C7A67 /* Addon_Peripheral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615881CB80777008C7A67 /* Addon_InfoTagMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615801CB80777008C7A67 /* Addon_InfoTagMusic.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615891CB80777008C7A67 /* Addon_InfoTagVideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615821CB80777008C7A67 /* Addon_InfoTagVideo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676158A1CB80777008C7A67 /* Addon_Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615841CB80777008C7A67 /* Addon_Player.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676158B1CB80777008C7A67 /* Addon_PlayList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615861CB80777008C7A67 /* Addon_PlayList.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676158E1CB807A1008C7A67 /* Addon_PVR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676158C1CB807A1008C7A67 /* Addon_PVR.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676158F1CB807A9008C7A67 /* Addon_PVR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676158C1CB807A1008C7A67 /* Addon_PVR.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615901CB807B3008C7A67 /* Addon_InfoTagMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615801CB80777008C7A67 /* Addon_InfoTagMusic.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615911CB807B7008C7A67 /* Addon_InfoTagVideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615821CB80777008C7A67 /* Addon_InfoTagVideo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615921CB807BA008C7A67 /* Addon_Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615841CB80777008C7A67 /* Addon_Player.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615931CB807BE008C7A67 /* Addon_PlayList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615861CB80777008C7A67 /* Addon_PlayList.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615941CB807C3008C7A67 /* Addon_Peripheral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676157D1CB8075E008C7A67 /* Addon_Peripheral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615951CB807C9008C7A67 /* Addon_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676157A1CB8074C008C7A67 /* Addon_InputStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615961CB807CE008C7A67 /* Addon_GUIControlButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615321CB80720008C7A67 /* Addon_GUIControlButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615971CB807D7008C7A67 /* Addon_GUIControlEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615341CB80720008C7A67 /* Addon_GUIControlEdit.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615981CB807DB008C7A67 /* Addon_GUIControlFadeLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615361CB80720008C7A67 /* Addon_GUIControlFadeLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615991CB807DF008C7A67 /* Addon_GUIControlImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615381CB80720008C7A67 /* Addon_GUIControlImage.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159A1CB807E2008C7A67 /* Addon_GUIControlLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153A1CB80720008C7A67 /* Addon_GUIControlLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159B1CB807E6008C7A67 /* Addon_GUIControlProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153C1CB80720008C7A67 /* Addon_GUIControlProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159C1CB807E9008C7A67 /* Addon_GUIControlRadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676153E1CB80720008C7A67 /* Addon_GUIControlRadioButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159D1CB807EC008C7A67 /* Addon_GUIControlRendering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615401CB80720008C7A67 /* Addon_GUIControlRendering.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159E1CB807FA008C7A67 /* Addon_GUIControlSettingsSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615421CB80720008C7A67 /* Addon_GUIControlSettingsSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 7676159F1CB807FD008C7A67 /* Addon_GUIControlSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615441CB80720008C7A67 /* Addon_GUIControlSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A01CB80801008C7A67 /* Addon_GUIControlSpin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615461CB80720008C7A67 /* Addon_GUIControlSpin.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A11CB80803008C7A67 /* Addon_GUIControlTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615481CB80720008C7A67 /* Addon_GUIControlTextBox.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A21CB80807008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154A1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A31CB8080B008C7A67 /* Addon_GUIDialogFileBrowser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154C1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A41CB80811008C7A67 /* Addon_GUIDialogKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676154E1CB80720008C7A67 /* Addon_GUIDialogKeyboard.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A51CB80817008C7A67 /* Addon_GUIDialogNumeric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615501CB80720008C7A67 /* Addon_GUIDialogNumeric.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A61CB8081B008C7A67 /* Addon_GUIDialogOK.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615521CB80720008C7A67 /* Addon_GUIDialogOK.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A71CB8081F008C7A67 /* Addon_GUIDialogProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615541CB80720008C7A67 /* Addon_GUIDialogProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A81CB80823008C7A67 /* Addon_GUIDialogSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615561CB80720008C7A67 /* Addon_GUIDialogSelect.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615A91CB80827008C7A67 /* Addon_GUIDialogTextViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615581CB80720008C7A67 /* Addon_GUIDialogTextViewer.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AA1CB8082D008C7A67 /* Addon_GUIDialogYesNo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155A1CB80720008C7A67 /* Addon_GUIDialogYesNo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AB1CB80831008C7A67 /* Addon_GUIGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155C1CB80720008C7A67 /* Addon_GUIGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AC1CB80835008C7A67 /* Addon_GUIListItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676155E1CB80720008C7A67 /* Addon_GUIListItem.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AD1CB80839008C7A67 /* Addon_GUIWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615601CB80720008C7A67 /* Addon_GUIWindow.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AE1CB80867008C7A67 /* Addon_AudioEngineGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676152C1CB806F2008C7A67 /* Addon_AudioEngineGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615AF1CB8086A008C7A67 /* Addon_AudioEngineStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676152E1CB806F2008C7A67 /* Addon_AudioEngineStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615B01CB80877008C7A67 /* Addon_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676151D1CB806DB008C7A67 /* Addon_Audio.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615B11CB8087B008C7A67 /* Addon_Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7676151F1CB806DB008C7A67 /* Addon_Directory.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615B21CB8087F008C7A67 /* Addon_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615211CB806DB008C7A67 /* Addon_File.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615B31CB80883008C7A67 /* Addon_General.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615231CB806DB008C7A67 /* Addon_General.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 767615B41CB80887008C7A67 /* Addon_Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 767615251CB806DB008C7A67 /* Addon_Network.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849641CA7833300223B66 /* AddonInterfaceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646976F1CA72DCC00AB1347 /* AddonInterfaceBase.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849651CA7833E00223B66 /* Addon_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697751CA72E1F00AB1347 /* Addon_Audio.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849661CA7834200223B66 /* Addon_Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697771CA72E1F00AB1347 /* Addon_Directory.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849671CA7834600223B66 /* Addon_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697791CA72E1F00AB1347 /* Addon_File.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849681CA7834900223B66 /* Addon_General.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646977B1CA72E1F00AB1347 /* Addon_General.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849691CA7834D00223B66 /* Addon_Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646977D1CA72E1F00AB1347 /* Addon_Network.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496A1CA7835600223B66 /* Addon_AudioEngineGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697851CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496B1CA7835E00223B66 /* Addon_AudioEngineStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697871CA72E6100AB1347 /* Addon_AudioEngineStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496C1CA7836500223B66 /* Addon_GUIControlButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646978C1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496D1CA7836900223B66 /* Addon_GUIControlEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646978E1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496E1CA7836E00223B66 /* Addon_GUIControlFadeLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697901CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8496F1CA7837100223B66 /* Addon_GUIControlImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697921CA72E8D00AB1347 /* Addon_GUIControlImage.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849701CA7837500223B66 /* Addon_GUIControlLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697941CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849711CA7837800223B66 /* Addon_GUIControlProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697961CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849721CA7837D00223B66 /* Addon_GUIControlRadioButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697981CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849731CA7838300223B66 /* Addon_GUIControlRendering.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979A1CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849741CA7838600223B66 /* Addon_GUIControlSettingsSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979C1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849751CA7838900223B66 /* Addon_GUIControlSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7646979E1CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849761CA7838D00223B66 /* Addon_GUIControlSpin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A01CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849771CA7839100223B66 /* Addon_GUIControlTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A21CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849781CA7839400223B66 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A41CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849791CA7839700223B66 /* Addon_GUIDialogFileBrowser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A61CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497A1CA7839A00223B66 /* Addon_GUIDialogKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697A81CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497B1CA7839D00223B66 /* Addon_GUIDialogNumeric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AA1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497C1CA783A200223B66 /* Addon_GUIDialogOK.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497D1CA783A500223B66 /* Addon_GUIDialogProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697AE1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497E1CA783A900223B66 /* Addon_GUIDialogSelect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B01CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8497F1CA783AC00223B66 /* Addon_GUIDialogTextViewer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B21CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849801CA783B100223B66 /* Addon_GUIDialogYesNo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B41CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849811CA783B500223B66 /* Addon_GUIGeneral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B61CA72E8D00AB1347 /* Addon_GUIGeneral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849821CA783B900223B66 /* Addon_GUIListItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697B81CA72E8D00AB1347 /* Addon_GUIListItem.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849831CA783BD00223B66 /* Addon_GUIWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697BA1CA72E8D00AB1347 /* Addon_GUIWindow.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849841CA783C600223B66 /* Addon_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697EA1CA72F6800AB1347 /* Addon_InputStream.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849851CA783CD00223B66 /* Addon_Peripheral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697E61CA72F3200AB1347 /* Addon_Peripheral.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849861CA783D600223B66 /* Addon_InfoTagMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697D91CA72EE900AB1347 /* Addon_InfoTagMusic.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849871CA783DA00223B66 /* Addon_InfoTagVideo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DB1CA72EE900AB1347 /* Addon_InfoTagVideo.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849881CA783DD00223B66 /* Addon_Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DD1CA72EE900AB1347 /* Addon_Player.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A849891CA783E000223B66 /* Addon_PlayList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697DF1CA72EE900AB1347 /* Addon_PlayList.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8498A1CA783EA00223B66 /* Addon_PVR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697D51CA72EC300AB1347 /* Addon_PVR.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8498B1CA783F200223B66 /* ExceptionHandling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697F01CA72FE200AB1347 /* ExceptionHandling.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; + 76A8498C1CA783F600223B66 /* AddonInterfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 764697ED1CA72FC600AB1347 /* AddonInterfaceManager.cpp */; settings = {COMPILER_FLAGS = "-I$SRCROOT/xbmc/addons/kodi-addon-dev-kit/include"; }; }; 76AEFB361C8F79BD00EF2EC0 /* AddonInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDED2E991C878F61000F5E80 /* AddonInterfaces.cpp */; }; 76AEFB371C8F79C100EF2EC0 /* AddonCallbacksAddon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDED2E921C878EE0000F5E80 /* AddonCallbacksAddon.cpp */; }; 76AEFB381C8F79C400EF2EC0 /* AddonCallbacksAudioDSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDED2E951C878EF8000F5E80 /* AddonCallbacksAudioDSP.cpp */; }; @@ -2829,6 +2989,139 @@ 7611708D1C8B85F8006C6366 /* AddonGUIRenderingControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddonGUIRenderingControl.h; path = addons/binary/interfaces/api1/GUI/AddonGUIRenderingControl.h; sourceTree = "<group>"; }; 7611708E1C8B85F8006C6366 /* AddonGUIWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AddonGUIWindow.cpp; path = addons/binary/interfaces/api1/GUI/AddonGUIWindow.cpp; sourceTree = "<group>"; }; 7611708F1C8B85F8006C6366 /* AddonGUIWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddonGUIWindow.h; path = addons/binary/interfaces/api1/GUI/AddonGUIWindow.h; sourceTree = "<group>"; }; + 7646976F1CA72DCC00AB1347 /* AddonInterfaceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AddonInterfaceBase.cpp; path = addons/binary/interfaces/api2/AddonInterfaceBase.cpp; sourceTree = "<group>"; }; + 764697701CA72DCC00AB1347 /* AddonInterfaceBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddonInterfaceBase.h; path = addons/binary/interfaces/api2/AddonInterfaceBase.h; sourceTree = "<group>"; }; + 764697751CA72E1F00AB1347 /* Addon_Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_Audio.cpp; path = addons/binary/interfaces/api2/Addon/Addon_Audio.cpp; sourceTree = "<group>"; }; + 764697761CA72E1F00AB1347 /* Addon_Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_Audio.h; path = addons/binary/interfaces/api2/Addon/Addon_Audio.h; sourceTree = "<group>"; }; + 764697771CA72E1F00AB1347 /* Addon_Directory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_Directory.cpp; path = addons/binary/interfaces/api2/Addon/Addon_Directory.cpp; sourceTree = "<group>"; }; + 764697781CA72E1F00AB1347 /* Addon_Directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_Directory.h; path = addons/binary/interfaces/api2/Addon/Addon_Directory.h; sourceTree = "<group>"; }; + 764697791CA72E1F00AB1347 /* Addon_File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_File.cpp; path = addons/binary/interfaces/api2/Addon/Addon_File.cpp; sourceTree = "<group>"; }; + 7646977A1CA72E1F00AB1347 /* Addon_File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_File.h; path = addons/binary/interfaces/api2/Addon/Addon_File.h; sourceTree = "<group>"; }; + 7646977B1CA72E1F00AB1347 /* Addon_General.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_General.cpp; path = addons/binary/interfaces/api2/Addon/Addon_General.cpp; sourceTree = "<group>"; }; + 7646977C1CA72E1F00AB1347 /* Addon_General.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_General.h; path = addons/binary/interfaces/api2/Addon/Addon_General.h; sourceTree = "<group>"; }; + 7646977D1CA72E1F00AB1347 /* Addon_Network.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_Network.cpp; path = addons/binary/interfaces/api2/Addon/Addon_Network.cpp; sourceTree = "<group>"; }; + 7646977E1CA72E1F00AB1347 /* Addon_Network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_Network.h; path = addons/binary/interfaces/api2/Addon/Addon_Network.h; sourceTree = "<group>"; }; + 764697851CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_AudioEngineGeneral.cpp; path = addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.cpp; sourceTree = "<group>"; }; + 764697861CA72E6100AB1347 /* Addon_AudioEngineGeneral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_AudioEngineGeneral.h; path = addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.h; sourceTree = "<group>"; }; + 764697871CA72E6100AB1347 /* Addon_AudioEngineStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_AudioEngineStream.cpp; path = addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.cpp; sourceTree = "<group>"; }; + 764697881CA72E6100AB1347 /* Addon_AudioEngineStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_AudioEngineStream.h; path = addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.h; sourceTree = "<group>"; }; + 7646978C1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlButton.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlButton.cpp; sourceTree = "<group>"; }; + 7646978D1CA72E8D00AB1347 /* Addon_GUIControlButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlButton.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlButton.h; sourceTree = "<group>"; }; + 7646978E1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlEdit.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlEdit.cpp; sourceTree = "<group>"; }; + 7646978F1CA72E8D00AB1347 /* Addon_GUIControlEdit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlEdit.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlEdit.h; sourceTree = "<group>"; }; + 764697901CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlFadeLabel.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlFadeLabel.cpp; sourceTree = "<group>"; }; + 764697911CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlFadeLabel.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlFadeLabel.h; sourceTree = "<group>"; }; + 764697921CA72E8D00AB1347 /* Addon_GUIControlImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlImage.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlImage.cpp; sourceTree = "<group>"; }; + 764697931CA72E8D00AB1347 /* Addon_GUIControlImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlImage.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlImage.h; sourceTree = "<group>"; }; + 764697941CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlLabel.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlLabel.cpp; sourceTree = "<group>"; }; + 764697951CA72E8D00AB1347 /* Addon_GUIControlLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlLabel.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlLabel.h; sourceTree = "<group>"; }; + 764697961CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlProgress.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlProgress.cpp; sourceTree = "<group>"; }; + 764697971CA72E8D00AB1347 /* Addon_GUIControlProgress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlProgress.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlProgress.h; sourceTree = "<group>"; }; + 764697981CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlRadioButton.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlRadioButton.cpp; sourceTree = "<group>"; }; + 764697991CA72E8D00AB1347 /* Addon_GUIControlRadioButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlRadioButton.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlRadioButton.h; sourceTree = "<group>"; }; + 7646979A1CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlRendering.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlRendering.cpp; sourceTree = "<group>"; }; + 7646979B1CA72E8D00AB1347 /* Addon_GUIControlRendering.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlRendering.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlRendering.h; sourceTree = "<group>"; }; + 7646979C1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlSettingsSlider.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSettingsSlider.cpp; sourceTree = "<group>"; }; + 7646979D1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlSettingsSlider.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSettingsSlider.h; sourceTree = "<group>"; }; + 7646979E1CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlSlider.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSlider.cpp; sourceTree = "<group>"; }; + 7646979F1CA72E8D00AB1347 /* Addon_GUIControlSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlSlider.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSlider.h; sourceTree = "<group>"; }; + 764697A01CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlSpin.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSpin.cpp; sourceTree = "<group>"; }; + 764697A11CA72E8D00AB1347 /* Addon_GUIControlSpin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlSpin.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlSpin.h; sourceTree = "<group>"; }; + 764697A21CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIControlTextBox.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlTextBox.cpp; sourceTree = "<group>"; }; + 764697A31CA72E8D00AB1347 /* Addon_GUIControlTextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIControlTextBox.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIControlTextBox.h; sourceTree = "<group>"; }; + 764697A41CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogExtendedProgressBar.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogExtendedProgressBar.cpp; sourceTree = "<group>"; }; + 764697A51CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogExtendedProgressBar.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogExtendedProgressBar.h; sourceTree = "<group>"; }; + 764697A61CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogFileBrowser.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogFileBrowser.cpp; sourceTree = "<group>"; }; + 764697A71CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogFileBrowser.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogFileBrowser.h; sourceTree = "<group>"; }; + 764697A81CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogKeyboard.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogKeyboard.cpp; sourceTree = "<group>"; }; + 764697A91CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogKeyboard.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogKeyboard.h; sourceTree = "<group>"; }; + 764697AA1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogNumeric.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogNumeric.cpp; sourceTree = "<group>"; }; + 764697AB1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogNumeric.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogNumeric.h; sourceTree = "<group>"; }; + 764697AC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogOK.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogOK.cpp; sourceTree = "<group>"; }; + 764697AD1CA72E8D00AB1347 /* Addon_GUIDialogOK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogOK.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogOK.h; sourceTree = "<group>"; }; + 764697AE1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogProgress.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogProgress.cpp; sourceTree = "<group>"; }; + 764697AF1CA72E8D00AB1347 /* Addon_GUIDialogProgress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogProgress.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogProgress.h; sourceTree = "<group>"; }; + 764697B01CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogSelect.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogSelect.cpp; sourceTree = "<group>"; }; + 764697B11CA72E8D00AB1347 /* Addon_GUIDialogSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogSelect.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogSelect.h; sourceTree = "<group>"; }; + 764697B21CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogTextViewer.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogTextViewer.cpp; sourceTree = "<group>"; }; + 764697B31CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogTextViewer.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogTextViewer.h; sourceTree = "<group>"; }; + 764697B41CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIDialogYesNo.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogYesNo.cpp; sourceTree = "<group>"; }; + 764697B51CA72E8D00AB1347 /* Addon_GUIDialogYesNo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIDialogYesNo.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIDialogYesNo.h; sourceTree = "<group>"; }; + 764697B61CA72E8D00AB1347 /* Addon_GUIGeneral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIGeneral.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIGeneral.cpp; sourceTree = "<group>"; }; + 764697B71CA72E8D00AB1347 /* Addon_GUIGeneral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIGeneral.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIGeneral.h; sourceTree = "<group>"; }; + 764697B81CA72E8D00AB1347 /* Addon_GUIListItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIListItem.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIListItem.cpp; sourceTree = "<group>"; }; + 764697B91CA72E8D00AB1347 /* Addon_GUIListItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIListItem.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIListItem.h; sourceTree = "<group>"; }; + 764697BA1CA72E8D00AB1347 /* Addon_GUIWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_GUIWindow.cpp; path = addons/binary/interfaces/api2/GUI/Addon_GUIWindow.cpp; sourceTree = "<group>"; }; + 764697BB1CA72E8D00AB1347 /* Addon_GUIWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_GUIWindow.h; path = addons/binary/interfaces/api2/GUI/Addon_GUIWindow.h; sourceTree = "<group>"; }; + 764697D51CA72EC300AB1347 /* Addon_PVR.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_PVR.cpp; path = addons/binary/interfaces/api2/PVR/Addon_PVR.cpp; sourceTree = "<group>"; }; + 764697D61CA72EC300AB1347 /* Addon_PVR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_PVR.h; path = addons/binary/interfaces/api2/PVR/Addon_PVR.h; sourceTree = "<group>"; }; + 764697D91CA72EE900AB1347 /* Addon_InfoTagMusic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_InfoTagMusic.cpp; path = addons/binary/interfaces/api2/Player/Addon_InfoTagMusic.cpp; sourceTree = "<group>"; }; + 764697DA1CA72EE900AB1347 /* Addon_InfoTagMusic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_InfoTagMusic.h; path = addons/binary/interfaces/api2/Player/Addon_InfoTagMusic.h; sourceTree = "<group>"; }; + 764697DB1CA72EE900AB1347 /* Addon_InfoTagVideo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_InfoTagVideo.cpp; path = addons/binary/interfaces/api2/Player/Addon_InfoTagVideo.cpp; sourceTree = "<group>"; }; + 764697DC1CA72EE900AB1347 /* Addon_InfoTagVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_InfoTagVideo.h; path = addons/binary/interfaces/api2/Player/Addon_InfoTagVideo.h; sourceTree = "<group>"; }; + 764697DD1CA72EE900AB1347 /* Addon_Player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_Player.cpp; path = addons/binary/interfaces/api2/Player/Addon_Player.cpp; sourceTree = "<group>"; }; + 764697DE1CA72EE900AB1347 /* Addon_Player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_Player.h; path = addons/binary/interfaces/api2/Player/Addon_Player.h; sourceTree = "<group>"; }; + 764697DF1CA72EE900AB1347 /* Addon_PlayList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_PlayList.cpp; path = addons/binary/interfaces/api2/Player/Addon_PlayList.cpp; sourceTree = "<group>"; }; + 764697E01CA72EE900AB1347 /* Addon_PlayList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_PlayList.h; path = addons/binary/interfaces/api2/Player/Addon_PlayList.h; sourceTree = "<group>"; }; + 764697E61CA72F3200AB1347 /* Addon_Peripheral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_Peripheral.cpp; path = addons/binary/interfaces/api2/Peripheral/Addon_Peripheral.cpp; sourceTree = "<group>"; }; + 764697E71CA72F3200AB1347 /* Addon_Peripheral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_Peripheral.h; path = addons/binary/interfaces/api2/Peripheral/Addon_Peripheral.h; sourceTree = "<group>"; }; + 764697EA1CA72F6800AB1347 /* Addon_InputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Addon_InputStream.cpp; path = addons/binary/interfaces/api2/InputStream/Addon_InputStream.cpp; sourceTree = "<group>"; }; + 764697EB1CA72F6800AB1347 /* Addon_InputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Addon_InputStream.h; path = addons/binary/interfaces/api2/InputStream/Addon_InputStream.h; sourceTree = "<group>"; }; + 764697ED1CA72FC600AB1347 /* AddonInterfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AddonInterfaceManager.cpp; path = addons/binary/AddonInterfaceManager.cpp; sourceTree = "<group>"; }; + 764697EE1CA72FC600AB1347 /* AddonInterfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddonInterfaceManager.h; path = addons/binary/AddonInterfaceManager.h; sourceTree = "<group>"; }; + 764697F01CA72FE200AB1347 /* ExceptionHandling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExceptionHandling.cpp; path = addons/binary/ExceptionHandling.cpp; sourceTree = "<group>"; }; + 764697F11CA72FE200AB1347 /* ExceptionHandling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExceptionHandling.h; path = addons/binary/ExceptionHandling.h; sourceTree = "<group>"; }; + 764697FC1CA730D900AB1347 /* AddonLib.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AddonLib.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/AddonLib.hpp"; sourceTree = "<group>"; }; + 764697FD1CA730FD00AB1347 /* definitions-all.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "definitions-all.hpp"; path = "kodi-addon-dev-kit/include/kodi/api2/definitions-all.hpp"; sourceTree = "<group>"; }; + 764697FE1CA730FD00AB1347 /* definitions.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/definitions.hpp"; sourceTree = "<group>"; }; + 764697FF1CA734CA00AB1347 /* AddonLib_internal.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = AddonLib_internal.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp"; sourceTree = "<group>"; }; + 764698001CA7350B00AB1347 /* definitions_addon.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_addon.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/addon/definitions_addon.hpp"; sourceTree = "<group>"; }; + 764698011CA7350B00AB1347 /* General.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = General.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/addon/General.hpp"; sourceTree = "<group>"; }; + 764698021CA7350B00AB1347 /* Network.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Network.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/addon/Network.hpp"; sourceTree = "<group>"; }; + 764698031CA7350B00AB1347 /* SoundPlay.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SoundPlay.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/addon/SoundPlay.hpp"; sourceTree = "<group>"; }; + 764698041CA7350B00AB1347 /* VFSUtils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = VFSUtils.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/addon/VFSUtils.hpp"; sourceTree = "<group>"; }; + 764698051CA7353200AB1347 /* definitions_audioengine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_audioengine.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/audioengine/definitions_audioengine.hpp"; sourceTree = "<group>"; }; + 764698061CA7353200AB1347 /* General.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = General.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/audioengine/General.hpp"; sourceTree = "<group>"; }; + 764698071CA7353200AB1347 /* Stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Stream.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/audioengine/Stream.hpp"; sourceTree = "<group>"; }; + 764698081CA7356000AB1347 /* ControlButton.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlButton.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlButton.hpp"; sourceTree = "<group>"; }; + 764698091CA7356000AB1347 /* ControlEdit.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlEdit.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlEdit.hpp"; sourceTree = "<group>"; }; + 7646980A1CA7356000AB1347 /* ControlFadeLabel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlFadeLabel.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlFadeLabel.hpp"; sourceTree = "<group>"; }; + 7646980B1CA7356000AB1347 /* ControlImage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlImage.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlImage.hpp"; sourceTree = "<group>"; }; + 7646980C1CA7356000AB1347 /* ControlLabel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlLabel.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlLabel.hpp"; sourceTree = "<group>"; }; + 7646980D1CA7356000AB1347 /* ControlProgress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlProgress.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlProgress.hpp"; sourceTree = "<group>"; }; + 7646980E1CA7356000AB1347 /* ControlRadioButton.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlRadioButton.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlRadioButton.hpp"; sourceTree = "<group>"; }; + 7646980F1CA7356000AB1347 /* ControlRendering.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlRendering.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlRendering.hpp"; sourceTree = "<group>"; }; + 764698101CA7356000AB1347 /* ControlSettingsSlider.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlSettingsSlider.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlSettingsSlider.hpp"; sourceTree = "<group>"; }; + 764698111CA7356000AB1347 /* ControlSlider.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlSlider.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlSlider.hpp"; sourceTree = "<group>"; }; + 764698121CA7356000AB1347 /* ControlSpin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlSpin.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlSpin.hpp"; sourceTree = "<group>"; }; + 764698131CA7356000AB1347 /* ControlTextBox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlTextBox.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ControlTextBox.hpp"; sourceTree = "<group>"; }; + 764698141CA7356000AB1347 /* definitions_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_gui.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/definitions_gui.hpp"; sourceTree = "<group>"; }; + 764698151CA7356000AB1347 /* DialogExtendedProgress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogExtendedProgress.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogExtendedProgress.hpp"; sourceTree = "<group>"; }; + 764698161CA7356000AB1347 /* DialogFileBrowser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogFileBrowser.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogFileBrowser.hpp"; sourceTree = "<group>"; }; + 764698171CA7356000AB1347 /* DialogKeyboard.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogKeyboard.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogKeyboard.hpp"; sourceTree = "<group>"; }; + 764698181CA7356000AB1347 /* DialogNumeric.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogNumeric.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogNumeric.hpp"; sourceTree = "<group>"; }; + 764698191CA7356000AB1347 /* DialogOK.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogOK.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogOK.hpp"; sourceTree = "<group>"; }; + 7646981A1CA7356000AB1347 /* DialogProgress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogProgress.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogProgress.hpp"; sourceTree = "<group>"; }; + 7646981B1CA7356000AB1347 /* DialogSelect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogSelect.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogSelect.hpp"; sourceTree = "<group>"; }; + 7646981C1CA7356000AB1347 /* DialogTextViewer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogTextViewer.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogTextViewer.hpp"; sourceTree = "<group>"; }; + 7646981D1CA7356000AB1347 /* DialogYesNo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DialogYesNo.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/DialogYesNo.hpp"; sourceTree = "<group>"; }; + 7646981E1CA7356000AB1347 /* General.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = General.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/General.hpp"; sourceTree = "<group>"; }; + 7646981F1CA7356000AB1347 /* ListItem.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ListItem.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/ListItem.hpp"; sourceTree = "<group>"; }; + 764698201CA7356000AB1347 /* Window.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Window.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/gui/Window.hpp"; sourceTree = "<group>"; }; + 764698211CA7357C00AB1347 /* definitions_inputstream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_inputstream.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/inputstream/definitions_inputstream.hpp"; sourceTree = "<group>"; }; + 764698221CA7357C00AB1347 /* InputStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InputStream.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/inputstream/InputStream.hpp"; sourceTree = "<group>"; }; + 764698231CA735BA00AB1347 /* Peripheral.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Peripheral.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/peripheral/Peripheral.hpp"; sourceTree = "<group>"; }; + 764698241CA735E700AB1347 /* definitions_player.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_player.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/player/definitions_player.hpp"; sourceTree = "<group>"; }; + 764698251CA735E700AB1347 /* InfoTagMusic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InfoTagMusic.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/player/InfoTagMusic.hpp"; sourceTree = "<group>"; }; + 764698261CA735E700AB1347 /* InfoTagVideo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InfoTagVideo.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/player/InfoTagVideo.hpp"; sourceTree = "<group>"; }; + 764698271CA735E700AB1347 /* Player.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Player.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/player/Player.hpp"; sourceTree = "<group>"; }; + 764698281CA735E700AB1347 /* PlayList.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = PlayList.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/player/PlayList.hpp"; sourceTree = "<group>"; }; + 764698291CA7360F00AB1347 /* definitions_pvr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = definitions_pvr.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/pvr/definitions_pvr.hpp"; sourceTree = "<group>"; }; + 7646982A1CA7360F00AB1347 /* General.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = General.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/pvr/General.hpp"; sourceTree = "<group>"; }; + 7646982B1CA7360F00AB1347 /* StreamUtils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = StreamUtils.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/pvr/StreamUtils.hpp"; sourceTree = "<group>"; }; + 7646982C1CA7360F00AB1347 /* Transfer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Transfer.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/pvr/Transfer.hpp"; sourceTree = "<group>"; }; + 7646982D1CA7360F00AB1347 /* Trigger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Trigger.hpp; path = "kodi-addon-dev-kit/include/kodi/api2/pvr/Trigger.hpp"; sourceTree = "<group>"; }; + 76A849631CA7752100223B66 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = "kodi-addon-dev-kit/src/api2/version.h"; sourceTree = "<group>"; }; 76F4C37C1C8E92E000A1E64B /* AddonCallbacksInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AddonCallbacksInputStream.cpp; path = addons/binary/interfaces/api1/InputStream/AddonCallbacksInputStream.cpp; sourceTree = "<group>"; }; 76F4C37D1C8E92E000A1E64B /* AddonCallbacksInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddonCallbacksInputStream.h; path = addons/binary/interfaces/api1/InputStream/AddonCallbacksInputStream.h; sourceTree = "<group>"; }; 7C0B98A1154B79C30065A238 /* AEDeviceInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AEDeviceInfo.cpp; sourceTree = "<group>"; }; @@ -6225,6 +6518,498 @@ name = windows; sourceTree = "<group>"; }; + 7646976E1CA72D7500AB1347 /* api2 */ = { + isa = PBXGroup; + children = ( + 764697721CA72DD500AB1347 /* Addon */, + 764697841CA72E3000AB1347 /* AudioEngine */, + 7646978B1CA72E6A00AB1347 /* GUI */, + 764697E91CA72F4B00AB1347 /* InputStream */, + 764697E51CA72F0000AB1347 /* Peripheral */, + 764697D81CA72EC800AB1347 /* Player */, + 764697D41CA72EA700AB1347 /* PVR */, + 7646976F1CA72DCC00AB1347 /* AddonInterfaceBase.cpp */, + 764697701CA72DCC00AB1347 /* AddonInterfaceBase.h */, + ); + name = api2; + sourceTree = "<group>"; + }; + 764697721CA72DD500AB1347 /* Addon */ = { + isa = PBXGroup; + children = ( + 764697751CA72E1F00AB1347 /* Addon_Audio.cpp */, + 764697761CA72E1F00AB1347 /* Addon_Audio.h */, + 764697771CA72E1F00AB1347 /* Addon_Directory.cpp */, + 764697781CA72E1F00AB1347 /* Addon_Directory.h */, + 764697791CA72E1F00AB1347 /* Addon_File.cpp */, + 7646977A1CA72E1F00AB1347 /* Addon_File.h */, + 7646977B1CA72E1F00AB1347 /* Addon_General.cpp */, + 7646977C1CA72E1F00AB1347 /* Addon_General.h */, + 7646977D1CA72E1F00AB1347 /* Addon_Network.cpp */, + 7646977E1CA72E1F00AB1347 /* Addon_Network.h */, + ); + name = Addon; + sourceTree = "<group>"; + }; + 764697841CA72E3000AB1347 /* AudioEngine */ = { + isa = PBXGroup; + children = ( + 764697851CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp */, + 764697861CA72E6100AB1347 /* Addon_AudioEngineGeneral.h */, + 764697871CA72E6100AB1347 /* Addon_AudioEngineStream.cpp */, + 764697881CA72E6100AB1347 /* Addon_AudioEngineStream.h */, + ); + name = AudioEngine; + sourceTree = "<group>"; + }; + 7646978B1CA72E6A00AB1347 /* GUI */ = { + isa = PBXGroup; + children = ( + 7646978C1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp */, + 7646978D1CA72E8D00AB1347 /* Addon_GUIControlButton.h */, + 7646978E1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp */, + 7646978F1CA72E8D00AB1347 /* Addon_GUIControlEdit.h */, + 764697901CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp */, + 764697911CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.h */, + 764697921CA72E8D00AB1347 /* Addon_GUIControlImage.cpp */, + 764697931CA72E8D00AB1347 /* Addon_GUIControlImage.h */, + 764697941CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp */, + 764697951CA72E8D00AB1347 /* Addon_GUIControlLabel.h */, + 764697961CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp */, + 764697971CA72E8D00AB1347 /* Addon_GUIControlProgress.h */, + 764697981CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp */, + 764697991CA72E8D00AB1347 /* Addon_GUIControlRadioButton.h */, + 7646979A1CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp */, + 7646979B1CA72E8D00AB1347 /* Addon_GUIControlRendering.h */, + 7646979C1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp */, + 7646979D1CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.h */, + 7646979E1CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp */, + 7646979F1CA72E8D00AB1347 /* Addon_GUIControlSlider.h */, + 764697A01CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp */, + 764697A11CA72E8D00AB1347 /* Addon_GUIControlSpin.h */, + 764697A21CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp */, + 764697A31CA72E8D00AB1347 /* Addon_GUIControlTextBox.h */, + 764697A41CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp */, + 764697A51CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.h */, + 764697A61CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp */, + 764697A71CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.h */, + 764697A81CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp */, + 764697A91CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.h */, + 764697AA1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp */, + 764697AB1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.h */, + 764697AC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp */, + 764697AD1CA72E8D00AB1347 /* Addon_GUIDialogOK.h */, + 764697AE1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp */, + 764697AF1CA72E8D00AB1347 /* Addon_GUIDialogProgress.h */, + 764697B01CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp */, + 764697B11CA72E8D00AB1347 /* Addon_GUIDialogSelect.h */, + 764697B21CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp */, + 764697B31CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.h */, + 764697B41CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp */, + 764697B51CA72E8D00AB1347 /* Addon_GUIDialogYesNo.h */, + 764697B61CA72E8D00AB1347 /* Addon_GUIGeneral.cpp */, + 764697B71CA72E8D00AB1347 /* Addon_GUIGeneral.h */, + 764697B81CA72E8D00AB1347 /* Addon_GUIListItem.cpp */, + 764697B91CA72E8D00AB1347 /* Addon_GUIListItem.h */, + 764697BA1CA72E8D00AB1347 /* Addon_GUIWindow.cpp */, + 764697BB1CA72E8D00AB1347 /* Addon_GUIWindow.h */, + ); + name = GUI; + sourceTree = "<group>"; + }; + 764697D41CA72EA700AB1347 /* PVR */ = { + isa = PBXGroup; + children = ( + 764697D51CA72EC300AB1347 /* Addon_PVR.cpp */, + 764697D61CA72EC300AB1347 /* Addon_PVR.h */, + ); + name = PVR; + sourceTree = "<group>"; + }; + 764697D81CA72EC800AB1347 /* Player */ = { + isa = PBXGroup; + children = ( + 764697D91CA72EE900AB1347 /* Addon_InfoTagMusic.cpp */, + 764697DA1CA72EE900AB1347 /* Addon_InfoTagMusic.h */, + 764697DB1CA72EE900AB1347 /* Addon_InfoTagVideo.cpp */, + 764697DC1CA72EE900AB1347 /* Addon_InfoTagVideo.h */, + 764697DD1CA72EE900AB1347 /* Addon_Player.cpp */, + 764697DE1CA72EE900AB1347 /* Addon_Player.h */, + 764697DF1CA72EE900AB1347 /* Addon_PlayList.cpp */, + 764697E01CA72EE900AB1347 /* Addon_PlayList.h */, + ); + name = Player; + sourceTree = "<group>"; + }; + 764697E51CA72F0000AB1347 /* Peripheral */ = { + isa = PBXGroup; + children = ( + 764697E61CA72F3200AB1347 /* Addon_Peripheral.cpp */, + 764697E71CA72F3200AB1347 /* Addon_Peripheral.h */, + ); + name = Peripheral; + sourceTree = "<group>"; + }; + 764697E91CA72F4B00AB1347 /* InputStream */ = { + isa = PBXGroup; + children = ( + 764697EA1CA72F6800AB1347 /* Addon_InputStream.cpp */, + 764697EB1CA72F6800AB1347 /* Addon_InputStream.h */, + ); + name = InputStream; + sourceTree = "<group>"; + }; + 764697F31CA7302E00AB1347 /* api2 */ = { + isa = PBXGroup; + children = ( + 764697F41CA7304B00AB1347 /* .internal */, + 764697F51CA7306000AB1347 /* addon */, + 764697FB1CA730A800AB1347 /* audioengine */, + 764697FA1CA7309900AB1347 /* gui */, + 764697F91CA7308E00AB1347 /* inputstream */, + 764697F81CA7307E00AB1347 /* peripheral */, + 764697F71CA7306F00AB1347 /* player */, + 764697F61CA7306800AB1347 /* pvr */, + 764697FD1CA730FD00AB1347 /* definitions-all.hpp */, + 764697FE1CA730FD00AB1347 /* definitions.hpp */, + 764697FC1CA730D900AB1347 /* AddonLib.hpp */, + 76A849631CA7752100223B66 /* version.h */, + ); + name = api2; + sourceTree = "<group>"; + }; + 764697F41CA7304B00AB1347 /* .internal */ = { + isa = PBXGroup; + children = ( + 764697FF1CA734CA00AB1347 /* AddonLib_internal.hpp */, + ); + name = .internal; + sourceTree = "<group>"; + }; + 764697F51CA7306000AB1347 /* addon */ = { + isa = PBXGroup; + children = ( + 764698001CA7350B00AB1347 /* definitions_addon.hpp */, + 764698011CA7350B00AB1347 /* General.hpp */, + 764698021CA7350B00AB1347 /* Network.hpp */, + 764698031CA7350B00AB1347 /* SoundPlay.hpp */, + 764698041CA7350B00AB1347 /* VFSUtils.hpp */, + ); + name = addon; + sourceTree = "<group>"; + }; + 764697F61CA7306800AB1347 /* pvr */ = { + isa = PBXGroup; + children = ( + 764698291CA7360F00AB1347 /* definitions_pvr.hpp */, + 7646982A1CA7360F00AB1347 /* General.hpp */, + 7646982B1CA7360F00AB1347 /* StreamUtils.hpp */, + 7646982C1CA7360F00AB1347 /* Transfer.hpp */, + 7646982D1CA7360F00AB1347 /* Trigger.hpp */, + ); + name = pvr; + sourceTree = "<group>"; + }; + 764697F71CA7306F00AB1347 /* player */ = { + isa = PBXGroup; + children = ( + 764698241CA735E700AB1347 /* definitions_player.hpp */, + 764698251CA735E700AB1347 /* InfoTagMusic.hpp */, + 764698261CA735E700AB1347 /* InfoTagVideo.hpp */, + 764698271CA735E700AB1347 /* Player.hpp */, + 764698281CA735E700AB1347 /* PlayList.hpp */, + ); + name = player; + sourceTree = "<group>"; + }; + 764697F81CA7307E00AB1347 /* peripheral */ = { + isa = PBXGroup; + children = ( + 764698231CA735BA00AB1347 /* Peripheral.hpp */, + ); + name = peripheral; + sourceTree = "<group>"; + }; + 764697F91CA7308E00AB1347 /* inputstream */ = { + isa = PBXGroup; + children = ( + 764698211CA7357C00AB1347 /* definitions_inputstream.hpp */, + 764698221CA7357C00AB1347 /* InputStream.hpp */, + ); + name = inputstream; + sourceTree = "<group>"; + }; + 764697FA1CA7309900AB1347 /* gui */ = { + isa = PBXGroup; + children = ( + 764698081CA7356000AB1347 /* ControlButton.hpp */, + 764698091CA7356000AB1347 /* ControlEdit.hpp */, + 7646980A1CA7356000AB1347 /* ControlFadeLabel.hpp */, + 7646980B1CA7356000AB1347 /* ControlImage.hpp */, + 7646980C1CA7356000AB1347 /* ControlLabel.hpp */, + 7646980D1CA7356000AB1347 /* ControlProgress.hpp */, + 7646980E1CA7356000AB1347 /* ControlRadioButton.hpp */, + 7646980F1CA7356000AB1347 /* ControlRendering.hpp */, + 764698101CA7356000AB1347 /* ControlSettingsSlider.hpp */, + 764698111CA7356000AB1347 /* ControlSlider.hpp */, + 764698121CA7356000AB1347 /* ControlSpin.hpp */, + 764698131CA7356000AB1347 /* ControlTextBox.hpp */, + 764698141CA7356000AB1347 /* definitions_gui.hpp */, + 764698151CA7356000AB1347 /* DialogExtendedProgress.hpp */, + 764698161CA7356000AB1347 /* DialogFileBrowser.hpp */, + 764698171CA7356000AB1347 /* DialogKeyboard.hpp */, + 764698181CA7356000AB1347 /* DialogNumeric.hpp */, + 764698191CA7356000AB1347 /* DialogOK.hpp */, + 7646981A1CA7356000AB1347 /* DialogProgress.hpp */, + 7646981B1CA7356000AB1347 /* DialogSelect.hpp */, + 7646981C1CA7356000AB1347 /* DialogTextViewer.hpp */, + 7646981D1CA7356000AB1347 /* DialogYesNo.hpp */, + 7646981E1CA7356000AB1347 /* General.hpp */, + 7646981F1CA7356000AB1347 /* ListItem.hpp */, + 764698201CA7356000AB1347 /* Window.hpp */, + ); + name = gui; + sourceTree = "<group>"; + }; + 764697FB1CA730A800AB1347 /* audioengine */ = { + isa = PBXGroup; + children = ( + 764698051CA7353200AB1347 /* definitions_audioengine.hpp */, + 764698061CA7353200AB1347 /* General.hpp */, + 764698071CA7353200AB1347 /* Stream.hpp */, + ); + name = audioengine; + sourceTree = "<group>"; + }; + 767615161CB80655008C7A67 /* PVR */ = { + isa = PBXGroup; + children = ( + 7676158C1CB807A1008C7A67 /* Addon_PVR.cpp */, + 7676158D1CB807A1008C7A67 /* Addon_PVR.h */, + ); + name = PVR; + sourceTree = "<group>"; + }; + 767615171CB8065C008C7A67 /* Player */ = { + isa = PBXGroup; + children = ( + 767615801CB80777008C7A67 /* Addon_InfoTagMusic.cpp */, + 767615811CB80777008C7A67 /* Addon_InfoTagMusic.h */, + 767615821CB80777008C7A67 /* Addon_InfoTagVideo.cpp */, + 767615831CB80777008C7A67 /* Addon_InfoTagVideo.h */, + 767615841CB80777008C7A67 /* Addon_Player.cpp */, + 767615851CB80777008C7A67 /* Addon_Player.h */, + 767615861CB80777008C7A67 /* Addon_PlayList.cpp */, + 767615871CB80777008C7A67 /* Addon_PlayList.h */, + ); + name = Player; + sourceTree = "<group>"; + }; + 767615181CB80674008C7A67 /* Peripheral */ = { + isa = PBXGroup; + children = ( + 7676157D1CB8075E008C7A67 /* Addon_Peripheral.cpp */, + 7676157E1CB8075E008C7A67 /* Addon_Peripheral.h */, + ); + name = Peripheral; + sourceTree = "<group>"; + }; + 767615191CB8068D008C7A67 /* InputStream */ = { + isa = PBXGroup; + children = ( + 7676157A1CB8074C008C7A67 /* Addon_InputStream.cpp */, + 7676157B1CB8074C008C7A67 /* Addon_InputStream.h */, + ); + name = InputStream; + sourceTree = "<group>"; + }; + 7676151A1CB80698008C7A67 /* GUI */ = { + isa = PBXGroup; + children = ( + 767615321CB80720008C7A67 /* Addon_GUIControlButton.cpp */, + 767615331CB80720008C7A67 /* Addon_GUIControlButton.h */, + 767615341CB80720008C7A67 /* Addon_GUIControlEdit.cpp */, + 767615351CB80720008C7A67 /* Addon_GUIControlEdit.h */, + 767615361CB80720008C7A67 /* Addon_GUIControlFadeLabel.cpp */, + 767615371CB80720008C7A67 /* Addon_GUIControlFadeLabel.h */, + 767615381CB80720008C7A67 /* Addon_GUIControlImage.cpp */, + 767615391CB80720008C7A67 /* Addon_GUIControlImage.h */, + 7676153A1CB80720008C7A67 /* Addon_GUIControlLabel.cpp */, + 7676153B1CB80720008C7A67 /* Addon_GUIControlLabel.h */, + 7676153C1CB80720008C7A67 /* Addon_GUIControlProgress.cpp */, + 7676153D1CB80720008C7A67 /* Addon_GUIControlProgress.h */, + 7676153E1CB80720008C7A67 /* Addon_GUIControlRadioButton.cpp */, + 7676153F1CB80720008C7A67 /* Addon_GUIControlRadioButton.h */, + 767615401CB80720008C7A67 /* Addon_GUIControlRendering.cpp */, + 767615411CB80720008C7A67 /* Addon_GUIControlRendering.h */, + 767615421CB80720008C7A67 /* Addon_GUIControlSettingsSlider.cpp */, + 767615431CB80720008C7A67 /* Addon_GUIControlSettingsSlider.h */, + 767615441CB80720008C7A67 /* Addon_GUIControlSlider.cpp */, + 767615451CB80720008C7A67 /* Addon_GUIControlSlider.h */, + 767615461CB80720008C7A67 /* Addon_GUIControlSpin.cpp */, + 767615471CB80720008C7A67 /* Addon_GUIControlSpin.h */, + 767615481CB80720008C7A67 /* Addon_GUIControlTextBox.cpp */, + 767615491CB80720008C7A67 /* Addon_GUIControlTextBox.h */, + 7676154A1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp */, + 7676154B1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.h */, + 7676154C1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.cpp */, + 7676154D1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.h */, + 7676154E1CB80720008C7A67 /* Addon_GUIDialogKeyboard.cpp */, + 7676154F1CB80720008C7A67 /* Addon_GUIDialogKeyboard.h */, + 767615501CB80720008C7A67 /* Addon_GUIDialogNumeric.cpp */, + 767615511CB80720008C7A67 /* Addon_GUIDialogNumeric.h */, + 767615521CB80720008C7A67 /* Addon_GUIDialogOK.cpp */, + 767615531CB80720008C7A67 /* Addon_GUIDialogOK.h */, + 767615541CB80720008C7A67 /* Addon_GUIDialogProgress.cpp */, + 767615551CB80720008C7A67 /* Addon_GUIDialogProgress.h */, + 767615561CB80720008C7A67 /* Addon_GUIDialogSelect.cpp */, + 767615571CB80720008C7A67 /* Addon_GUIDialogSelect.h */, + 767615581CB80720008C7A67 /* Addon_GUIDialogTextViewer.cpp */, + 767615591CB80720008C7A67 /* Addon_GUIDialogTextViewer.h */, + 7676155A1CB80720008C7A67 /* Addon_GUIDialogYesNo.cpp */, + 7676155B1CB80720008C7A67 /* Addon_GUIDialogYesNo.h */, + 7676155C1CB80720008C7A67 /* Addon_GUIGeneral.cpp */, + 7676155D1CB80720008C7A67 /* Addon_GUIGeneral.h */, + 7676155E1CB80720008C7A67 /* Addon_GUIListItem.cpp */, + 7676155F1CB80720008C7A67 /* Addon_GUIListItem.h */, + 767615601CB80720008C7A67 /* Addon_GUIWindow.cpp */, + 767615611CB80720008C7A67 /* Addon_GUIWindow.h */, + ); + name = GUI; + sourceTree = "<group>"; + }; + 7676151B1CB806A2008C7A67 /* AudioEngine */ = { + isa = PBXGroup; + children = ( + 7676152C1CB806F2008C7A67 /* Addon_AudioEngineGeneral.cpp */, + 7676152D1CB806F2008C7A67 /* Addon_AudioEngineGeneral.h */, + 7676152E1CB806F2008C7A67 /* Addon_AudioEngineStream.cpp */, + 7676152F1CB806F2008C7A67 /* Addon_AudioEngineStream.h */, + ); + name = AudioEngine; + sourceTree = "<group>"; + }; + 7676151C1CB806AC008C7A67 /* Addon */ = { + isa = PBXGroup; + children = ( + 7676151D1CB806DB008C7A67 /* Addon_Audio.cpp */, + 7676151E1CB806DB008C7A67 /* Addon_Audio.h */, + 7676151F1CB806DB008C7A67 /* Addon_Directory.cpp */, + 767615201CB806DB008C7A67 /* Addon_Directory.h */, + 767615211CB806DB008C7A67 /* Addon_File.cpp */, + 767615221CB806DB008C7A67 /* Addon_File.h */, + 767615231CB806DB008C7A67 /* Addon_General.cpp */, + 767615241CB806DB008C7A67 /* Addon_General.h */, + 767615251CB806DB008C7A67 /* Addon_Network.cpp */, + 767615261CB806DB008C7A67 /* Addon_Network.h */, + ); + name = Addon; + sourceTree = "<group>"; + }; + 767615BA1CB80A1E008C7A67 /* pvr */ = { + isa = PBXGroup; + children = ( + 767615BB1CB80A42008C7A67 /* definitions_pvr.hpp */, + 767615BC1CB80A42008C7A67 /* General.hpp */, + 767615BD1CB80A42008C7A67 /* StreamUtils.hpp */, + 767615BE1CB80A42008C7A67 /* Transfer.hpp */, + 767615BF1CB80A42008C7A67 /* Trigger.hpp */, + ); + name = pvr; + sourceTree = "<group>"; + }; + 767615C01CB80A57008C7A67 /* player */ = { + isa = PBXGroup; + children = ( + 767615ED1CB80C1C008C7A67 /* definitions_player.hpp */, + 767615EE1CB80C1C008C7A67 /* InfoTagMusic.hpp */, + 767615EF1CB80C1C008C7A67 /* InfoTagVideo.hpp */, + 767615F01CB80C1C008C7A67 /* Player.hpp */, + 767615F11CB80C1C008C7A67 /* PlayList.hpp */, + ); + name = player; + sourceTree = "<group>"; + }; + 767615C11CB80A5E008C7A67 /* peripheral */ = { + isa = PBXGroup; + children = ( + 767615EB1CB80C05008C7A67 /* definitions_peripheral.hpp */, + 767615EC1CB80C05008C7A67 /* Peripheral.hpp */, + ); + name = peripheral; + sourceTree = "<group>"; + }; + 767615C21CB80A70008C7A67 /* inputstream */ = { + isa = PBXGroup; + children = ( + 767615E91CB80BE8008C7A67 /* definitions_inputstream.hpp */, + 767615EA1CB80BE8008C7A67 /* InputStream.hpp */, + ); + name = inputstream; + sourceTree = "<group>"; + }; + 767615C31CB80A7A008C7A67 /* gui */ = { + isa = PBXGroup; + children = ( + 767615D01CB80BA8008C7A67 /* ControlButton.hpp */, + 767615D11CB80BA8008C7A67 /* ControlEdit.hpp */, + 767615D21CB80BA8008C7A67 /* ControlFadeLabel.hpp */, + 767615D31CB80BA8008C7A67 /* ControlImage.hpp */, + 767615D41CB80BA8008C7A67 /* ControlLabel.hpp */, + 767615D51CB80BA8008C7A67 /* ControlProgress.hpp */, + 767615D61CB80BA8008C7A67 /* ControlRadioButton.hpp */, + 767615D71CB80BA8008C7A67 /* ControlRendering.hpp */, + 767615D81CB80BA8008C7A67 /* ControlSettingsSlider.hpp */, + 767615D91CB80BA8008C7A67 /* ControlSlider.hpp */, + 767615DA1CB80BA8008C7A67 /* ControlSpin.hpp */, + 767615DB1CB80BA8008C7A67 /* ControlTextBox.hpp */, + 767615DC1CB80BA8008C7A67 /* definitions_gui.hpp */, + 767615DD1CB80BA8008C7A67 /* DialogExtendedProgress.hpp */, + 767615DE1CB80BA8008C7A67 /* DialogFileBrowser.hpp */, + 767615DF1CB80BA8008C7A67 /* DialogKeyboard.hpp */, + 767615E01CB80BA8008C7A67 /* DialogNumeric.hpp */, + 767615E11CB80BA8008C7A67 /* DialogOK.hpp */, + 767615E21CB80BA8008C7A67 /* DialogProgress.hpp */, + 767615E31CB80BA8008C7A67 /* DialogSelect.hpp */, + 767615E41CB80BA8008C7A67 /* DialogTextViewer.hpp */, + 767615E51CB80BA8008C7A67 /* DialogYesNo.hpp */, + 767615E61CB80BA8008C7A67 /* General.hpp */, + 767615E71CB80BA8008C7A67 /* ListItem.hpp */, + 767615E81CB80BA8008C7A67 /* Window.hpp */, + ); + name = gui; + sourceTree = "<group>"; + }; + 767615C41CB80A80008C7A67 /* audioengine */ = { + isa = PBXGroup; + children = ( + 767615CD1CB80B84008C7A67 /* definitions_audioengine.hpp */, + 767615CE1CB80B84008C7A67 /* General.hpp */, + 767615CF1CB80B84008C7A67 /* Stream.hpp */, + ); + name = audioengine; + sourceTree = "<group>"; + }; + 767615C51CB80A89008C7A67 /* addon */ = { + isa = PBXGroup; + children = ( + 767615C81CB80B54008C7A67 /* definitions_addon.hpp */, + 767615C91CB80B54008C7A67 /* General.hpp */, + 767615CA1CB80B54008C7A67 /* Network.hpp */, + 767615CB1CB80B54008C7A67 /* SoundPlay.hpp */, + 767615CC1CB80B54008C7A67 /* VFSUtils.hpp */, + ); + name = addon; + sourceTree = "<group>"; + }; + 767615C61CB80A90008C7A67 /* .internal */ = { + isa = PBXGroup; + children = ( + 767615C71CB80B18008C7A67 /* AddonLib_internal.hpp */, + ); + name = .internal; + sourceTree = "<group>"; + }; 76F4C37B1C8E927A00A1E64B /* InputStream */ = { isa = PBXGroup; children = ( @@ -8998,6 +9783,7 @@ EDE8C70B1C7F610000A86ECC /* kodi */ = { isa = PBXGroup; children = ( + 764697F31CA7302E00AB1347 /* api2 */, EDE8C70D1C7F618500A86ECC /* kodi_adsp_dll.h */, EDE8C70E1C7F618500A86ECC /* kodi_adsp_types.h */, EDE8C70F1C7F618500A86ECC /* kodi_audiodec_dll.h */, @@ -9040,6 +9826,10 @@ isa = PBXGroup; children = ( EDED2E7E1C878C5F000F5E80 /* interfaces */, + 764697F01CA72FE200AB1347 /* ExceptionHandling.cpp */, + 764697F11CA72FE200AB1347 /* ExceptionHandling.h */, + 764697ED1CA72FC600AB1347 /* AddonInterfaceManager.cpp */, + 764697EE1CA72FC600AB1347 /* AddonInterfaceManager.h */, ); name = binary; path = ..; @@ -9049,6 +9839,7 @@ isa = PBXGroup; children = ( EDED2E7F1C878C87000F5E80 /* api1 */, + 7646976E1CA72D7500AB1347 /* api2 */, EDED2E991C878F61000F5E80 /* AddonInterfaces.cpp */, EDED2E9A1C878F61000F5E80 /* AddonInterfaces.h */, EDED2E9C1C878F70000F5E80 /* IAddonInterface.h */, @@ -9647,11 +10438,13 @@ E38E1F460D25F9FD00618676 /* Encoder.cpp in Sources */, E38E1F4C0D25F9FD00618676 /* coff.cpp in Sources */, E38E1F4D0D25F9FD00618676 /* dll.cpp in Sources */, + 764697BF1CA72E8D00AB1347 /* Addon_GUIControlImage.cpp in Sources */, E38E1F4E0D25F9FD00618676 /* dll_tracker.cpp in Sources */, E38E1F500D25F9FD00618676 /* dll_tracker_file.cpp in Sources */, E38E1F510D25F9FD00618676 /* dll_tracker_library.cpp in Sources */, DF4BF0151A4EF30F0053AC56 /* cc_decoder.c in Sources */, E38E1F540D25F9FD00618676 /* dll_util.cpp in Sources */, + 764697CB1CA72E8D00AB1347 /* Addon_GUIDialogNumeric.cpp in Sources */, DFD717361C09FEC60025D964 /* AutoPool.mm in Sources */, E38E1F560D25F9FD00618676 /* DllLoader.cpp in Sources */, E38E1F570D25F9FD00618676 /* DllLoaderContainer.cpp in Sources */, @@ -9677,9 +10470,11 @@ E38E1F8D0D25F9FD00618676 /* DVDVideoCodecFFmpeg.cpp in Sources */, E38E1F8F0D25F9FD00618676 /* DVDVideoPPFFmpeg.cpp in Sources */, E38E1F910D25F9FD00618676 /* DVDDemux.cpp in Sources */, + 767615691CB80720008C7A67 /* Addon_GUIControlRendering.cpp in Sources */, 7C8E023A1BA35D0B0072E8B2 /* PlayerBuiltins.cpp in Sources */, 80204F121C91CD3600E8C88B /* InputStreamMultiSource.cpp in Sources */, E38E1F940D25F9FD00618676 /* DVDDemuxUtils.cpp in Sources */, + 764697BD1CA72E8D00AB1347 /* Addon_GUIControlEdit.cpp in Sources */, E38E1F970D25F9FD00618676 /* DVDDemuxSPU.cpp in Sources */, E38E1F980D25F9FD00618676 /* DVDFactoryInputStream.cpp in Sources */, E38E1F990D25F9FD00618676 /* DVDInputStream.cpp in Sources */, @@ -9699,9 +10494,13 @@ E38E1FA90D25F9FD00618676 /* VideoPlayerSubtitle.cpp in Sources */, 395C2A141A9F072400EBC7AD /* ResourceFile.cpp in Sources */, E38E1FAA0D25F9FD00618676 /* VideoPlayerVideo.cpp in Sources */, + 764697D01CA72E8D00AB1347 /* Addon_GUIDialogYesNo.cpp in Sources */, + 7676152B1CB806DB008C7A67 /* Addon_Network.cpp in Sources */, DF91E93E1C0A26350011084D /* SDLMain.mm in Sources */, E38E1FAB0D25F9FD00618676 /* DVDStreamInfo.cpp in Sources */, E38E1FAC0D25F9FD00618676 /* DVDFactorySubtitle.cpp in Sources */, + 764697CF1CA72E8D00AB1347 /* Addon_GUIDialogTextViewer.cpp in Sources */, + 767615881CB80777008C7A67 /* Addon_InfoTagMusic.cpp in Sources */, E38E1FAD0D25F9FD00618676 /* DVDSubtitleLineCollection.cpp in Sources */, E38E1FAE0D25F9FD00618676 /* DVDSubtitleParserSubrip.cpp in Sources */, E38E1FAF0D25F9FD00618676 /* DVDSubtitleStream.cpp in Sources */, @@ -9713,13 +10512,17 @@ E38E1FF10D25F9FD00618676 /* YUV2RGBShader.cpp in Sources */, 2AFBB94C1CC608A200BAB340 /* GUIEPGGridContainerModel.cpp in Sources */, E38E1FF70D25F9FD00618676 /* CueDocument.cpp in Sources */, + 767615781CB80720008C7A67 /* Addon_GUIListItem.cpp in Sources */, E38E1FF80D25F9FD00618676 /* Database.cpp in Sources */, 68AE5C0B1C92437900C4D527 /* GUIControllerWindow.cpp in Sources */, E38E1FFA0D25F9FD00618676 /* DetectDVDType.cpp in Sources */, E38E1FFB0D25F9FD00618676 /* DNSNameCache.cpp in Sources */, EDED2E941C878EE0000F5E80 /* AddonCallbacksAddon.cpp in Sources */, + 767615711CB80720008C7A67 /* Addon_GUIDialogNumeric.cpp in Sources */, EDED2E971C878EF8000F5E80 /* AddonCallbacksAudioDSP.cpp in Sources */, E38E1FFC0D25F9FD00618676 /* DynamicDll.cpp in Sources */, + 767615301CB806F2008C7A67 /* Addon_AudioEngineGeneral.cpp in Sources */, + 764697E81CA72F3200AB1347 /* Addon_Peripheral.cpp in Sources */, E38E1FFF0D25F9FD00618676 /* FileItem.cpp in Sources */, E38E20020D25F9FD00618676 /* CacheStrategy.cpp in Sources */, E38E20030D25F9FD00618676 /* CDDADirectory.cpp in Sources */, @@ -9741,6 +10544,7 @@ 39B4F3701B96F845009B2D88 /* RepositoryUpdater.cpp in Sources */, E38E202A0D25F9FD00618676 /* ISO9660Directory.cpp in Sources */, E38E20330D25F9FD00618676 /* MultiPathDirectory.cpp in Sources */, + 764697C51CA72E8D00AB1347 /* Addon_GUIControlSlider.cpp in Sources */, E38E20340D25F9FD00618676 /* DirectoryNode.cpp in Sources */, E38E20350D25F9FD00618676 /* DirectoryNodeAlbum.cpp in Sources */, E38E20360D25F9FD00618676 /* DirectoryNodeAlbumCompilations.cpp in Sources */, @@ -9748,6 +10552,7 @@ E38E20380D25F9FD00618676 /* DirectoryNodeAlbumRecentlyAdded.cpp in Sources */, E38E20390D25F9FD00618676 /* DirectoryNodeAlbumRecentlyAddedSong.cpp in Sources */, E38E203A0D25F9FD00618676 /* DirectoryNodeAlbumRecentlyPlayed.cpp in Sources */, + 764697C41CA72E8D00AB1347 /* Addon_GUIControlSettingsSlider.cpp in Sources */, E38E203B0D25F9FD00618676 /* DirectoryNodeAlbumRecentlyPlayedSong.cpp in Sources */, DF91E93A1C0A21D60011084D /* xbmc.cpp in Sources */, E38E203C0D25F9FD00618676 /* DirectoryNodeAlbumTop100.cpp in Sources */, @@ -9757,20 +10562,25 @@ E38E20410D25F9FD00618676 /* DirectoryNodeRoot.cpp in Sources */, E38E20420D25F9FD00618676 /* DirectoryNodeSong.cpp in Sources */, E38E20430D25F9FD00618676 /* DirectoryNodeSongTop100.cpp in Sources */, + 764697E21CA72EE900AB1347 /* Addon_InfoTagVideo.cpp in Sources */, E38E20440D25F9FD00618676 /* DirectoryNodeTop100.cpp in Sources */, E38E20460D25F9FD00618676 /* DirectoryNodeYearAlbum.cpp in Sources */, E38E20470D25F9FD00618676 /* DirectoryNodeYearSong.cpp in Sources */, F597B05B18A804E0005AADAE /* DVDVideoCodec.cpp in Sources */, E38E20490D25F9FD00618676 /* QueryParams.cpp in Sources */, + 764697D21CA72E8D00AB1347 /* Addon_GUIListItem.cpp in Sources */, E38E204A0D25F9FD00618676 /* MusicDatabaseDirectory.cpp in Sources */, E38E204B0D25F9FD00618676 /* MusicSearchDirectory.cpp in Sources */, E38E204F0D25F9FD00618676 /* PlaylistDirectory.cpp in Sources */, E38E20500D25F9FD00618676 /* PlaylistFileDirectory.cpp in Sources */, + 764697CA1CA72E8D00AB1347 /* Addon_GUIDialogKeyboard.cpp in Sources */, 68AE5C1B1C92438E00C4D527 /* GUIControllerButton.cpp in Sources */, E38E20510D25F9FD00618676 /* PluginDirectory.cpp in Sources */, 7CF3194B1BD2C65500A44A41 /* MusicInfoTagLoaderFFmpeg.cpp in Sources */, + 764697E31CA72EE900AB1347 /* Addon_Player.cpp in Sources */, E38E20520D25F9FD00618676 /* RarDirectory.cpp in Sources */, E38E20530D25F9FD00618676 /* RarManager.cpp in Sources */, + 767615661CB80720008C7A67 /* Addon_GUIControlLabel.cpp in Sources */, DF54F7FE1B6580AD000FCBA4 /* ContextMenuItem.cpp in Sources */, 395C29C51A98A0E100EBC7AD /* ILanguageInvoker.cpp in Sources */, E38E20580D25F9FD00618676 /* SmartPlaylistDirectory.cpp in Sources */, @@ -9782,6 +10592,7 @@ E38E20640D25F9FD00618676 /* DirectoryNodeMusicVideosOverview.cpp in Sources */, E38E20650D25F9FD00618676 /* DirectoryNodeOverview.cpp in Sources */, E38E20660D25F9FD00618676 /* DirectoryNodeRecentlyAddedEpisodes.cpp in Sources */, + 767615141CB8063A008C7A67 /* AddonInterfaceBase.cpp in Sources */, DF4BF01D1A4EF3410053AC56 /* DVDDemuxCC.cpp in Sources */, 7C8E02281BA35D0B0072E8B2 /* GUIBuiltins.cpp in Sources */, 68AE5BC31C9241DF00C4D527 /* JoystickTranslator.cpp in Sources */, @@ -9855,9 +10666,12 @@ E38E20BE0D25F9FD00618676 /* GUIWindowPrograms.cpp in Sources */, E38E20BF0D25F9FD00618676 /* GUIWindowScreensaver.cpp in Sources */, E38E20C70D25F9FD00618676 /* GUIWindowSlideShow.cpp in Sources */, + 764697E41CA72EE900AB1347 /* Addon_PlayList.cpp in Sources */, E38E20C80D25F9FD00618676 /* GUIWindowStartup.cpp in Sources */, E38E20C90D25F9FD00618676 /* GUIWindowSystemInfo.cpp in Sources */, 68AE5BC11C9241DF00C4D527 /* JoystickMonitor.cpp in Sources */, + 767615751CB80720008C7A67 /* Addon_GUIDialogTextViewer.cpp in Sources */, + 767615731CB80720008C7A67 /* Addon_GUIDialogProgress.cpp in Sources */, E38E20CA0D25F9FD00618676 /* GUIWindowVideoBase.cpp in Sources */, E38E20CC0D25F9FD00618676 /* GUIDialogVideoInfo.cpp in Sources */, E38E20CD0D25F9FD00618676 /* GUIWindowVideoNav.cpp in Sources */, @@ -9874,20 +10688,26 @@ E38E22350D25F9FE00618676 /* arcread.cpp in Sources */, E38E22360D25F9FE00618676 /* cmddata.cpp in Sources */, E38E22380D25F9FE00618676 /* consio.cpp in Sources */, + 764697CE1CA72E8D00AB1347 /* Addon_GUIDialogSelect.cpp in Sources */, E38E22390D25F9FE00618676 /* crc.cpp in Sources */, E38E223A0D25F9FE00618676 /* crypt.cpp in Sources */, E38E223C0D25F9FE00618676 /* encname.cpp in Sources */, E38E223D0D25F9FE00618676 /* errhnd.cpp in Sources */, E38E223E0D25F9FE00618676 /* extinfo.cpp in Sources */, E38E223F0D25F9FE00618676 /* extract.cpp in Sources */, + 764697D31CA72E8D00AB1347 /* Addon_GUIWindow.cpp in Sources */, E38E22400D25F9FE00618676 /* filcreat.cpp in Sources */, E38E22410D25F9FE00618676 /* file.cpp in Sources */, E38E22420D25F9FE00618676 /* filefn.cpp in Sources */, E38E22430D25F9FE00618676 /* filestr.cpp in Sources */, + 764697801CA72E1F00AB1347 /* Addon_Directory.cpp in Sources */, + 767615621CB80720008C7A67 /* Addon_GUIControlButton.cpp in Sources */, E38E22440D25F9FE00618676 /* find.cpp in Sources */, E38E22450D25F9FE00618676 /* getbits.cpp in Sources */, + 764697C81CA72E8D00AB1347 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */, DF0E4ACA1AD5982500A75430 /* InfoTagRadioRDS.cpp in Sources */, E38E22460D25F9FE00618676 /* global.cpp in Sources */, + 7676156E1CB80720008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */, E38E22470D25F9FE00618676 /* int64.cpp in Sources */, E38E22480D25F9FE00618676 /* isnt.cpp in Sources */, E38E22490D25F9FE00618676 /* log.cpp in Sources */, @@ -9901,10 +10721,13 @@ E38E22530D25F9FE00618676 /* rdwrfn.cpp in Sources */, E38E22540D25F9FE00618676 /* recvol.cpp in Sources */, 7C8E02191BA35D0B0072E8B2 /* AddonBuiltins.cpp in Sources */, + 764697CC1CA72E8D00AB1347 /* Addon_GUIDialogOK.cpp in Sources */, E38E22550D25F9FE00618676 /* resource.cpp in Sources */, E38E22560D25F9FE00618676 /* rijndael.cpp in Sources */, E38E22570D25F9FE00618676 /* rs.cpp in Sources */, + 764697C11CA72E8D00AB1347 /* Addon_GUIControlProgress.cpp in Sources */, E38E22580D25F9FE00618676 /* savepos.cpp in Sources */, + 7676156A1CB80720008C7A67 /* Addon_GUIControlSettingsSlider.cpp in Sources */, E38E22590D25F9FE00618676 /* scantree.cpp in Sources */, E38E225A0D25F9FE00618676 /* sha1.cpp in Sources */, E38E225D0D25F9FE00618676 /* strfn.cpp in Sources */, @@ -9947,6 +10770,7 @@ E38E22C20D25F9FE00618676 /* URL.cpp in Sources */, E38E22C30D25F9FE00618676 /* Util.cpp in Sources */, E38E22C40D25F9FE00618676 /* AlarmClock.cpp in Sources */, + 764697BE1CA72E8D00AB1347 /* Addon_GUIControlFadeLabel.cpp in Sources */, E38E22C50D25F9FE00618676 /* Archive.cpp in Sources */, E38E22C60D25F9FE00618676 /* BitstreamStats.cpp in Sources */, E38E22C70D25F9FE00618676 /* CharsetConverter.cpp in Sources */, @@ -9966,6 +10790,7 @@ E38E22E90D25F9FE00618676 /* PerformanceSample.cpp in Sources */, E38E22EA0D25F9FE00618676 /* PerformanceStats.cpp in Sources */, E38E22EB0D25F9FE00618676 /* RegExp.cpp in Sources */, + 764697C21CA72E8D00AB1347 /* Addon_GUIControlRadioButton.cpp in Sources */, E38E22EC0D25F9FE00618676 /* RssReader.cpp in Sources */, E38E22ED0D25F9FE00618676 /* ScraperParser.cpp in Sources */, E38E22F10D25F9FE00618676 /* Splash.cpp in Sources */, @@ -10017,6 +10842,7 @@ 8863281E0E07B37200BB3DAB /* GUIViewStatePictures.cpp in Sources */, 8863281F0E07B37200BB3DAB /* GUIViewStatePrograms.cpp in Sources */, 889B4D8E0E0EF86C00FAD25E /* RSSDirectory.cpp in Sources */, + 764697C01CA72E8D00AB1347 /* Addon_GUIControlLabel.cpp in Sources */, 815EE6350E17F1DC009FBE3C /* DVDInputStreamRTMP.cpp in Sources */, F5F8E1E80E427F6700A8E96F /* md5.cpp in Sources */, F506297A0E57B9680066625A /* MultiPathFile.cpp in Sources */, @@ -10044,6 +10870,7 @@ F5AACA970FB3E2B800DBB77C /* GUIDialogSlider.cpp in Sources */, F59876C00FBA351D008EF4FB /* VideoReferenceClock.cpp in Sources */, F5987F050FBDF274008EF4FB /* DPMSSupport.cpp in Sources */, + 7676158E1CB807A1008C7A67 /* Addon_PVR.cpp in Sources */, F5987FDB0FBE2DFD008EF4FB /* PAPlayer.cpp in Sources */, F548786D0FE060FF00E506FD /* DVDSubtitleParserMPL2.cpp in Sources */, F5487B4C0FE6F02700E506FD /* StreamDetails.cpp in Sources */, @@ -10073,7 +10900,9 @@ F57B6F801071B8B500079ACB /* JobManager.cpp in Sources */, F5E55B5D10741272006E788A /* VideoPlayerTeletext.cpp in Sources */, 7C8E02371BA35D0B0072E8B2 /* PictureBuiltins.cpp in Sources */, + 764697C91CA72E8D00AB1347 /* Addon_GUIDialogFileBrowser.cpp in Sources */, F5E55B66107412DE006E788A /* GUIDialogTeletext.cpp in Sources */, + 764697711CA72DCC00AB1347 /* AddonInterfaceBase.cpp in Sources */, F5E55B7010741340006E788A /* Teletext.cpp in Sources */, 43348AA4107747CD00F859CF /* Edl.cpp in Sources */, 43348AAE1077486D00F859CF /* PlayerCoreFactory.cpp in Sources */, @@ -10083,6 +10912,7 @@ 55D3604E1826CAB900DA66D2 /* OverlayRendererGUI.cpp in Sources */, F5E56BA61082A675006E788A /* PosixMountProvider.cpp in Sources */, 7CAA25351085963B0096DE39 /* PasswordManager.cpp in Sources */, + 7676157C1CB8074C008C7A67 /* Addon_InputStream.cpp in Sources */, F599CD2B108E65370010EC2A /* IoSupport.cpp in Sources */, 2AC7EB5A1C21F6BA00BDAA95 /* GUIWindowPVRTimerRules.cpp in Sources */, F599CD74108E6A7A0010EC2A /* DarwinStorageProvider.cpp in Sources */, @@ -10130,6 +10960,7 @@ 39BD2AD81B845D40004A5A15 /* DialogHelper.cpp in Sources */, 18B7C392129420E5009E7A26 /* Settings.cpp in Sources */, 18B7C3A812942132009E7A26 /* AdvancedSettings.cpp in Sources */, + 764697D71CA72EC300AB1347 /* Addon_PVR.cpp in Sources */, 395C29DB1A98A11C00EBC7AD /* WsgiResponse.cpp in Sources */, 18B7C7AB1294222E009E7A26 /* D3DResource.cpp in Sources */, 18B7C7AC1294222E009E7A26 /* DDSImage.cpp in Sources */, @@ -10174,6 +11005,7 @@ 2AB491701CDDF1920004C263 /* HTTPRequestHandlerUtils.cpp in Sources */, 18B7C7D01294222E009E7A26 /* GUIMoverControl.cpp in Sources */, 18B7C7D11294222E009E7A26 /* GUIMultiImage.cpp in Sources */, + 764697C61CA72E8D00AB1347 /* Addon_GUIControlSpin.cpp in Sources */, 18B7C7D21294222E009E7A26 /* GUIMultiSelectText.cpp in Sources */, 18B7C7D31294222E009E7A26 /* GUIPanelContainer.cpp in Sources */, 18B7C7D41294222E009E7A26 /* GUIProgressControl.cpp in Sources */, @@ -10221,6 +11053,7 @@ 18B7C894129423A7009E7A26 /* MusicInfoTagLoaderCDDA.cpp in Sources */, 18B7C895129423A7009E7A26 /* MusicInfoTagLoaderDatabase.cpp in Sources */, 18B7C896129423A7009E7A26 /* MusicInfoTagLoaderFactory.cpp in Sources */, + 767615771CB80720008C7A67 /* Addon_GUIGeneral.cpp in Sources */, 18B7C89F129423A7009E7A26 /* MusicInfoTagLoaderShn.cpp in Sources */, 18B7C8D712942546009E7A26 /* ButtonTranslator.cpp in Sources */, 18B7C8D912942546009E7A26 /* KeyboardStat.cpp in Sources */, @@ -10240,6 +11073,7 @@ 18B7C935129428CA009E7A26 /* PlayListURL.cpp in Sources */, 18B7C936129428CA009E7A26 /* PlayListWPL.cpp in Sources */, 18B7C937129428CA009E7A26 /* PlayListXML.cpp in Sources */, + 764697821CA72E1F00AB1347 /* Addon_General.cpp in Sources */, 18B7C938129428CA009E7A26 /* SmartPlayList.cpp in Sources */, 18B7C97C1294380A009E7A26 /* GUIWindowAddonBrowser.cpp in Sources */, EDED2E911C878EB8000F5E80 /* AddonCallbacksAudioEngine.cpp in Sources */, @@ -10259,6 +11093,9 @@ F5AE40A013415D9E0004BD79 /* FileOperations.cpp in Sources */, F5AE40A113415D9E0004BD79 /* JSONRPC.cpp in Sources */, F5AE40A413415D9E0004BD79 /* PlayerOperations.cpp in Sources */, + 764697831CA72E1F00AB1347 /* Addon_Network.cpp in Sources */, + 7646977F1CA72E1F00AB1347 /* Addon_Audio.cpp in Sources */, + 7676158B1CB80777008C7A67 /* Addon_PlayList.cpp in Sources */, F5AE40A513415D9E0004BD79 /* PlaylistOperations.cpp in Sources */, F5AE40A613415D9E0004BD79 /* SystemOperations.cpp in Sources */, F5AE40A713415D9E0004BD79 /* VideoLibrary.cpp in Sources */, @@ -10295,8 +11132,10 @@ DF98D98C1434F47D00A6EBE1 /* SkinVariable.cpp in Sources */, F5E10537140AA38100175026 /* PeripheralBusUSB.cpp in Sources */, F5E10538140AA38100175026 /* PeripheralBus.cpp in Sources */, + 764697F21CA72FE200AB1347 /* ExceptionHandling.cpp in Sources */, F5E1053B140AA38100175026 /* Peripheral.cpp in Sources */, F5E1053C140AA38100175026 /* PeripheralBluetooth.cpp in Sources */, + 764697CD1CA72E8D00AB1347 /* Addon_GUIDialogProgress.cpp in Sources */, F5E1053E140AA38100175026 /* PeripheralDisk.cpp in Sources */, F5E1053F140AA38100175026 /* PeripheralHID.cpp in Sources */, F5E10540140AA38100175026 /* PeripheralNIC.cpp in Sources */, @@ -10315,8 +11154,10 @@ DF5276E2151BAEDA00B5B63B /* HttpResponse.cpp in Sources */, DF527734151BAF4C00B5B63B /* WebSocket.cpp in Sources */, DF527735151BAF4C00B5B63B /* WebSocketManager.cpp in Sources */, + 7676158A1CB80777008C7A67 /* Addon_Player.cpp in Sources */, DF527736151BAF4C00B5B63B /* WebSocketV13.cpp in Sources */, DF527737151BAF4C00B5B63B /* WebSocketV8.cpp in Sources */, + 767615791CB80720008C7A67 /* Addon_GUIWindow.cpp in Sources */, 188F75FE152217BC009870CE /* Mime.cpp in Sources */, 188F7602152217DF009870CE /* GUIOperations.cpp in Sources */, DFCA6AC7152245CD000BFAAE /* HTTPJsonRpcHandler.cpp in Sources */, @@ -10344,6 +11185,7 @@ EDED2E8B1C878E62000F5E80 /* AddonCallbacksGUI.cpp in Sources */, DF93D6A81444A8B1007C6459 /* RarFile.cpp in Sources */, DF93D6AA1444A8B1007C6459 /* SFTPFile.cpp in Sources */, + 7646978A1CA72E6100AB1347 /* Addon_AudioEngineStream.cpp in Sources */, DF93D6AB1444A8B1007C6459 /* ShoutcastFile.cpp in Sources */, DF93D6AD1444A8B1007C6459 /* SMBFile.cpp in Sources */, DF93D6AE1444A8B1007C6459 /* SpecialProtocolFile.cpp in Sources */, @@ -10359,6 +11201,7 @@ 7C8E02251BA35D0B0072E8B2 /* CECBuiltins.cpp in Sources */, F5ED908815538DCE00842059 /* XBMCTinyXML.cpp in Sources */, F5ED908E15538E2300842059 /* POUtils.cpp in Sources */, + 764697EF1CA72FC600AB1347 /* AddonInterfaceManager.cpp in Sources */, DFB65FB515373AE7006B8FF1 /* AEFactory.cpp in Sources */, DFB65FB715373AE7006B8FF1 /* AEEncoderFFmpeg.cpp in Sources */, DFB65FCC15373AE7006B8FF1 /* AEBitstreamPacker.cpp in Sources */, @@ -10391,10 +11234,13 @@ C84828D1156CFCD8005A996F /* GUIDialogPVRTimerSettings.cpp in Sources */, 9ABFE7A11C972D60002F1318 /* ContextMenus.cpp in Sources */, C84828D4156CFCD8005A996F /* PVRDatabase.cpp in Sources */, + 767615721CB80720008C7A67 /* Addon_GUIDialogOK.cpp in Sources */, + 7676156B1CB80720008C7A67 /* Addon_GUIControlSlider.cpp in Sources */, C84828D5156CFCD8005A996F /* PVRGUIInfo.cpp in Sources */, C84828D6156CFCD8005A996F /* PVRManager.cpp in Sources */, C84828D8156CFCD8005A996F /* PVRRecording.cpp in Sources */, 7CED593D1CD341280093F573 /* VTB.cpp in Sources */, + 7676157F1CB8075E008C7A67 /* Addon_Peripheral.cpp in Sources */, C84828D9156CFCD8005A996F /* PVRRecordings.cpp in Sources */, C84828DB156CFCD8005A996F /* PVRTimerInfoTag.cpp in Sources */, C84828DC156CFCD8005A996F /* PVRTimers.cpp in Sources */, @@ -10403,12 +11249,16 @@ C84828DF156CFCD8005A996F /* GUIWindowPVRChannels.cpp in Sources */, C84828E1156CFCD8005A996F /* GUIWindowPVRGuide.cpp in Sources */, C84828E2156CFCD8005A996F /* GUIWindowPVRRecordings.cpp in Sources */, + 764697C71CA72E8D00AB1347 /* Addon_GUIControlTextBox.cpp in Sources */, + 764697D11CA72E8D00AB1347 /* Addon_GUIGeneral.cpp in Sources */, C84828E3156CFCD8005A996F /* GUIWindowPVRSearch.cpp in Sources */, C84828E4156CFCD8005A996F /* GUIWindowPVRTimers.cpp in Sources */, 7CA220071C921F74000FA3CD /* DemuxMultiSource.cpp in Sources */, C84828F5156CFD5E005A996F /* Epg.cpp in Sources */, C84828F6156CFD5E005A996F /* EpgContainer.cpp in Sources */, C84828F7156CFD5E005A996F /* EpgDatabase.cpp in Sources */, + 767615761CB80720008C7A67 /* Addon_GUIDialogYesNo.cpp in Sources */, + 7676152A1CB806DB008C7A67 /* Addon_General.cpp in Sources */, 68AE5C331C9243A000C4D527 /* ControllerTranslator.cpp in Sources */, C84828F8156CFD5E005A996F /* EpgInfoTag.cpp in Sources */, C84828F9156CFD5E005A996F /* EpgSearchFilter.cpp in Sources */, @@ -10440,6 +11290,7 @@ DF2345E215FA639500A934F6 /* UPnPInternal.cpp in Sources */, 552840CC1626163B00ED1333 /* UPnPPlayer.cpp in Sources */, DF2345E315FA639500A934F6 /* UPnPRenderer.cpp in Sources */, + 7676156C1CB80720008C7A67 /* Addon_GUIControlSpin.cpp in Sources */, DF2345E415FA639500A934F6 /* UPnPServer.cpp in Sources */, AE84CB5A15A5B8A600A3810E /* TagLibVFSStream.cpp in Sources */, AEC0083115ACAC6E0099888C /* TagLoaderTagLib.cpp in Sources */, @@ -10463,6 +11314,7 @@ DFB25D34163D4743006C4A48 /* CallbackHandler.cpp in Sources */, B5011E4119AF3B56005ADF89 /* PosixFile.cpp in Sources */, DFB25D35163D4743006C4A48 /* Control.cpp in Sources */, + 764697BC1CA72E8D00AB1347 /* Addon_GUIControlButton.cpp in Sources */, DFB25D36163D4743006C4A48 /* Dialog.cpp in Sources */, DFB25D37163D4743006C4A48 /* File.cpp in Sources */, DFB25D38163D4743006C4A48 /* InfoTagMusic.cpp in Sources */, @@ -10471,6 +11323,7 @@ DFB25D3B163D4743006C4A48 /* LanguageHook.cpp in Sources */, DFB25D3C163D4743006C4A48 /* ListItem.cpp in Sources */, DFB25D3D163D4743006C4A48 /* ModuleXbmc.cpp in Sources */, + 767615701CB80720008C7A67 /* Addon_GUIDialogKeyboard.cpp in Sources */, 68AE5BD01C9241F800C4D527 /* FeatureHandling.cpp in Sources */, DFB25D3E163D4743006C4A48 /* ModuleXbmcgui.cpp in Sources */, DFB25D3F163D4743006C4A48 /* ModuleXbmcplugin.cpp in Sources */, @@ -10483,6 +11336,7 @@ DFB25D44163D4743006C4A48 /* String.cpp in Sources */, DFB25D45163D4743006C4A48 /* Window.cpp in Sources */, DFB25D46163D4743006C4A48 /* WindowDialog.cpp in Sources */, + 767615631CB80720008C7A67 /* Addon_GUIControlEdit.cpp in Sources */, 395C2A191A9F074C00EBC7AD /* Locale.cpp in Sources */, DFB25D47163D4743006C4A48 /* WindowDialogMixin.cpp in Sources */, DFB25D48163D4743006C4A48 /* WindowXML.cpp in Sources */, @@ -10553,6 +11407,7 @@ 0E3036EC1760F68A00D93596 /* FavouritesDirectory.cpp in Sources */, 68AE5BE11C92421800C4D527 /* AddonButtonMapping.cpp in Sources */, 68AE5C091C92437900C4D527 /* GUIControllerList.cpp in Sources */, + 767615681CB80720008C7A67 /* Addon_GUIControlRadioButton.cpp in Sources */, 7C8E02461BA35D0B0072E8B2 /* SystemBuiltins.cpp in Sources */, DFBB431B178B5E6F006CC20A /* CompileInfo.cpp in Sources */, DF40BC20178B4BEC009DB567 /* PythonInvoker.cpp in Sources */, @@ -10578,10 +11433,13 @@ 7C8FC6EE1829A4580045153D /* DirectoryProvider.cpp in Sources */, 7C4E6F721829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */, 7C140989183224B8009F9411 /* ISetting.cpp in Sources */, + 764697E11CA72EE900AB1347 /* Addon_InfoTagMusic.cpp in Sources */, 7C14098C183224B8009F9411 /* ISettingControl.cpp in Sources */, + 764697891CA72E6100AB1347 /* Addon_AudioEngineGeneral.cpp in Sources */, 68AE5BDF1C92421800C4D527 /* AddonButtonMap.cpp in Sources */, 7C14098F183224B8009F9411 /* Setting.cpp in Sources */, DF56EF241A798A5E00CAAEFB /* HttpRangeUtils.cpp in Sources */, + 764697C31CA72E8D00AB1347 /* Addon_GUIControlRendering.cpp in Sources */, 7C140992183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */, 7C140995183224B8009F9411 /* SettingConditions.cpp in Sources */, 7C140998183224B8009F9411 /* SettingDependency.cpp in Sources */, @@ -10596,7 +11454,9 @@ 7CEE587D1B5A3FFB007C2B5A /* AudioDSPSettings.cpp in Sources */, 7C1409A9184015C9009F9411 /* InfoExpression.cpp in Sources */, AE32174218313ADF0003FAFC /* XSLTUtils.cpp in Sources */, + 7676156D1CB80720008C7A67 /* Addon_GUIControlTextBox.cpp in Sources */, 7C15DCBC1892481400FCE564 /* InfoBool.cpp in Sources */, + 767615741CB80720008C7A67 /* Addon_GUIDialogSelect.cpp in Sources */, F5CC228B1814F7E9006B5E91 /* AESinkDARWINOSX.cpp in Sources */, F5CC22EB1814FF3B006B5E91 /* ActiveAE.cpp in Sources */, F5CC22EC1814FF3B006B5E91 /* ActiveAEBuffer.cpp in Sources */, @@ -10611,6 +11471,7 @@ 7C8AE84F189DE3CD00C33786 /* CoreAudioDevice.cpp in Sources */, 7C8AE850189DE3CD00C33786 /* CoreAudioHardware.cpp in Sources */, DF5E699A1B28121E009A88C3 /* PVRTimerType.cpp in Sources */, + 767615671CB80720008C7A67 /* Addon_GUIControlProgress.cpp in Sources */, 7C8AE851189DE3CD00C33786 /* CoreAudioStream.cpp in Sources */, 7C8AE854189DE47F00C33786 /* CoreAudioHelpers.cpp in Sources */, 7CF0504B190A1D7200222135 /* FFmpeg.cpp in Sources */, @@ -10633,6 +11494,7 @@ 7CCDA123192753E30074CF51 /* PltEvent.cpp in Sources */, 7CCDA12C192753E30074CF51 /* PltHttp.cpp in Sources */, 7CCDA135192753E30074CF51 /* PltHttpClientTask.cpp in Sources */, + 767615651CB80720008C7A67 /* Addon_GUIControlImage.cpp in Sources */, DF02BA661A91065F006DCA16 /* VideoSyncOsx.cpp in Sources */, 7CCDA13E192753E30074CF51 /* PltHttpServer.cpp in Sources */, 7CCDA147192753E30074CF51 /* PltHttpServerTask.cpp in Sources */, @@ -10651,6 +11513,7 @@ 7CCDA1A1192753E30074CF51 /* PltMediaConnect.cpp in Sources */, 7CCDA1AA192753E30074CF51 /* PltXbox360.cpp in Sources */, 7CCDA1AF192753E30074CF51 /* X_MS_MediaReceiverRegistrarSCPD.cpp in Sources */, + 767615271CB806DB008C7A67 /* Addon_Audio.cpp in Sources */, 7CCDA1BA192753E30074CF51 /* AVTransportSCPD.cpp in Sources */, DFD7172C1C09F5CF0025D964 /* XbmcContext.cpp in Sources */, 7CCDA1C7192753E30074CF51 /* PltMediaController.cpp in Sources */, @@ -10660,6 +11523,7 @@ DF29BCEB1B5D911800904347 /* AddonManagementEvent.cpp in Sources */, 7CCDA1E6192753E30074CF51 /* RenderingControlSCPD.cpp in Sources */, 7CCDA1F3192753E30074CF51 /* ConnectionManagerSCPD.cpp in Sources */, + 764697EC1CA72F6800AB1347 /* Addon_InputStream.cpp in Sources */, 7CCDA1FE192753E30074CF51 /* ContentDirectorySCPD.cpp in Sources */, 7CCDA209192753E30074CF51 /* ContentDirectorywSearchSCPD.cpp in Sources */, 68AE5BCE1C9241F800C4D527 /* ButtonMapping.cpp in Sources */, @@ -10676,6 +11540,7 @@ 7CCDA779192756250074CF51 /* Neptune.cpp in Sources */, 7CCDA782192756250074CF51 /* NptAutomaticCleaner.cpp in Sources */, 7CCDA785192756250074CF51 /* NptBase64.cpp in Sources */, + 767615281CB806DB008C7A67 /* Addon_Directory.cpp in Sources */, 228FA65D1C53F9D50023BBF0 /* InfoScanner.cpp in Sources */, 7CCDA78E192756250074CF51 /* NptBufferedStreams.cpp in Sources */, 7CCDA797192756250074CF51 /* NptCommon.cpp in Sources */, @@ -10701,6 +11566,7 @@ 7CCDA7E8192756250074CF51 /* NptMessaging.cpp in Sources */, 9AC167B61C5ED478004F0C29 /* MusicFileItemListModifier.cpp in Sources */, 7CCDA7F1192756250074CF51 /* NptNetwork.cpp in Sources */, + 767615891CB80777008C7A67 /* Addon_InfoTagVideo.cpp in Sources */, 7CCDA7FA192756250074CF51 /* NptQueue.cpp in Sources */, 7CCDA803192756250074CF51 /* NptResults.cpp in Sources */, 68AE5BC51C9241DF00C4D527 /* KeymapHandler.cpp in Sources */, @@ -10712,6 +11578,7 @@ 7CCDA821192756250074CF51 /* NptStreams.cpp in Sources */, 7CCDA82A192756250074CF51 /* NptStrings.cpp in Sources */, 7C973CF41B5037EF0002A874 /* ActiveAEDSPMode.cpp in Sources */, + 7676156F1CB80720008C7A67 /* Addon_GUIDialogFileBrowser.cpp in Sources */, 7CCDA833192756250074CF51 /* NptSystem.cpp in Sources */, 7CCDA83C192756250074CF51 /* NptThreads.cpp in Sources */, 7CCDA845192756250074CF51 /* NptTime.cpp in Sources */, @@ -10723,12 +11590,14 @@ DF56EF1F1A798A3F00CAAEFB /* HTTPFileHandler.cpp in Sources */, 7CCDAA82192756250074CF51 /* NptPosixDynamicLibraries.cpp in Sources */, 7CCDAA85192756250074CF51 /* NptPosixEnvironment.cpp in Sources */, + 764697811CA72E1F00AB1347 /* Addon_File.cpp in Sources */, 7CCDAA8B192756250074CF51 /* NptPosixNetwork.cpp in Sources */, 7CCDAA8E192756250074CF51 /* NptPosixQueue.cpp in Sources */, 7CCDAA97192756250074CF51 /* NptPosixSystem.cpp in Sources */, 7CCDAAA0192756250074CF51 /* NptPosixThreads.cpp in Sources */, 7C8E02311BA35D0B0072E8B2 /* LibraryBuiltins.cpp in Sources */, 7CCDAAA9192756250074CF51 /* NptPosixTime.cpp in Sources */, + 767615311CB806F2008C7A67 /* Addon_AudioEngineStream.cpp in Sources */, 7CCDAAB2192756250074CF51 /* NptSelectableMessageQueue.cpp in Sources */, 7CCDAC8619275CA70074CF51 /* NptBsdNetwork.cpp in Sources */, 7CCDAC8F19275CA70074CF51 /* NptBsdResolver.cpp in Sources */, @@ -10738,6 +11607,7 @@ DF4A3BB21B4B0FC100F9CDC0 /* ApplicationMessenger.cpp in Sources */, 7CCDACC119275D790074CF51 /* NptAppleAutoreleasePool.mm in Sources */, 7CCDACCA19275D790074CF51 /* NptAppleLogConfig.mm in Sources */, + 767615641CB80720008C7A67 /* Addon_GUIControlFadeLabel.cpp in Sources */, 7CAA469019427AED00008885 /* PosixDirectory.cpp in Sources */, 42DAC16E1A6E789E0066B4C8 /* PVRActionListener.cpp in Sources */, DF033D381946612400BFC82E /* AEDeviceEnumerationOSX.cpp in Sources */, @@ -10745,6 +11615,7 @@ 7C908894196358A8003D0619 /* auto_buffer.cpp in Sources */, 7CF34D9F1930264A00D543C5 /* AudioEncoder.cpp in Sources */, 7C973CFA1B5038580002A874 /* GUIDialogAudioDSPManager.cpp in Sources */, + 767615291CB806DB008C7A67 /* Addon_File.cpp in Sources */, 7CF80DC919710DC2003B2B34 /* KeyboardLayout.cpp in Sources */, B179BD6B1AD8EA7B00EA8D49 /* InputCodingTableBaiduPY.cpp in Sources */, DFD7173B1C09FEC60025D964 /* OSXGNUReplacements.c in Sources */, @@ -10769,6 +11640,8 @@ E4991153174E5CC300741B6D /* crc.cpp in Sources */, E4991154174E5CC300741B6D /* crypt.cpp in Sources */, 68AE5BC01C9241DF00C4D527 /* DriverPrimitive.cpp in Sources */, + 76A849861CA783D600223B66 /* Addon_InfoTagMusic.cpp in Sources */, + 76A8496D1CA7836900223B66 /* Addon_GUIControlEdit.cpp in Sources */, E4991155174E5CC300741B6D /* encname.cpp in Sources */, E4991156174E5CC300741B6D /* errhnd.cpp in Sources */, E4991157174E5CC300741B6D /* extinfo.cpp in Sources */, @@ -10786,7 +11659,9 @@ E4991162174E5CC300741B6D /* log.cpp in Sources */, E4991163174E5CC300741B6D /* match.cpp in Sources */, E4991164174E5CC300741B6D /* options.cpp in Sources */, + 767615AB1CB80831008C7A67 /* Addon_GUIGeneral.cpp in Sources */, E4991165174E5CC300741B6D /* pathfn.cpp in Sources */, + 76A8497C1CA783A200223B66 /* Addon_GUIDialogOK.cpp in Sources */, E4991166174E5CC300741B6D /* rar.cpp in Sources */, E4991167174E5CC300741B6D /* rarvm.cpp in Sources */, E4991168174E5CC300741B6D /* rawread.cpp in Sources */, @@ -10835,6 +11710,7 @@ 228FA65E1C53F9D50023BBF0 /* InfoScanner.cpp in Sources */, E4991191174E5CE400741B6D /* EncoderFFmpeg.cpp in Sources */, E4991196174E5CEB00741B6D /* Exception.cpp in Sources */, + 767615B11CB8087B008C7A67 /* Addon_Directory.cpp in Sources */, E4991197174E5CEB00741B6D /* ilog.cpp in Sources */, E4991198174E5CF600741B6D /* AEEncoderFFmpeg.cpp in Sources */, E49911A6174E5CFE00741B6D /* AEBitstreamPacker.cpp in Sources */, @@ -10849,6 +11725,7 @@ E49911B2174E5D0A00741B6D /* EmuFileWrapper.cpp in Sources */, E49911B3174E5D0A00741B6D /* emu_dummy.cpp in Sources */, E49911B4174E5D0A00741B6D /* emu_kernel32.cpp in Sources */, + 767615B31CB80883008C7A67 /* Addon_General.cpp in Sources */, E49911B5174E5D0A00741B6D /* emu_msvcrt.cpp in Sources */, E49911B6174E5D0A00741B6D /* coff.cpp in Sources */, E49911B7174E5D0A00741B6D /* dll.cpp in Sources */, @@ -10875,6 +11752,7 @@ 7C8E02471BA35D0B0072E8B2 /* SystemBuiltins.cpp in Sources */, E49911CB174E5D2500741B6D /* DVDOverlayCodecTX3G.cpp in Sources */, E49911CE174E5D2500741B6D /* DVDVideoCodecFFmpeg.cpp in Sources */, + 7676159B1CB807E6008C7A67 /* Addon_GUIControlProgress.cpp in Sources */, 395C29BD1A94733100EBC7AD /* Key.cpp in Sources */, E49911D1174E5D2500741B6D /* DVDVideoPPFFmpeg.cpp in Sources */, E49911D2174E5D2E00741B6D /* DVDDemux.cpp in Sources */, @@ -10907,6 +11785,7 @@ E49911F0174E5D3E00741B6D /* DVDSubtitleParserSubrip.cpp in Sources */, E49911F1174E5D3E00741B6D /* DVDSubtitleParserVplayer.cpp in Sources */, E49911F2174E5D3E00741B6D /* DVDSubtitleStream.cpp in Sources */, + 76A849661CA7834200223B66 /* Addon_Directory.cpp in Sources */, DFEA4B581B5271FA00562321 /* ActiveAEDSPProcess.cpp in Sources */, E49911F3174E5D3E00741B6D /* DVDSubtitleTagMicroDVD.cpp in Sources */, E49911F4174E5D3E00741B6D /* DVDSubtitleTagSami.cpp in Sources */, @@ -10929,6 +11808,7 @@ E4991206174E5D4500741B6D /* Edl.cpp in Sources */, E4991207174E5D4A00741B6D /* ExternalPlayer.cpp in Sources */, 395C29FC1A9CD20C00EBC7AD /* ContextMenuManager.cpp in Sources */, + 76A849651CA7833E00223B66 /* Addon_Audio.cpp in Sources */, E499120A174E5D5A00741B6D /* AudioDecoder.cpp in Sources */, E499120B174E5D5A00741B6D /* CodecFactory.cpp in Sources */, E499120C174E5D5A00741B6D /* VideoPlayerCodec.cpp in Sources */, @@ -10976,6 +11856,7 @@ E499123F174E5D7E00741B6D /* GUIDialogMediaSource.cpp in Sources */, 76AEFB3C1C8F79D100EF2EC0 /* AddonGUIWindow.cpp in Sources */, 395C29E41A98A15700EBC7AD /* HTTPPythonHandler.cpp in Sources */, + 76A8496C1CA7836500223B66 /* Addon_GUIControlButton.cpp in Sources */, E4991241174E5D7E00741B6D /* GUIDialogNumeric.cpp in Sources */, E4991242174E5D7E00741B6D /* GUIDialogOK.cpp in Sources */, E4991243174E5D7E00741B6D /* GUIDialogPlayEject.cpp in Sources */, @@ -10988,7 +11869,9 @@ E499124A174E5D7E00741B6D /* GUIDialogSmartPlaylistRule.cpp in Sources */, E499124B174E5D7E00741B6D /* GUIDialogSubMenu.cpp in Sources */, DF56EF201A798A3F00CAAEFB /* HTTPFileHandler.cpp in Sources */, + 767615961CB807CE008C7A67 /* Addon_GUIControlButton.cpp in Sources */, E499124C174E5D7E00741B6D /* GUIDialogTextViewer.cpp in Sources */, + 76A8498A1CA783EA00223B66 /* Addon_PVR.cpp in Sources */, E499124D174E5D7E00741B6D /* GUIDialogVolumeBar.cpp in Sources */, E499124E174E5D7E00741B6D /* GUIDialogYesNo.cpp in Sources */, E499124F174E5D8F00741B6D /* AddonsDirectory.cpp in Sources */, @@ -11013,8 +11896,10 @@ E4991264174E5D8F00741B6D /* FileCache.cpp in Sources */, E4991265174E5D8F00741B6D /* FileDirectoryFactory.cpp in Sources */, E4991266174E5D8F00741B6D /* FileFactory.cpp in Sources */, + 76A849641CA7833300223B66 /* AddonInterfaceBase.cpp in Sources */, DF29BCEC1B5D911800904347 /* AddonManagementEvent.cpp in Sources */, 395C29EE1A98A16300EBC7AD /* HTTPPythonInvoker.cpp in Sources */, + 767615AA1CB8082D008C7A67 /* Addon_GUIDialogYesNo.cpp in Sources */, E4991267174E5D8F00741B6D /* FileReaderFile.cpp in Sources */, E4991268174E5D8F00741B6D /* FTPDirectory.cpp in Sources */, E4991269174E5D8F00741B6D /* FTPParse.cpp in Sources */, @@ -11024,6 +11909,7 @@ E4991273174E5D8F00741B6D /* IFile.cpp in Sources */, E4991274174E5D8F00741B6D /* ImageFile.cpp in Sources */, E4991275174E5D8F00741B6D /* iso9660.cpp in Sources */, + 76A849741CA7838600223B66 /* Addon_GUIControlSettingsSlider.cpp in Sources */, E4991276174E5D8F00741B6D /* ISO9660Directory.cpp in Sources */, 68AE5BE81C92421800C4D527 /* PeripheralAddonTranslator.cpp in Sources */, E4991277174E5D8F00741B6D /* ISOFile.cpp in Sources */, @@ -11032,6 +11918,7 @@ 76AEFB3D1C8F79D500EF2EC0 /* AddonCallbacksGUI.cpp in Sources */, E499127B174E5D8F00741B6D /* MultiPathFile.cpp in Sources */, E499127C174E5D9900741B6D /* DirectoryNode.cpp in Sources */, + 76A8497D1CA783A500223B66 /* Addon_GUIDialogProgress.cpp in Sources */, E499127D174E5D9900741B6D /* DirectoryNodeAlbum.cpp in Sources */, B5101B5919DFF8E300294D1E /* BlurayFile.cpp in Sources */, E499127E174E5D9900741B6D /* DirectoryNodeAlbumCompilations.cpp in Sources */, @@ -11044,6 +11931,7 @@ E4991283174E5D9900741B6D /* DirectoryNodeAlbumRecentlyPlayedSong.cpp in Sources */, E4991284174E5D9900741B6D /* DirectoryNodeAlbumTop100.cpp in Sources */, E4991285174E5D9900741B6D /* DirectoryNodeAlbumTop100Song.cpp in Sources */, + 767615AE1CB80867008C7A67 /* Addon_AudioEngineGeneral.cpp in Sources */, 395C2A051A9CD25100EBC7AD /* ContextItemAddonInvoker.cpp in Sources */, E4991286174E5D9900741B6D /* DirectoryNodeArtist.cpp in Sources */, DF29BCEF1B5D911800904347 /* BaseEvent.cpp in Sources */, @@ -11055,6 +11943,7 @@ E499128C174E5D9900741B6D /* DirectoryNodeSongTop100.cpp in Sources */, E499128D174E5D9900741B6D /* DirectoryNodeTop100.cpp in Sources */, E499128E174E5D9900741B6D /* DirectoryNodeYearAlbum.cpp in Sources */, + 767615921CB807BA008C7A67 /* Addon_Player.cpp in Sources */, E499128F174E5D9900741B6D /* DirectoryNodeYearSong.cpp in Sources */, E4991290174E5D9900741B6D /* QueryParams.cpp in Sources */, E4991291174E5D9900741B6D /* MusicDatabaseDirectory.cpp in Sources */, @@ -11065,6 +11954,7 @@ E4991298174E5D9900741B6D /* NFSDirectory.cpp in Sources */, E4991299174E5D9900741B6D /* NFSFile.cpp in Sources */, E499129A174E5D9900741B6D /* NptXbmcFile.cpp in Sources */, + 767615AF1CB8086A008C7A67 /* Addon_AudioEngineStream.cpp in Sources */, E499129D174E5D9900741B6D /* PipeFile.cpp in Sources */, E499129E174E5D9900741B6D /* PipesManager.cpp in Sources */, E499129F174E5D9900741B6D /* PlaylistDirectory.cpp in Sources */, @@ -11094,6 +11984,8 @@ E49912B8174E5D9900741B6D /* SpecialProtocolFile.cpp in Sources */, E49912B9174E5D9900741B6D /* StackDirectory.cpp in Sources */, E49912BC174E5D9900741B6D /* udf25.cpp in Sources */, + 76A849701CA7837500223B66 /* Addon_GUIControlLabel.cpp in Sources */, + 7676159C1CB807E9008C7A67 /* Addon_GUIControlRadioButton.cpp in Sources */, E49912BD174E5D9900741B6D /* UDFDirectory.cpp in Sources */, E49912BE174E5D9900741B6D /* UDFFile.cpp in Sources */, E49912BF174E5D9900741B6D /* UPnPDirectory.cpp in Sources */, @@ -11114,14 +12006,17 @@ E49912CA174E5DA000741B6D /* DirectoryNodeRoot.cpp in Sources */, E49912CB174E5DA000741B6D /* DirectoryNodeSeasons.cpp in Sources */, DF1D2DEE1B6E85EE002BB9DB /* XbtDirectory.cpp in Sources */, + 767615901CB807B3008C7A67 /* Addon_InfoTagMusic.cpp in Sources */, 68AE5C341C9243A000C4D527 /* ControllerTranslator.cpp in Sources */, E49912CC174E5DA000741B6D /* DirectoryNodeTitleMovies.cpp in Sources */, E49912CD174E5DA000741B6D /* DirectoryNodeTitleMusicVideos.cpp in Sources */, DFDE5D521AE5658200EE53AD /* PictureScalingAlgorithm.cpp in Sources */, E49912CE174E5DA000741B6D /* DirectoryNodeTitleTvShows.cpp in Sources */, + 767615B41CB80887008C7A67 /* Addon_Network.cpp in Sources */, E49912CF174E5DA000741B6D /* DirectoryNodeTvShowsOverview.cpp in Sources */, E49912D0174E5DA000741B6D /* QueryParams.cpp in Sources */, E49912D1174E5DA000741B6D /* VideoDatabaseDirectory.cpp in Sources */, + 76A849721CA7837D00223B66 /* Addon_GUIControlRadioButton.cpp in Sources */, E49912D2174E5DA000741B6D /* VirtualDirectory.cpp in Sources */, 68AE5BE21C92421800C4D527 /* AddonButtonMapping.cpp in Sources */, 68AE5BE01C92421800C4D527 /* AddonButtonMap.cpp in Sources */, @@ -11133,6 +12028,7 @@ E49912DD174E5DAD00741B6D /* DDSImage.cpp in Sources */, E49912DE174E5DAD00741B6D /* DirectXGraphics.cpp in Sources */, E49912DF174E5DAD00741B6D /* DirtyRegionSolvers.cpp in Sources */, + 76A849891CA783E000223B66 /* Addon_PlayList.cpp in Sources */, E49912E0174E5DAD00741B6D /* DirtyRegionTracker.cpp in Sources */, E49912E2174E5DAD00741B6D /* GraphicContext.cpp in Sources */, E49912E3174E5DAD00741B6D /* GUIAction.cpp in Sources */, @@ -11145,6 +12041,7 @@ 76AEFB3F1C8F79DC00EF2EC0 /* AddonCallbacksPVR.cpp in Sources */, E49912EA174E5DAD00741B6D /* GUIControl.cpp in Sources */, E49912EB174E5DAD00741B6D /* GUIControlFactory.cpp in Sources */, + 76A849851CA783CD00223B66 /* Addon_Peripheral.cpp in Sources */, E49912EC174E5DAD00741B6D /* GUIControlGroup.cpp in Sources */, 395C29C61A98A0E100EBC7AD /* ILanguageInvoker.cpp in Sources */, E49912ED174E5DAD00741B6D /* GUIControlGroupList.cpp in Sources */, @@ -11164,6 +12061,7 @@ E49912FA174E5DAD00741B6D /* GUIInfoTypes.cpp in Sources */, E49912FB174E5DAD00741B6D /* GUIKeyboardFactory.cpp in Sources */, E49912FC174E5DAD00741B6D /* GUILabel.cpp in Sources */, + 76A849771CA7839100223B66 /* Addon_GUIControlTextBox.cpp in Sources */, E49912FD174E5DAD00741B6D /* GUILabelControl.cpp in Sources */, E49912FE174E5DAD00741B6D /* GUIListContainer.cpp in Sources */, E49912FF174E5DAD00741B6D /* GUIListGroup.cpp in Sources */, @@ -11174,6 +12072,7 @@ E4991303174E5DAD00741B6D /* GUIMessage.cpp in Sources */, 7C8E023E1BA35D0B0072E8B2 /* ProfileBuiltins.cpp in Sources */, E4991304174E5DAD00741B6D /* GUIMoverControl.cpp in Sources */, + 76A8496A1CA7835600223B66 /* Addon_AudioEngineGeneral.cpp in Sources */, 399442751A8DD920006C39E9 /* VideoLibraryMarkWatchedJob.cpp in Sources */, E4991305174E5DAD00741B6D /* GUIMultiImage.cpp in Sources */, E4991306174E5DAD00741B6D /* GUIMultiSelectText.cpp in Sources */, @@ -11198,15 +12097,18 @@ E4991315174E5DAD00741B6D /* GUITextBox.cpp in Sources */, E4991316174E5DAD00741B6D /* GUITextLayout.cpp in Sources */, E4991317174E5DAD00741B6D /* GUITexture.cpp in Sources */, + 767615151CB8064B008C7A67 /* AddonInterfaceBase.cpp in Sources */, 395C2A121A9F072400EBC7AD /* ResourceDirectory.cpp in Sources */, E4991318174E5DAD00741B6D /* GUITextureD3D.cpp in Sources */, E4991319174E5DAD00741B6D /* GUITextureGL.cpp in Sources */, + 7676159E1CB807FA008C7A67 /* Addon_GUIControlSettingsSlider.cpp in Sources */, E499131A174E5DAD00741B6D /* GUITextureGLES.cpp in Sources */, 2AFBB94D1CC608A200BAB340 /* GUIEPGGridContainerModel.cpp in Sources */, E499131B174E5DAD00741B6D /* GUIToggleButtonControl.cpp in Sources */, 7C4B64A41C86F6D8000E1F74 /* InputStream.cpp in Sources */, E499131C174E5DAD00741B6D /* GUIVideoControl.cpp in Sources */, E499131D174E5DAD00741B6D /* GUIVisualisationControl.cpp in Sources */, + 7676159D1CB807EC008C7A67 /* Addon_GUIControlRendering.cpp in Sources */, E499131E174E5DAD00741B6D /* GUIWindow.cpp in Sources */, E499131F174E5DAD00741B6D /* GUIWindowManager.cpp in Sources */, 2F4564D61970129A00396109 /* GUIFontCache.cpp in Sources */, @@ -11216,8 +12118,10 @@ E4991322174E5DAD00741B6D /* IWindowManagerCallback.cpp in Sources */, E4991325174E5DAD00741B6D /* LocalizeStrings.cpp in Sources */, 7C8E024A1BA35D0B0072E8B2 /* WeatherBuiltins.cpp in Sources */, + 76A849681CA7834900223B66 /* Addon_General.cpp in Sources */, 2AC7EB5D1C2330BC00BDAA95 /* GUIWindowPVRTimersBase.cpp in Sources */, E4991326174E5DAD00741B6D /* MatrixGLES.cpp in Sources */, + 767615A91CB80827008C7A67 /* Addon_GUIDialogTextViewer.cpp in Sources */, E4991327174E5DAD00741B6D /* Shader.cpp in Sources */, E4991328174E5DAD00741B6D /* Texture.cpp in Sources */, E4991329174E5DAD00741B6D /* TextureBundle.cpp in Sources */, @@ -11248,9 +12152,11 @@ DFD717601C0A031B0025D964 /* IOSScreenManager.mm in Sources */, E4991357174E5EBE00741B6D /* JSONServiceDescription.cpp in Sources */, E4991358174E5EBE00741B6D /* PlayerOperations.cpp in Sources */, + 76A849761CA7838D00223B66 /* Addon_GUIControlSpin.cpp in Sources */, E4991359174E5EBE00741B6D /* PlaylistOperations.cpp in Sources */, E499135A174E5EBE00741B6D /* PVROperations.cpp in Sources */, 395C29DF1A98A11C00EBC7AD /* WsgiResponseBody.cpp in Sources */, + 76A849711CA7837800223B66 /* Addon_GUIControlProgress.cpp in Sources */, E499135B174E5EBE00741B6D /* SystemOperations.cpp in Sources */, E499135C174E5EBE00741B6D /* VideoLibrary.cpp in Sources */, E499135D174E5EBE00741B6D /* XBMCOperations.cpp in Sources */, @@ -11290,6 +12196,7 @@ 68AE5BF81C92431300C4D527 /* EventScanRate.cpp in Sources */, DF54F8041B6580C8000FCBA4 /* ContextMenuAddon.cpp in Sources */, E4991388174E5F0E00741B6D /* MusicInfoTag.cpp in Sources */, + 767615A31CB8080B008C7A67 /* Addon_GUIDialogFileBrowser.cpp in Sources */, E499138A174E5F0E00741B6D /* MusicInfoTagLoaderCDDA.cpp in Sources */, E499138B174E5F0E00741B6D /* MusicInfoTagLoaderDatabase.cpp in Sources */, E499138C174E5F0E00741B6D /* MusicInfoTagLoaderFactory.cpp in Sources */, @@ -11302,6 +12209,7 @@ E4991398174E5F0E00741B6D /* GUIWindowMusicPlaylistEditor.cpp in Sources */, E499139A174E5F0E00741B6D /* GUIWindowVisualisation.cpp in Sources */, E499139B174E5F0E00741B6D /* Album.cpp in Sources */, + 76A8497A1CA7839A00223B66 /* Addon_GUIDialogKeyboard.cpp in Sources */, E499139C174E5F0E00741B6D /* Artist.cpp in Sources */, 68AE5C0E1C92437900C4D527 /* GUIFeatureList.cpp in Sources */, E499139D174E5F0E00741B6D /* GUIViewStateMusic.cpp in Sources */, @@ -11339,6 +12247,7 @@ E49913B7174E5F3C00741B6D /* AirTunesServer.cpp in Sources */, E49913B8174E5F3C00741B6D /* cddb.cpp in Sources */, 39BD2AD91B845D40004A5A15 /* DialogHelper.cpp in Sources */, + 76A8498B1CA783F200223B66 /* ExceptionHandling.cpp in Sources */, E49913B9174E5F3C00741B6D /* DNSNameCache.cpp in Sources */, E49913BA174E5F3C00741B6D /* EventClient.cpp in Sources */, E49913BB174E5F3C00741B6D /* EventPacket.cpp in Sources */, @@ -11350,11 +12259,13 @@ E49913C1174E5F3C00741B6D /* Socket.cpp in Sources */, E49913C2174E5F3C00741B6D /* TCPServer.cpp in Sources */, E49913C3174E5F3C00741B6D /* UdpClient.cpp in Sources */, + 767615A11CB80803008C7A67 /* Addon_GUIControlTextBox.cpp in Sources */, DFEB902919E9337200728978 /* AEResampleFactory.cpp in Sources */, E49913C4174E5F3C00741B6D /* WakeOnAccess.cpp in Sources */, E49913C5174E5F3C00741B6D /* WebServer.cpp in Sources */, E49913C6174E5F3C00741B6D /* Zeroconf.cpp in Sources */, E49913C7174E5F3C00741B6D /* ZeroconfBrowser.cpp in Sources */, + 7676159A1CB807E2008C7A67 /* Addon_GUIControlLabel.cpp in Sources */, E49913C8174E5F7500741B6D /* PeripheralBusUSB.cpp in Sources */, E49913C9174E5F7500741B6D /* PeripheralBus.cpp in Sources */, E49913CA174E5F8100741B6D /* Peripheral.cpp in Sources */, @@ -11363,7 +12274,9 @@ E49913CC174E5F8100741B6D /* PeripheralCecAdapter.cpp in Sources */, E49913CD174E5F8100741B6D /* PeripheralDisk.cpp in Sources */, 76AEFB371C8F79C100EF2EC0 /* AddonCallbacksAddon.cpp in Sources */, + 767615981CB807DB008C7A67 /* Addon_GUIControlFadeLabel.cpp in Sources */, E49913CE174E5F8100741B6D /* PeripheralHID.cpp in Sources */, + 76A849821CA783B900223B66 /* Addon_GUIListItem.cpp in Sources */, E49913CF174E5F8100741B6D /* PeripheralImon.cpp in Sources */, E49913D0174E5F8100741B6D /* PeripheralNIC.cpp in Sources */, E49913D1174E5F8100741B6D /* PeripheralNyxboard.cpp in Sources */, @@ -11377,10 +12290,13 @@ E49913D8174E5F8D00741B6D /* GUIWindowPictures.cpp in Sources */, E49913D9174E5F8D00741B6D /* GUIWindowSlideShow.cpp in Sources */, E49913DA174E5F8D00741B6D /* Picture.cpp in Sources */, + 76A8497E1CA783A900223B66 /* Addon_GUIDialogSelect.cpp in Sources */, 7C2ED53E1C7F7A9800C04032 /* ProcessInfo.cpp in Sources */, E49913DB174E5F8D00741B6D /* PictureInfoLoader.cpp in Sources */, + 767615A71CB8081F008C7A67 /* Addon_GUIDialogProgress.cpp in Sources */, E49913DC174E5F8D00741B6D /* PictureInfoTag.cpp in Sources */, 68AE5BBE1C9241DF00C4D527 /* DefaultJoystick.cpp in Sources */, + 767615A41CB80811008C7A67 /* Addon_GUIDialogKeyboard.cpp in Sources */, E49913DD174E5F8D00741B6D /* PictureThumbLoader.cpp in Sources */, E49913DE174E5F8D00741B6D /* SlideShowPicture.cpp in Sources */, E49913DF174E5F8D00741B6D /* PlayList.cpp in Sources */, @@ -11389,6 +12305,7 @@ DF396ED41C42A25F00214C1A /* DictionaryUtils.mm in Sources */, E49913E2174E5F8D00741B6D /* PlayListM3U.cpp in Sources */, E49913E3174E5F8D00741B6D /* PlayListPLS.cpp in Sources */, + 767615951CB807C9008C7A67 /* Addon_InputStream.cpp in Sources */, E49913E4174E5F8D00741B6D /* PlayListURL.cpp in Sources */, E49913E5174E5F8D00741B6D /* PlayListWPL.cpp in Sources */, E49913E6174E5F8D00741B6D /* PlayListXML.cpp in Sources */, @@ -11396,6 +12313,7 @@ E49913E8174E5F9900741B6D /* CocoaPowerSyscall.cpp in Sources */, E49913E9174E5F9900741B6D /* DPMSSupport.cpp in Sources */, E49913EA174E5F9900741B6D /* PowerManager.cpp in Sources */, + 767615AD1CB80839008C7A67 /* Addon_GUIWindow.cpp in Sources */, E49913EB174E5FB000741B6D /* GUIDialogLockSettings.cpp in Sources */, E49913EC174E5FB000741B6D /* GUIDialogProfileSettings.cpp in Sources */, E49913ED174E5FB000741B6D /* GUIWindowSettingsProfile.cpp in Sources */, @@ -11403,6 +12321,7 @@ E49913EF174E5FB000741B6D /* ProfilesManager.cpp in Sources */, E49913F0174E5FB000741B6D /* GUIViewStatePrograms.cpp in Sources */, 7C8E023B1BA35D0B0072E8B2 /* PlayerBuiltins.cpp in Sources */, + 767615941CB807C3008C7A67 /* Addon_Peripheral.cpp in Sources */, E49913F1174E5FB000741B6D /* GUIWindowPrograms.cpp in Sources */, E49913F3174E5FB000741B6D /* PVRClients.cpp in Sources */, E49913F4174E5FB000741B6D /* PVRChannel.cpp in Sources */, @@ -11424,6 +12343,7 @@ E4991405174E5FB900741B6D /* PVRTimerInfoTag.cpp in Sources */, E4991406174E5FB900741B6D /* PVRTimers.cpp in Sources */, E4991407174E5FB900741B6D /* GUIViewStatePVR.cpp in Sources */, + 767615991CB807DF008C7A67 /* Addon_GUIControlImage.cpp in Sources */, DF0E4AD01AD5984600A75430 /* PVRRadioRDSInfoTag.cpp in Sources */, E4991408174E5FB900741B6D /* GUIWindowPVRBase.cpp in Sources */, E4991409174E5FB900741B6D /* GUIWindowPVRChannels.cpp in Sources */, @@ -11439,6 +12359,7 @@ DFD7173A1C09FEC60025D964 /* DarwinUtils.mm in Sources */, E4991415174E5FF000741B6D /* RenderSystemGLES.cpp in Sources */, E4991416174E602700741B6D /* RenderSystem.cpp in Sources */, + 76A849811CA783B500223B66 /* Addon_GUIGeneral.cpp in Sources */, E4991417174E603C00741B6D /* GUIControlSettings.cpp in Sources */, E4991418174E603C00741B6D /* GUIDialogContentSettings.cpp in Sources */, E499141A174E603C00741B6D /* GUIWindowSettings.cpp in Sources */, @@ -11446,6 +12367,7 @@ E499141B174E603C00741B6D /* GUIWindowSettingsCategory.cpp in Sources */, E499141C174E603C00741B6D /* GUIWindowSettingsScreenCalibration.cpp in Sources */, E499141D174E603C00741B6D /* GUIWindowTestPattern.cpp in Sources */, + 76A849731CA7838300223B66 /* Addon_GUIControlRendering.cpp in Sources */, E499141E174E603C00741B6D /* AdvancedSettings.cpp in Sources */, E499141F174E603C00741B6D /* DisplaySettings.cpp in Sources */, E4991421174E603C00741B6D /* MediaSettings.cpp in Sources */, @@ -11463,11 +12385,13 @@ 399442721A8DD920006C39E9 /* VideoLibraryJob.cpp in Sources */, E4991433174E604300741B6D /* cdioSupport.cpp in Sources */, E4991434174E604300741B6D /* DetectDVDType.cpp in Sources */, + 76A8496B1CA7835E00223B66 /* Addon_AudioEngineStream.cpp in Sources */, E4991435174E604300741B6D /* IoSupport.cpp in Sources */, E4991436174E604300741B6D /* MediaManager.cpp in Sources */, 68AE5BC21C9241DF00C4D527 /* JoystickMonitor.cpp in Sources */, E4991437174E604700741B6D /* Implementation.cpp in Sources */, E4991438174E604700741B6D /* Atomics.cpp in Sources */, + 76A849751CA7838900223B66 /* Addon_GUIControlSlider.cpp in Sources */, E4991439174E604700741B6D /* Event.cpp in Sources */, E499143B174E604700741B6D /* SystemClock.cpp in Sources */, E499143C174E604700741B6D /* Thread.cpp in Sources */, @@ -11476,6 +12400,7 @@ 399442781A8DD920006C39E9 /* VideoLibraryProgressJob.cpp in Sources */, DF4BF01E1A4EF3410053AC56 /* DVDDemuxCC.cpp in Sources */, E499143F174E605900741B6D /* AliasShortcutUtils.cpp in Sources */, + 7676159F1CB807FD008C7A67 /* Addon_GUIControlSlider.cpp in Sources */, E4991440174E605900741B6D /* Archive.cpp in Sources */, E4991441174E605900741B6D /* AsyncFileCopy.cpp in Sources */, E4991443174E605900741B6D /* Base64.cpp in Sources */, @@ -11484,6 +12409,7 @@ E4991446174E605900741B6D /* BooleanLogic.cpp in Sources */, E4991447174E605900741B6D /* CharsetConverter.cpp in Sources */, E4991448174E605900741B6D /* CPUInfo.cpp in Sources */, + 76A849671CA7834600223B66 /* Addon_File.cpp in Sources */, E4991449174E605900741B6D /* Crc32.cpp in Sources */, E499144A174E605900741B6D /* CryptThreading.cpp in Sources */, E499144B174E605900741B6D /* DatabaseUtils.cpp in Sources */, @@ -11493,6 +12419,7 @@ E4991453174E605900741B6D /* FileUtils.cpp in Sources */, E4991454174E605900741B6D /* GLUtils.cpp in Sources */, 7CAA57481C8AF6C20032A326 /* DebugRenderer.cpp in Sources */, + 76A849871CA783DA00223B66 /* Addon_InfoTagVideo.cpp in Sources */, E4991455174E605900741B6D /* GroupUtils.cpp in Sources */, E4991457174E605900741B6D /* HTMLUtil.cpp in Sources */, E4991458174E605900741B6D /* HttpHeader.cpp in Sources */, @@ -11532,6 +12459,8 @@ E4991476174E605900741B6D /* StreamUtils.cpp in Sources */, E4991477174E605900741B6D /* StringUtils.cpp in Sources */, E4991478174E605900741B6D /* SystemInfo.cpp in Sources */, + 767615B01CB80877008C7A67 /* Addon_Audio.cpp in Sources */, + 76A849691CA7834D00223B66 /* Addon_Network.cpp in Sources */, E4991479174E605900741B6D /* TextSearch.cpp in Sources */, E499147B174E605900741B6D /* TimeUtils.cpp in Sources */, E499147D174E605900741B6D /* URIUtils.cpp in Sources */, @@ -11544,6 +12473,7 @@ E4991482174E605900741B6D /* XMLUtils.cpp in Sources */, E4991483174E606500741B6D /* GUIDialogAudioSubtitleSettings.cpp in Sources */, E4991485174E606500741B6D /* GUIDialogFullScreenInfo.cpp in Sources */, + 76A8498C1CA783F600223B66 /* AddonInterfaceManager.cpp in Sources */, E4991486174E606500741B6D /* GUIDialogTeletext.cpp in Sources */, 5EE4F9181A9FF36F002E20F8 /* CueInfoLoader.cpp in Sources */, E4991487174E606500741B6D /* GUIDialogVideoBookmarks.cpp in Sources */, @@ -11578,6 +12508,7 @@ 7CE3FB8D1C9D3CCA00366A4C /* ServiceManager.cpp in Sources */, 7CCA95CD1BC6E71D0091D308 /* GLSLOutput.cpp in Sources */, E49914A2174E607200741B6D /* GUIMediaWindow.cpp in Sources */, + 76A849791CA7839700223B66 /* Addon_GUIDialogFileBrowser.cpp in Sources */, E49914A3174E607200741B6D /* GUIWindowDebugInfo.cpp in Sources */, E49914A4174E607200741B6D /* GUIWindowFileManager.cpp in Sources */, 399442801A8DD96F006C39E9 /* VideoLibraryQueue.cpp in Sources */, @@ -11600,6 +12531,7 @@ E4991530174E642900741B6D /* AutoSwitch.cpp in Sources */, E4991531174E642900741B6D /* BackgroundInfoLoader.cpp in Sources */, E4991532174E642900741B6D /* CueDocument.cpp in Sources */, + 767615A01CB80801008C7A67 /* Addon_GUIControlSpin.cpp in Sources */, E4991533174E642900741B6D /* DatabaseManager.cpp in Sources */, E4991534174E642900741B6D /* DbUrl.cpp in Sources */, E4991535174E642900741B6D /* DynamicDll.cpp in Sources */, @@ -11615,6 +12547,7 @@ E499153E174E642900741B6D /* PartyModeManager.cpp in Sources */, E499153F174E642900741B6D /* PasswordManager.cpp in Sources */, 7C8E021A1BA35D0B0072E8B2 /* AddonBuiltins.cpp in Sources */, + 76A849801CA783B100223B66 /* Addon_GUIDialogYesNo.cpp in Sources */, E4991540174E642900741B6D /* PlayListPlayer.cpp in Sources */, E4991541174E642900741B6D /* SectionLoader.cpp in Sources */, E4991542174E642900741B6D /* SystemGlobals.cpp in Sources */, @@ -11623,6 +12556,7 @@ E4991545174E642900741B6D /* TextureCacheJob.cpp in Sources */, E4991546174E642900741B6D /* TextureDatabase.cpp in Sources */, E4991547174E642900741B6D /* ThumbLoader.cpp in Sources */, + 76A849781CA7839400223B66 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */, E4991548174E642900741B6D /* ThumbnailCache.cpp in Sources */, E4991549174E642900741B6D /* URL.cpp in Sources */, 7CED59411CD343260093F573 /* RendererVTBGLES.cpp in Sources */, @@ -11642,6 +12576,7 @@ E4991557174E656E00741B6D /* Dialog.cpp in Sources */, DFEA4B521B5271EE00562321 /* ActiveAEDSPAddon.cpp in Sources */, E4991558174E656E00741B6D /* File.cpp in Sources */, + 76A849841CA783C600223B66 /* Addon_InputStream.cpp in Sources */, E4991559174E656E00741B6D /* InfoTagMusic.cpp in Sources */, E499155A174E656E00741B6D /* InfoTagVideo.cpp in Sources */, 7CEE587E1B5A3FFB007C2B5A /* AudioDSPSettings.cpp in Sources */, @@ -11683,6 +12618,7 @@ DF40BC2B178B4C07009DB567 /* ScriptInvocationManager.cpp in Sources */, DF02BA621A910623006DCA16 /* VideoSyncIos.cpp in Sources */, F55BA70B17AB2264002A36D1 /* StereoscopicsManager.cpp in Sources */, + 767615971CB807D7008C7A67 /* Addon_GUIControlEdit.cpp in Sources */, F55BA71017AB2293002A36D1 /* RenderFlags.cpp in Sources */, F59EED7F17AD5174005BB7C6 /* ApplicationPlayer.cpp in Sources */, DF28DF4E17B8379E0077F41A /* ProfilesOperations.cpp in Sources */, @@ -11701,13 +12637,16 @@ 7C26126D182068660086E04D /* SettingsOperations.cpp in Sources */, 7C7BCDC817727951004842FB /* IListProvider.cpp in Sources */, 7C7BCDCA17727951004842FB /* StaticProvider.cpp in Sources */, + 7676158F1CB807A9008C7A67 /* Addon_PVR.cpp in Sources */, 7C8FC6EF1829A4580045153D /* DirectoryProvider.cpp in Sources */, + 76A8496E1CA7836E00223B66 /* Addon_GUIControlFadeLabel.cpp in Sources */, 7C4E6F731829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */, 7C14098A183224B8009F9411 /* ISetting.cpp in Sources */, 7C14098D183224B8009F9411 /* ISettingControl.cpp in Sources */, 7C140990183224B8009F9411 /* Setting.cpp in Sources */, 7C140993183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */, 7C140996183224B8009F9411 /* SettingConditions.cpp in Sources */, + 767615A61CB8081B008C7A67 /* Addon_GUIDialogOK.cpp in Sources */, 7C140999183224B8009F9411 /* SettingDependency.cpp in Sources */, 7C14099C183224B8009F9411 /* SettingRequirement.cpp in Sources */, 7C14099F183224B8009F9411 /* SettingSection.cpp in Sources */, @@ -11727,6 +12666,7 @@ F5CC2303181500B1006B5E91 /* EndianSwap.cpp in Sources */, F5CC230C18150118006B5E91 /* AESinkFactory.cpp in Sources */, F5CC234718150277006B5E91 /* AESinkNULL.cpp in Sources */, + 76A8497F1CA783AC00223B66 /* Addon_GUIDialogTextViewer.cpp in Sources */, DF374B2418AC2BA20076B514 /* CoreAudioHelpers.cpp in Sources */, 7CF0504C190A1D7200222135 /* FFmpeg.cpp in Sources */, 7CF05057191195DA00222135 /* MediaType.cpp in Sources */, @@ -11737,6 +12677,7 @@ 76AEFB3A1C8F79CA00EF2EC0 /* AddonCallbacksCodec.cpp in Sources */, 7CC7B6C1191869EA00DDB120 /* SettingCreator.cpp in Sources */, 7CC7B6C4191869EA00DDB120 /* SettingUtils.cpp in Sources */, + 767615AC1CB80835008C7A67 /* Addon_GUIListItem.cpp in Sources */, 7CC7B6C919186A8800DDB120 /* SettingConditions.cpp in Sources */, 42E2E1CA1B53F74D005C7E4E /* VideoLibraryRefreshingJob.cpp in Sources */, DF5E699B1B28121E009A88C3 /* PVRTimerType.cpp in Sources */, @@ -11749,6 +12690,7 @@ DFD7173C1C09FEC60025D964 /* OSXGNUReplacements.c in Sources */, 7CCDA112192753E30074CF51 /* PltDeviceData.cpp in Sources */, DFEA4B501B5271EB00562321 /* ActiveAEDSP.cpp in Sources */, + 76A8497B1CA7839D00223B66 /* Addon_GUIDialogNumeric.cpp in Sources */, 7CCDA11B192753E30074CF51 /* PltDeviceHost.cpp in Sources */, 7CCDA124192753E30074CF51 /* PltEvent.cpp in Sources */, 7CCDA12D192753E30074CF51 /* PltHttp.cpp in Sources */, @@ -11776,6 +12718,7 @@ 7CCDA1BB192753E30074CF51 /* AVTransportSCPD.cpp in Sources */, 7CCDA1C8192753E30074CF51 /* PltMediaController.cpp in Sources */, 7CCDA1D1192753E30074CF51 /* PltMediaRenderer.cpp in Sources */, + 767615911CB807B7008C7A67 /* Addon_InfoTagVideo.cpp in Sources */, 7CCDA1DC192753E30074CF51 /* RdrConnectionManagerSCPD.cpp in Sources */, 7CCDA1E7192753E30074CF51 /* RenderingControlSCPD.cpp in Sources */, 7C8E02381BA35D0B0072E8B2 /* PictureBuiltins.cpp in Sources */, @@ -11799,6 +12742,7 @@ 7CCDA798192756250074CF51 /* NptCommon.cpp in Sources */, 7CCDA7A1192756250074CF51 /* NptConsole.cpp in Sources */, 7CCDA7A4192756250074CF51 /* NptCrypto.cpp in Sources */, + 767615A51CB80817008C7A67 /* Addon_GUIDialogNumeric.cpp in Sources */, 7CCDA7A7192756250074CF51 /* NptDataBuffer.cpp in Sources */, 68AE5BA61C92412900C4D527 /* AddonCallbacksPeripheral.cpp in Sources */, 7CCDA7B0192756250074CF51 /* NptDebug.cpp in Sources */, @@ -11816,6 +12760,7 @@ 7CCDA7E9192756250074CF51 /* NptMessaging.cpp in Sources */, 7CCDA7F2192756250074CF51 /* NptNetwork.cpp in Sources */, 7CCDA7FB192756250074CF51 /* NptQueue.cpp in Sources */, + 767615A21CB80807008C7A67 /* Addon_GUIDialogExtendedProgressBar.cpp in Sources */, 3961C43A1ABC0A46002DBBFB /* UISoundsResource.cpp in Sources */, 7CCDA804192756250074CF51 /* NptResults.cpp in Sources */, 7CCDA807192756250074CF51 /* NptRingBuffer.cpp in Sources */, @@ -11829,17 +12774,21 @@ 9ABFE7A21C972D60002F1318 /* ContextMenus.cpp in Sources */, 7CCDA846192756250074CF51 /* NptTime.cpp in Sources */, 7CCDA84F192756250074CF51 /* NptTls.cpp in Sources */, + 76A849881CA783DD00223B66 /* Addon_Player.cpp in Sources */, 7CCDA852192756250074CF51 /* NptUri.cpp in Sources */, 7CCDA85B192756250074CF51 /* NptUtils.cpp in Sources */, 68AE5C201C92438E00C4D527 /* GUIGameController.cpp in Sources */, 7CCDA864192756250074CF51 /* NptXml.cpp in Sources */, + 76A849831CA783BD00223B66 /* Addon_GUIWindow.cpp in Sources */, 7CCDA86D192756250074CF51 /* NptZip.cpp in Sources */, B5011E4219AF3B56005ADF89 /* PosixFile.cpp in Sources */, 7CCDAA83192756250074CF51 /* NptPosixDynamicLibraries.cpp in Sources */, 7C8E02351BA35D0B0072E8B2 /* OpticalBuiltins.cpp in Sources */, 7CCDAA86192756250074CF51 /* NptPosixEnvironment.cpp in Sources */, 7CCDAA8C192756250074CF51 /* NptPosixNetwork.cpp in Sources */, + 767615B21CB8087F008C7A67 /* Addon_File.cpp in Sources */, 7CCDAA8F192756250074CF51 /* NptPosixQueue.cpp in Sources */, + 767615A81CB80823008C7A67 /* Addon_GUIDialogSelect.cpp in Sources */, 7CCDAA98192756250074CF51 /* NptPosixSystem.cpp in Sources */, 7CCDAAA1192756250074CF51 /* NptPosixThreads.cpp in Sources */, 7CCDAAAA192756250074CF51 /* NptPosixTime.cpp in Sources */, @@ -11857,10 +12806,12 @@ 7C525DF6195E2D8100BE3482 /* SaveFileStateJob.cpp in Sources */, 7C908895196358A8003D0619 /* auto_buffer.cpp in Sources */, 7CF34DA01930264A00D543C5 /* AudioEncoder.cpp in Sources */, + 767615931CB807BE008C7A67 /* Addon_PlayList.cpp in Sources */, 395C29F71A98B44B00EBC7AD /* AddonModuleXbmcwsgi.cpp in Sources */, 7CF80DCA19710DC2003B2B34 /* KeyboardLayout.cpp in Sources */, B179BD6C1AD8EA7B00EA8D49 /* InputCodingTableBaiduPY.cpp in Sources */, B179BD6F1AD8EA7B00EA8D49 /* InputCodingTableBasePY.cpp in Sources */, + 76A8496F1CA7837100223B66 /* Addon_GUIControlImage.cpp in Sources */, B179BD721AD8EA7B00EA8D49 /* InputCodingTableFactory.cpp in Sources */, 7CCA95C91BC6E6F90091D308 /* Resolution.cpp in Sources */, ); diff --git a/Makefile.in b/Makefile.in index 957fb92a09..f6b8cdd5b4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,6 +25,7 @@ VideoPlayer_ARCHIVES=xbmc/cores/VideoPlayer/VideoPlayer.a \ DIRECTORY_ARCHIVES=$(VideoPlayer_ARCHIVES) \ xbmc/addons/addons.a \ + xbmc/addons/binary/addon-manager.a \ xbmc/addons/binary/interfaces/addon-interfaces.a \ xbmc/addons/binary/interfaces/api1/Addon/addon-callbacks-addon.a \ xbmc/addons/binary/interfaces/api1/AudioDSP/addon-callbacks-audiodsp.a \ @@ -34,6 +35,14 @@ DIRECTORY_ARCHIVES=$(VideoPlayer_ARCHIVES) \ xbmc/addons/binary/interfaces/api1/InputStream/addon-callbacks-inputstream.a \ xbmc/addons/binary/interfaces/api1/Peripheral/addon-callbacks-peripheral.a \ xbmc/addons/binary/interfaces/api1/PVR/addon-callbacks-pvr.a \ + xbmc/addons/binary/interfaces/api2/addon-interface-base.a \ + xbmc/addons/binary/interfaces/api2/Addon/addon-interface-addon.a \ + xbmc/addons/binary/interfaces/api2/AudioEngine/addon-interface-audioengine.a \ + xbmc/addons/binary/interfaces/api2/GUI/addon-interface-gui.a \ + xbmc/addons/binary/interfaces/api2/InputStream/addon-interface-inputstream.a \ + xbmc/addons/binary/interfaces/api2/PVR/addon-interface-pvr.a \ + xbmc/addons/binary/interfaces/api2/Peripheral/addon-interface-peripheral.a \ + xbmc/addons/binary/interfaces/api2/Player/addon-interface-player.a \ xbmc/contrib/kissfft/kissfft.a \ xbmc/cores/AudioEngine/audioengine.a \ xbmc/cores/DllLoader/dllloader.a \ @@ -342,6 +351,8 @@ libaddon: exports $(MAKE) -C lib/addons/library.kodi.peripheral $(MAKE) -C lib/addons/library.xbmc.pvr $(MAKE) -C lib/addons/library.kodi.inputstream +addon-dev-kit: + $(MAKE) -C xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary dvdpcodecs: dllloader $(MAKE) -C lib/libdvd @@ -362,10 +373,10 @@ codecs: dvdpcodecs dvdpextcodecs libs: $(LIBSSE4) libexif system/libcpluff-@ARCH@.so -externals: codecs libs libaddon +externals: codecs libs libaddon addon-dev-kit xcode_depends: \ - codecs libs eventclients skins libaddon + codecs libs eventclients skins libaddon addon-dev-kit DYNOBJSXBMC= \ xbmc/linux/linux.a \ @@ -419,8 +430,10 @@ DIRS= $(BIN_DIRS) $(EC_DIRS) $(DVDPCODECS_DIRS) \ $(NWAOBJSXBMC) $(DIRECTORY_ARCHIVES) $(MAINOBJS): force @$(MAKE) $(if $(V),,-s) -C $(@D) -# Binary Addon bindings +# Binary Addon bindings from kodi itself include xbmc/addons/addon-bindings.mk +# Binary Addon bindings from development kit +include xbmc/addons/addon-dev-kit-bindings.mk lib@APP_NAME_LC@.so: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS) ifeq ($(findstring osx,@ARCH@), osx) @@ -498,6 +511,7 @@ else @find -L addons -regextype posix-extended -type f -not -iregex ".*\.git.*" -iregex ".*\.so|.*\.so\.[0-9].*" -exec cp -d "{}" $(DESTDIR)$(libdir)/@APP_NAME_LC@/"{}" \; -printf " -- %-75.75f\r" endif endif + @install -m 0644 xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary/libkodi.addon.sharedlibrary.api2.a $(DESTDIR)$(libdir)/libkodi.addon.sharedlibrary.api2.a install-scripts: @install -d $(DESTDIR)$(bindir) @@ -566,6 +580,12 @@ endif @install -m 0644 $(BINDINGS) $(DESTDIR)$(includedir)/@APP_NAME_LC@ @install -d $(DESTDIR)$(libdir)/@APP_NAME_LC@ @install -m 0644 project/cmake/*.cmake project/cmake/scripts/common/*.cmake $(DESTDIR)$(libdir)/@APP_NAME_LC@ + @for d in $(BINDINGS_DIR); do \ + install -d $(DESTDIR)$(includedir)/@APP_NAME_LC@/$$d; \ + (find xbmc/addons/kodi-addon-dev-kit/include/kodi/$$d -maxdepth 1 -not -type d -type f -exec install -m 0644 "{}" $(DESTDIR)$(includedir)/@APP_NAME_LC@/$$d \;) \ + done + @install -m 0644 xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary/kodi-addon-sharedlibrary-api2-config.cmake $(DESTDIR)$(libdir)/@APP_NAME_LC@; + @install -m 0644 xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary/kodi-addon-sharedlibrary-api2.pc $(DESTDIR)$(libdir)/pkgconfig; @cd $(DESTDIR)$(includedir); [ -L xbmc ] || [ -d xbmc ] || ln -s @APP_NAME_LC@ xbmc uninstall: @@ -575,7 +595,9 @@ uninstall: @rm -rf $(DESTDIR)$(bindir)/@APP_NAME_LC@-standalone @rm -rf $(DESTDIR)$(datarootdir)/xsessions/@APP_NAME_LC@.desktop @rm -rf $(libdir)/lib@APP_NAME_LC@_* + @rm -rf $(libdir)/lib@APP_NAME_LC@.addon.* @rm -rf $(prefix)/include/@APP_NAME_LC@ + @rm -rf $(libdir)/pkgconfig/@APP_NAME_LC@-addon-* @echo "Done!" clean-@APP_NAME_LC@.bin: @@ -589,6 +611,7 @@ clean-libs: for d in $(LIB_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done clean-libaddons: for d in $(LIBADDON_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done + $(MAKE) -C xbmc/addons/kodi-addon-dev-kit/build clean clean-codecs: clean-dvdpcodecs diff --git a/configure.ac b/configure.ac index 8b330b0ceb..5b78c77b2c 100644 --- a/configure.ac +++ b/configure.ac @@ -2133,7 +2133,18 @@ OUTPUT_FILES="Makefile \ addons/skin.estuary/media/Makefile \ addons/skin.estouchy/media/Makefile \ xbmc/Makefile \ + xbmc/addons/binary/Makefile \ xbmc/addons/binary/interfaces/Makefile \ + xbmc/addons/binary/interfaces/api2/Makefile \ + xbmc/addons/binary/interfaces/api2/Addon/Makefile \ + xbmc/addons/binary/interfaces/api2/AudioEngine/Makefile \ + xbmc/addons/binary/interfaces/api2/GUI/Makefile \ + xbmc/addons/binary/interfaces/api2/InputStream/Makefile \ + xbmc/addons/binary/interfaces/api2/PVR/Makefile \ + xbmc/addons/binary/interfaces/api2/Peripheral/Makefile \ + xbmc/addons/binary/interfaces/api2/Player/Makefile \ + xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary/kodi-addon-sharedlibrary-api2-config.cmake \ + xbmc/addons/kodi-addon-dev-kit/src/api2/kodi-addon-sharedlibrary/kodi-addon-sharedlibrary-api2.pc \ xbmc/cdrip/Makefile \ xbmc/cores/Makefile \ xbmc/cores/VideoPlayer/VideoRenderers/Makefile \ diff --git a/project/VS2010Express/XBMC for Windows.sln b/project/VS2010Express/XBMC for Windows.sln index e2c0c6584a..66aab64966 100644 --- a/project/VS2010Express/XBMC for Windows.sln +++ b/project/VS2010Express/XBMC for Windows.sln @@ -43,6 +43,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libKODI_inputstream", "..\. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libKODI_peripheral", "..\..\lib\addons\library.kodi.peripheral\project\VS2010Express\libKODI_peripheral.vcxproj", "{FEA71D39-CB68-486B-A978-246E661A3F89}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kodiAddonDevKit-SharedLib-API2", "kodiAddonDevKit-SharedLib-API2.vcxproj", "{2F638D9E-F398-11E5-9CE9-5E5517507C66}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kodiAddonDevKit-SharedLib-API3", "kodiAddonDevKit-SharedLib-API3.vcxproj", "{56B73802-353A-47B8-9DFF-F5F6ABB2B212}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug Testsuite|Win32 = Debug Testsuite|Win32 @@ -74,12 +78,6 @@ Global {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Debug|Win32.Build.0 = Debug (DLL)|Win32 {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release|Win32.ActiveCfg = Release (DLL)|Win32 {AD20A3E2-09CB-42DB-9A70-27F7CDC886CE}.Release|Win32.Build.0 = Release (DLL)|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug Testsuite|Win32.Build.0 = Debug|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug|Win32.ActiveCfg = Debug|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Debug|Win32.Build.0 = Debug|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release|Win32.ActiveCfg = Release|Win32 - {6A8518C3-D81A-4428-BD7F-C37933088AC1}.Release|Win32.Build.0 = Release|Win32 {88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32 {88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug Testsuite|Win32.Build.0 = Debug|Win32 {88968763-3D6B-48A8-B495-CC8C187FAC02}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -153,6 +151,18 @@ Global {FEA71D39-CB68-486B-A978-246E661A3F89}.Debug|Win32.Build.0 = Debug|Win32 {FEA71D39-CB68-486B-A978-246E661A3F89}.Release|Win32.ActiveCfg = Release|Win32 {FEA71D39-CB68-486B-A978-246E661A3F89}.Release|Win32.Build.0 = Release|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Debug Testsuite|Win32.Build.0 = Debug|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Debug|Win32.Build.0 = Debug|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Release|Win32.ActiveCfg = Release|Win32 + {2F638D9E-F398-11E5-9CE9-5E5517507C66}.Release|Win32.Build.0 = Release|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Debug Testsuite|Win32.ActiveCfg = Debug|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Debug Testsuite|Win32.Build.0 = Debug|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Debug|Win32.ActiveCfg = Debug|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Debug|Win32.Build.0 = Debug|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Release|Win32.ActiveCfg = Release|Win32 + {56B73802-353A-47B8-9DFF-F5F6ABB2B212}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/project/VS2010Express/XBMC.vcxproj b/project/VS2010Express/XBMC.vcxproj index 91e937d437..363c6cde33 100644 --- a/project/VS2010Express/XBMC.vcxproj +++ b/project/VS2010Express/XBMC.vcxproj @@ -80,7 +80,7 @@ </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;shaders;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;..\..\xbmc\addons\kodi-addon-dev-kit\include;shaders;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp</AdditionalIncludeDirectories> <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions> <ExceptionHandling>Async</ExceptionHandling> <PrecompiledHeader>Use</PrecompiledHeader> @@ -117,7 +117,7 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'"> <ClCompile> - <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;shaders;..\..\lib\gtest\include;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;..\..\xbmc\addons\kodi-addon-dev-kit\include;shaders;..\..\lib\gtest\include;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp;..\..\xbmc\addons\kodi-addon-dev-kit\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>_CONSOLE;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions> <ExceptionHandling>Async</ExceptionHandling> <PrecompiledHeader>Use</PrecompiledHeader> @@ -156,7 +156,7 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;shaders;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\VideoPlayer;..\..\xbmc\win32;..\..\lib;..\..\lib\win32\ffmpeg\include;..\..\lib\libUPnP;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32\Effects11\inc;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.kodi.guilib;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;..\..\xbmc\addons\kodi-addon-dev-kit\include;shaders;..\..\tools\depends\native\libsquish-native\src;%(AdditionalIncludeDirectories);XBMC\$(Configuration);..\..\addons\library.xbmc.adsp;..\..\xbmc\addons\kodi-addon-dev-kit\include</AdditionalIncludeDirectories> <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;__STDC_CONSTANT_MACROS;TAGLIB_STATIC;NPT_CONFIG_ENABLE_LOGGING;PLT_HTTP_DEFAULT_USER_AGENT="UPnP/1.0 DLNADOC/1.50 Kodi";PLT_HTTP_DEFAULT_SERVER="UPnP/1.0 DLNADOC/1.50 Kodi";%(PreprocessorDefinitions)</PreprocessorDefinitions> <ExceptionHandling>Async</ExceptionHandling> <PrecompiledHeader>Use</PrecompiledHeader> @@ -195,6 +195,8 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <ClCompile Include="..\..\xbmc\addons\AddonSystemSettings.cpp" /> <ClCompile Include="..\..\xbmc\addons\AddonVersion.cpp" /> <ClCompile Include="..\..\xbmc\addons\BinaryAddonCache.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\AddonInterfaceManager.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\ExceptionHandling.cpp" /> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\AddonInterfaces.cpp" /> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api1\Addon\AddonCallbacksAddon.cpp" /> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api1\AudioDSP\AddonCallbacksAudioDSP.cpp" /> @@ -206,6 +208,45 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api1\InputStream\AddonCallbacksInputStream.cpp" /> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api1\Peripheral\AddonCallbacksPeripheral.cpp" /> <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api1\PVR\AddonCallbacksPVR.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AddonInterfaceBase.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Audio.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Directory.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_File.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_General.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Network.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineGeneral.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineStream.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlButton.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlEdit.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlFadeLabel.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlImage.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlLabel.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlProgress.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRadioButton.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRendering.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSettingsSlider.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSlider.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSpin.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlTextBox.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogExtendedProgressBar.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogFileBrowser.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogKeyboard.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogNumeric.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogOK.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogProgress.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogSelect.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogTextViewer.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogYesNo.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIGeneral.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIListItem.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIWindow.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\InputStream\Addon_InputStream.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Peripheral\Addon_Peripheral.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagMusic.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagVideo.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_Player.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_PlayList.cpp" /> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\PVR\Addon_PVR.cpp" /> <ClCompile Include="..\..\xbmc\addons\ContextMenuAddon.cpp" /> <ClCompile Include="..\..\xbmc\addons\ContextMenus.cpp" /> <ClCompile Include="..\..\xbmc\addons\AudioDecoder.cpp" /> @@ -971,6 +1012,8 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <ClInclude Include="..\..\xbmc\addons\AddonBuilder.h" /> <ClInclude Include="..\..\xbmc\addons\AudioDecoder.h" /> <ClInclude Include="..\..\xbmc\addons\BinaryAddonCache.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\AddonInterfaceManager.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\ExceptionHandling.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\AddonInterfaces.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api1\Addon\AddonCallbacksAddon.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api1\AudioDSP\AddonCallbacksAudioDSP.h" /> @@ -982,11 +1025,100 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api1\InputStream\AddonCallbacksInputStream.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api1\Peripheral\AddonCallbacksPeripheral.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api1\PVR\AddonCallbacksPVR.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AddonInterfaceBase.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Audio.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Directory.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_File.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_General.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Network.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineGeneral.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineStream.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlButton.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlEdit.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlFadeLabel.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlImage.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlLabel.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlProgress.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRadioButton.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRendering.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSettingsSlider.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSlider.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSpin.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlTextBox.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogExtendedProgressBar.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogFileBrowser.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogKeyboard.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogNumeric.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogOK.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogProgress.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogSelect.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogTextViewer.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogYesNo.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIGeneral.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIListItem.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIWindow.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\InputStream\Addon_InputStream.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Peripheral\Addon_Peripheral.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagMusic.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagVideo.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_Player.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_PlayList.h" /> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\PVR\Addon_PVR.h" /> <ClInclude Include="..\..\xbmc\addons\binary\interfaces\IAddonInterface.h" /> <ClInclude Include="..\..\xbmc\addons\ContextMenuAddon.h" /> <ClInclude Include="..\..\xbmc\addons\ContextMenus.h" /> <ClInclude Include="..\..\xbmc\addons\DllPeripheral.h" /> <ClInclude Include="..\..\xbmc\addons\ImageResource.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\.internal\AddonLib_internal.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\definitions_addon.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\Network.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\SoundPlay.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\VFSUtils.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\definitions_audioengine.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\Stream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions-all.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlButton.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlEdit.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlFadeLabel.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlImage.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlLabel.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRadioButton.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRendering.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSettingsSlider.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSlider.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSpin.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlTextBox.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\definitions_gui.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogExtendedProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogFileBrowser.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogKeyboard.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogNumeric.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogOK.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogSelect.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogTextViewer.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogYesNo.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ListItem.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\Window.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\definitions_inputstream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\InputStream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\Peripheral.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\definitions_player.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagMusic.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagVideo.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\Player.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\PlayList.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\definitions_pvr.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\StreamUtils.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Transfer.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Trigger.hpp" /> <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\kodi_adsp_dll.h" /> <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\kodi_adsp_types.h" /> <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\kodi_audiodec_dll.h" /> @@ -1013,6 +1145,7 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\xbmc_vis_dll.h" /> <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\xbmc_vis_types.h" /> <ClInclude Include="..\..\xbmc\addons\InputStream.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\version.h" /> <ClInclude Include="..\..\xbmc\addons\PVRClient.h" /> <ClInclude Include="..\..\xbmc\addons\Webinterface.h" /> <ClInclude Include="..\..\xbmc\addons\UISoundsResource.h" /> @@ -3141,6 +3274,16 @@ copy "..\Win32BuildSetup\dependencies\python27.dll" "$(TargetDir)"</Command> <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">/Qstrip_reflect</AdditionalOptions> </FxCompile> </ItemGroup> + <ItemGroup> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\KodiAPI_AddOn.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\KodiAPI_AudioEngine.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\KodiAPI_GUI.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\KodiAPI_InputStream.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\KodiAPI_Peripheral.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\KodiAPI_Player.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\KodiAPI_PVR.i" /> + </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> diff --git a/project/VS2010Express/XBMC.vcxproj.filters b/project/VS2010Express/XBMC.vcxproj.filters index 79f39c2706..f595283520 100644 --- a/project/VS2010Express/XBMC.vcxproj.filters +++ b/project/VS2010Express/XBMC.vcxproj.filters @@ -448,6 +448,57 @@ <Filter Include="games\controllers\windows"> <UniqueIdentifier>{9e3dd585-08e1-4dae-bc21-05e49697ef94}</UniqueIdentifier> </Filter> + <Filter Include="addons\binary\interfaces\api2"> + <UniqueIdentifier>{62db76b8-fa69-4e06-9814-9d8f2e0b9934}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\Addon"> + <UniqueIdentifier>{b8406882-607c-4fba-ade5-b9cc31561cab}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\AudioEngine"> + <UniqueIdentifier>{46500a24-57b1-4b40-93a5-84f3a290f8bb}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\GUI"> + <UniqueIdentifier>{b264e79f-c430-4112-aa75-19a3a8177086}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\InputStream"> + <UniqueIdentifier>{8b709827-1f79-4de6-93e7-5d75a9df3d04}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\Player"> + <UniqueIdentifier>{bac53018-be4b-44c9-ac16-f13edbd72927}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\Peripheral"> + <UniqueIdentifier>{893c5221-6b29-453c-ba1a-4597e10891d3}</UniqueIdentifier> + </Filter> + <Filter Include="addons\binary\interfaces\api2\PVR"> + <UniqueIdentifier>{e63e19ad-ad67-4815-9f2f-0cc202511710}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2"> + <UniqueIdentifier>{662c0561-6003-4d48-b2a6-1621911144ee}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\addon"> + <UniqueIdentifier>{4014bd6f-943e-45b6-a81d-ebfa402358e8}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\audioengine"> + <UniqueIdentifier>{9be6074d-c53c-45f3-b2b9-2580fb69a667}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\gui"> + <UniqueIdentifier>{6333960e-413a-48ed-a3f2-8aab76a41352}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\inputstream"> + <UniqueIdentifier>{85260359-1d7b-478b-8fb0-52d3358d6cc7}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\peripheral"> + <UniqueIdentifier>{72eccf7d-b3c7-47bb-98dd-234231a8cf96}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\player"> + <UniqueIdentifier>{8d7c78a2-fbb7-4568-8cb3-1682e40997ff}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\pvr"> + <UniqueIdentifier>{8301878f-963d-4f94-b810-e753f0652b22}</UniqueIdentifier> + </Filter> + <Filter Include="addons\include\api2\.internal"> + <UniqueIdentifier>{5d003aaf-d12c-4149-845f-d9ebbed03fea}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\xbmc\win32\pch.cpp"> @@ -3467,6 +3518,129 @@ <ClCompile Include="..\..\xbmc\dialogs\GUIDialogKeyboardTouch.cpp"> <Filter>dialogs</Filter> </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\AddonInterfaceManager.cpp"> + <Filter>addons\binary</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\ExceptionHandling.cpp"> + <Filter>addons\binary</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AddonInterfaceBase.cpp"> + <Filter>addons\binary\interfaces\api2</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Audio.cpp"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Directory.cpp"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_File.cpp"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_General.cpp"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Network.cpp"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineGeneral.cpp"> + <Filter>addons\binary\interfaces\api2\AudioEngine</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineStream.cpp"> + <Filter>addons\binary\interfaces\api2\AudioEngine</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlButton.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlEdit.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlFadeLabel.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlImage.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlLabel.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlProgress.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRadioButton.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRendering.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSettingsSlider.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSlider.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSpin.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlTextBox.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogExtendedProgressBar.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogFileBrowser.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogKeyboard.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogNumeric.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogOK.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogProgress.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogSelect.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogTextViewer.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogYesNo.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIGeneral.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIListItem.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIWindow.cpp"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\InputStream\Addon_InputStream.cpp"> + <Filter>addons\binary\interfaces\api2\InputStream</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Peripheral\Addon_Peripheral.cpp"> + <Filter>addons\binary\interfaces\api2\Peripheral</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagMusic.cpp"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagVideo.cpp"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_Player.cpp"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_PlayList.cpp"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\binary\interfaces\api2\PVR\Addon_PVR.cpp"> + <Filter>addons\binary\interfaces\api2\PVR</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\xbmc\win32\pch.h"> @@ -6731,6 +6905,282 @@ <ClInclude Include="..\..\xbmc\network\httprequesthandler\HTTPRequestHandlerUtils.h"> <Filter>network\httprequesthandler</Filter> </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\AddonInterfaceManager.h"> + <Filter>addons\binary</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\ExceptionHandling.h"> + <Filter>addons\binary</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AddonInterfaceBase.h"> + <Filter>addons\binary\interfaces\api2</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Audio.h"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Directory.h"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_File.h"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_General.h"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Addon\Addon_Network.h"> + <Filter>addons\binary\interfaces\api2\Addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineGeneral.h"> + <Filter>addons\binary\interfaces\api2\AudioEngine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\AudioEngine\Addon_AudioEngineStream.h"> + <Filter>addons\binary\interfaces\api2\AudioEngine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlButton.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlEdit.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlFadeLabel.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlImage.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlLabel.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlProgress.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRadioButton.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlRendering.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSettingsSlider.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSlider.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlSpin.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIControlTextBox.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogExtendedProgressBar.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogFileBrowser.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogKeyboard.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogNumeric.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogOK.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogProgress.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogSelect.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogTextViewer.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIDialogYesNo.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIGeneral.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIListItem.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\GUI\Addon_GUIWindow.h"> + <Filter>addons\binary\interfaces\api2\GUI</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\InputStream\Addon_InputStream.h"> + <Filter>addons\binary\interfaces\api2\InputStream</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Peripheral\Addon_Peripheral.h"> + <Filter>addons\binary\interfaces\api2\Peripheral</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_PlayList.h"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagMusic.h"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_InfoTagVideo.h"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\Player\Addon_Player.h"> + <Filter>addons\binary\interfaces\api2\Player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\binary\interfaces\api2\PVR\Addon_PVR.h"> + <Filter>addons\binary\interfaces\api2\PVR</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.hpp"> + <Filter>addons\include\api2</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions.hpp"> + <Filter>addons\include\api2</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions-all.hpp"> + <Filter>addons\include\api2</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\.internal\AddonLib_internal.hpp"> + <Filter>addons\include\api2\.internal</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\definitions_addon.hpp"> + <Filter>addons\include\api2\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\General.hpp"> + <Filter>addons\include\api2\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\Network.hpp"> + <Filter>addons\include\api2\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\SoundPlay.hpp"> + <Filter>addons\include\api2\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\VFSUtils.hpp"> + <Filter>addons\include\api2\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\definitions_audioengine.hpp"> + <Filter>addons\include\api2\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\General.hpp"> + <Filter>addons\include\api2\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\Stream.hpp"> + <Filter>addons\include\api2\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlButton.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlEdit.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlFadeLabel.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlImage.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlLabel.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlProgress.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRadioButton.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRendering.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSettingsSlider.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSlider.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSpin.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlTextBox.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\definitions_gui.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogExtendedProgress.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogFileBrowser.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogKeyboard.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogNumeric.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogOK.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogProgress.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogSelect.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogTextViewer.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogYesNo.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\General.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ListItem.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\Window.hpp"> + <Filter>addons\include\api2\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\definitions_inputstream.hpp"> + <Filter>addons\include\api2\inputstream</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\InputStream.hpp"> + <Filter>addons\include\api2\inputstream</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\Peripheral.hpp"> + <Filter>addons\include\api2\peripheral</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\definitions_player.hpp"> + <Filter>addons\include\api2\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagMusic.hpp"> + <Filter>addons\include\api2\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagVideo.hpp"> + <Filter>addons\include\api2\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\Player.hpp"> + <Filter>addons\include\api2\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\PlayList.hpp"> + <Filter>addons\include\api2\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\definitions_pvr.hpp"> + <Filter>addons\include\api2\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\General.hpp"> + <Filter>addons\include\api2\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\StreamUtils.hpp"> + <Filter>addons\include\api2\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Transfer.hpp"> + <Filter>addons\include\api2\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Trigger.hpp"> + <Filter>addons\include\api2\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\version.h"> + <Filter>addons\include\api2</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc"> @@ -6817,4 +7267,30 @@ <Filter>shaders</Filter> </FxCompile> </ItemGroup> + <ItemGroup> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.i"> + <Filter>addons\include\api2</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\KodiAPI_AddOn.i"> + <Filter>addons\include\api2\addon</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\KodiAPI_AudioEngine.i"> + <Filter>addons\include\api2\audioengine</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\KodiAPI_GUI.i"> + <Filter>addons\include\api2\gui</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\KodiAPI_InputStream.i"> + <Filter>addons\include\api2\inputstream</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\KodiAPI_Peripheral.i"> + <Filter>addons\include\api2\peripheral</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\KodiAPI_Player.i"> + <Filter>addons\include\api2\player</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\KodiAPI_PVR.i"> + <Filter>addons\include\api2\pvr</Filter> + </None> + </ItemGroup> </Project> diff --git a/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj b/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj new file mode 100644 index 0000000000..23374312da --- /dev/null +++ b/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj @@ -0,0 +1,192 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\AddonLib.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_General.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_Network.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_SoundPlay.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_VFSUtils.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\audioengine\AddonLib_AudioEngine_General.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\audioengine\AddonLib_AudioEngine_Stream.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\dlfcn-win32.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\ErrorCodeNames.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlButton.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlEdit.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlFadeLabel.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlImage.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlLabel.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlProgress.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlRadioButton.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlRendering.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSettingsSlider.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSlider.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSpin.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlTextBox.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogExtendedProgress.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogFileBrowser.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogKeyboard.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogNumeric.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogOK.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogProgress.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogSelect.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogTextViewer.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogYesNo.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_General.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ListItem.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_Window.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\inputstream\AddonLib_InputStream.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\InterProcess.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\peripheral\AddonLib_Peripheral.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_InfoTagMusic.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_InfoTagVideo.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_Player.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_PlayList.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_General.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Stream.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Transfer.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Trigger.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\.internal\AddonLib_internal.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\definitions_addon.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\Network.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\SoundPlay.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\VFSUtils.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\definitions_audioengine.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\Stream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions-all.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlButton.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlEdit.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlFadeLabel.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlImage.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlLabel.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRadioButton.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRendering.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSettingsSlider.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSlider.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSpin.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlTextBox.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\definitions_gui.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogExtendedProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogFileBrowser.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogKeyboard.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogNumeric.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogOK.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogProgress.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogSelect.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogTextViewer.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogYesNo.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ListItem.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\Window.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\definitions_inputstream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\InputStream.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\Peripheral.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\definitions_player.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagMusic.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagVideo.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\Player.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\PlayList.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\definitions_pvr.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\General.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\StreamUtils.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Transfer.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Trigger.hpp" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\dlfcn-win32.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\InterProcess.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\version.h" /> + </ItemGroup> + <ItemGroup> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\KodiAPI_AddOn.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\KodiAPI_AudioEngine.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\KodiAPI_GUI.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\KodiAPI_InputStream.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\KodiAPI_Peripheral.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\KodiAPI_Player.i" /> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\KodiAPI_PVR.i" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{2F638D9E-F398-11E5-9CE9-5E5517507C66}</ProjectGuid> + <RootNamespace>kodiAddonDevKit-SharedLib-API2</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(SolutionDir)\XBMC.core-defaults.props" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets"> + <Import Project="$(SolutionDir)\XBMC.defaults.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir> + <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir> + <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IncludePath)</IncludePath> + <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IncludePath)</IncludePath> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary;..\..\xbmc\addons\kodi-addon-dev-kit\include;..\..\xbmc;..\..\xbmc\cores\VideoPlayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ExceptionHandling>Sync</ExceptionHandling> + <PrecompiledHeader> + </PrecompiledHeader> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <AdditionalIncludeDirectories>..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary;..\..\xbmc\addons\kodi-addon-dev-kit\include;..\..\xbmc;..\..\xbmc\cores\VideoPlayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ExceptionHandling>Sync</ExceptionHandling> + <PrecompiledHeader> + </PrecompiledHeader> + </ClCompile> + <Link> + <OutputFile>..\..\addons\$(ProjectName).lib</OutputFile> + </Link> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj.filters b/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj.filters new file mode 100644 index 0000000000..708c3aef84 --- /dev/null +++ b/project/VS2010Express/kodiAddonDevKit-SharedLib-API2.vcxproj.filters @@ -0,0 +1,364 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="addon"> + <UniqueIdentifier>{70519cce-f398-11e5-9ce9-5e5517507c66}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="audioengine"> + <UniqueIdentifier>{5e09f660-f398-11e5-9ce9-5e5517507c66}</UniqueIdentifier> + <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="gui"> + <UniqueIdentifier>{3c22d6a5-5d68-4745-88f6-fa23e1fa4e0e}</UniqueIdentifier> + </Filter> + <Filter Include="inputstream"> + <UniqueIdentifier>{c9a305c2-c638-4cf6-85f4-4095c839ab34}</UniqueIdentifier> + </Filter> + <Filter Include="peripheral"> + <UniqueIdentifier>{3c6f5206-c756-4bb4-be96-4cc04ae3b56b}</UniqueIdentifier> + </Filter> + <Filter Include="player"> + <UniqueIdentifier>{46907f58-b16a-444d-8e12-9e082f531078}</UniqueIdentifier> + </Filter> + <Filter Include="pvr"> + <UniqueIdentifier>{db742a11-c490-4f8b-acf9-3d3a77e722e3}</UniqueIdentifier> + </Filter> + <Filter Include="Includes"> + <UniqueIdentifier>{1ba70167-5b40-4e30-92c1-a22c81348775}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\addon"> + <UniqueIdentifier>{c2fc3a57-32fa-4e16-a9ee-067de8bc3148}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\audioengine"> + <UniqueIdentifier>{95b85ce4-5fc3-443f-85e8-4f9d8c2ac57b}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\gui"> + <UniqueIdentifier>{9085ae43-940d-4441-b2f3-565866293b2a}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\inputstream"> + <UniqueIdentifier>{2f24416f-574b-455c-9780-534a66c1e1ce}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\peripheral"> + <UniqueIdentifier>{3fdab184-65d3-4428-8a67-74d070fb3e34}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\player"> + <UniqueIdentifier>{7eb369b4-9198-4c24-904f-147717bf83d0}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\pvr"> + <UniqueIdentifier>{16109df3-01d7-43c5-9c71-d0c0bc004b8b}</UniqueIdentifier> + </Filter> + <Filter Include="Includes\.internal"> + <UniqueIdentifier>{fb6dcfad-e5c1-44cb-8d25-2b23f5612a74}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\AddonLib.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\dlfcn-win32.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\ErrorCodeNames.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\InterProcess.cpp" /> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_General.cpp"> + <Filter>pvr</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Stream.cpp"> + <Filter>pvr</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Transfer.cpp"> + <Filter>pvr</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\pvr\AddonLib_PVR_Trigger.cpp"> + <Filter>pvr</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_InfoTagMusic.cpp"> + <Filter>player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_InfoTagVideo.cpp"> + <Filter>player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_Player.cpp"> + <Filter>player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\player\AddonLib_Player_PlayList.cpp"> + <Filter>player</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\peripheral\AddonLib_Peripheral.cpp"> + <Filter>peripheral</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\inputstream\AddonLib_InputStream.cpp"> + <Filter>inputstream</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlButton.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlEdit.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlFadeLabel.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlImage.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlLabel.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlProgress.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlRadioButton.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlRendering.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSettingsSlider.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSlider.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlSpin.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ControlTextBox.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogExtendedProgress.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogFileBrowser.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogKeyboard.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogNumeric.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogOK.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogProgress.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogSelect.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogTextViewer.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_DialogYesNo.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_General.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_ListItem.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\gui\AddonLib_GUI_Window.cpp"> + <Filter>gui</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\audioengine\AddonLib_AudioEngine_General.cpp"> + <Filter>audioengine</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\audioengine\AddonLib_AudioEngine_Stream.cpp"> + <Filter>audioengine</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_General.cpp"> + <Filter>addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_Network.cpp"> + <Filter>addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_SoundPlay.cpp"> + <Filter>addon</Filter> + </ClCompile> + <ClCompile Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\addon\AddonLib_Addon_VFSUtils.cpp"> + <Filter>addon</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\dlfcn-win32.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\kodi-addon-sharedlibrary\InterProcess.h" /> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.hpp"> + <Filter>Includes</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions.hpp"> + <Filter>Includes</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\definitions-all.hpp"> + <Filter>Includes</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\definitions_addon.hpp"> + <Filter>Includes\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\General.hpp"> + <Filter>Includes\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\Network.hpp"> + <Filter>Includes\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\SoundPlay.hpp"> + <Filter>Includes\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\VFSUtils.hpp"> + <Filter>Includes\addon</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\.internal\AddonLib_internal.hpp"> + <Filter>Includes\.internal</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\definitions_audioengine.hpp"> + <Filter>Includes\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\General.hpp"> + <Filter>Includes\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\Stream.hpp"> + <Filter>Includes\audioengine</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlButton.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlEdit.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlFadeLabel.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlImage.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlLabel.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlProgress.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRadioButton.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlRendering.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSettingsSlider.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSlider.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlSpin.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ControlTextBox.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\definitions_gui.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogExtendedProgress.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogFileBrowser.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogKeyboard.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogNumeric.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogOK.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogProgress.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogSelect.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogTextViewer.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\DialogYesNo.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\General.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\ListItem.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\Window.hpp"> + <Filter>Includes\gui</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\definitions_inputstream.hpp"> + <Filter>Includes\inputstream</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\InputStream.hpp"> + <Filter>Includes\inputstream</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\Peripheral.hpp"> + <Filter>Includes\peripheral</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\definitions_player.hpp"> + <Filter>Includes\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagMusic.hpp"> + <Filter>Includes\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\InfoTagVideo.hpp"> + <Filter>Includes\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\Player.hpp"> + <Filter>Includes\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\PlayList.hpp"> + <Filter>Includes\player</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\definitions_pvr.hpp"> + <Filter>Includes\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\General.hpp"> + <Filter>Includes\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\StreamUtils.hpp"> + <Filter>Includes\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Transfer.hpp"> + <Filter>Includes\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\Trigger.hpp"> + <Filter>Includes\pvr</Filter> + </ClInclude> + <ClInclude Include="..\..\xbmc\addons\kodi-addon-dev-kit\src\api2\version.h"> + <Filter>Includes</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\AddonLib.i"> + <Filter>Includes</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\addon\KodiAPI_AddOn.i"> + <Filter>Includes\addon</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\audioengine\KodiAPI_AudioEngine.i"> + <Filter>Includes\audioengine</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\gui\KodiAPI_GUI.i"> + <Filter>Includes\gui</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\inputstream\KodiAPI_InputStream.i"> + <Filter>Includes\inputstream</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\peripheral\KodiAPI_Peripheral.i"> + <Filter>Includes\peripheral</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\player\KodiAPI_Player.i"> + <Filter>Includes\player</Filter> + </None> + <None Include="..\..\xbmc\addons\kodi-addon-dev-kit\include\kodi\api2\pvr\KodiAPI_PVR.i"> + <Filter>Includes\pvr</Filter> + </None> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/project/cmake/KodiConfig.cmake.in b/project/cmake/KodiConfig.cmake.in index d6b60c2e1b..63d1f2e328 100644 --- a/project/cmake/KodiConfig.cmake.in +++ b/project/cmake/KodiConfig.cmake.in @@ -29,3 +29,6 @@ if(NOT CORE_SYSTEM_NAME) endif() include(AddonHelpers) +if(USE_KODI_API_LEVEL EQUAL 2) + include(kodi-addon-sharedlibrary-api2-config) +endif() diff --git a/project/cmake/addons/CMakeLists.txt b/project/cmake/addons/CMakeLists.txt index 1b21bb36e4..9c2524a747 100644 --- a/project/cmake/addons/CMakeLists.txt +++ b/project/cmake/addons/CMakeLists.txt @@ -228,6 +228,11 @@ endif() # error either in ADDONS_TO_BUILD or in the directory configuration. set(SUPPORTED_ADDON_FOUND FALSE) +ExternalProject_Add(kodi-addon-dev-kit + SOURCE_DIR ${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit + INSTALL_DIR ${DEPENDS_PATH} + CMAKE_ARGS ${BUILD_ARGS}) + foreach(addon ${addons}) if(NOT (addon MATCHES platforms.txt)) file(STRINGS ${addon} def) @@ -373,7 +378,7 @@ foreach(addon ${addons}) ALWAYS 1) # add "kodi-platform" as a dependency to every addon - add_dependencies(${id} kodi-platform) + add_dependencies(${id} kodi-platform kodi-addon-dev-kit) set(${id}_DEPENDS_DIR ${SOURCE_DIR}/depends) diff --git a/project/cmake/installdata/addon-bindings.txt b/project/cmake/installdata/addon-bindings.txt index 5655da511a..e6ab3fd704 100644 --- a/project/cmake/installdata/addon-bindings.txt +++ b/project/cmake/installdata/addon-bindings.txt @@ -1,37 +1,3 @@ -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_cpp_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_utils.hpp -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_utils.hpp -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_dll.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_types.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h -xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_codec.h xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h xbmc/cores/AudioEngine/Utils/AEChannelData.h xbmc/filesystem/IFileTypes.h diff --git a/project/cmake/scripts/common/PrepareEnv.cmake b/project/cmake/scripts/common/PrepareEnv.cmake index fadca482d9..2ff71adaa1 100644 --- a/project/cmake/scripts/common/PrepareEnv.cmake +++ b/project/cmake/scripts/common/PrepareEnv.cmake @@ -68,7 +68,8 @@ file(COPY ${CORE_SOURCE_DIR}/project/cmake/scripts/common/AddonHelpers.cmake configure_file(${CORE_SOURCE_DIR}/project/cmake/XBMCConfig.cmake.in ${XBMC_LIB_DIR}/XBMCConfig.cmake @ONLY) ### copy all the addon binding header files to include/kodi -# parse addon-bindings.mk to get the list of header files to copy +# parse addon-bindings.mk to get the list of kodi's own header files to copy +# Note: Need to improve in future to use add-ons without Kodi's own headers! file(STRINGS ${CORE_SOURCE_DIR}/xbmc/addons/addon-bindings.mk bindings) string(REPLACE "\n" ";" bindings "${bindings}") foreach(binding ${bindings}) diff --git a/project/cmake/treedata/common/addons.txt b/project/cmake/treedata/common/addons.txt index 76410b7ed6..4e1da89301 100644 --- a/project/cmake/treedata/common/addons.txt +++ b/project/cmake/treedata/common/addons.txt @@ -6,3 +6,4 @@ lib/addons/library.kodi.peripheral KODI_peripheral lib/addons/library.xbmc.addon XBMC_addon lib/addons/library.xbmc.codec XBMC_codec lib/addons/library.xbmc.pvr XBMC_pvr +xbmc/addons/kodi-addon-dev-kit kodi-addon-dev-kit diff --git a/project/cmake/treedata/common/subdirs.txt b/project/cmake/treedata/common/subdirs.txt index c2828e0f56..bab280832f 100644 --- a/project/cmake/treedata/common/subdirs.txt +++ b/project/cmake/treedata/common/subdirs.txt @@ -1,5 +1,6 @@ xbmc xbmc xbmc/addons addons +xbmc/addons/binary addonsBinary xbmc/addons/binary/interfaces addonsBinaryInterfaces xbmc/addons/binary/interfaces/api1/Addon api1AddonCallbacks_Addon xbmc/addons/binary/interfaces/api1/AudioDSP api1AddonCallbacks_AudioDSP @@ -9,6 +10,14 @@ xbmc/addons/binary/interfaces/api1/GUI api1AddonCallbacks_GUI xbmc/addons/binary/interfaces/api1/InputStream api1AddonCallbacks_InputStream xbmc/addons/binary/interfaces/api1/Peripheral api1AddonCallbacks_Peripheral xbmc/addons/binary/interfaces/api1/PVR api1AddonCallbacks_PVR +xbmc/addons/binary/interfaces/api2 api2AddonInterfaces +xbmc/addons/binary/interfaces/api2/Addon api2AddonInterfaces_Addon +xbmc/addons/binary/interfaces/api2/AudioEngine api2AddonInterfaces_AudioEngine +xbmc/addons/binary/interfaces/api2/GUI api2AddonInterfaces_GUI +xbmc/addons/binary/interfaces/api2/InputStream api2AddonInterfaces_InputStream +xbmc/addons/binary/interfaces/api2/PVR api2AddonInterfaces_PVR +xbmc/addons/binary/interfaces/api2/Peripheral api2AddonInterfaces_Peripheral +xbmc/addons/binary/interfaces/api2/Player api2AddonInterfaces_Player xbmc/commons commons xbmc/cdrip cdrip xbmc/dbwrappers dbwrappers diff --git a/tools/depends/.gitignore b/tools/depends/.gitignore index c6c4d2515b..fde07a8db8 100644 --- a/tools/depends/.gitignore +++ b/tools/depends/.gitignore @@ -38,6 +38,7 @@ Toolchain.cmake config.site config.site.native +config.buildsteps /native/*/*native/ /JsonSchemaBuilder/bin/ /TexturePacker/bin/ diff --git a/tools/depends/configure.ac b/tools/depends/configure.ac index 7b25715940..df74bffc92 100644 --- a/tools/depends/configure.ac +++ b/tools/depends/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ(2.59) AC_INIT([xbmc-depends], [2.00], [http://trac.xbmc.org]) :${CFLAGS=""} AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_FILES([target/config.site native/config.site.native Makefile.include target/Toolchain.cmake +AC_CONFIG_FILES([target/config.site native/config.site.native native/config.buildsteps Makefile.include target/Toolchain.cmake target/config-binaddons.site target/Toolchain_binaddons.cmake]) AC_CANONICAL_HOST m4_include([../../m4/xbmc_arch.m4]) @@ -593,3 +593,4 @@ fi cp -vf target/config.site $prefix/$deps_dir/share cp -vf target/Toolchain.cmake $prefix/$deps_dir/share cp -vf native/config.site.native $prefix/$tool_dir/share/config.site +cp -vf native/config.buildsteps $prefix/$tool_dir/share diff --git a/tools/depends/native/config.buildsteps.in b/tools/depends/native/config.buildsteps.in new file mode 100644 index 0000000000..130dc0e80c --- /dev/null +++ b/tools/depends/native/config.buildsteps.in @@ -0,0 +1 @@ +export PATH="@prefix@/@tool_dir@/bin:$PATH" diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 9e317d3067..454f728d4b 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -220,6 +220,8 @@ #include "pictures/GUIWindowSlideShow.h" #include "windows/GUIWindowLoginScreen.h" +#include "addons/binary/AddonInterfaceManager.h" + using namespace ADDON; using namespace XFILE; #ifdef HAS_DVD_DRIVE @@ -1148,6 +1150,7 @@ bool CApplication::Initialize() CJSONRPC::Initialize(); #endif ADDON::CAddonMgr::GetInstance().StartServices(false); + CServiceBroker::GetAddonInterfaceManager().StartManager(); // activate the configured start window int firstWindow = g_SkinInfo->GetFirstWindow(); @@ -1171,6 +1174,7 @@ bool CApplication::Initialize() CJSONRPC::Initialize(); #endif ADDON::CAddonMgr::GetInstance().StartServices(false); + CServiceBroker::GetAddonInterfaceManager().StartManager(); } g_sysinfo.Refresh(); @@ -3555,6 +3559,7 @@ void CApplication::OnQueueNextItem() CLog::LogF(LOGDEBUG,"play state was %d, starting %d", m_ePlayState, m_bPlaybackStarting); if(m_bPlaybackStarting) return; + // informs python script currently running that we are requesting the next track // (does nothing if python is not loaded) #ifdef HAS_PYTHON diff --git a/xbmc/ServiceBroker.cpp b/xbmc/ServiceBroker.cpp index fff03c35f4..9209b7c92d 100644 --- a/xbmc/ServiceBroker.cpp +++ b/xbmc/ServiceBroker.cpp @@ -50,3 +50,8 @@ ActiveAE::CActiveAEDSP &CServiceBroker::GetADSP() { return g_application.m_ServiceManager->GetADSPManager(); } + +ADDON::CAddonInterfaceManager &CServiceBroker::GetAddonInterfaceManager() +{ + return g_application.m_ServiceManager->GetAddonInterfaceManager(); +} diff --git a/xbmc/ServiceBroker.h b/xbmc/ServiceBroker.h index 32add30c0a..c17ccd260e 100644 --- a/xbmc/ServiceBroker.h +++ b/xbmc/ServiceBroker.h @@ -23,6 +23,7 @@ namespace ADDON { class CAddonMgr; class CBinaryAddonCache; +class CAddonInterfaceManager; } namespace ActiveAE { @@ -50,4 +51,5 @@ public: static XBPython &GetXBPython(); static PVR::CPVRManager &GetPVRManager(); static ActiveAE::CActiveAEDSP& GetADSP(); + static ADDON::CAddonInterfaceManager &GetAddonInterfaceManager(); }; diff --git a/xbmc/ServiceManager.cpp b/xbmc/ServiceManager.cpp index be05791792..8db37ec257 100644 --- a/xbmc/ServiceManager.cpp +++ b/xbmc/ServiceManager.cpp @@ -29,6 +29,7 @@ bool CServiceManager::Init1() m_announcementManager.reset(new ANNOUNCEMENT::CAnnouncementManager()); m_announcementManager->Start(); + m_addonInterfaceManager.reset(new ADDON::CAddonInterfaceManager()); m_XBPython.reset(new XBPython()); CScriptInvocationManager::GetInstance().RegisterLanguageInvocationHandler(m_XBPython.get(), ".py"); @@ -69,6 +70,7 @@ void CServiceManager::Deinit() m_addonMgr.reset(); CScriptInvocationManager::GetInstance().UnregisterLanguageInvocationHandler(m_XBPython.get()); m_XBPython.reset(); + m_addonInterfaceManager.reset(); m_announcementManager.reset(); } @@ -101,3 +103,8 @@ ActiveAE::CActiveAEDSP& CServiceManager::GetADSPManager() { return *m_ADSPManager; } + +ADDON::CAddonInterfaceManager& CServiceManager::GetAddonInterfaceManager() +{ + return *m_addonInterfaceManager; +} diff --git a/xbmc/ServiceManager.h b/xbmc/ServiceManager.h index cdb8399810..4920a2e4ad 100644 --- a/xbmc/ServiceManager.h +++ b/xbmc/ServiceManager.h @@ -22,6 +22,7 @@ #include "addons/AddonManager.h" #include "addons/BinaryAddonCache.h" +#include "addons/binary/AddonInterfaceManager.h" #include "interfaces/python/XBPython.h" #include "pvr/PVRManager.h" #include <memory> @@ -58,6 +59,7 @@ public: XBPython& GetXBPython(); PVR::CPVRManager& GetPVRManager(); ActiveAE::CActiveAEDSP& GetADSPManager(); + ADDON::CAddonInterfaceManager& GetAddonInterfaceManager(); protected: std::unique_ptr<ADDON::CAddonMgr> m_addonMgr; @@ -66,4 +68,5 @@ protected: std::unique_ptr<XBPython> m_XBPython; std::unique_ptr<PVR::CPVRManager> m_PVRManager; std::unique_ptr<ActiveAE::CActiveAEDSP> m_ADSPManager; + std::unique_ptr<ADDON::CAddonInterfaceManager> m_addonInterfaceManager; }; diff --git a/xbmc/addons/addon-bindings.mk b/xbmc/addons/addon-bindings.mk index 71fe6098b3..b952a5e479 100644 --- a/xbmc/addons/addon-bindings.mk +++ b/xbmc/addons/addon-bindings.mk @@ -1,37 +1,3 @@ -BINDINGS =xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_cpp_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_utils.hpp -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_utils.hpp -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_codec.h BINDINGS+=xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h BINDINGS+=xbmc/cores/AudioEngine/Utils/AEChannelData.h BINDINGS+=xbmc/filesystem/IFileTypes.h diff --git a/xbmc/addons/addon-dev-kit-bindings.mk b/xbmc/addons/addon-dev-kit-bindings.mk new file mode 100644 index 0000000000..437865fe64 --- /dev/null +++ b/xbmc/addons/addon-dev-kit-bindings.mk @@ -0,0 +1,43 @@ +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_cpp_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_addon_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_adsp_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audiodec_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_utils.hpp +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_vfs_utils.hpp +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_scr_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_dll.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_types.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h +BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_codec.h +BINDINGS_DIR =api2 +BINDINGS_DIR+=api2/.internal +BINDINGS_DIR+=api2/addon +BINDINGS_DIR+=api2/audioengine +BINDINGS_DIR+=api2/gui +BINDINGS_DIR+=api2/inputstream +BINDINGS_DIR+=api2/peripheral +BINDINGS_DIR+=api2/player +BINDINGS_DIR+=api2/pvr diff --git a/xbmc/addons/binary/AddonInterfaceManager.cpp b/xbmc/addons/binary/AddonInterfaceManager.cpp new file mode 100644 index 0000000000..04c6e533b1 --- /dev/null +++ b/xbmc/addons/binary/AddonInterfaceManager.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "AddonInterfaceManager.h" + +#include "Application.h" +#include "utils/log.h" + +#include <netinet/in.h> + +#define LOCK_AND_COPY(type, dest, src) \ + if (!m_bInitialized) return; \ + CSingleLock lock(src); \ + src.hadSomethingRemoved = false; \ + type dest; \ + dest = src + +#define CHECK_FOR_ENTRY(l,v) \ + (l.hadSomethingRemoved ? (std::find(l.begin(),l.end(),v) != l.end()) : true) + +namespace ADDON +{ + +CAddonInterfaceManager::CAddonInterfaceManager() + : m_bInitialized(false) +{ +} + +CAddonInterfaceManager::~CAddonInterfaceManager() +{ +} + +bool CAddonInterfaceManager::StartManager() +{ + m_bInitialized = true; + return true; +} + +void CAddonInterfaceManager::StopManager() +{ + m_bInitialized = false; +} + +} /* namespace ADDON */ diff --git a/xbmc/addons/binary/AddonInterfaceManager.h b/xbmc/addons/binary/AddonInterfaceManager.h new file mode 100644 index 0000000000..8789300126 --- /dev/null +++ b/xbmc/addons/binary/AddonInterfaceManager.h @@ -0,0 +1,47 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "threads/CriticalSection.h" +#include "threads/Thread.h" + +#include <memory> +#include <vector> + +namespace ADDON +{ + + template <class T> struct LockableType : public T, public CCriticalSection + { bool hadSomethingRemoved; }; + + class CAddonInterfaceManager + { + public: + CAddonInterfaceManager(); + virtual ~CAddonInterfaceManager(); + + bool StartManager(); + void StopManager(); + + private: + bool m_bInitialized; + }; + +} /* namespace ADDON */ diff --git a/xbmc/addons/binary/CMakeLists.txt b/xbmc/addons/binary/CMakeLists.txt new file mode 100644 index 0000000000..ca0f03189c --- /dev/null +++ b/xbmc/addons/binary/CMakeLists.txt @@ -0,0 +1,11 @@ +set(SOURCES AddonInterfaceManager.cpp + ExceptionHandling.cpp) + +set(HEADERS AddonInterfaceManager.h + ExceptionHandling.h) + +core_add_library(addonsBinary) + +if(ENABLE_INTERNAL_FFMPEG) + add_dependencies(addonsBinary ffmpeg) +endif() diff --git a/xbmc/addons/binary/ExceptionHandling.cpp b/xbmc/addons/binary/ExceptionHandling.cpp new file mode 100644 index 0000000000..c251e65437 --- /dev/null +++ b/xbmc/addons/binary/ExceptionHandling.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Util.h" +#include "addons/Addon.h" +#include "addons/AddonManager.h" +#include "addons/PVRClient.h" +#include "addons/ScreenSaver.h" +#include "addons/Visualisation.h" +#include "cores/AudioEngine/DSPAddons/ActiveAEDSP.h" +#include "dialogs/GUIDialogOK.h" +#include "pvr/PVRManager.h" +#include "pvr/addons/PVRClients.h" +#include "utils/log.h" +#include "utils/StringUtils.h" + +#include "ExceptionHandling.h" + +namespace ADDON +{ + +void CAddonExceptionHandler::Handle(const ADDON::WrongValueException& e) +{ + CLog::Log(LOGERROR,"Wrong add-on value EXCEPTION: %s", e.GetMessage()); + DestroyAddon(e.GetRelatedAddon()); +} + +void CAddonExceptionHandler::Handle(const XbmcCommons::Exception& e) +{ + CLog::Log(LOGERROR,"Kodi's commons EXCEPTION: %s", e.GetMessage()); +} + +void CAddonExceptionHandler::HandleUnknown(std::string functionName) +{ + CLog::Log(LOGERROR, "EXCEPTION: Unknown exception thrown from the call \"%s\"", functionName.c_str()); +} + +void CAddonExceptionHandler::Handle(const ADDON::UnimplementedException e) +{ + CLog::Log(LOGERROR,"EXCEPTION: %s",e.GetMessage()); +} + +void CAddonExceptionHandler::DestroyAddon(const CAddon* addon) +{ + if (addon) + { + std::string errorText = StringUtils::Format(g_localizeStrings.Get(13007).c_str(), addon->Name().c_str()); + CGUIDialogOK::ShowAndGetInput(13006, errorText); + + /* + * If the addon has a running instance, grab that and retrieve used pointer + * from related add-on system. + */ + bool ret; + AddonPtr addonPtr; + switch (addon->Type()) + { + case ADDON_PVRDLL: + ret = PVR::g_PVRClients->GetClient(addon->ID(), addonPtr); + break; + + case ADDON_ADSPDLL: + ret = CServiceBroker::GetADSP().GetAudioDSPAddon(addon->ID(), addonPtr); + break; + + default: + ret = false; + break; + } + + if (ret) + { + CAddonMgr::GetInstance().DisableAddon(addonPtr->ID()); + } + } +} + +}; /* namespace ADDON */ diff --git a/xbmc/addons/binary/ExceptionHandling.h b/xbmc/addons/binary/ExceptionHandling.h new file mode 100644 index 0000000000..f9c2bf5363 --- /dev/null +++ b/xbmc/addons/binary/ExceptionHandling.h @@ -0,0 +1,125 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "utils/log.h" +#include "commons/Exception.h" + +namespace ADDON +{ + class CAddon; + + /** + * WrongValueException Becomes used for pointer checks and check of parts which + * can cause segmention faults. + * Is to disable add-on before a segmention fault comes. + */ + class WrongValueException : public XbmcCommons::Exception + { + public: + inline WrongValueException(const WrongValueException& other) : Exception(other) { } + inline WrongValueException(CAddon* addon, const char* _message, ...) + : Exception("WrongValueException"), + m_addon(addon) + { + XBMCCOMMONS_COPYVARARGS(_message); + } + inline WrongValueException(const char* _message, ...) + : Exception("WrongValueException"), + m_addon(nullptr) + { + XBMCCOMMONS_COPYVARARGS(_message); + } + inline const CAddon* GetRelatedAddon() const { return m_addon; } + + private: + int m_signum; + CAddon *m_addon; + }; + + /** + * UnimplementedException Can be used in places like the control hierarchy + * where the requirements of dynamic language usage force us to add + * unimplmenented methods to a class hierarchy. See the detailed explanation + * on the class Control for more. + */ + class UnimplementedException : public XbmcCommons::Exception + { + public: + inline UnimplementedException(const UnimplementedException& other) : Exception(other) { } + inline UnimplementedException(const char* classname, const char* methodname) : + Exception("UnimplementedException") + { SetMessage("Unimplemented method: %s::%s(...)", classname, methodname); } + }; + + /** + * This is what callback exceptions from the scripting language are translated + * to. + */ + class UnhandledException : public XbmcCommons::Exception + { + public: + inline UnhandledException(const UnhandledException& other) : Exception(other) { } + inline UnhandledException(const char* _message,...) : Exception("UnhandledException") { XBMCCOMMONS_COPYVARARGS(_message); } + }; + + class CAddon; + + class CAddonExceptionHandler + { + public: + static void Handle(const ADDON::WrongValueException& e); + static void Handle(const ADDON::UnimplementedException e); + static void Handle(const XbmcCommons::Exception& e); + static void HandleUnknown(std::string functionName); + + private: + static void DestroyAddon(const CAddon* addon); + }; + +/** + * These macros allow the easy declaration (and definition) of parent class + * virtual methods that are not implemented until the child class. + * + * This is to support the idosyncracies of dynamically typed scripting + * languages. See the comment in AddonControl.h for more details. + */ +#define THROW_UNIMP(classname) throw ADDON::UnimplementedException(classname, __FUNCTION__) + +#define HANDLE_ADDON_EXCEPTION \ + XBMCCOMMONS_HANDLE_UNCHECKED \ + catch (const ADDON::WrongValueException& e) \ + { \ + CAddonExceptionHandler::Handle(e); \ + } \ + catch (const ADDON::UnimplementedException& e) \ + { \ + CAddonExceptionHandler::Handle(e); \ + } \ + catch (const XbmcCommons::Exception& e) \ + { \ + CAddonExceptionHandler::Handle(e); \ + } \ + catch (...) \ + { \ + CAddonExceptionHandler::HandleUnknown(__FUNCTION__); \ + } + +}; /* namespace ADDON */ diff --git a/xbmc/addons/binary/Makefile.in b/xbmc/addons/binary/Makefile.in new file mode 100644 index 0000000000..782f038658 --- /dev/null +++ b/xbmc/addons/binary/Makefile.in @@ -0,0 +1,7 @@ +SRCS=AddonInterfaceManager.cpp \ + ExceptionHandling.cpp \ + +LIB=addon-manager.a + +include @abs_top_srcdir@/Makefile.include +-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS))) diff --git a/xbmc/addons/binary/interfaces/AddonInterfaces.cpp b/xbmc/addons/binary/interfaces/AddonInterfaces.cpp index e317b4f520..aa300c6f9a 100644 --- a/xbmc/addons/binary/interfaces/AddonInterfaces.cpp +++ b/xbmc/addons/binary/interfaces/AddonInterfaces.cpp @@ -22,7 +22,7 @@ #include "AddonInterfaces.h" #include "addons/Addon.h" - +#include "addons/binary/ExceptionHandling.h" #include "addons/binary/interfaces/api1/Addon/AddonCallbacksAddon.h" #include "addons/binary/interfaces/api1/AudioDSP/AddonCallbacksAudioDSP.h" #include "addons/binary/interfaces/api1/AudioEngine/AddonCallbacksAudioEngine.h" @@ -32,6 +32,8 @@ #include "addons/binary/interfaces/api1/InputStream/AddonCallbacksInputStream.h" #include "addons/binary/interfaces/api1/Peripheral/AddonCallbacksPeripheral.h" #include "addons/binary/interfaces/api1/PVR/AddonCallbacksPVR.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/binary/interfaces/api2/GUI/Addon_GUIWindow.h" #include "filesystem/SpecialProtocol.h" #include "messaging/ApplicationMessenger.h" #include "utils/log.h" @@ -76,7 +78,7 @@ CAddonInterfaces::CAddonInterfaces(CAddon* addon) CAddonInterfaces::~CAddonInterfaces() { - delete static_cast<V1::KodiAPI::AddOn::CAddonCallbacksAddon*>(m_helperAddOn); + AddOnLib_UnRegisterMe(this, nullptr); delete static_cast<V1::KodiAPI::AudioEngine::CAddonCallbacksAudioEngine*>(m_helperAudioEngine); delete static_cast<V1::KodiAPI::PVR::CAddonCallbacksPVR*>(m_helperPVR); delete static_cast<V1::KodiAPI::GUI::CAddonCallbacksGUI*>(m_helperGUI); @@ -90,31 +92,83 @@ CAddonInterfaces::~CAddonInterfaces() } /*\_____________________________________________________________________________ +| | exported functions used from add-on for connection. +\*/ + +A_DLLEXPORT void* AddOnLib_Register(void *hdl, int level) +{ + return CAddonInterfaces::AddOnLib_RegisterLevel(((AddonCB*)hdl)->addonData, level); +} + +A_DLLEXPORT void AddOnLib_UnRegister(void *hdl, void *cb) +{ + CAddonInterfaces::AddOnLib_UnRegisterMe(((AddonCB*)hdl)->addonData, cb); +} + +/*\_____________________________________________________________________________ \*/ void* CAddonInterfaces::AddOnLib_RegisterMe(void *addonData) { - CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(addonData); - if (addon == nullptr) + return AddOnLib_RegisterLevel(addonData, 1); +} + +void* CAddonInterfaces::AddOnLib_RegisterLevel(void *addonData, int level) +{ + try { - CLog::Log(LOGERROR, "CAddonInterfaces - %s - called with a null pointer", __FUNCTION__); - return nullptr; + CAddonInterfaces* addon = static_cast<CAddonInterfaces *>(addonData); + if (addon == nullptr) + { + CLog::Log(LOGERROR, "CAddonInterfaces - %s - called with a null pointer", __FUNCTION__); + return nullptr; + } + + void* cb = nullptr; + switch (level) + { + case 1: + addon->m_helperAddOn = new V1::KodiAPI::AddOn::CAddonCallbacksAddon(addon->m_addon); + cb = static_cast<V1::KodiAPI::AddOn::CAddonCallbacksAddon*>(addon->m_helperAddOn)->GetCallbacks(); + break; + case 2: + addon->m_helperAddOn = new V2::KodiAPI::CAddonInterfaceAddon(addon->m_addon); + cb = static_cast<V2::KodiAPI::CAddonInterfaceAddon*>(addon->m_helperAddOn)->GetCallbacks(); + break; + }; + if (!cb) + { + CLog::Log(LOGERROR, "%s: %s/%s - called with not supported API level '%i'", + __FUNCTION__, + TranslateType(addon->m_addon->Type()).c_str(), + addon->m_addon->Name().c_str(), level); + AddOnLib_UnRegisterMe(addonData, cb); + } + return cb; } + HANDLE_ADDON_EXCEPTION - addon->m_helperAddOn = new V1::KodiAPI::AddOn::CAddonCallbacksAddon(addon->m_addon); - return static_cast<V1::KodiAPI::AddOn::CAddonCallbacksAddon*>(addon->m_helperAddOn)->GetCallbacks(); + return nullptr; } void CAddonInterfaces::AddOnLib_UnRegisterMe(void *addonData, void *cbTable) { CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(addonData); - if (addon == nullptr) + if (addon == nullptr || addon->m_helperAddOn == nullptr) { CLog::Log(LOGERROR, "CAddonInterfaces - %s - called with a null pointer", __FUNCTION__); return; } - delete static_cast<V1::KodiAPI::AddOn::CAddonCallbacksAddon*>(addon->m_helperAddOn); + switch (static_cast<IAddonInterface*>(addon->m_helperAddOn)->APILevel()) + { + case 1: + delete static_cast<V1::KodiAPI::AddOn::CAddonCallbacksAddon*>(addon->m_helperAddOn); + break; + case 2: + delete static_cast<V2::KodiAPI::CAddonInterfaceAddon*>(addon->m_helperAddOn); + break; + }; addon->m_helperAddOn = nullptr; } @@ -322,6 +376,10 @@ void CAddonInterfaces::OnApplicationMessage(ThreadMessage* pMsg) case 1: static_cast<V1::KodiAPI::GUI::CGUIAddonWindowDialog*>(pMsg->lpVoid)->Show_Internal(pMsg->param2 > 0); break; + case 2: + case 3: + static_cast<V2::KodiAPI::GUI::CGUIAddonWindowDialog*>(pMsg->lpVoid)->Show_Internal(pMsg->param2 > 0); + break; }; } } diff --git a/xbmc/addons/binary/interfaces/AddonInterfaces.h b/xbmc/addons/binary/interfaces/AddonInterfaces.h index 05149bc3fc..b15ed5ec2a 100644 --- a/xbmc/addons/binary/interfaces/AddonInterfaces.h +++ b/xbmc/addons/binary/interfaces/AddonInterfaces.h @@ -90,6 +90,7 @@ namespace ADDON /*\_________________________________________________________________________ \*/ static void* AddOnLib_RegisterMe (void* addonData); + static void* AddOnLib_RegisterLevel (void* addonData, int level); static void AddOnLib_UnRegisterMe (void* addonData, void* cbTable); void* AddOnLib_GetHelper() { return m_helperAddOn; } /*\_________________________________________________________________________ diff --git a/xbmc/addons/binary/interfaces/api1/Codec/AddonCallbacksCodec.h b/xbmc/addons/binary/interfaces/api1/Codec/AddonCallbacksCodec.h index d53fd3f4d6..6e652f1394 100644 --- a/xbmc/addons/binary/interfaces/api1/Codec/AddonCallbacksCodec.h +++ b/xbmc/addons/binary/interfaces/api1/Codec/AddonCallbacksCodec.h @@ -57,5 +57,5 @@ private: } /* namespace Codec */ -} /* namespace KoidAPI */ +} /* namespace KodiAPI */ } /* namespace V1 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.cpp b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.cpp new file mode 100644 index 0000000000..5a27011dc4 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.cpp @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_Audio.h" + +#include "addons/Addon.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "cores/AudioEngine/AEFactory.h" +#include "cores/AudioEngine/DSPAddons/ActiveAEDSP.h" +#include "cores/AudioEngine/DSPAddons/ActiveAEDSPMode.h" +#include "cores/AudioEngine/Interfaces/AESound.h" +#include "cores/AudioEngine/Utils/AEChannelData.h" + +using namespace ActiveAE; +using namespace ADDON; + +namespace V2 +{ +namespace KodiAPI +{ + +enum AEChannel GetKODIChannel(int channel) +{ + switch (channel) + { + case AUDIO_CH_FL: return AE_CH_FL; + case AUDIO_CH_FR: return AE_CH_FR; + case AUDIO_CH_FC: return AE_CH_FC; + case AUDIO_CH_LFE: return AE_CH_LFE; + case AUDIO_CH_BL: return AE_CH_BL; + case AUDIO_CH_BR: return AE_CH_BR; + case AUDIO_CH_FLOC: return AE_CH_FLOC; + case AUDIO_CH_FROC: return AE_CH_FROC; + case AUDIO_CH_BC: return AE_CH_BC; + case AUDIO_CH_SL: return AE_CH_SL; + case AUDIO_CH_SR: return AE_CH_SR; + case AUDIO_CH_TC: return AE_CH_TC; + case AUDIO_CH_TFL: return AE_CH_TFL; + case AUDIO_CH_TFC: return AE_CH_TFC; + case AUDIO_CH_TFR: return AE_CH_TFR; + case AUDIO_CH_TBL: return AE_CH_TBL; + case AUDIO_CH_TBC: return AE_CH_TBC; + case AUDIO_CH_TBR: return AE_CH_TBR; + case AUDIO_CH_BLOC: return AE_CH_BLOC; + case AUDIO_CH_BROC: return AE_CH_BROC; + default: + return AE_CH_NULL; + } +} + +int GetAddonChannel(enum AEChannel channel) +{ + switch (channel) + { + case AE_CH_FL: return AUDIO_CH_FL; + case AE_CH_FR: return AUDIO_CH_FR; + case AE_CH_FC: return AUDIO_CH_FC; + case AE_CH_LFE: return AUDIO_CH_LFE; + case AE_CH_BL: return AUDIO_CH_BL; + case AE_CH_BR: return AUDIO_CH_BR; + case AE_CH_FLOC: return AUDIO_CH_FLOC; + case AE_CH_FROC: return AUDIO_CH_FROC; + case AE_CH_BC: return AUDIO_CH_BC; + case AE_CH_SL: return AUDIO_CH_SL; + case AE_CH_SR: return AUDIO_CH_SR; + case AE_CH_TC: return AUDIO_CH_TC; + case AE_CH_TFL: return AUDIO_CH_TFL; + case AE_CH_TFC: return AUDIO_CH_TFC; + case AE_CH_TFR: return AUDIO_CH_TFR; + case AE_CH_TBL: return AUDIO_CH_TBL; + case AE_CH_TBC: return AUDIO_CH_TBC; + case AE_CH_TBR: return AUDIO_CH_TBR; + case AE_CH_BLOC: return AUDIO_CH_BLOC; + case AE_CH_BROC: return AUDIO_CH_BROC; + default: + return AUDIO_CH_INVALID; + } +} + +namespace AddOn +{ +extern "C" +{ + +void CAddOnAudio::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->Audio.soundplay_get_handle = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_get_handle; + interfaces->Audio.soundplay_release_handle = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_release_handle; + interfaces->Audio.soundplay_play = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_play; + interfaces->Audio.soundplay_stop = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_stop; + interfaces->Audio.soundplay_set_channel = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_set_channel; + interfaces->Audio.soundplay_get_channel = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_get_channel; + interfaces->Audio.soundplay_set_volume = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_set_volume; + interfaces->Audio.soundplay_get_volume = V2::KodiAPI::AddOn::CAddOnAudio::soundplay_get_volume; +} + +void* CAddOnAudio::soundplay_get_handle( + void* hdl, + const char* filename) +{ + try + { + if (!hdl || !filename) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', filename='%p')", + __FUNCTION__, hdl, filename); + + IAESound *sound = CAEFactory::MakeSound(filename); + if (!sound) + { + CLog::Log(LOGERROR, "CAddOnAudio - %s - failed to make sound play data", __FUNCTION__); + return nullptr; + } + + return sound; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +void CAddOnAudio::soundplay_release_handle( + void* hdl, + void* sndHandle) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + + CAEFactory::FreeSound(static_cast<IAESound*>(sndHandle)); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAudio::soundplay_play( + void* hdl, + void* sndHandle) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + static_cast<IAESound*>(sndHandle)->Play(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAudio::soundplay_stop( + void* hdl, + void* sndHandle) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + static_cast<IAESound*>(sndHandle)->Stop(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAudio::soundplay_set_channel( + void* hdl, + void* sndHandle, + int channel) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + + static_cast<IAESound*>(sndHandle)->SetChannel(GetKODIChannel(channel)); + } + HANDLE_ADDON_EXCEPTION +} + +int CAddOnAudio::soundplay_get_channel( + void* hdl, + void* sndHandle) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + + return GetAddonChannel(static_cast<IAESound*>(sndHandle)->GetChannel()); + } + HANDLE_ADDON_EXCEPTION + + return AUDIO_CH_INVALID; +} + +void CAddOnAudio::soundplay_set_volume( + void* hdl, + void* sndHandle, + float volume) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + static_cast<IAESound*>(sndHandle)->SetVolume(volume); + } + HANDLE_ADDON_EXCEPTION +} + +float CAddOnAudio::soundplay_get_volume( + void* hdl, + void* sndHandle) +{ + try + { + if (!hdl || !sndHandle) + throw ADDON::WrongValueException("CAddOnAudio - %s - invalid data (handle='%p', sndHandle='%p')", + __FUNCTION__, hdl, sndHandle); + return static_cast<IAESound*>(sndHandle)->GetVolume(); + } + HANDLE_ADDON_EXCEPTION + + return 0.0f; +} + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.h b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.h new file mode 100644 index 0000000000..653690ea2e --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Audio.h @@ -0,0 +1,78 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; + +namespace AddOn +{ +extern "C" +{ + + class CAddOnAudio + { + public: + static void Init(struct CB_AddOnLib *interfaces); + + static void* soundplay_get_handle( + void* hdl, + const char* filename); + + static void soundplay_release_handle( + void* hdl, + void* sndHandle); + + static void soundplay_play( + void* hdl, + void* sndHandle); + + static void soundplay_stop( + void* hdl, + void* sndHandle); + + static void soundplay_set_channel( + void* hdl, + void* sndHandle, + int channel); + + static int soundplay_get_channel( + void* hdl, + void* sndHandle); + + static void soundplay_set_volume( + void* hdl, + void* sndHandle, + float volume); + + static float soundplay_get_volume( + void* hdl, + void* sndHandle); + }; + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.cpp b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.cpp new file mode 100644 index 0000000000..5baf59c289 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.cpp @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_Directory.h" + +#include "FileItem.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "filesystem/File.h" +#include "filesystem/Directory.h" + +#include <algorithm> + +using namespace ADDON; +using namespace XFILE; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AddOn +{ +extern "C" +{ + +void CAddOnDirectory::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->Directory.can_open_directory = V2::KodiAPI::AddOn::CAddOnDirectory::can_open_directory; + interfaces->Directory.create_directory = V2::KodiAPI::AddOn::CAddOnDirectory::create_directory; + interfaces->Directory.directory_exists = V2::KodiAPI::AddOn::CAddOnDirectory::directory_exists; + interfaces->Directory.remove_directory = V2::KodiAPI::AddOn::CAddOnDirectory::remove_directory; + interfaces->VFS.get_directory = V2::KodiAPI::AddOn::CAddOnDirectory::get_directory; + interfaces->VFS.free_directory = V2::KodiAPI::AddOn::CAddOnDirectory::free_directory; +} + +/*\_____________________________________________________________________________ +\*/ +bool CAddOnDirectory::can_open_directory( + void* hdl, + const char* strURL) +{ + try + { + if (!hdl || !strURL) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', strURL='%p')", + __FUNCTION__, hdl, strURL); + CFileItemList items; + return CDirectory::GetDirectory(strURL, items); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +bool CAddOnDirectory::create_directory( + void* hdl, + const char* strPath) +{ + try + { + if (!hdl || !strPath) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', strPath='%p')", + __FUNCTION__, hdl, strPath); + return CDirectory::Create(strPath); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +bool CAddOnDirectory::directory_exists( + void* hdl, + const char* strPath) +{ + try + { + if (!hdl || !strPath) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', strPath='%p')", + __FUNCTION__, hdl, strPath); + return CDirectory::Exists(strPath); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +bool CAddOnDirectory::remove_directory( + void* hdl, + const char* strPath) +{ + try + { + if (!hdl || !strPath) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', strPath='%p')", + __FUNCTION__, hdl, strPath); + // Empty directory + CFileItemList fileItems; + CDirectory::GetDirectory(strPath, fileItems); + for (int i = 0; i < fileItems.Size(); ++i) + CFile::Delete(fileItems.Get(i)->GetPath()); + + return CDirectory::Remove(strPath); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +/*\_____________________________________________________________________________ +\*/ + +bool CAddOnDirectory::get_directory( + void* hdl, + const char* strPath, + const char* mask, + VFSDirEntry** items, + unsigned int* num_items) +{ + try + { + if (!hdl || !strPath) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', strPath='%p')", + __FUNCTION__, hdl, strPath); + CFileItemList fileItems; + if (!CDirectory::GetDirectory(strPath, fileItems, mask, DIR_FLAG_NO_FILE_DIRS)) + return false; + + if (fileItems.Size() > 0) + { + *num_items = static_cast<unsigned int>(fileItems.Size()); + *items = (VFSDirEntry*)malloc(fileItems.Size()*sizeof(VFSDirEntry)); + + CFileItemListToVFSDirEntries(*items, *num_items, fileItems); + } + else + { + *num_items = 0; + *items = nullptr; + } + + return true; + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnDirectory::free_directory( + void* hdl, + VFSDirEntry* items, + unsigned int num_items) +{ + try + { + if (!hdl || !items) + throw ADDON::WrongValueException("CAddOnDirectory - %s - invalid data (handle='%p', items='%p')", + __FUNCTION__, hdl, items); + for (unsigned int i = 0; i < num_items; ++i) + { + free(items[i].label); + free(items[i].path); + } + free(items); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnDirectory::CFileItemListToVFSDirEntries( + VFSDirEntry* entries, + unsigned int num_entries, + const CFileItemList& items) +{ + if (!entries) + return; + + int toCopy = std::min(num_entries, (unsigned int)items.Size()); + + for (int i = 0; i < toCopy; ++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; + } +} + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.h b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.h new file mode 100644 index 0000000000..ee9d9d8c5c --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Directory.h @@ -0,0 +1,83 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +class CFileItemList; + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; +struct VFSDirEntry; + +namespace AddOn +{ +extern "C" +{ + + class CAddOnDirectory + { + public: + static void Init(struct CB_AddOnLib *interfaces); + /*\__________________________________________________________________________ + \*/ + static bool can_open_directory( + void* hdl, + const char* strURL); + + static bool create_directory( + void* hdl, + const char* strPath); + + static bool directory_exists( + void* hdl, + const char* strPath); + + static bool remove_directory( + void* hdl, + const char* strPath); + /*\__________________________________________________________________________ + \*/ + static bool get_directory( + void* hdl, + const char* strPath, + const char* mask, + VFSDirEntry** items, + unsigned int* num_items); + + static void free_directory( + void* hdl, + VFSDirEntry* items, + unsigned int num_items); + + private: + static void CFileItemListToVFSDirEntries( + VFSDirEntry* entries, + unsigned int num_entries, + const CFileItemList& items); + }; + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.cpp b/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.cpp new file mode 100644 index 0000000000..4d69ccdec1 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.cpp @@ -0,0 +1,513 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "FileItem.h" +#include "Util.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "utils/Crc32.h" +#include "filesystem/File.h" + +#include "Addon_File.h" + +using namespace ADDON; +using namespace XFILE; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AddOn +{ +extern "C" +{ + +void CAddOnFile::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->File.open_file = V2::KodiAPI::AddOn::CAddOnFile::open_file; + interfaces->File.open_file_for_write = V2::KodiAPI::AddOn::CAddOnFile::open_file_for_write; + interfaces->File.read_file = V2::KodiAPI::AddOn::CAddOnFile::read_file; + interfaces->File.read_file_string = V2::KodiAPI::AddOn::CAddOnFile::read_file_string; + interfaces->File.write_file = V2::KodiAPI::AddOn::CAddOnFile::write_file; + interfaces->File.flush_file = V2::KodiAPI::AddOn::CAddOnFile::flush_file; + interfaces->File.seek_file = V2::KodiAPI::AddOn::CAddOnFile::seek_file; + interfaces->File.truncate_file = V2::KodiAPI::AddOn::CAddOnFile::truncate_file; + interfaces->File.get_file_position = V2::KodiAPI::AddOn::CAddOnFile::get_file_position; + interfaces->File.get_file_length = V2::KodiAPI::AddOn::CAddOnFile::get_file_length; + interfaces->File.get_file_download_speed = V2::KodiAPI::AddOn::CAddOnFile::get_file_download_speed; + interfaces->File.close_file = V2::KodiAPI::AddOn::CAddOnFile::close_file; + interfaces->File.get_file_chunk_size = V2::KodiAPI::AddOn::CAddOnFile::get_file_chunk_size; + interfaces->File.file_exists = V2::KodiAPI::AddOn::CAddOnFile::file_exists; + interfaces->File.stat_file = V2::KodiAPI::AddOn::CAddOnFile::stat_file; + interfaces->File.delete_file = V2::KodiAPI::AddOn::CAddOnFile::delete_file; + interfaces->File.get_file_md5 = V2::KodiAPI::AddOn::CAddOnFile::get_file_md5; + interfaces->File.get_cache_thumb_name = V2::KodiAPI::AddOn::CAddOnFile::get_cache_thumb_name; + interfaces->File.make_legal_filename = V2::KodiAPI::AddOn::CAddOnFile::make_legal_filename; + interfaces->File.make_legal_path = V2::KodiAPI::AddOn::CAddOnFile::make_legal_path; + interfaces->File.curl_create = V2::KodiAPI::AddOn::CAddOnFile::curl_create; + interfaces->File.curl_add_option = V2::KodiAPI::AddOn::CAddOnFile::curl_add_option; + interfaces->File.curl_open = V2::KodiAPI::AddOn::CAddOnFile::curl_open; +} + +void* CAddOnFile::open_file( + void* hdl, + const char* strFileName, + unsigned int flags) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + CFile* file = new CFile; + if (file->Open(strFileName, flags)) + return ((void*)file); + + delete file; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +void* CAddOnFile::open_file_for_write( + void* hdl, + const char* strFileName, + bool bOverwrite) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + CFile* file = new CFile; + if (file->OpenForWrite(strFileName, bOverwrite)) + return ((void*)file); + + delete file; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +ssize_t CAddOnFile::read_file( + void* hdl, + void* file, + void* lpBuf, + size_t uiBufSize) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->Read(lpBuf, uiBufSize); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +bool CAddOnFile::read_file_string( + void* hdl, + void* file, + char* szLine, + int iLineLength) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->ReadString(szLine, iLineLength); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +ssize_t CAddOnFile::write_file( + void* hdl, + void* file, + const void* lpBuf, + size_t uiBufSize) +{ + try + { + if (!hdl || !file || !lpBuf) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p', lpBuf='%p')", + __FUNCTION__, hdl, file, lpBuf); + + return static_cast<CFile*>(file)->Write(lpBuf, uiBufSize); + } + HANDLE_ADDON_EXCEPTION + + return -1; +} + +void CAddOnFile::flush_file( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + static_cast<CFile*>(file)->Flush(); + } + HANDLE_ADDON_EXCEPTION +} + +int64_t CAddOnFile::seek_file( + void* hdl, + void* file, + int64_t iFilePosition, + int iWhence) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->Seek(iFilePosition, iWhence); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +int CAddOnFile::truncate_file( + void* hdl, + void* file, + int64_t iSize) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->Truncate(iSize); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +int64_t CAddOnFile::get_file_position( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->GetPosition(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +int64_t CAddOnFile::get_file_length( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->GetLength(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +double CAddOnFile::get_file_download_speed( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->GetDownloadSpeed(); + } + HANDLE_ADDON_EXCEPTION + + return 0.0f; +} + +void CAddOnFile::close_file( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + static_cast<CFile*>(file)->Close(); + delete static_cast<CFile*>(file); + } + HANDLE_ADDON_EXCEPTION +} + +int CAddOnFile::get_file_chunk_size( + void* hdl, + void* file) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", + __FUNCTION__, hdl, file); + + return static_cast<CFile*>(file)->GetChunkSize(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +bool CAddOnFile::file_exists( + void* hdl, + const char* strFileName, + bool bUseCache) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + return CFile::Exists(strFileName, bUseCache); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +int CAddOnFile::stat_file( + void* hdl, + const char* strFileName, + struct ::__stat64* buffer) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + return CFile::Stat(strFileName, buffer); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +bool CAddOnFile::delete_file( + void* hdl, + const char* strFileName) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + return CFile::Delete(strFileName); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +char* CAddOnFile::get_file_md5(void* hdl, const char* strFileName) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + std::string string = CUtil::GetFileMD5(strFileName); + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnFile::get_cache_thumb_name(void* hdl, const char* strFileName) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + Crc32 crc; + crc.ComputeFromLowerCase(strFileName); + std::string string = StringUtils::Format("%08x.tbn", (unsigned __int32)crc); + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnFile::make_legal_filename(void* hdl, const char* strFileName) +{ + try + { + if (!hdl || !strFileName) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strFileName='%p')", + __FUNCTION__, hdl, strFileName); + + std::string string = CUtil::MakeLegalFileName(strFileName);; + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnFile::make_legal_path(void* hdl, const char* strPath) +{ + try + { + if (!hdl || !strPath) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', strPath='%p')", + __FUNCTION__, hdl, strPath); + + std::string string = CUtil::MakeLegalPath(strPath);; + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +void* CAddOnFile::curl_create( + void* hdl, + const char* url) +{ + try + { + if (!hdl || !url) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', url='%p')", __FUNCTION__, hdl, url); + + CFile* file = new CFile; + if (file->CURLCreate(url)) + return static_cast<void*>(file); + + delete file; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +bool CAddOnFile::curl_add_option( + void* hdl, + void* file, + int type, + const char* name, + const char* value) +{ + try + { + if (!hdl || !file || !name || !value) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p', name='%p', value='%p')", __FUNCTION__, hdl, file, name, value); + + 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 ADDON::WrongValueException("CAddOnFile - %s - invalid curl option type"); + }; + + CFile* cfile = static_cast<CFile*>(file); + if (cfile) + return cfile->CURLAddOption(internalType, name, value); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +bool CAddOnFile::curl_open( + void* hdl, + void* file, + unsigned int flags) +{ + try + { + if (!hdl || !file) + throw ADDON::WrongValueException("CAddOnFile - %s - invalid data (handle='%p', file='%p')", __FUNCTION__, hdl, file); + + CFile* cfile = static_cast<CFile*>(file); + if (cfile) + return cfile->CURLOpen(flags); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.h b/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.h new file mode 100644 index 0000000000..f2380f02da --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_File.h @@ -0,0 +1,172 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include <stdlib.h> + +#ifdef _WIN32 // windows +#ifndef _SSIZE_T_DEFINED +typedef intptr_t ssize_t; +#define _SSIZE_T_DEFINED +#endif // !_SSIZE_T_DEFINED +#endif + +#if !defined(__stat64) + #if defined(__APPLE__) + #define __stat64 stat + #else + #define __stat64 stat64 + #endif +#endif + +struct __stat64; + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; + +namespace AddOn +{ +extern "C" +{ + + class CAddOnFile + { + public: + static void Init(struct CB_AddOnLib *interfaces); + + static void* open_file( + void* hdl, + const char* strFileName, + unsigned int flags); + + static void* open_file_for_write( + void* hdl, + const char* strFileName, + bool bOverwrite); + + static ssize_t read_file( + void* hdl, + void* file, + void* lpBuf, + size_t uiBufSize); + + static bool read_file_string( + void* hdl, + void* file, + char* szLine, + int iLineLength); + + static ssize_t write_file( + void* hdl, + void* file, + const void* lpBuf, + size_t uiBufSize); + + static void flush_file( + void* hdl, + void* file); + + static int64_t seek_file( + void* hdl, + void* file, + int64_t iFilePosition, + int iWhence); + + static int truncate_file( + void* hdl, + void* file, + int64_t iSize); + + static int64_t get_file_position( + void* hdl, + void* file); + + static int64_t get_file_length( + void* hdl, + void* file); + + static double get_file_download_speed( + void* hdl, + void* file); + + static void close_file( + void* hdl, + void* file); + + static int get_file_chunk_size( + void* hdl, + void* file); + + static bool file_exists( + void* hdl, + const char* strFileName, + bool bUseCache); + + static int stat_file( + void* hdl, + const char* strFileName, + struct __stat64* buffer); + + static bool delete_file( + void* hdl, + const char* strFileName); + + static char* get_file_md5( + void* hdl, + const char* strFileName); + + static char* get_cache_thumb_name( + void* hdl, + const char* strFileName); + + static char* make_legal_filename( + void* hdl, + const char* strFileName); + + static char* make_legal_path( + void* hdl, + const char* strPath); + + static void* curl_create( + void* hdl, + const char* url); + + static bool curl_add_option( + void* hdl, + void* file, + int type, + const char* name, + const char* value); + + static bool curl_open( + void* hdl, + void* file, + unsigned int flags); + }; + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.cpp b/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.cpp new file mode 100644 index 0000000000..756290dcdf --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.cpp @@ -0,0 +1,928 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_General.h" + +#include "Application.h" +#include "CompileInfo.h" +#include "LangInfo.h" +#include "addons/Addon.h" +#include "addons/GUIDialogAddonSettings.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/AddonInterfaces.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "cores/AudioEngine/AEFactory.h" +#include "dialogs/GUIDialogKaiToast.h" +#include "filesystem/SpecialProtocol.h" +#include "guilib/GUIAudioManager.h" +#include "interfaces/builtins/Builtins.h" +#include "interfaces/legacy/aojsonrpc.h" //<! @todo: On next cleanup to ./addons +#ifdef TARGET_POSIX +#include "linux/XMemUtils.h" +#endif +#include "messaging/ApplicationMessenger.h" +#include "settings/Settings.h" +#include "settings/lib/Setting.h" +#include "storage/MediaManager.h" +#include "utils/CharsetConverter.h" +#include "utils/LangCodeExpander.h" +#include "utils/log.h" +#include "utils/md5.h" +#include "utils/StringUtils.h" +#include "utils/XMLUtils.h" + +using namespace ADDON; +using namespace KODI::MESSAGING; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AddOn +{ +extern "C" +{ + +void CAddOnGeneral::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->General.get_addon_info = V2::KodiAPI::AddOn::CAddOnGeneral::get_addon_info; + interfaces->General.get_setting = V2::KodiAPI::AddOn::CAddOnGeneral::get_setting; + interfaces->General.open_settings_dialog = V2::KodiAPI::AddOn::CAddOnGeneral::open_settings_dialog; + interfaces->General.queue_notification = V2::KodiAPI::AddOn::CAddOnGeneral::queue_notification; + interfaces->General.queue_notification_from_type = V2::KodiAPI::AddOn::CAddOnGeneral::queue_notification_from_type; + interfaces->General.queue_notification_with_image = V2::KodiAPI::AddOn::CAddOnGeneral::queue_notification_with_image; + interfaces->General.get_md5 = V2::KodiAPI::AddOn::CAddOnGeneral::get_md5; + interfaces->General.unknown_to_utf8 = V2::KodiAPI::AddOn::CAddOnGeneral::unknown_to_utf8; + interfaces->General.get_localized_string = V2::KodiAPI::AddOn::CAddOnGeneral::get_localized_string; + interfaces->General.get_language = V2::KodiAPI::AddOn::CAddOnGeneral::get_language; + interfaces->General.get_dvd_menu_language = V2::KodiAPI::AddOn::CAddOnGeneral::get_dvd_menu_language; + interfaces->General.start_server = V2::KodiAPI::AddOn::CAddOnGeneral::start_server; + interfaces->General.audio_suspend = V2::KodiAPI::AddOn::CAddOnGeneral::audio_suspend; + interfaces->General.audio_resume = V2::KodiAPI::AddOn::CAddOnGeneral::audio_resume; + interfaces->General.get_volume = V2::KodiAPI::AddOn::CAddOnGeneral::get_volume; + interfaces->General.set_volume = V2::KodiAPI::AddOn::CAddOnGeneral::set_volume; + interfaces->General.is_muted = V2::KodiAPI::AddOn::CAddOnGeneral::is_muted; + interfaces->General.toggle_mute = V2::KodiAPI::AddOn::CAddOnGeneral::toggle_mute; + interfaces->General.get_optical_state = V2::KodiAPI::AddOn::CAddOnGeneral::get_optical_state; + interfaces->General.eject_optical_drive = V2::KodiAPI::AddOn::CAddOnGeneral::eject_optical_drive; + interfaces->General.kodi_version = V2::KodiAPI::AddOn::CAddOnGeneral::kodi_version; + interfaces->General.kodi_quit = V2::KodiAPI::AddOn::CAddOnGeneral::kodi_quit; + interfaces->General.htpc_shutdown = V2::KodiAPI::AddOn::CAddOnGeneral::htpc_shutdown; + interfaces->General.htpc_restart = V2::KodiAPI::AddOn::CAddOnGeneral::htpc_restart; + interfaces->General.execute_script = V2::KodiAPI::AddOn::CAddOnGeneral::execute_script; + interfaces->General.execute_builtin = V2::KodiAPI::AddOn::CAddOnGeneral::execute_builtin; + interfaces->General.execute_jsonrpc = V2::KodiAPI::AddOn::CAddOnGeneral::execute_jsonrpc; + interfaces->General.get_region = V2::KodiAPI::AddOn::CAddOnGeneral::get_region; + interfaces->General.get_free_mem = V2::KodiAPI::AddOn::CAddOnGeneral::get_free_mem; + interfaces->General.get_global_idle_time = V2::KodiAPI::AddOn::CAddOnGeneral::get_global_idle_time; + interfaces->General.translate_path = V2::KodiAPI::AddOn::CAddOnGeneral::translate_path; +} + +bool CAddOnGeneral::get_setting( + void* hdl, + const char* strSettingName, + void* settingValue, + bool global) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || strSettingName == nullptr || settingValue == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', strSettingName='%p', settingValue='%p')", + __FUNCTION__, addon, strSettingName, settingValue); + + CAddonInterfaceAddon* addonHelper = static_cast<CAddonInterfaceAddon*>(addon->AddOnLib_GetHelper()); + if (addonHelper == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addonHelper='%p')", + __FUNCTION__, addonHelper); + + CLog::Log(LOGDEBUG, "CAddOnGeneral - %s - add-on '%s' requests setting '%s' from '%s'", + __FUNCTION__, addonHelper->GetAddon()->Name().c_str(), strSettingName, global ? "global" : "add-on"); + + if (global) + { + std::string settingName = strSettingName; + if (StringUtils::EqualsNoCase(settingName, CSettings::SETTING_PVRPARENTAL_PIN) || + StringUtils::EqualsNoCase(settingName, CSettings::SETTING_MASTERLOCK_LOCKCODE) || + StringUtils::EqualsNoCase(settingName, CSettings::SETTING_SYSTEM_PLAYLISTSPATH) || + StringUtils::StartsWithNoCase(settingName, "services.") || // CSettings::SETTING_SERVICES_...) + StringUtils::StartsWithNoCase(settingName, "smb.") || // CSettings::SETTING_SMB_...) + StringUtils::StartsWithNoCase(settingName, "network.") || // CSettings::SETTING_NETWORK_...) + StringUtils::StartsWithNoCase(settingName, "cache")) // CSettings::SETTING_CACHE...) + { + CLog::Log(LOGERROR, "CAddOnGeneral - %s - add-on '%s' requests not allowed global setting '%s'!", + __FUNCTION__, addonHelper->GetAddon()->Name().c_str(), settingName.c_str()); + return false; + } + + + const CSetting* setting = CSettings::GetInstance().GetSetting(settingName); + if (setting == nullptr) + { + CLog::Log(LOGERROR, "CAddOnGeneral - %s - can't find global setting '%s'", __FUNCTION__, settingName.c_str()); + return false; + } + + switch (setting->GetType()) + { + case SettingTypeBool: + *(bool*) settingValue = dynamic_cast<const CSettingBool*>(setting)->GetValue(); + break; + case SettingTypeInteger: + *(int*) settingValue = dynamic_cast<const CSettingInt*>(setting)->GetValue(); + break; + case SettingTypeNumber: + *(float*) settingValue = dynamic_cast<const CSettingNumber*>(setting)->GetValue(); + break; + case SettingTypeString: + strcpy((char*) settingValue, dynamic_cast<const CSettingString*>(setting)->GetValue().c_str()); + break; + default: + CLog::Log(LOGERROR, "CAddOnGeneral - %s - not supported type for global setting '%s'", __FUNCTION__, settingName.c_str()); + return false; + } + return true; + } + + if (strcasecmp(strSettingName, "__addonpath__") == 0) + { + strcpy((char*) settingValue, addonHelper->GetAddon()->Path().c_str()); + return true; + } + + if (!addonHelper->GetAddon()->ReloadSettings()) + { + CLog::Log(LOGERROR, "CAddOnGeneral - %s - could't get settings for add-on '%s'", __FUNCTION__, addonHelper->GetAddon()->Name().c_str()); + return false; + } + + const TiXmlElement *category = addonHelper->GetAddon()->GetSettingsXML()->FirstChildElement("category"); + if (!category) // add a default one... + category = addonHelper->GetAddon()->GetSettingsXML(); + + while (category) + { + const TiXmlElement *setting = category->FirstChildElement("setting"); + while (setting) + { + const std::string id = XMLUtils::GetAttribute(setting, "id"); + const std::string type = XMLUtils::GetAttribute(setting, "type"); + + if (id == strSettingName && !type.empty()) + { + if (type == "text" || type == "ipaddress" || + type == "folder" || type == "action" || + type == "music" || type == "pictures" || + type == "programs" || type == "fileenum" || + type == "file" || type == "labelenum") + { + strcpy((char*) settingValue, addonHelper->GetAddon()->GetSetting(id).c_str()); + return true; + } + else if (type == "number" || type == "enum") + { + *(int*) settingValue = (int) atoi(addonHelper->GetAddon()->GetSetting(id).c_str()); + return true; + } + else if (type == "bool") + { + *(bool*) settingValue = (bool) (addonHelper->GetAddon()->GetSetting(id) == "true" ? true : false); + return true; + } + else if (type == "slider") + { + const char *option = setting->Attribute("option"); + if (option && strcmpi(option, "int") == 0) + { + *(int*) settingValue = (int) atoi(addonHelper->GetAddon()->GetSetting(id).c_str()); + return true; + } + else + { + *(float*) settingValue = (float) atof(addonHelper->GetAddon()->GetSetting(id).c_str()); + return true; + } + } + } + setting = setting->NextSiblingElement("setting"); + } + category = category->NextSiblingElement("category"); + } + CLog::Log(LOGERROR, "CAddOnGeneral - %s - can't find setting '%s' in '%s'", __FUNCTION__, strSettingName, addonHelper->GetAddon()->Name().c_str()); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnGeneral::open_settings_dialog(void* hdl) +{ + try + { + if (hdl == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", + __FUNCTION__, hdl); + + CAddonInterfaces* addonCB = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addonCB == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p')", + __FUNCTION__, addonCB); + + // show settings dialog + ADDON::AddonPtr addon(addonCB->GetAddon()); + CGUIDialogAddonSettings::ShowAndGetInput(addon); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::queue_notification( + void* hdl, + const int type, + const char* strMessage) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || strMessage == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', strMessage='%p')", + __FUNCTION__, addon, strMessage); + + CAddonInterfaceAddon* addonHelper = static_cast<CAddonInterfaceAddon*>(addon->AddOnLib_GetHelper()); + if (addonHelper == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addonHelper='%p')", + __FUNCTION__, addonHelper); + + switch (type) + { + case QUEUE_WARNING: + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Warning, addonHelper->GetAddon()->Name(), strMessage, 3000, true); + CLog::Log(LOGDEBUG, "CAddOnGeneral - %s - %s - Warning Message: '%s'", __FUNCTION__, addonHelper->GetAddon()->Name().c_str(), strMessage); + break; + + case QUEUE_ERROR: + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, addonHelper->GetAddon()->Name(), strMessage, 3000, true); + CLog::Log(LOGDEBUG, "CAddOnGeneral - %s - %s - Error Message : '%s'", __FUNCTION__, addonHelper->GetAddon()->Name().c_str(), strMessage); + break; + + case QUEUE_INFO: + default: + CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Info, addonHelper->GetAddon()->Name(), strMessage, 3000, false); + CLog::Log(LOGDEBUG, "CAddOnGeneral - %s - %s - Info Message : '%s'", __FUNCTION__, addonHelper->GetAddon()->Name().c_str(), strMessage); + break; + } + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::queue_notification_from_type( + void* hdl, + const int type, + const char* aCaption, + const char* aDescription, + unsigned int displayTime, + bool withSound, + unsigned int messageTime) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || aCaption == nullptr || aDescription == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', aImageFile='%p', aDescription='%p')", + __FUNCTION__, addon, aCaption, aDescription); + + CGUIDialogKaiToast::eMessageType usedType; + switch (type) + { + case QUEUE_WARNING: + usedType = CGUIDialogKaiToast::Warning; + break; + case QUEUE_ERROR: + usedType = CGUIDialogKaiToast::Error; + break; + case QUEUE_INFO: + default: + usedType = CGUIDialogKaiToast::Info; + break; + } + CGUIDialogKaiToast::QueueNotification(usedType, aCaption, aDescription, displayTime, withSound, messageTime); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::queue_notification_with_image( + void* hdl, + const char* aImageFile, + const char* aCaption, + const char* aDescription, + unsigned int displayTime, + bool withSound, + unsigned int messageTime) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || aImageFile == nullptr || aCaption == nullptr || aDescription == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', aImageFile='%p', aCaption='%p', aDescription='%p')", + __FUNCTION__, addon, aImageFile, aCaption, aDescription); + + CGUIDialogKaiToast::QueueNotification(aImageFile, aCaption, aDescription, displayTime, withSound, messageTime); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::get_md5(const char* text, char& md5) +{ + try + { + if (!text) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (text='%p')", __FUNCTION__, text); + + std::string md5Int = XBMC::XBMC_MD5::GetMD5(std::string(text)); + strncpy(&md5, md5Int.c_str(), 40); + } + HANDLE_ADDON_EXCEPTION +} + +char* CAddOnGeneral::unknown_to_utf8( + void* hdl, + const char* strSource, + bool& ret, + bool failOnBadChar) +{ + try + { + if (!hdl || !strSource) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p', strSource='%p')", __FUNCTION__, hdl, strSource); + + std::string string; + ret = g_charsetConverter.unknownToUTF8(strSource, string, failOnBadChar); + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnGeneral::get_localized_string( + void* hdl, + long dwCode) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + else if (g_application.m_bStop) + return nullptr; + + CAddonInterfaceAddon* addonHelper = static_cast<CAddonInterfaceAddon*>(static_cast<CAddonInterfaces*>(addon)->AddOnLib_GetHelper()); + + std::string string; + if ((dwCode >= 30000 && dwCode <= 30999) || (dwCode >= 32000 && dwCode <= 32999)) + string = g_localizeStrings.GetAddonString(addonHelper->GetAddon()->ID(), dwCode).c_str(); + else + string = g_localizeStrings.Get(dwCode).c_str(); + + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +void CAddOnGeneral::get_language(void* hdl, char& language, unsigned int& iMaxStringSize, int format, bool region) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + std::string str = g_langInfo.GetEnglishLanguageName(); + switch (format) + { + case LANG_FMT_ISO_639_1: + { + std::string langCode; + g_LangCodeExpander.ConvertToISO6391(str, langCode); + str = langCode; + if (region) + { + std::string region2Code; + g_LangCodeExpander.ConvertToISO6391(g_langInfo.GetRegionLocale(), region2Code); + if (!region2Code.empty()) + str += "-" + region2Code; + } + break; + } + case LANG_FMT_ISO_639_2: + { + std::string langCode; + g_LangCodeExpander.ConvertToISO6392T(str, langCode); + str = langCode; + if (region) + { + std::string region3Code; + g_LangCodeExpander.ConvertToISO6392T(g_langInfo.GetRegionLocale(), region3Code); + if (!region3Code.empty()) + str += "-" + region3Code; + } + break; + } + case LANG_FMT_ENGLISH_NAME: + default: + { + if (region) + str += "-" + g_langInfo.GetCurrentRegion(); + break; + } + } + + strncpy(&language, str.c_str(), iMaxStringSize); + iMaxStringSize = str.length(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::get_dvd_menu_language(void* hdl, char& language, unsigned int& iMaxStringSize) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + std::string str = g_langInfo.GetDVDMenuLanguage(); + strncpy(&language, str.c_str(), iMaxStringSize); + iMaxStringSize = str.length(); + } + HANDLE_ADDON_EXCEPTION +} + +bool CAddOnGeneral::start_server(void* hdl, int typ, bool bStart, bool bWait) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", + __FUNCTION__, hdl); + + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p')", + __FUNCTION__, addon); + + CApplication::ESERVERS iTyp; + switch (typ) + { + case ADDON_ES_WEBSERVER: iTyp = CApplication::ES_WEBSERVER; break; + case ADDON_ES_AIRPLAYSERVER: iTyp = CApplication::ES_AIRPLAYSERVER; break; + case ADDON_ES_JSONRPCSERVER: iTyp = CApplication::ES_JSONRPCSERVER; break; + case ADDON_ES_UPNPRENDERER: iTyp = CApplication::ES_UPNPRENDERER; break; + case ADDON_ES_UPNPSERVER: iTyp = CApplication::ES_UPNPSERVER; break; + case ADDON_ES_EVENTSERVER: iTyp = CApplication::ES_EVENTSERVER; break; + case ADDON_ES_ZEROCONF: iTyp = CApplication::ES_ZEROCONF; break; + default: + CLog::Log(LOGERROR, "CAddOnGeneral - %s - %s - Error Message : Not supported server type '%i'", + __FUNCTION__, addon->GetAddon()->Name().c_str(), typ); + return false; + } + return g_application.StartServer(iTyp, bStart, bWait); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnGeneral::audio_suspend(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + CAEFactory::Suspend(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::audio_resume(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + CAEFactory::Resume(); + } + HANDLE_ADDON_EXCEPTION +} + +float CAddOnGeneral::get_volume(void* hdl, bool percentage) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + return g_application.GetVolume(percentage); + } + HANDLE_ADDON_EXCEPTION + + return 0.0f; +} + +void CAddOnGeneral::set_volume( + void* hdl, + float value, + bool isPercentage) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + g_application.SetVolume(value, isPercentage); + } + HANDLE_ADDON_EXCEPTION +} + +bool CAddOnGeneral::is_muted(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + return g_application.IsMutedInternal(); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnGeneral::toggle_mute(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + g_application.ToggleMute(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::enable_nav_sounds(void* hdl, bool yesNo) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", + __FUNCTION__, hdl); + + g_audioManager.Enable(yesNo); + } + HANDLE_ADDON_EXCEPTION +} + +long CAddOnGeneral::get_optical_state(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + return g_mediaManager.GetDriveStatus(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +bool CAddOnGeneral::eject_optical_drive(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + return CBuiltins::GetInstance().Execute("EjectTray") == 0 ? true : false; + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnGeneral::kodi_version( + void* hdl, + char*& compile_name, + int& major, + int& minor, + char*& revision, + char*& tag, + char*& tagversion) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + 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"); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::kodi_quit(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + CApplicationMessenger::GetInstance().PostMsg(TMSG_QUIT); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::htpc_shutdown(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + CApplicationMessenger::GetInstance().PostMsg(TMSG_SHUTDOWN); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::htpc_restart(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + CApplicationMessenger::GetInstance().PostMsg(TMSG_RESTART); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::execute_script(void* hdl, const char* script) +{ + try + { + if (!hdl || !script) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p', script='%p')", + __FUNCTION__, hdl, script); + + CApplicationMessenger::GetInstance().PostMsg(TMSG_EXECUTE_SCRIPT, -1, -1, nullptr, script); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnGeneral::execute_builtin(void* hdl, const char* function, bool wait) +{ + try + { + if (!hdl || !function) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p', function='%p')", + __FUNCTION__, hdl, function); + + if (wait) + CApplicationMessenger::GetInstance().SendMsg(TMSG_EXECUTE_BUILT_IN, -1, -1, nullptr, function); + else + CApplicationMessenger::GetInstance().PostMsg(TMSG_EXECUTE_BUILT_IN, -1, -1, nullptr, function); + } + HANDLE_ADDON_EXCEPTION +} + +char* CAddOnGeneral::execute_jsonrpc(void* hdl, const char* jsonrpccommand) +{ + try + { + if (!hdl || !jsonrpccommand) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p', jsonrpccommand='%p')", + __FUNCTION__, hdl, jsonrpccommand); +#ifdef HAS_JSONRPC + CAddOnTransport transport; + CAddOnTransport::CAddOnClient client; + std::string string = JSONRPC::CJSONRPC::MethodCall(/*method*/ jsonrpccommand, &transport, &client); + char* buffer = strdup(string.c_str()); + return buffer; +#else + THROW_UNIMP("execute_jsonrpc"); +#endif + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnGeneral::get_region(void* hdl, const char* id) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || id == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', id='%p')", + __FUNCTION__, addon, id); + std::string result; + if (strcmpi(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 (strcmpi(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 (strcmpi(id, "tempunit") == 0) + result = g_langInfo.GetTemperatureUnitString(); + else if (strcmpi(id, "speedunit") == 0) + result = g_langInfo.GetSpeedUnitString(); + else if (strcmpi(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 (strcmpi(id, "meridiem") == 0) + result = StringUtils::Format("%s/%s", + g_langInfo.GetMeridiemSymbol(MeridiemSymbolAM).c_str(), + g_langInfo.GetMeridiemSymbol(MeridiemSymbolPM).c_str()); + else + throw ADDON::WrongValueException("CAddOnGeneral - %s - add-on '%s' requests invalid id '%s'", + __FUNCTION__, addon->GetAddon()->Name().c_str(), id); + + char* buffer = strdup(result.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +long CAddOnGeneral::get_free_mem(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", + __FUNCTION__, hdl); + + MEMORYSTATUSEX stat; + stat.dwLength = sizeof(MEMORYSTATUSEX); + GlobalMemoryStatusEx(&stat); + return (long)(stat.ullAvailPhys / ( 1024 * 1024 )); + } + HANDLE_ADDON_EXCEPTION + + return -1; +} + +int CAddOnGeneral::get_global_idle_time(void* hdl) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p')", + __FUNCTION__, hdl); + + return g_application.GlobalIdleTime(); + } + HANDLE_ADDON_EXCEPTION + + return -1; +} + +char* CAddOnGeneral::get_addon_info(void* hdl, const char* id) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || id == nullptr) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (addon='%p', id='%p')", + __FUNCTION__, addon, id); + + ADDON::CAddon* pAddon = addon->GetAddon(); + std::string str; + if (strcmpi(id, "author") == 0) + str = pAddon->Author(); + else if (strcmpi(id, "changelog") == 0) + str = pAddon->ChangeLog(); + else if (strcmpi(id, "description") == 0) + str = pAddon->Description(); + else if (strcmpi(id, "disclaimer") == 0) + str = pAddon->Disclaimer(); + else if (strcmpi(id, "fanart") == 0) + str = pAddon->FanArt(); + else if (strcmpi(id, "icon") == 0) + str = pAddon->Icon(); + else if (strcmpi(id, "id") == 0) + str = pAddon->ID(); + else if (strcmpi(id, "name") == 0) + str = pAddon->Name(); + else if (strcmpi(id, "path") == 0) + str = pAddon->Path(); + else if (strcmpi(id, "profile") == 0) + str = pAddon->Profile(); + else if (strcmpi(id, "summary") == 0) + str = pAddon->Summary(); + else if (strcmpi(id, "type") == 0) + str = ADDON::TranslateType(pAddon->Type()); + else if (strcmpi(id, "version") == 0) + str = pAddon->Version().asString(); + else + throw ADDON::WrongValueException("CAddOnGeneral - %s - add-on '%s' requests invalid id '%s'", + __FUNCTION__, addon->GetAddon()->Name().c_str(), id); + + char* buffer = strdup(str.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnGeneral::translate_path(void* hdl, const char* path) +{ + try + { + if (!hdl || !path) + throw ADDON::WrongValueException("CAddOnGeneral - %s - invalid data (handle='%p', path='%p')", + __FUNCTION__, hdl, path); + + std::string string = CSpecialProtocol::TranslatePath(path); + char* buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.h b/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.h new file mode 100644 index 0000000000..17d775046f --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_General.h @@ -0,0 +1,188 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; + +namespace AddOn +{ +extern "C" +{ + + class CAddOnGeneral + { + public: + static void Init(struct CB_AddOnLib *interfaces); + + static char* get_addon_info( + void* hdl, + const char* id); + + static void queue_notification( + void* hdl, + const int type, + const char* strMessage); + + static bool get_setting( + void* hdl, + const char* strSettingName, + void* settingValue, + bool global); + + static void open_settings_dialog( + void* hdl); + + static void queue_notification_from_type( + void* hdl, + const int type, + const char* aCaption, + const char* aDescription, + unsigned int displayTime, + bool withSound, + unsigned int messageTime); + + static void queue_notification_with_image( + void* hdl, + const char* aImageFile, + const char* aCaption, + const char* aDescription, + unsigned int displayTime, + bool withSound, + unsigned int messageTime); + + static void get_md5( + const char* text, + char& md5); + + static char* unknown_to_utf8( + void* hdl, + const char* strSource, + bool& ret, + bool failOnBadChar); + + static char* get_localized_string( + void* hdl, + long dwCode); + + static void get_language( + void* hdl, + char& language, + unsigned int& iMaxStringSize, + int format, + bool region); + + static void get_dvd_menu_language( + void* hdl, + char& language, + unsigned int& iMaxStringSize); + + static bool start_server( + void* hdl, + int iTyp, + bool bStart, + bool bWait); + + static void audio_suspend( + void* hdl); + + static void audio_resume( + void* hdl); + + static float get_volume( + void* hdl, + bool percentage); + + static void set_volume( + void* hdl, + float value, + bool isPercentage); + + static bool is_muted( + void* hdl); + + static void toggle_mute( + void* hdl); + + static void enable_nav_sounds( + void* hdl, + bool yesNo); + + static long get_optical_state( + void* hdl); + + static bool eject_optical_drive( + void* hdl); + + static void kodi_version( + void* hdl, + char*& compile_name, + int& major, + int& minor, + char*& revision, + char*& tag, + char*& tagversion); + + static void kodi_quit( + void* hdl); + + static void htpc_shutdown( + void* hdl); + + static void htpc_restart( + void* hdl); + + static void execute_script( + void* hdl, + const char* script); + + static void execute_builtin( + void* hdl, + const char* function, + bool wait); + + static char* execute_jsonrpc( + void* hdl, + const char* jsonrpccommand); + + static char* get_region( + void* hdl, + const char* id); + + static long get_free_mem( + void* hdl); + + static int get_global_idle_time( + void* hdl); + + static char* translate_path( + void* hdl, + const char* path); + }; + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.cpp b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.cpp new file mode 100644 index 0000000000..103b901c0b --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_Network.h" + +#include "Application.h" +#include "PasswordManager.h" +#include "URL.h" +#include "addons/Addon.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "network/DNSNameCache.h" +#include "network/Network.h" + +using namespace ADDON; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AddOn +{ +extern "C" +{ + +void CAddOnNetwork::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->Network.wake_on_lan = V2::KodiAPI::AddOn::CAddOnNetwork::wake_on_lan; + interfaces->Network.get_ip_address = V2::KodiAPI::AddOn::CAddOnNetwork::get_ip_address; + interfaces->Network.dns_lookup = V2::KodiAPI::AddOn::CAddOnNetwork::dns_lookup; + interfaces->Network.url_encode = V2::KodiAPI::AddOn::CAddOnNetwork::url_encode; +} + +bool CAddOnNetwork::wake_on_lan( + void* hdl, + const char* mac) +{ + try + { + if (!hdl || !mac) + throw ADDON::WrongValueException("CAddOnNetwork - %s - invalid data (handle='%p', mac='%p')", __FUNCTION__, hdl, mac); + + return g_application.getNetwork().WakeOnLan(mac); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnNetwork::get_ip_address( + void* hdl, + char& ip, + unsigned int& iMaxStringSize) +{ + try + { + if (!hdl) + throw ADDON::WrongValueException("CAddOnNetwork - %s - invalid data (handle='%p')", __FUNCTION__, hdl); + + std::string titleIP; + CNetworkInterface* iface = g_application.getNetwork().GetFirstConnectedInterface(); + if (iface) + titleIP = iface->GetCurrentIPAddress(); + else + titleIP = "127.0.0.1"; + + strncpy(&ip, titleIP.c_str(), iMaxStringSize); + } + HANDLE_ADDON_EXCEPTION +} + +char* CAddOnNetwork::dns_lookup( + void* hdl, + const char* url, + bool& ret) +{ + try + { + if (!hdl || !url) + throw ADDON::WrongValueException("CAddOnNetwork - %s - invalid data (handle='%p', url='%p')", __FUNCTION__, hdl, url); + + std::string string; + ret = CDNSNameCache::Lookup(url, string); + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +char* CAddOnNetwork::url_encode( + void* hdl, + const char* url) +{ + try + { + if (!hdl || !url) + throw ADDON::WrongValueException("CAddOnNetwork - %s - invalid data (handle='%p', url='%p')", __FUNCTION__, hdl, url); + + std::string string = CURL::Encode(url); + char* buffer = nullptr; + if (!string.empty()) + buffer = strdup(string.c_str()); + return buffer; + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.h b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.h new file mode 100644 index 0000000000..6bffa1a2df --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Addon_Network.h @@ -0,0 +1,62 @@ +#pragma once +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; + +namespace AddOn +{ +extern "C" +{ + + class CAddOnNetwork + { + public: + static void Init(struct CB_AddOnLib *interfaces); + + static bool wake_on_lan( + void* hdl, + const char* mac); + + static void get_ip_address( + void* hdl, + char& ip, + unsigned int& iMaxStringSize); + + static char* dns_lookup( + void* hdl, + const char* url, + bool& ret); + + static char* url_encode( + void* hdl, + const char* url); + }; + +} /* extern "C" */ +} /* namespace AddOn */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/Addon/CMakeLists.txt b/xbmc/addons/binary/interfaces/api2/Addon/CMakeLists.txt new file mode 100644 index 0000000000..d8bd33880c --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/CMakeLists.txt @@ -0,0 +1,20 @@ +set(SOURCES Addon_General.cpp + Addon_Audio.cpp + Addon_Directory.cpp + Addon_File.cpp + Addon_Network.cpp) + +set(HEADERS Addon_General.h + Addon_Audio.h + Addon_Directory.h + Addon_File.h + Addon_Network.h + ../../../../kodi-addon-dev-kit/src/api2/version.h) + +include_directories(${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include) + +core_add_library(api2AddonInterfaces_Addon) + +if(ENABLE_INTERNAL_FFMPEG) + add_dependencies(api2AddonInterfaces_Addon ffmpeg) +endif() diff --git a/xbmc/addons/binary/interfaces/api2/Addon/Makefile.in b/xbmc/addons/binary/interfaces/api2/Addon/Makefile.in new file mode 100644 index 0000000000..ff6266dd81 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Addon/Makefile.in @@ -0,0 +1,10 @@ +SRCS=Addon_General.cpp \ + Addon_Audio.cpp \ + Addon_Directory.cpp \ + Addon_File.cpp \ + Addon_Network.cpp \ + +LIB=addon-interface-addon.a + +include @abs_top_srcdir@/Makefile.include +-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS))) diff --git a/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.cpp b/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.cpp new file mode 100644 index 0000000000..c4f07d74d6 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.cpp @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2012-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "AddonInterfaceBase.h" + +#include "Addon/Addon_Audio.h" +#include "Addon/Addon_Directory.h" +#include "Addon/Addon_File.h" +#include "Addon/Addon_General.h" +#include "Addon/Addon_Network.h" +#include "AudioEngine/Addon_AudioEngineGeneral.h" +#include "AudioEngine/Addon_AudioEngineStream.h" +#include "GUI/Addon_GUIGeneral.h" +#include "GUI/Addon_GUIControlButton.h" +#include "GUI/Addon_GUIControlEdit.h" +#include "GUI/Addon_GUIControlFadeLabel.h" +#include "GUI/Addon_GUIControlImage.h" +#include "GUI/Addon_GUIControlLabel.h" +#include "GUI/Addon_GUIControlProgress.h" +#include "GUI/Addon_GUIControlRadioButton.h" +#include "GUI/Addon_GUIControlRendering.h" +#include "GUI/Addon_GUIControlSettingsSlider.h" +#include "GUI/Addon_GUIControlSlider.h" +#include "GUI/Addon_GUIControlSpin.h" +#include "GUI/Addon_GUIControlTextBox.h" +#include "GUI/Addon_GUIDialogExtendedProgressBar.h" +#include "GUI/Addon_GUIDialogFileBrowser.h" +#include "GUI/Addon_GUIDialogKeyboard.h" +#include "GUI/Addon_GUIDialogNumeric.h" +#include "GUI/Addon_GUIDialogOK.h" +#include "GUI/Addon_GUIDialogProgress.h" +#include "GUI/Addon_GUIDialogSelect.h" +#include "GUI/Addon_GUIDialogTextViewer.h" +#include "GUI/Addon_GUIDialogYesNo.h" +#include "GUI/Addon_GUIListItem.h" +#include "GUI/Addon_GUIWindow.h" +#include "InputStream/Addon_InputStream.h" +#include "PVR/Addon_PVR.h" +#include "Peripheral/Addon_Peripheral.h" +#include "Player/Addon_InfoTagMusic.h" +#include "Player/Addon_InfoTagVideo.h" +#include "Player/Addon_PlayList.h" +#include "Player/Addon_Player.h" + +#include "Application.h" +#include "addons/Addon.h" +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/AddonInterfaces.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "addons/kodi-addon-dev-kit/src/api2/version.h" +#include "utils/log.h" + +using namespace ADDON; + +namespace V2 +{ +namespace KodiAPI +{ +extern "C" +{ + +CAddonInterfaceAddon::CAddonInterfaceAddon(CAddon* addon) + : ADDON::IAddonInterface(addon, ADDON_API_LEVEL, ADDON_API_VERSION), + m_callbacks(new CB_AddOnLib) +{ + m_callbacks->addon_log_msg = addon_log_msg; + m_callbacks->free_string = free_string; + + AddOn::CAddOnGeneral::Init(m_callbacks); + AddOn::CAddOnAudio::Init(m_callbacks); + AddOn::CAddOnDirectory::Init(m_callbacks); + AddOn::CAddOnFile::Init(m_callbacks); + AddOn::CAddOnNetwork::Init(m_callbacks); + AudioEngine::CAddOnAEGeneral::Init(m_callbacks); + AudioEngine::CAddOnAEStream::Init(m_callbacks); + GUI::CAddOnGUIGeneral::Init(m_callbacks); + GUI::CAddOnControl_Button::Init(m_callbacks); + GUI::CAddOnControl_Edit::Init(m_callbacks); + GUI::CAddOnControl_FadeLabel::Init(m_callbacks); + GUI::CAddOnControl_Image::Init(m_callbacks); + GUI::CAddOnControl_Label::Init(m_callbacks); + GUI::CAddOnControl_Progress::Init(m_callbacks); + GUI::CAddOnControl_RadioButton::Init(m_callbacks); + GUI::CAddOnControl_Rendering::Init(m_callbacks); + GUI::CAddOnControl_SettingsSlider::Init(m_callbacks); + GUI::CAddOnControl_Slider::Init(m_callbacks); + GUI::CAddOnControl_Spin::Init(m_callbacks); + GUI::CAddOnControl_TextBox::Init(m_callbacks); + GUI::CAddOnDialog_ExtendedProgress::Init(m_callbacks); + GUI::CAddOnDialog_FileBrowser::Init(m_callbacks); + GUI::CAddOnDialog_Keyboard::Init(m_callbacks); + GUI::CAddOnDialog_Numeric::Init(m_callbacks); + GUI::CAddOnDialog_OK::Init(m_callbacks); + GUI::CAddOnDialog_Progress::Init(m_callbacks); + GUI::CAddOnDialog_Select::Init(m_callbacks); + GUI::CAddOnDialog_TextViewer::Init(m_callbacks); + GUI::CAddOnDialog_YesNo::Init(m_callbacks); + GUI::CAddOnListItem::Init(m_callbacks); + GUI::CAddOnWindow::Init(m_callbacks); + InputStream::CAddOnInputStream::Init(m_callbacks); + PVR::CAddonInterfacesPVR::Init(m_callbacks); + Peripheral::CAddOnPeripheral::Init(m_callbacks); + Player::CAddOnPlayList::Init(m_callbacks); + Player::CAddOnPlayer::Init(m_callbacks); + Player::CAddOnInfoTagMusic::Init(m_callbacks); + Player::CAddOnInfoTagVideo::Init(m_callbacks); +} + +CAddonInterfaceAddon::~CAddonInterfaceAddon() +{ + delete m_callbacks; +} + +void CAddonInterfaceAddon::addon_log_msg( + void* hdl, + const int addonLogLevel, + const char* strMessage) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon == nullptr || strMessage == nullptr) + throw ADDON::WrongValueException("CAddonCB_General - %s - invalid data (addon='%p', strMessage='%p')", + __FUNCTION__, addon, strMessage); + + CAddonInterfaceAddon* addonHelper = static_cast<CAddonInterfaceAddon*>(addon->AddOnLib_GetHelper()); + if (addonHelper == nullptr) + { + throw ADDON::WrongValueException("CAddonCB_General - %s - invalid data (addonHelper='%p')", + __FUNCTION__, addonHelper); + } + + int logLevel = LOGNONE; + switch (addonLogLevel) + { + case ADDON_LOG_FATAL: + logLevel = LOGFATAL; + break; + case ADDON_LOG_SEVERE: + logLevel = LOGSEVERE; + break; + case ADDON_LOG_ERROR: + logLevel = LOGERROR; + break; + case ADDON_LOG_WARNING: + logLevel = LOGWARNING; + break; + case ADDON_LOG_NOTICE: + logLevel = LOGNOTICE; + break; + case ADDON_LOG_INFO: + logLevel = LOGINFO; + break; + case ADDON_LOG_DEBUG: + logLevel = LOGDEBUG; + break; + default: + break; + } + + CLog::Log(logLevel, "AddOnLog: %s: %s", addonHelper->GetAddon()->Name().c_str(), strMessage); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddonInterfaceAddon::free_string(void* hdl, char* str) +{ + try + { + if (!hdl || !str) + throw ADDON::WrongValueException("CAddonCB_General - %s - invalid data (handle='%p', str='%p')", __FUNCTION__, hdl, str); + + free(str); + } + HANDLE_ADDON_EXCEPTION +} + +} /* extern "C" */ +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.h b/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.h new file mode 100644 index 0000000000..149cbad5bc --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AddonInterfaceBase.h @@ -0,0 +1,63 @@ +#pragma once +/* + * Copyright (C) 2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +//#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "addons/binary/interfaces/IAddonInterface.h" + +namespace ADDON { class CAddon; } + +namespace V2 +{ +namespace KodiAPI +{ +extern "C" +{ + + struct CB_AddOnLib; + + class CAddonInterfaceAddon + : public ADDON::IAddonInterface + { + public: + CAddonInterfaceAddon(ADDON::CAddon* addon); + virtual ~CAddonInterfaceAddon(); + + static void addon_log_msg( + void* hdl, + const int addonLogLevel, + const char* strMessage); + + static void free_string( + void* hdl, + char* str); + + /*! + * @return The callback table. + */ + CB_AddOnLib *GetCallbacks() { return m_callbacks; } + + private: + CB_AddOnLib *m_callbacks; /*!< callback addresses */ + }; + +} /* extern "C" */ +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.cpp b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.cpp new file mode 100644 index 0000000000..79b12aa2ae --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.cpp @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2014-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_AudioEngineGeneral.h" + +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "cores/AudioEngine/AEFactory.h" +#include "cores/AudioEngine/DSPAddons/ActiveAEDSP.h" +#include "cores/AudioEngine/DSPAddons/ActiveAEDSPMode.h" +#include "cores/AudioEngine/Interfaces/AEStream.h" +#include "cores/AudioEngine/Utils/AEChannelData.h" +#include "utils/log.h" + +using namespace ADDON; +using namespace ActiveAE; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AudioEngine +{ +extern "C" +{ + +void CAddOnAEGeneral::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->AudioEngine.add_dsp_menu_hook = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::add_dsp_menu_hook; + interfaces->AudioEngine.remove_dsp_menu_hook = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::remove_dsp_menu_hook; + + interfaces->AudioEngine.register_dsp_mode = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::register_dsp_mode; + interfaces->AudioEngine.unregister_dsp_Mode = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::unregister_dsp_mode; + + interfaces->AudioEngine.get_current_sink_format = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::get_current_sink_format; + + interfaces->AudioEngine.make_stream = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::make_stream; + interfaces->AudioEngine.free_stream = V2::KodiAPI::AudioEngine::CAddOnAEGeneral::free_stream; +} + +/*\_____________________________________________________________________________ +\*/ + +CActiveAEDSPAddon *CAddOnAEGeneral::GetAudioDSPAddon(void *hdl) +{ + try + { + CAddonInterfaces* addon = static_cast<CAddonInterfaces*>(static_cast<AddonCB*>(hdl)->addonData); + if (addon && addon->AddOnLib_GetHelper()) + return dynamic_cast<CActiveAEDSPAddon*>(static_cast<CAddonInterfaceAddon*>(addon->AddOnLib_GetHelper())->GetAddon()); + + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid handler data", __FUNCTION__); + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +/*\_____________________________________________________________________________ +\*/ + +void CAddOnAEGeneral::add_dsp_menu_hook(void *hdl, AE_DSP_MENUHOOK *hook) +{ + try + { + CActiveAEDSPAddon *addon = GetAudioDSPAddon(hdl); + if (!hook || !addon) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid data (addon='%p', hook='%p')", __FUNCTION__, addon, hook); + + AE_DSP_MENUHOOKS *hooks = addon->GetMenuHooks(); + if (hooks) + { + AE_DSP_MENUHOOK hookInt; + hookInt.iHookId = hook->iHookId; + hookInt.iLocalizedStringId = hook->iLocalizedStringId; + hookInt.category = hook->category; + hookInt.iRelevantModeId = hook->iRelevantModeId; + hookInt.bNeedPlayback = hook->bNeedPlayback; + + /* add this new hook */ + hooks->push_back(hookInt); + } + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAEGeneral::remove_dsp_menu_hook(void *hdl, AE_DSP_MENUHOOK *hook) +{ + try + { + CActiveAEDSPAddon *addon = GetAudioDSPAddon(hdl); + if (!hook || !addon) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid data (addon='%p', hook='%p')", __FUNCTION__, addon, hook); + + AE_DSP_MENUHOOKS *hooks = addon->GetMenuHooks(); + if (hooks) + { + for (unsigned int i = 0; i < hooks->size(); ++i) + { + if (hooks->at(i).iHookId == hook->iHookId) + { + /* remove this hook */ + hooks->erase(hooks->begin()+i); + break; + } + } + } + } + HANDLE_ADDON_EXCEPTION +} + +/*\_____________________________________________________________________________ +\*/ + +void CAddOnAEGeneral::register_dsp_mode(void* hdl, void* mode) +{ + try + { + CActiveAEDSPAddon *addon = GetAudioDSPAddon(hdl); + if (!mode || !addon) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid data (addon='%p', mode='%p')", __FUNCTION__, addon, mode); + + CActiveAEDSPMode transferMode(*(AE_DSP_MODES::AE_DSP_MODE*)mode, addon->GetID()); + int idMode = transferMode.AddUpdate(); + ((AE_DSP_MODES::AE_DSP_MODE*)mode)->iUniqueDBModeId = idMode; + + if (idMode > AE_DSP_INVALID_ADDON_ID) + { + CLog::Log(LOGDEBUG, "CAddOnAEGeneral - %s - successfull registered mode %s of %s adsp-addon", __FUNCTION__, ((AE_DSP_MODES::AE_DSP_MODE*)mode)->strModeName, addon->Name().c_str()); + } + else + { + CLog::Log(LOGERROR, "CAddOnAEGeneral - %s - failed to register mode %s of %s adsp-addon", __FUNCTION__, ((AE_DSP_MODES::AE_DSP_MODE*)mode)->strModeName, addon->Name().c_str()); + } + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAEGeneral::unregister_dsp_mode(void* hdl, void* mode) +{ + try + { + CActiveAEDSPAddon *addon = GetAudioDSPAddon(hdl); + if (!mode || !addon) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid data (addon='%p', mode='%p')", __FUNCTION__, addon, mode); + + CActiveAEDSPMode transferMode(*(AE_DSP_MODES::AE_DSP_MODE*)mode, addon->GetID()); + transferMode.Delete(); + } + HANDLE_ADDON_EXCEPTION +} + +/*\_____________________________________________________________________________ +\*/ + +void* CAddOnAEGeneral::make_stream(void* hdl, AudioEngineFormat Format, unsigned int Options) +{ + try + { + AEAudioFormat format; + format.m_dataFormat = Format.m_dataFormat; + format.m_sampleRate = Format.m_sampleRate; + format.m_channelLayout = Format.m_channels; + return CAEFactory::MakeStream(format, Options); + } + HANDLE_ADDON_EXCEPTION + + return nullptr; +} + +void CAddOnAEGeneral::free_stream(void* hdl, void *StreamHandle) +{ + try + { + if (!StreamHandle) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid handler data", __FUNCTION__); + + CAEFactory::FreeStream((IAEStream*)StreamHandle); + } + HANDLE_ADDON_EXCEPTION +} + +bool CAddOnAEGeneral::get_current_sink_format(void *hdl, AudioEngineFormat *sinkFormat) +{ + try + { + if (!sinkFormat) + throw ADDON::WrongValueException("CAddOnAEGeneral - %s - invalid data (handle='%p', sinkFormat='%p')", __FUNCTION__, hdl, sinkFormat); + + AEAudioFormat AESinkFormat; + if (!CAEFactory::GetEngine() || !CAEFactory::GetEngine()->GetCurrentSinkFormat(AESinkFormat)) + { + CLog::Log(LOGERROR, "CAddOnAEGeneral - %s - failed to get current sink format from AE!", __FUNCTION__); + return false; + } + + sinkFormat->m_channelCount = AESinkFormat.m_channelLayout.Count(); + for (unsigned int ch = 0; ch < AE_CH_MAX; ++ch) + { + sinkFormat->m_channels[ch] = AESinkFormat.m_channelLayout[ch]; + } + + sinkFormat->m_dataFormat = AESinkFormat.m_dataFormat; + sinkFormat->m_sampleRate = AESinkFormat.m_sampleRate; + sinkFormat->m_frames = AESinkFormat.m_frames; + sinkFormat->m_frameSize = AESinkFormat.m_frameSize; + + return true; + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +} /* extern "C" */ +} /* namespace AudioEngine */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.h b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.h new file mode 100644 index 0000000000..8590a6f6cb --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineGeneral.h @@ -0,0 +1,84 @@ +#pragma once +/* + * Copyright (C) 2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +namespace ActiveAE { class CActiveAEDSPAddon; } + +struct AE_DSP_MENUHOOK; + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; +struct AudioEngineFormat; + +namespace AudioEngine +{ +extern "C" +{ + + /*! + * Callbacks for Kodi's AudioEngine. + */ + class CAddOnAEGeneral + { + public: + static void Init(struct CB_AddOnLib *callbacks); + + static void add_dsp_menu_hook( + void* hdl, + AE_DSP_MENUHOOK* hook); + + static void remove_dsp_menu_hook( + void* hdl, + AE_DSP_MENUHOOK* hook); + + static void register_dsp_mode( + void* hdl, + void* mode); + + static void unregister_dsp_mode( + void* hdl, + void* mode); + + static void* make_stream( + void* hdl, + AudioEngineFormat Format, + unsigned int Options); + + static void free_stream( + void* hdl, + void* StreamHandle); + + static bool get_current_sink_format( + void* hdl, + AudioEngineFormat* SinkFormat); + + private: + static ActiveAE::CActiveAEDSPAddon *GetAudioDSPAddon(void *hdl); + }; + +} /* extern "C" */ +} /* namespace AudioEngine */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.cpp b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.cpp new file mode 100644 index 0000000000..e897967bcd --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.cpp @@ -0,0 +1,385 @@ +/* + * Copyright (C) 2015-2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include "Addon_AudioEngineStream.h" + +#include "addons/binary/ExceptionHandling.h" +#include "addons/binary/interfaces/api2/AddonInterfaceBase.h" +#include "addons/kodi-addon-dev-kit/include/kodi/api2/.internal/AddonLib_internal.hpp" +#include "cores/AudioEngine/AEFactory.h" +#include "cores/AudioEngine/Interfaces/AEStream.h" +#include "cores/AudioEngine/Utils/AEChannelData.h" +#include "utils/log.h" + +using namespace ADDON; + +namespace V2 +{ +namespace KodiAPI +{ + +namespace AudioEngine +{ +extern "C" +{ + +void CAddOnAEStream::Init(struct CB_AddOnLib *interfaces) +{ + interfaces->AudioEngineStream.AEStream_GetSpace = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetSpace; + interfaces->AudioEngineStream.AEStream_AddData = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_AddData; + interfaces->AudioEngineStream.AEStream_GetDelay = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetDelay; + interfaces->AudioEngineStream.AEStream_IsBuffering = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_IsBuffering; + interfaces->AudioEngineStream.AEStream_GetCacheTime = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetCacheTime; + interfaces->AudioEngineStream.AEStream_GetCacheTotal = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetCacheTotal; + interfaces->AudioEngineStream.AEStream_Pause = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_Pause; + interfaces->AudioEngineStream.AEStream_Resume = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_Resume; + interfaces->AudioEngineStream.AEStream_Drain = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_Drain; + interfaces->AudioEngineStream.AEStream_IsDraining = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_IsDraining; + interfaces->AudioEngineStream.AEStream_IsDrained = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_IsDrained; + interfaces->AudioEngineStream.AEStream_Flush = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_Flush; + interfaces->AudioEngineStream.AEStream_GetVolume = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetVolume; + interfaces->AudioEngineStream.AEStream_SetVolume = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_SetVolume; + interfaces->AudioEngineStream.AEStream_GetAmplification = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetAmplification; + interfaces->AudioEngineStream.AEStream_SetAmplification = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_SetAmplification; + interfaces->AudioEngineStream.AEStream_GetFrameSize = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetFrameSize; + interfaces->AudioEngineStream.AEStream_GetChannelCount = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetChannelCount; + interfaces->AudioEngineStream.AEStream_GetSampleRate = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetSampleRate; + interfaces->AudioEngineStream.AEStream_GetDataFormat = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetDataFormat; + interfaces->AudioEngineStream.AEStream_GetResampleRatio = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_GetResampleRatio; + interfaces->AudioEngineStream.AEStream_SetResampleRatio = V2::KodiAPI::AudioEngine::CAddOnAEStream::AEStream_SetResampleRatio; +} + +unsigned int CAddOnAEStream::AEStream_GetSpace(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetSpace(); + } + HANDLE_ADDON_EXCEPTION + return 0; +} + +unsigned int CAddOnAEStream::AEStream_AddData(void* addonData, void* streamHandle, uint8_t* const *Data, unsigned int Offset, unsigned int Frames) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->AddData(Data, Offset, Frames); + } + HANDLE_ADDON_EXCEPTION + return 0; +} + +double CAddOnAEStream::AEStream_GetDelay(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetDelay(); + } + HANDLE_ADDON_EXCEPTION + return 0; +} + +bool CAddOnAEStream::AEStream_IsBuffering(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->IsBuffering(); + } + HANDLE_ADDON_EXCEPTION + return false; +} + +double CAddOnAEStream::AEStream_GetCacheTime(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetCacheTime(); + } + HANDLE_ADDON_EXCEPTION + + return -1.0; +} + +double CAddOnAEStream::AEStream_GetCacheTotal(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetCacheTotal(); + } + HANDLE_ADDON_EXCEPTION + + return -1.0; +} + +void CAddOnAEStream::AEStream_Pause(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->Pause(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAEStream::AEStream_Resume(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->Resume(); + } + HANDLE_ADDON_EXCEPTION +} + +void CAddOnAEStream::AEStream_Drain(void* addonData, void* streamHandle, bool Wait) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->Drain(Wait); + } + HANDLE_ADDON_EXCEPTION +} + +bool CAddOnAEStream::AEStream_IsDraining(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->IsDraining(); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +bool CAddOnAEStream::AEStream_IsDrained(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->IsDrained(); + } + HANDLE_ADDON_EXCEPTION + + return false; +} + +void CAddOnAEStream::AEStream_Flush(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->Flush(); + } + HANDLE_ADDON_EXCEPTION +} + +float CAddOnAEStream::AEStream_GetVolume(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetVolume(); + } + HANDLE_ADDON_EXCEPTION + + return -1.0f; +} + +void CAddOnAEStream::AEStream_SetVolume(void* addonData, void* streamHandle, float Volume) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->SetVolume(Volume); + } + HANDLE_ADDON_EXCEPTION +} + +float CAddOnAEStream::AEStream_GetAmplification(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetAmplification(); + } + HANDLE_ADDON_EXCEPTION + + return -1.0f; +} + +void CAddOnAEStream::AEStream_SetAmplification(void* addonData, void* streamHandle, float Amplify) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->SetAmplification(Amplify); + } + HANDLE_ADDON_EXCEPTION +} + +const unsigned int CAddOnAEStream::AEStream_GetFrameSize(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetFrameSize(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +const unsigned int CAddOnAEStream::AEStream_GetChannelCount(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetChannelCount(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +const unsigned int CAddOnAEStream::AEStream_GetSampleRate(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetSampleRate(); + } + HANDLE_ADDON_EXCEPTION + + return 0; +} + +const int CAddOnAEStream::AEStream_GetDataFormat(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetDataFormat(); + } + HANDLE_ADDON_EXCEPTION + + return AE_FMT_INVALID; +} + +double CAddOnAEStream::AEStream_GetResampleRatio(void* addonData, void* streamHandle) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + return static_cast<IAEStream*>(streamHandle)->GetResampleRatio(); + } + HANDLE_ADDON_EXCEPTION + + return -1.0; +} + +void CAddOnAEStream::AEStream_SetResampleRatio(void* addonData, void* streamHandle, double Ratio) +{ + try + { + if (!addonData || !streamHandle) + throw ADDON::WrongValueException("CAddOnAEStream - %s - invalid data (addonData='%p', streamHandle='%p')", + __FUNCTION__, addonData, streamHandle); + + static_cast<IAEStream*>(streamHandle)->SetResampleRatio(Ratio); + } + HANDLE_ADDON_EXCEPTION +} + +} /* extern "C" */ +} /* namespace AudioEngine */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.h b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.h new file mode 100644 index 0000000000..d5d0ff7a08 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/Addon_AudioEngineStream.h @@ -0,0 +1,181 @@ +#pragma once +/* + * Copyright (C) 2016 Team KODI + * http://kodi.tv + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KODI; see the file COPYING. If not, see + * <http://www.gnu.org/licenses/>. + * + */ + +#include <stdint.h> + +namespace V2 +{ +namespace KodiAPI +{ + +struct CB_AddOnLib; + +namespace AudioEngine +{ +extern "C" +{ + + class CAddOnAEStream + { + public: + static void Init(struct CB_AddOnLib *interfaces); + + /** + * Returns the amount of space available in the stream + * @return The number of bytes AddData will consume + */ + static unsigned int AEStream_GetSpace(void *AddonData, void *StreamHandle); + + /** + * Add planar or interleaved PCM data to the stream + * @param data array of pointers to the planes + * @param offset to frame in frames + * @param frames number of frames + * @param pts timestamp + * @return The number of frames consumed + */ + static unsigned int AEStream_AddData(void *AddonData, void *StreamHandle, uint8_t* const *Data, unsigned int Offset, unsigned int Frames); + + /** + * 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_GetDelay(void *AddonData, void *StreamHandle); + + /** + * Returns if the stream is buffering + * @return True if the stream is buffering + */ + static bool AEStream_IsBuffering(void *AddonData, void *StreamHandle); + + /** + * Returns the time in seconds that it will take + * to underrun the cache if no sample is added. + * @return seconds + */ + static double AEStream_GetCacheTime(void *AddonData, void *StreamHandle); + + /** + * Returns the total time in seconds of the cache + * @return seconds + */ + static double AEStream_GetCacheTotal(void *AddonData, void *StreamHandle); + + /** + * Pauses the stream playback + */ + static void AEStream_Pause(void *AddonData, void *StreamHandle); + + /** + * Resumes the stream after pausing + */ + static void AEStream_Resume(void *AddonData, void *StreamHandle); + + /** + * Start draining the stream + * @note Once called AddData will not consume more data. + */ + static void AEStream_Drain(void *AddonData, void *StreamHandle, bool Wait); + + /** + * Returns true if the is stream draining + */ + static bool AEStream_IsDraining(void *AddonData, void *StreamHandle); + + /** + * Returns true if the is stream has finished draining + */ + static bool AEStream_IsDrained(void *AddonData, void *StreamHandle); + + /** + * Flush all buffers dropping the audio data + */ + static void AEStream_Flush(void *AddonData, void *StreamHandle); + + /** + * Return the stream's current volume level + * @return The volume level between 0.0 and 1.0 + */ + static float AEStream_GetVolume(void *AddonData, void *StreamHandle); + + /** + * Set the stream's volume level + * @param volume The new volume level between 0.0 and 1.0 + */ + static void AEStream_SetVolume(void *AddonData, void *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_GetAmplification(void *AddonData, void *StreamHandle); + + /** + * Sets the stream's volume amplification in linear units. + * @param The volume amplification factor between 1.0 and 1000.0 + */ + static void AEStream_SetAmplification(void *AddonData, void *StreamHandle, float Amplify); + + /** + * Returns the size of one audio frame in bytes (channelCount * resolution) + * @return The size in bytes of one frame + */ + static const unsigned int AEStream_GetFrameSize(void *AddonData, void *StreamHandle); + + /** + * Returns the number of channels the stream is configured to accept + * @return The channel count + */ + static const unsigned int AEStream_GetChannelCount(void *AddonData, void *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 const unsigned int AEStream_GetSampleRate(void *AddonData, void *StreamHandle); + + /** + * Return the data format the stream has been configured with + * @return The stream's data format (eg, AE_FMT_S16LE) + */ + static const int AEStream_GetDataFormat(void *AddonData, void *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_GetResampleRatio(void *AddonData, void *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 ratio the new sample rate ratio, calculated by ((double)desiredRate / (double)GetSampleRate()) + */ + static void AEStream_SetResampleRatio(void *AddonData, void *StreamHandle, double Ratio); + }; + +} /* extern "C" */ +} /* namespace AudioEngine */ + +} /* namespace KodiAPI */ +} /* namespace V2 */ diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/CMakeLists.txt b/xbmc/addons/binary/interfaces/api2/AudioEngine/CMakeLists.txt new file mode 100644 index 0000000000..3f48937091 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/CMakeLists.txt @@ -0,0 +1,14 @@ +set(SOURCES Addon_AudioEngineGeneral.cpp + Addon_AudioEngineStream.cpp) + +set(HEADERS Addon_AudioEngineGeneral.h + Addon_AudioEngineStream.h + ../../../../kodi-addon-dev-kit/src/api2/version.h) + +include_directories(${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include) + +core_add_library(api2AddonInterfaces_AudioEngine) + +if(ENABLE_INTERNAL_FFMPEG) + add_dependencies(api2AddonInterfaces_AudioEngine ffmpeg) +endif() diff --git a/xbmc/addons/binary/interfaces/api2/AudioEngine/Makefile.in b/xbmc/addons/binary/interfaces/api2/AudioEngine/Makefile.in new file mode 100644 index 0000000000..f80c0b3c9a --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/AudioEngine/Makefile.in @@ -0,0 +1,7 @@ +SRCS=Addon_AudioEngineGeneral.cpp \ + Addon_AudioEngineStream.cpp \ + +LIB=addon-interface-audioengine.a + +include @abs_top_srcdir@/Makefile.include +-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS))) diff --git a/xbmc/addons/binary/interfaces/api2/CMakeLists.txt b/xbmc/addons/binary/interfaces/api2/CMakeLists.txt new file mode 100644 index 0000000000..e519e950a9 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/CMakeLists.txt @@ -0,0 +1,13 @@ +set(SOURCES AddonInterfaceBase.cpp) + +set(HEADERS AddonInterfaceBase.h + ../../../kodi-addon-dev-kit/src/api2/version.h) + + +include_directories(${CORE_SOURCE_DIR}/xbmc/addons/kodi-addon-dev-kit/include) + +core_add_library(api2AddonInterfaces) + +if(ENABLE_INTERNAL_FFMPEG) + add_dependencies(api2AddonInterfaces ffmpeg) +endif() diff --git a/xbmc/addons/binary/interfaces/api2/Makefile.in b/xbmc/addons/binary/interfaces/api2/Makefile.in new file mode 100644 index 0000000000..c69cbdcfc0 --- /dev/null +++ b/xbmc/addons/binary/interfaces/api2/Makefile.in @@ -0,0 +1,6 @@ +SRCS=AddonInterfaceBase.cpp \ + +LIB=addon-interface-base.a + +include @abs_top_srcdir@/Makefile.include +-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS))) diff --git a/xbmc/settings/Settings.h b/xbmc/settings/Settings.h index ce94cf97fe..5dbd6c9e83 100644 --- a/xbmc/settings/Settings.h +++ b/xbmc/settings/Settings.h @@ -43,6 +43,8 @@ class CVariant; the settings manager and registering all the callbacks, handlers and custom setting types. \sa CSettingsManager + \WARNING: During add of new setting, confirm allowance for add-on, if not + allowed add a check to 'AddonCB_General.cpp' on function 'CAddonCB_General::get_setting' */ class CSettings : public CSettingCreator, public CSettingControlCreator { @@ -210,7 +212,7 @@ public: static const std::string SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUP; static const std::string SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUPTIME; static const std::string SETTING_PVRPARENTAL_ENABLED; - static const std::string SETTING_PVRPARENTAL_PIN; + static const std::string SETTING_PVRPARENTAL_PIN; //< Not allowed to add-on static const std::string SETTING_PVRPARENTAL_DURATION; static const std::string SETTING_PVRCLIENT_MENUHOOK; static const std::string SETTING_PVRTIMERS_HIDEDISABLEDTIMERS; @@ -260,7 +262,7 @@ public: static const std::string SETTING_WEATHER_CURRENTLOCATION; static const std::string SETTING_WEATHER_ADDON; static const std::string SETTING_WEATHER_ADDONSETTINGS; - static const std::string SETTING_SERVICES_DEVICENAME; + static const std::string SETTING_SERVICES_DEVICENAME; //< Group 'SETTING_SERVICES_...' not allowed to add-on static const std::string SETTING_SERVICES_UPNPSERVER; static const std::string SETTING_SERVICES_UPNPANNOUNCE; static const std::string SETTING_SERVICES_UPNPLOOKFOREXTERNALSUBTITLES; @@ -284,7 +286,7 @@ public: static const std::string SETTING_SERVICES_USEAIRPLAYPASSWORD; static const std::string SETTING_SERVICES_AIRPLAYPASSWORD; static const std::string SETTING_SERVICES_AIRPLAYVIDEOSUPPORT; - static const std::string SETTING_SMB_WINSSERVER; + static const std::string SETTING_SMB_WINSSERVER; //< Group 'SETTING_SMB_...' not allowed to add-on static const std::string SETTING_SMB_WORKGROUP; static const std::string SETTING_VIDEOSCREEN_MONITOR; static const std::string SETTING_VIDEOSCREEN_SCREEN; @@ -327,7 +329,7 @@ public: static const std::string SETTING_INPUT_APPLEREMOTEMODE; static const std::string SETTING_INPUT_APPLEREMOTEALWAYSON; static const std::string SETTING_INPUT_APPLEREMOTESEQUENCETIME; - static const std::string SETTING_NETWORK_USEHTTPPROXY; + static const std::string SETTING_NETWORK_USEHTTPPROXY; //< Group 'SETTING_NETWORK_...' not allowed to add-on static const std::string SETTING_NETWORK_HTTPPROXYTYPE; static const std::string SETTING_NETWORK_HTTPPROXYSERVER; static const std::string SETTING_NETWORK_HTTPPROXYPORT; @@ -345,10 +347,10 @@ public: static const std::string SETTING_EVENTLOG_ENABLED; static const std::string SETTING_EVENTLOG_ENABLED_NOTIFICATIONS; static const std::string SETTING_EVENTLOG_SHOW; - static const std::string SETTING_MASTERLOCK_LOCKCODE; + static const std::string SETTING_MASTERLOCK_LOCKCODE; //< Not allowed to add-on static const std::string SETTING_MASTERLOCK_STARTUPLOCK; static const std::string SETTING_MASTERLOCK_MAXRETRIES; - static const std::string SETTING_CACHE_HARDDISK; + static const std::string SETTING_CACHE_HARDDISK; //< Group 'SETTING_CACHE...' not allowed to add-on static const std::string SETTING_CACHEVIDEO_DVDROM; static const std::string SETTING_CACHEVIDEO_LAN; static const std::string SETTING_CACHEVIDEO_INTERNET; |