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