[colobot] 187/390: PHYSFS in CStudio
Didier Raboud
odyx at moszumanska.debian.org
Fri Jun 12 14:21:44 UTC 2015
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch upstream/latest
in repository colobot.
commit c330bcac6dc47a99038710cce9fd9ff03613a181
Author: krzys-h <krzys_h at interia.pl>
Date: Mon Nov 10 18:17:13 2014 +0100
PHYSFS in CStudio
---
src/common/resources/resourcemanager.cpp | 24 ++++++++++++++-
src/common/resources/resourcemanager.h | 6 ++++
src/ui/studio.cpp | 51 +++++++++++---------------------
src/ui/studio.h | 2 +-
4 files changed, 48 insertions(+), 35 deletions(-)
diff --git a/src/common/resources/resourcemanager.cpp b/src/common/resources/resourcemanager.cpp
index d2d69f5..7329871 100644
--- a/src/common/resources/resourcemanager.cpp
+++ b/src/common/resources/resourcemanager.cpp
@@ -167,7 +167,7 @@ bool CResourceManager::CreateDirectory(const std::string& directory)
return PHYSFS_mkdir(CleanPath(directory).c_str());
}
-//TODO: Don't use boost filesystem here
+//TODO: Don't use boost::filesystem here
bool CResourceManager::RemoveDirectory(const std::string& directory)
{
bool success = true;
@@ -219,6 +219,28 @@ std::vector<std::string> CResourceManager::ListDirectories(const std::string &di
return result;
}
+long long CResourceManager::GetFileSize(const std::string& filename)
+{
+ if(PHYSFS_isInit())
+ {
+ PHYSFS_File* file = PHYSFS_openRead(CleanPath(filename).c_str());
+ if(file == nullptr) return -1;
+ long long size = PHYSFS_fileLength(file);
+ PHYSFS_close(file);
+ return size;
+ }
+ return -1;
+}
+
+long long CResourceManager::GetLastModificationTime(const std::string& filename)
+{
+ if(PHYSFS_isInit())
+ {
+ return PHYSFS_getLastModTime(CleanPath(filename).c_str());
+ }
+ return -1;
+}
+
int CResourceManager::SDLClose(SDL_RWops *context)
{
diff --git a/src/common/resources/resourcemanager.h b/src/common/resources/resourcemanager.h
index 4d79e9b..e34ea10 100644
--- a/src/common/resources/resourcemanager.h
+++ b/src/common/resources/resourcemanager.h
@@ -56,6 +56,12 @@ public:
static std::vector<std::string> ListFiles(const std::string &directory);
//! List directories contained in directory
static std::vector<std::string> ListDirectories(const std::string &directory);
+
+
+ //! Returns file size in bytes
+ static long long GetFileSize(const std::string &filename);
+ //! Returns last modification date as timestamp
+ static long long GetLastModificationTime(const std::string &filename);
private:
static int SDLSeek(SDL_RWops *context, int offset, int whence);
diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp
index efdbbbc..4551d7b 100644
--- a/src/ui/studio.cpp
+++ b/src/ui/studio.cpp
@@ -1496,7 +1496,6 @@ void CStudio::UpdateDialogList()
{
CWindow* pw;
CList* pl;
- fs::path path;
int i = 0;
char time[100];
@@ -1506,52 +1505,38 @@ void CStudio::UpdateDialogList()
if ( pl == nullptr ) return;
pl->Flush();
- path = fs::path(SearchDirectory(false));
- fs::directory_iterator end_iter;
- if ( fs::exists(path) && fs::is_directory(path) )
- {
- for( fs::directory_iterator file(path); file != end_iter; file++)
- {
- if (fs::is_regular_file(file->status()) )
- {
- std::ostringstream temp;
- TimeToAscii(fs::last_write_time(file->path()), time);
- temp << file->path().filename().string() << '\t' << fs::file_size(file->path()) << " \t" << time;
- pl->SetItemName(i++, temp.str().c_str());
- }
- }
+ if(!CResourceManager::DirectoryExists(SearchDirectory(false)))
+ return;
+
+ std::vector<std::string> programs = CResourceManager::ListFiles(SearchDirectory(false));
+ for(auto& prog : programs) {
+ std::ostringstream temp;
+ TimeToAscii(CResourceManager::GetLastModificationTime(SearchDirectory(false) + prog), time);
+ temp << prog << '\t' << CResourceManager::GetFileSize(SearchDirectory(false) + prog) << " \t" << time;
+ pl->SetItemName(i++, temp.str().c_str());
}
}
// Constructs the name of the folder or open/save.
// If the folder does not exist, it will be created.
-//TODO: Refactor to PHYSFS
-std::string CStudio::SearchDirectory(bool bCreate, bool physfsReady)
+std::string CStudio::SearchDirectory(bool bCreate)
{
- char dir[MAX_FNAME];
+ std::string dir;
if ( m_main->GetIOPublic() )
{
- sprintf(dir, "%s/", m_main->GetPublicDir());
+ dir = std::string(m_main->GetPublicDir()) + "/";
}
else
{
- sprintf(dir, "%s/%s/Program/", m_main->GetSavegameDir(), m_main->GetGamerName());
+ dir = std::string(m_main->GetPHYSFSSavegameDir()) + "/" + std::string(m_main->GetGamerName()) + "/program/";
}
if ( bCreate )
{
- fs::path path = fs::path(dir);
- fs::create_directories(path);
- }
-
- std::string dir2 = dir;
- if(physfsReady) {
- std::string savedir = CResourceManager::GetSaveLocation()+"/";
- boost::replace_all(dir2, "\\", "/");
- boost::replace_all(savedir, "\\", "/");
- boost::replace_all(dir2, savedir, "");
+ if(!CResourceManager::DirectoryExists(dir))
+ CResourceManager::CreateDirectory(dir);
}
- return dir2;
+ return dir;
}
// Reads a new program.
@@ -1577,7 +1562,7 @@ bool CStudio::ReadProgram()
{
strcat(filename, ".txt");
}
- strcpy(dir, SearchDirectory(true, true).c_str());
+ strcpy(dir, SearchDirectory(true).c_str());
strcat(dir, filename);
pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW3));
@@ -1615,7 +1600,7 @@ bool CStudio::WriteProgram()
{
strcat(filename, ".txt");
}
- strcpy(dir, SearchDirectory(true, true).c_str());
+ strcpy(dir, SearchDirectory(true).c_str());
strcat(dir, filename);
pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW3));
diff --git a/src/ui/studio.h b/src/ui/studio.h
index dda1368..a11d706 100644
--- a/src/ui/studio.h
+++ b/src/ui/studio.h
@@ -88,7 +88,7 @@ protected:
void UpdateDialogAction();
void UpdateDialogPublic();
void UpdateDialogList();
- std::string SearchDirectory(bool bCreate, bool physfsReady=false);
+ std::string SearchDirectory(bool bCreate);
bool ReadProgram();
bool WriteProgram();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list