summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/DataLoader.cpp
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-04-10 22:27:26 +0200
committerAki <please@ignore.pl>2022-04-10 22:53:38 +0200
commit94ca59386cb94877ea15856a3c17c116c756a16d (patch)
tree30ece23c33d93624287a4c43fbc433942e245080 /StarsEx/DataLoader.cpp
parenta9401f2b085bbb576021ed844e941beb9bf14c0f (diff)
downloadstarshatter-94ca59386cb94877ea15856a3c17c116c756a16d.zip
starshatter-94ca59386cb94877ea15856a3c17c116c756a16d.tar.gz
starshatter-94ca59386cb94877ea15856a3c17c116c756a16d.tar.bz2
Switched to use FileSystemDataSource in DataLoader
Diffstat (limited to 'StarsEx/DataLoader.cpp')
-rw-r--r--StarsEx/DataLoader.cpp128
1 files changed, 34 insertions, 94 deletions
diff --git a/StarsEx/DataLoader.cpp b/StarsEx/DataLoader.cpp
index 1dcbe0e..024a9b3 100644
--- a/StarsEx/DataLoader.cpp
+++ b/StarsEx/DataLoader.cpp
@@ -8,6 +8,7 @@
*/
#include "DataLoader.h"
+#include "DataSource.h"
#include "Archive.h"
#include "Color.h"
#include "D3DXImage.h"
@@ -24,8 +25,11 @@ DataLoader* DataLoader::loader = 0;
// +--------------------------------------------------------------------+
-DataLoader::DataLoader()
- : datapath(""), video(0), use_file_system(true), enable_media(true)
+DataLoader::DataLoader() :
+ datapath(""),
+ video(nullptr),
+ enable_media(true),
+ work_directory_source(new FileSystemDataSource())
{
}
@@ -72,7 +76,15 @@ DataLoader::Reset()
void
DataLoader::UseFileSystem(bool use)
{
- use_file_system = use;
+ if (work_directory_source) {
+ if (!use) {
+ delete work_directory_source;
+ work_directory_source = nullptr;
+ }
+ }
+ else if (use) {
+ work_directory_source = new FileSystemDataSource();
+ }
}
void
@@ -196,14 +208,12 @@ DataLoader::FindFile(const char* name)
strcat_s(filename, name);
// first check current directory:
- if (use_file_system) {
- FILE* f;
- ::fopen_s(&f, filename, "rb");
-
- if (f) {
- ::fclose(f);
+ if (work_directory_source) {
+ work_directory_source->SetPrefix(datapath);
+ bool found = work_directory_source->Find(name);
+ work_directory_source->SetPrefix();
+ if (found)
return true;
- }
}
// then check datafiles, from last to first:
@@ -309,61 +319,10 @@ DataLoader::ListArchiveFiles(const char* archive_name, const char* filter, List<
void
DataLoader::ListFileSystem(const char* filter, List<Text>& list, Text base_path, bool recurse)
{
- if (use_file_system) {
- char data_filter[256];
- ZeroMemory(data_filter, 256);
-
- const char* pf = filter;
- char* pdf = data_filter;
-
- while (*pf) {
- if (*pf != '*')
- *pdf++ = *pf;
- pf++;
- }
-
- int pathlen = base_path.length();
-
- // assemble win32 find filter:
- char win32_filter[1024];
- strcpy_s(win32_filter, datapath);
-
- if (recurse)
- strcat_s(win32_filter, "*.*");
- else
- strcat_s(win32_filter, filter);
-
- // first check current directory:
- WIN32_FIND_DATA data;
- HANDLE hFind = FindFirstFile(win32_filter, &data);
-
- if (hFind != INVALID_HANDLE_VALUE) {
- do {
- if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) {
- if (recurse && data.cFileName[0] != '.') {
- Text old_datapath = datapath;
-
- Text newpath = datapath;
- newpath += data.cFileName;
- newpath += "/";
- datapath = newpath;
-
- ListFileSystem(filter, list, base_path, recurse);
-
- datapath = old_datapath;
- }
- }
- else {
- if (!strcmp(filter, "*.*") || strstr(data.cFileName, data_filter)) {
- Text full_name = datapath;
- full_name += data.cFileName;
-
- list.append(new Text(full_name(pathlen, 1000)));
- }
- }
- }
- while (FindNextFile(hFind, &data));
- }
+ if (work_directory_source) {
+ work_directory_source->SetPrefix(base_path);
+ work_directory_source->ListFiles(filter, list, recurse);
+ work_directory_source->SetPrefix();
}
}
@@ -379,33 +338,14 @@ DataLoader::LoadBuffer(const char* name, BYTE*& buf, bool null_terminate, bool o
strcpy_s(filename, datapath);
strcat_s(filename, name);
- if (use_file_system) {
- // first check current directory:
- FILE* f;
- ::fopen_s(&f, filename, "rb");
-
- if (f) {
- ::fseek(f, 0, SEEK_END);
- int len = ftell(f);
- ::fseek(f, 0, SEEK_SET);
-
- if (null_terminate) {
- buf = new BYTE[len+1];
- if (buf)
- buf[len] = 0;
- }
-
- else {
- buf = new BYTE[len];
- }
-
- if (buf)
- ::fread(buf, len, 1, f);
-
- ::fclose(f);
-
+ if (work_directory_source) {
+ work_directory_source->SetPrefix(datapath);
+ int len = work_directory_source->Load(name, buf, null_terminate);
+ work_directory_source->SetPrefix();
+ if (len > 0)
return len;
- }
+ if (buf)
+ delete buf;
}
// then check datafile(s):
@@ -614,7 +554,7 @@ DataLoader::LoadIndexed(const char* name, Bitmap& bitmap, int type)
// first try to load from current directory:
bool loaded = false;
- if (use_file_system) {
+ if (work_directory_source) {
if (pcx_file)
loaded = pcx.Load(filename) == PCX_OK;
@@ -710,7 +650,7 @@ DataLoader::LoadHiColor(const char* name, Bitmap& bitmap, int type)
// first try to load from current directory:
bool loaded = false;
- if (use_file_system) {
+ if (work_directory_source) {
if (pcx_file)
loaded = pcx.Load(filename) == PCX_OK;
@@ -793,7 +733,7 @@ DataLoader::LoadAlpha(const char* name, Bitmap& bitmap, int type)
// first try to load from current directory:
bool loaded = false;
- if (use_file_system) {
+ if (work_directory_source) {
if (pcx_file)
loaded = pcx.Load(filename) == PCX_OK;