summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/Client.cpp20
-rw-r--r--src/client/Client.h4
-rw-r--r--src/gui/game/GameController.cpp3
-rw-r--r--src/gui/save/LocalSaveActivity.cpp11
4 files changed, 25 insertions, 13 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index 2a091aa..25fd430 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -515,8 +515,9 @@ int Client::MakeDirectory(const char * dirName)
#endif
}
-void Client::WriteFile(std::vector<unsigned char> fileData, std::string filename)
+bool Client::WriteFile(std::vector<unsigned char> fileData, std::string filename)
{
+ bool saveError = false;
try
{
std::ofstream fileStream;
@@ -526,12 +527,15 @@ void Client::WriteFile(std::vector<unsigned char> fileData, std::string filename
fileStream.write((char*)&fileData[0], fileData.size());
fileStream.close();
}
+ else
+ saveError = true;
}
catch (std::exception & e)
{
std::cerr << "WriteFile:" << e.what() << std::endl;
- throw;
- }
+ saveError = true;
+ }
+ return saveError;
}
bool Client::FileExists(std::string filename)
@@ -554,8 +558,9 @@ bool Client::FileExists(std::string filename)
return exists;
}
-void Client::WriteFile(std::vector<char> fileData, std::string filename)
+bool Client::WriteFile(std::vector<char> fileData, std::string filename)
{
+ bool saveError = false;
try
{
std::ofstream fileStream;
@@ -565,12 +570,15 @@ void Client::WriteFile(std::vector<char> fileData, std::string filename)
fileStream.write(&fileData[0], fileData.size());
fileStream.close();
}
+ else
+ saveError = true;
}
catch (std::exception & e)
{
std::cerr << "WriteFile:" << e.what() << std::endl;
- throw;
- }
+ saveError = true;
+ }
+ return saveError;
}
std::vector<unsigned char> Client::ReadFile(std::string filename)
diff --git a/src/client/Client.h b/src/client/Client.h
index 085c60a..6429b18 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -111,8 +111,8 @@ public:
void SetProxy(std::string proxy);
int MakeDirectory(const char * dirname);
- void WriteFile(std::vector<unsigned char> fileData, std::string filename);
- void WriteFile(std::vector<char> fileData, std::string filename);
+ bool WriteFile(std::vector<unsigned char> fileData, std::string filename);
+ bool WriteFile(std::vector<char> fileData, std::string filename);
bool FileExists(std::string filename);
void AddListener(ClientListener * listener);
diff --git a/src/gui/game/GameController.cpp b/src/gui/game/GameController.cpp
index 6a6702d..241bc9e 100644
--- a/src/gui/game/GameController.cpp
+++ b/src/gui/game/GameController.cpp
@@ -1059,7 +1059,8 @@ void GameController::OpenLocalSaveWindow(bool asCurrent)
else if (gameModel->GetSaveFile())
{
Client::Ref().MakeDirectory(LOCAL_SAVE_DIR);
- Client::Ref().WriteFile(gameSave->Serialise(), gameModel->GetSaveFile()->GetName());
+ if (Client::Ref().WriteFile(gameSave->Serialise(), gameModel->GetSaveFile()->GetName()))
+ new ErrorMessage("Error", "Unable to write save file.");
}
}
}
diff --git a/src/gui/save/LocalSaveActivity.cpp b/src/gui/save/LocalSaveActivity.cpp
index 084f2f2..05fe7dd 100644
--- a/src/gui/save/LocalSaveActivity.cpp
+++ b/src/gui/save/LocalSaveActivity.cpp
@@ -81,7 +81,6 @@ void LocalSaveActivity::Save()
if (result == ConfirmPrompt::ResultOkay)
{
a->saveWrite(filename);
- a->Exit();
}
}
virtual ~FileOverwriteConfirmation() { }
@@ -99,7 +98,6 @@ void LocalSaveActivity::Save()
else
{
saveWrite(finalFilename);
- Exit();
}
}
else
@@ -111,8 +109,13 @@ void LocalSaveActivity::Save()
void LocalSaveActivity::saveWrite(std::string finalFilename)
{
Client::Ref().MakeDirectory(LOCAL_SAVE_DIR);
- Client::Ref().WriteFile(save.GetGameSave()->Serialise(), finalFilename);
- callback->FileSaved(&save);
+ if (Client::Ref().WriteFile(save.GetGameSave()->Serialise(), finalFilename))
+ new ErrorMessage("Error", "Unable to write save file.");
+ else
+ {
+ callback->FileSaved(&save);
+ Exit();
+ }
}
void LocalSaveActivity::OnDraw()