1 /* 2 * Copyright (C) 2012-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 #include "addons/AddonEvents.h" 12 #include "addons/addoninfo/AddonInfo.h" 13 #include "settings/AdvancedSettings.h" 14 15 namespace ADDON 16 { 17 class CAddonMgr; 18 } 19 20 class CFileExtensionProvider 21 { 22 public: 23 CFileExtensionProvider(ADDON::CAddonMgr& addonManager); 24 ~CFileExtensionProvider(); 25 26 /*! 27 * @brief Returns a list of picture extensions 28 */ 29 std::string GetPictureExtensions() const; 30 31 /*! 32 * @brief Returns a list of music extensions 33 */ 34 std::string GetMusicExtensions() const; 35 36 /*! 37 * @brief Returns a list of video extensions 38 */ 39 std::string GetVideoExtensions() const; 40 41 /*! 42 * @brief Returns a list of subtitle extensions 43 */ 44 std::string GetSubtitleExtensions() const; 45 46 /*! 47 * @brief Returns a list of disc stub extensions 48 */ 49 std::string GetDiscStubExtensions() const; 50 51 /*! 52 * @brief Returns a file folder extensions 53 */ 54 std::string GetFileFolderExtensions() const; 55 56 /*! 57 * @brief Returns whether a url protocol from add-ons use encoded hostnames 58 */ 59 bool EncodedHostName(const std::string& protocol) const; 60 61 /*! 62 * @brief Returns true if related provider can operate related file 63 * 64 * @note Thought for cases e.g. by ISO, where can be a video or also a SACD. 65 */ 66 bool CanOperateExtension(const std::string& path) const; 67 68 private: 69 std::string GetAddonExtensions(const ADDON::TYPE &type) const; 70 std::string GetAddonFileFolderExtensions(const ADDON::TYPE &type) const; 71 void SetAddonExtensions(); 72 void SetAddonExtensions(const ADDON::TYPE &type); 73 74 void OnAddonEvent(const ADDON::AddonEvent& event); 75 76 // Construction properties 77 std::shared_ptr<CAdvancedSettings> m_advancedSettings; 78 ADDON::CAddonMgr &m_addonManager; 79 80 // File extension properties 81 std::map<ADDON::TYPE, std::string> m_addonExtensions; 82 std::map<ADDON::TYPE, std::string> m_addonFileFolderExtensions; 83 84 // Protocols from add-ons with encoded host names 85 std::vector<std::string> m_encoded; 86 }; 87