[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / filesystem / ISO9660Directory.cpp
blob894db53f3565a7bd8a9959911d007d6beb2655fc
1 /*
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.
7 */
9 #include "ISO9660Directory.h"
11 #include "FileItem.h"
12 #include "URL.h"
13 #include "utils/URIUtils.h"
15 #include <cdio++/iso9660.hpp>
17 using namespace XFILE;
19 bool CISO9660Directory::GetDirectory(const CURL& url, CFileItemList& items)
21 CURL url2(url);
22 if (!url2.IsProtocol("iso9660"))
24 url2.Reset();
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()))
38 return false;
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;
57 items.Add(pItem);
60 else
62 CFileItemPtr pItem(new CFileItem(filename));
63 pItem->SetPath(strRoot + filename);
64 pItem->m_bIsFolder = false;
65 pItem->m_dwSize = file->p_stat->size;
66 items.Add(pItem);
70 isoFiles.clear();
71 return true;
74 return false;
77 bool CISO9660Directory::Exists(const CURL& url)
79 CFileItemList items;
80 return GetDirectory(url, items);