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 "ISO9660Directory.h"
13 #include "utils/URIUtils.h"
15 #include <cdio++/iso9660.hpp>
17 using namespace XFILE
;
19 bool CISO9660Directory::GetDirectory(const CURL
& url
, CFileItemList
& items
)
22 if (!url2
.IsProtocol("iso9660"))
25 url2
.SetProtocol("iso9660");
26 url2
.SetHostName(url
.Get());
29 std::string
strRoot(url2
.Get());
30 std::string
strSub(url2
.GetFileName());
32 URIUtils::AddSlashAtEnd(strRoot
);
33 URIUtils::AddSlashAtEnd(strSub
);
35 std::unique_ptr
<ISO9660::IFS
> iso(new ISO9660::IFS
);
37 if (!iso
->open(url2
.GetHostName().c_str()))
40 std::vector
<ISO9660::Stat
*> isoFiles
;
42 if (iso
->readdir(strSub
.c_str(), isoFiles
))
44 for (const auto file
: isoFiles
)
46 std::string
filename(file
->p_stat
->filename
);
48 if (file
->p_stat
->type
== 2)
50 if (filename
!= "." && filename
!= "..")
52 CFileItemPtr
pItem(new CFileItem(filename
));
53 std::string
strDir(strRoot
+ filename
);
54 URIUtils::AddSlashAtEnd(strDir
);
55 pItem
->SetPath(strDir
);
56 pItem
->m_bIsFolder
= true;
62 CFileItemPtr
pItem(new CFileItem(filename
));
63 pItem
->SetPath(strRoot
+ filename
);
64 pItem
->m_bIsFolder
= false;
65 pItem
->m_dwSize
= file
->p_stat
->size
;
77 bool CISO9660Directory::Exists(const CURL
& url
)
80 return GetDirectory(url
, items
);