mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-02-20 15:14:26 +01:00
Improvements to the directory class.
This commit is contained in:
parent
6d1eabf64d
commit
37fe94f99e
@ -30,20 +30,30 @@ void FileCache::wwwroot_evaluate_dir(const char *path, const bool should_exist)
|
|||||||
Ref<Directory> dir;
|
Ref<Directory> dir;
|
||||||
dir.instance();
|
dir.instance();
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(!dir->open_dir(path, true), "Error opening wwwroot! folder: " + String(path));
|
ERR_FAIL_COND_MSG(dir->open_dir(path) != OK, "Error opening wwwroot! folder: " + String(path));
|
||||||
|
|
||||||
|
|
||||||
while (dir->has_next()) {
|
while (dir->has_next()) {
|
||||||
|
if (!dir->read()) {
|
||||||
dir->next();
|
dir->next();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (dir->current_is_file()) {
|
if (dir->current_is_file()) {
|
||||||
String np = dir->current_get_path_cstr();
|
String np = dir->current_get_path_cstr();
|
||||||
|
|
||||||
np = np.substr(wwwroot.size(), np.size() - wwwroot.size());
|
np = np.substr(wwwroot.size(), np.size() - wwwroot.size());
|
||||||
|
|
||||||
registered_files.insert(np);
|
registered_files.insert(np);
|
||||||
} else {
|
} else {
|
||||||
|
if (dir->current_is_special_dir()) {
|
||||||
|
dir->next();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
wwwroot_evaluate_dir(dir->current_get_path_cstr());
|
wwwroot_evaluate_dir(dir->current_get_path_cstr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dir->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
dir->close_dir();
|
dir->close_dir();
|
||||||
|
@ -45,37 +45,34 @@ void Directory::close_dir() {
|
|||||||
bool Directory::has_next() {
|
bool Directory::has_next() {
|
||||||
return _dir.has_next;
|
return _dir.has_next;
|
||||||
}
|
}
|
||||||
void Directory::next() {
|
bool Directory::read() {
|
||||||
tinydir_next(&_dir);
|
|
||||||
|
|
||||||
_read_file_result = tinydir_readfile(&_dir, &_file);
|
_read_file_result = tinydir_readfile(&_dir, &_file);
|
||||||
|
|
||||||
if (_skip_specials && current_is_ok()) {
|
return _read_file_result != -1;
|
||||||
if ((_file.name[0] == '.' && _file.name[1] == '\0') || (_file.name[0] == '.' && _file.name[1] == '.' && _file.name[1] == '\0')) {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
void Directory::next() {
|
||||||
|
tinydir_next(&_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Directory::current_is_ok() {
|
bool Directory::current_is_ok() {
|
||||||
return _read_file_result == 01;
|
return _read_file_result == 01;
|
||||||
}
|
}
|
||||||
String Directory::current_get_name() {
|
String Directory::current_get_name() {
|
||||||
return _file.name;
|
return String(_file.name);
|
||||||
}
|
}
|
||||||
String Directory::current_get_path() {
|
String Directory::current_get_path() {
|
||||||
return _file.path;
|
return String(_file.path);
|
||||||
}
|
}
|
||||||
String Directory::current_get_extension() {
|
String Directory::current_get_extension() {
|
||||||
return _file.extension;
|
return String(_file.extension);
|
||||||
}
|
}
|
||||||
char *Directory::current_get_name_cstr() {
|
const char *Directory::current_get_name_cstr() {
|
||||||
return _file.name;
|
return _file.name;
|
||||||
}
|
}
|
||||||
char *Directory::current_get_path_cstr() {
|
const char *Directory::current_get_path_cstr() {
|
||||||
return _file.path;
|
return _file.path;
|
||||||
}
|
}
|
||||||
char *Directory::current_get_extension_cstr() {
|
const char *Directory::current_get_extension_cstr() {
|
||||||
return _file.extension;
|
return _file.extension;
|
||||||
}
|
}
|
||||||
bool Directory::current_is_file() {
|
bool Directory::current_is_file() {
|
||||||
@ -84,6 +81,13 @@ bool Directory::current_is_file() {
|
|||||||
bool Directory::current_is_dir() {
|
bool Directory::current_is_dir() {
|
||||||
return _file.is_dir;
|
return _file.is_dir;
|
||||||
}
|
}
|
||||||
|
bool Directory::current_is_special_dir() {
|
||||||
|
if (_file.name[0] == '.' && _file.name[1] == '\0' || _file.name[0] == '.' && _file.name[1] == '.') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
String Directory::read_file(const String &path) {
|
String Directory::read_file(const String &path) {
|
||||||
FILE *f = fopen(path.c_str(), "r");
|
FILE *f = fopen(path.c_str(), "r");
|
||||||
@ -132,7 +136,7 @@ bool Directory::is_dir_closed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Directory::Directory() {
|
Directory::Directory() {
|
||||||
_skip_specials = false;
|
_skip_specials = true;
|
||||||
_read_file_result = 0;
|
_read_file_result = 0;
|
||||||
_dir_open = false;
|
_dir_open = false;
|
||||||
}
|
}
|
||||||
|
@ -15,17 +15,19 @@ public:
|
|||||||
void close_dir();
|
void close_dir();
|
||||||
|
|
||||||
bool has_next();
|
bool has_next();
|
||||||
|
bool read();
|
||||||
void next();
|
void next();
|
||||||
|
|
||||||
bool current_is_ok();
|
bool current_is_ok();
|
||||||
String current_get_name();
|
String current_get_name();
|
||||||
String current_get_path();
|
String current_get_path();
|
||||||
String current_get_extension();
|
String current_get_extension();
|
||||||
char *current_get_name_cstr();
|
const char *current_get_name_cstr();
|
||||||
char *current_get_path_cstr();
|
const char *current_get_path_cstr();
|
||||||
char *current_get_extension_cstr();
|
const char *current_get_extension_cstr();
|
||||||
bool current_is_file();
|
bool current_is_file();
|
||||||
bool current_is_dir();
|
bool current_is_dir();
|
||||||
|
bool current_is_special_dir();
|
||||||
|
|
||||||
String read_file(const String &path);
|
String read_file(const String &path);
|
||||||
Error read_file_into(const String &path, String *str);
|
Error read_file_into(const String &path, String *str);
|
||||||
|
@ -47,16 +47,21 @@ void PagedArticle::load() {
|
|||||||
Ref<Directory> dir;
|
Ref<Directory> dir;
|
||||||
dir.instance();
|
dir.instance();
|
||||||
|
|
||||||
ERR_FAIL_COND_MSG(!dir->open_dir(articles_folder.c_str(), false), "Error opening PagedArticle::folder! folder: " + articles_folder);
|
ERR_FAIL_COND_MSG(dir->open_dir(articles_folder.c_str()) != OK, "Error opening PagedArticle::folder! folder: " + articles_folder);
|
||||||
|
|
||||||
Vector<String> files;
|
Vector<String> files;
|
||||||
|
|
||||||
while (dir->has_next()) {
|
while (dir->has_next()) {
|
||||||
|
if (!dir->read()) {
|
||||||
dir->next();
|
dir->next();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (dir->current_is_file()) {
|
if (dir->current_is_file()) {
|
||||||
files.push_back(dir->current_get_name());
|
files.push_back(dir->current_get_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dir->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
dir->close_dir();
|
dir->close_dir();
|
||||||
@ -78,7 +83,7 @@ void PagedArticle::load() {
|
|||||||
|
|
||||||
String fd;
|
String fd;
|
||||||
|
|
||||||
ERR_CONTINUE_MSG(!dir->read_file_into(file_path, &fd), "PagedArticle::load_folder: Error opening file! " + file_path);
|
ERR_CONTINUE_MSG(dir->read_file_into(file_path, &fd) != OK, "PagedArticle::load_folder: Error opening file! " + file_path);
|
||||||
|
|
||||||
Utils::markdown_to_html(&fd);
|
Utils::markdown_to_html(&fd);
|
||||||
|
|
||||||
@ -128,6 +133,20 @@ void PagedArticle::generate_summary() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String PagedArticle::get_summary() {
|
||||||
|
return summary_page;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagedArticle::_notification(const int what) {
|
||||||
|
switch (what) {
|
||||||
|
case NOTIFICATION_ENTER_TREE:
|
||||||
|
load();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PagedArticle::PagedArticle() :
|
PagedArticle::PagedArticle() :
|
||||||
WebNode() {
|
WebNode() {
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@ public:
|
|||||||
void load();
|
void load();
|
||||||
void load_folder(const String &folder, const String &path);
|
void load_folder(const String &folder, const String &path);
|
||||||
void generate_summary();
|
void generate_summary();
|
||||||
|
String get_summary();
|
||||||
|
|
||||||
|
void _notification(const int what);
|
||||||
|
|
||||||
PagedArticle();
|
PagedArticle();
|
||||||
~PagedArticle();
|
~PagedArticle();
|
||||||
|
Loading…
Reference in New Issue
Block a user