2 * Copyright (C) 2014-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "ResourceFile.h"
11 #include "ServiceBroker.h"
14 #include "addons/AddonManager.h"
15 #include "addons/Resource.h"
17 using namespace ADDON
;
18 using namespace XFILE
;
20 CResourceFile::CResourceFile()
21 : COverrideFile(false)
24 CResourceFile::~CResourceFile() = default;
26 bool CResourceFile::TranslatePath(const std::string
&path
, std::string
&translatedPath
)
28 return TranslatePath(CURL(path
), translatedPath
);
31 bool CResourceFile::TranslatePath(const CURL
&url
, std::string
&translatedPath
)
33 translatedPath
= url
.Get();
35 // only handle resource:// paths
36 if (!url
.IsProtocol("resource"))
39 // the share name represents an identifier that can be mapped to an addon ID
40 const std::string
& addonId
= url
.GetShareName();
42 if (url
.GetFileName().length() > addonId
.length())
43 filePath
= url
.GetFileName().substr(addonId
.size() + 1);
49 if (!CServiceBroker::GetAddonMgr().GetAddon(addonId
, addon
, OnlyEnabled::CHOICE_YES
) ||
53 std::shared_ptr
<CResource
> resource
= std::dynamic_pointer_cast
<ADDON::CResource
>(addon
);
57 if (!resource
->IsAllowed(filePath
))
60 translatedPath
= CUtil::ValidatePath(resource
->GetFullPath(filePath
));
64 std::string
CResourceFile::TranslatePath(const CURL
&url
)
66 std::string translatedPath
;
67 if (!TranslatePath(url
, translatedPath
))
70 return translatedPath
;