2 * Copyright (C) 2005-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 "ZipDirectory.h"
13 #include "ZipManager.h"
14 #include "filesystem/Directorization.h"
15 #include "utils/CharsetConverter.h"
16 #include "utils/StringUtils.h"
17 #include "utils/URIUtils.h"
24 static CFileItemPtr
ZipEntryToFileItem(const SZipEntry
& entry
, const std::string
& label
, const std::string
& path
, bool isFolder
)
26 CFileItemPtr
item(new CFileItem(label
));
29 item
->m_dwSize
= entry
.usize
;
30 item
->m_idepth
= entry
.method
;
36 CZipDirectory::CZipDirectory() = default;
38 CZipDirectory::~CZipDirectory() = default;
40 bool CZipDirectory::GetDirectory(const CURL
& urlOrig
, CFileItemList
& items
)
44 /* if this isn't a proper archive path, assume it's the path to a archive file */
45 if (!urlOrig
.IsProtocol("zip"))
46 urlZip
= URIUtils::CreateArchivePath("zip", urlOrig
);
48 std::vector
<SZipEntry
> zipEntries
;
49 if (!g_ZipManager
.GetZipList(urlZip
, zipEntries
))
52 // prepare the ZIP entries for directorization
53 DirectorizeEntries
<SZipEntry
> entries
;
54 entries
.reserve(zipEntries
.size());
55 for (const auto& zipEntry
: zipEntries
)
56 entries
.emplace_back(zipEntry
.name
, zipEntry
);
58 // directorize the ZIP entries into files and directories
59 Directorize(urlZip
, entries
, ZipEntryToFileItem
, items
);
64 bool CZipDirectory::ContainsFiles(const CURL
& url
)
66 std::vector
<SZipEntry
> items
;
67 g_ZipManager
.GetZipList(url
, items
);