2 * Copyright (C) 2010 Team Boxee
5 * Copyright (C) 2010-2018 Team Kodi
6 * This file is part of Kodi - https://kodi.tv
8 * SPDX-License-Identifier: GPL-2.0-or-later
9 * See LICENSES/README.md for more information.
12 #include "UDFDirectory.h"
17 #include "filesystem/UDFBlockInput.h"
18 #include "utils/URIUtils.h"
20 #include <udfread/udfread.h>
22 using namespace XFILE
;
24 bool CUDFDirectory::GetDirectory(const CURL
& url
, CFileItemList
& items
)
27 if (!url2
.IsProtocol("udf"))
30 url2
.SetProtocol("udf");
31 url2
.SetHostName(url
.Get());
34 std::string
strRoot(url2
.Get());
35 std::string
strSub(url2
.GetFileName());
37 URIUtils::AddSlashAtEnd(strRoot
);
38 URIUtils::AddSlashAtEnd(strSub
);
40 auto udf
= udfread_init();
47 auto bi
= udfbi
.GetBlockInput(url2
.GetHostName());
49 if (udfread_open_input(udf
, bi
) < 0)
55 auto path
= udfread_opendir(udf
, strSub
.c_str());
62 struct udfread_dirent dirent
;
64 while (udfread_readdir(path
, &dirent
))
66 if (dirent
.d_type
== UDF_DT_DIR
)
68 std::string filename
= dirent
.d_name
;
69 if (filename
!= "." && filename
!= "..")
71 CFileItemPtr
pItem(new CFileItem(filename
));
72 std::string
strDir(strRoot
+ filename
);
73 URIUtils::AddSlashAtEnd(strDir
);
74 pItem
->SetPath(strDir
);
75 pItem
->m_bIsFolder
= true;
82 std::string filename
= dirent
.d_name
;
83 std::string filenameWithPath
{strSub
+ filename
};
84 auto file
= udfread_file_open(udf
, filenameWithPath
.c_str());
88 CFileItemPtr
pItem(new CFileItem(filename
));
89 pItem
->SetPath(strRoot
+ filename
);
90 pItem
->m_bIsFolder
= false;
91 pItem
->m_dwSize
= udfread_file_size(file
);
94 udfread_file_close(file
);
98 udfread_closedir(path
);
104 bool CUDFDirectory::Exists(const CURL
& url
)
107 return GetDirectory(url
, items
);