wiiload_plugin/src/fs/DirList.h

118 lines
3.5 KiB
C
Raw Normal View History

2019-11-24 14:35:38 +01:00
/****************************************************************************
* Copyright (C) 2010
* by Dimok
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
* DirList Class
* for WiiXplorer 2010
***************************************************************************/
2021-09-24 21:04:06 +02:00
#pragma once
2019-11-24 14:35:38 +01:00
#include <string>
2022-02-04 15:47:35 +01:00
#include <vector>
2019-11-24 14:35:38 +01:00
#include <wut_types.h>
typedef struct {
2020-06-03 19:45:51 +02:00
char *FilePath;
2019-11-24 14:35:38 +01:00
BOOL isDir;
} DirEntry;
class DirList {
public:
//!Constructor
2021-09-24 21:04:06 +02:00
DirList();
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//!\param path Path from where to load the filelist of all files
//!\param filter A fileext that needs to be filtered
//!\param flags search/filter flags from the enum
2021-09-24 21:04:06 +02:00
explicit DirList(const std::string &path, const char *filter = nullptr, uint32_t flags = Files | Dirs, uint32_t maxDepth = 0xffffffff);
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//!Destructor
virtual ~DirList();
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Load all the files from a directory
2021-09-24 21:04:06 +02:00
BOOL LoadPath(const std::string &path, const char *filter = nullptr, uint32_t flags = Files | Dirs, uint32_t maxDepth = 0xffffffff);
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Get a filename of the list
//!\param list index
2021-09-24 21:04:06 +02:00
[[nodiscard]] const char *GetFilename(int32_t index) const;
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Get the a filepath of the list
//!\param list index
2021-09-24 21:04:06 +02:00
[[nodiscard]] const char *GetFilepath(int32_t index) const {
2019-11-24 14:35:38 +01:00
if (!valid(index)) return "";
2022-02-04 15:47:35 +01:00
else
return FileInfo[index].FilePath;
2019-11-24 14:35:38 +01:00
}
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Get the a filesize of the list
//!\param list index
2021-09-24 21:04:06 +02:00
[[nodiscard]] uint64_t GetFilesize(int32_t index) const;
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Is index a dir or a file
//!\param list index
2021-09-24 21:04:06 +02:00
[[nodiscard]] BOOL IsDir(int32_t index) const {
2020-06-03 19:45:51 +02:00
if (!valid(index)) return false;
2019-11-24 14:35:38 +01:00
return FileInfo[index].isDir;
};
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Get the filecount of the whole list
2021-09-24 21:04:06 +02:00
[[nodiscard]] int32_t GetFilecount() const {
2019-11-24 14:35:38 +01:00
return FileInfo.size();
};
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Sort list by filepath
void SortList();
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Custom sort command for custom sort functions definitions
void SortList(BOOL (*SortFunc)(const DirEntry &a, const DirEntry &b));
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Get the index of the specified filename
int32_t GetFileIndex(const char *filename) const;
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Enum for search/filter flags
enum {
2022-02-04 15:47:35 +01:00
Files = 0x01,
Dirs = 0x02,
2019-11-24 14:35:38 +01:00
CheckSubfolders = 0x08,
};
2022-02-04 15:47:35 +01:00
2019-11-24 14:35:38 +01:00
protected:
// Internal parser
BOOL InternalLoadPath(std::string &path);
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//!Add a list entrie
2020-06-03 19:45:51 +02:00
void AddEntrie(const std::string &filepath, const char *filename, BOOL isDir);
2019-11-24 14:35:38 +01:00
//! Clear the list
void ClearList();
2020-06-03 19:45:51 +02:00
2019-11-24 14:35:38 +01:00
//! Check if valid pos is requested
2021-09-24 21:04:06 +02:00
[[nodiscard]] inline BOOL valid(uint32_t pos) const {
2019-11-24 14:35:38 +01:00
return (pos < FileInfo.size());
};
2021-09-24 21:04:06 +02:00
uint32_t Flags{};
uint32_t Depth{};
const char *Filter{};
2019-11-24 14:35:38 +01:00
std::vector<DirEntry> FileInfo;
};