virtual bool doWork() { std::vector<ByteString> files = Client::Ref().DirectorySearch(directory, search, ".cps"); std::sort(files.rbegin(), files.rend(), [](ByteString a, ByteString b) { return a.ToLower() < b.ToLower(); }); notifyProgress(-1); for(std::vector<ByteString>::iterator iter = files.begin(), end = files.end(); iter != end; ++iter) { SaveFile * saveFile = new SaveFile(*iter); try { std::vector<unsigned char> data = Client::Ref().ReadFile(*iter); GameSave * tempSave = new GameSave(data); saveFile->SetGameSave(tempSave); saveFiles.push_back(saveFile); ByteString filename = (*iter).SplitFromEndBy(PATH_SEP).After(); filename = filename.SplitBy('.').Before(); saveFile->SetDisplayName(filename.FromUtf8()); } catch(std::exception & e) { //:( } } return true; }
int luatpt_getscript(lua_State* l) { int scriptID = luaL_checkinteger(l, 1); const char *filename = luaL_checkstring(l, 2); int runScript = luaL_optint(l, 3, 0); int confirmPrompt = luaL_optint(l, 4, 1); ByteString url = ByteString::Build(SCHEME "starcatcher.us/scripts/main.lua?get=", scriptID); if (confirmPrompt && !ConfirmPrompt::Blocking("Do you want to install script?", url.FromUtf8(), "Install")) return 0; int ret; ByteString scriptData = http::Request::Simple(url, &ret); if (!scriptData.size() || !filename) { return luaL_error(l, "Server did not return data"); } if (ret != 200) { return luaL_error(l, http::StatusText(ret).ToUtf8().c_str()); } if (!strcmp(scriptData.c_str(), "Invalid script ID\r\n")) { return luaL_error(l, "Invalid Script ID"); } FILE *outputfile = fopen(filename, "r"); if (outputfile) { fclose(outputfile); outputfile = NULL; if (!confirmPrompt || ConfirmPrompt::Blocking("File already exists, overwrite?", ByteString(filename).FromUtf8(), "Overwrite")) { outputfile = fopen(filename, "wb"); } else { return 0; } } else { outputfile = fopen(filename, "wb"); } if (!outputfile) { return luaL_error(l, "Unable to write to file"); } fputs(scriptData.c_str(), outputfile); fclose(outputfile); outputfile = NULL; if (runScript) { luaL_dostring(l, ByteString::Build("dofile('", filename, "')").c_str()); } return 0; }
void LocalSaveActivity::Save() { class FileOverwriteConfirmation: public ConfirmDialogueCallback { public: LocalSaveActivity * a; ByteString filename; FileOverwriteConfirmation(LocalSaveActivity * a, ByteString finalFilename) : a(a), filename(finalFilename) {} void ConfirmCallback(ConfirmPrompt::DialogueResult result) override { if (result == ConfirmPrompt::ResultOkay) { a->saveWrite(filename); } } virtual ~FileOverwriteConfirmation() { } }; if (filenameField->GetText().Contains('/') || filenameField->GetText().BeginsWith(".")) { new ErrorMessage("Error", "Invalid filename."); } else if (filenameField->GetText().length()) { ByteString finalFilename = ByteString(LOCAL_SAVE_DIR) + ByteString(PATH_SEP) + filenameField->GetText().ToUtf8() + ".cps"; save.SetDisplayName(filenameField->GetText()); save.SetFileName(finalFilename); if(Client::Ref().FileExists(finalFilename)) { new ConfirmPrompt("Overwrite file", "Are you sure you wish to overwrite\n"+finalFilename.FromUtf8(), new FileOverwriteConfirmation(this, finalFilename)); } else { saveWrite(finalFilename); } } else { new ErrorMessage("Error", "You must specify a filename."); } }