1 // Copyright (c) 2012- PPSSPP Project. 2 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, version 2.0 or later versions. 6 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License 2.0 for more details. 11 12 // A copy of the GPL 2.0 should have been included with the program. 13 // If not, see http://www.gnu.org/licenses/ 14 15 // Official git repository and contact information can be found at 16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. 17 18 #pragma once 19 20 #include "Core/Dialog/PSPDialog.h" 21 #include "Core/Dialog/SavedataParam.h" 22 23 struct SceUtilityGamedataInstallParam { 24 pspUtilityDialogCommon common; 25 u32_le unknown1; 26 char gameName[13]; 27 char ignore1[3]; 28 char dataName[20]; 29 PspUtilitySavedataSFOParam sfoParam; 30 int progress; 31 u32_le unknownResult1; 32 u32_le unknownResult2; 33 char ignore3[48]; 34 }; 35 36 class PSPGamedataInstallDialog: public PSPDialog { 37 public: 38 PSPGamedataInstallDialog(UtilityDialogType type); 39 virtual ~PSPGamedataInstallDialog(); 40 41 virtual int Init(u32 paramAddr); 42 virtual int Update(int animSpeed) override; 43 virtual int Shutdown(bool force = false) override; 44 virtual void DoState(PointerWrap &p) override; 45 46 int Abort(); 47 std::string GetGameDataInstallFileName(SceUtilityGamedataInstallParam *param, std::string filename); 48 49 protected: 50 // TODO: Manage status correctly. UseAutoStatus()51 bool UseAutoStatus() override { 52 return true; 53 } 54 55 private: 56 void UpdateProgress(); 57 void OpenNextFile(); 58 void CopyCurrentFileData(); 59 void CloseCurrentFile(); 60 void WriteSfoFile(); 61 62 SceUtilityGamedataInstallParam request; 63 PSPPointer<SceUtilityGamedataInstallParam> param; 64 std::vector<std::string> inFileNames; 65 int numFiles; 66 int readFiles; 67 u64 allFilesSize; // use this to calculate progress value. 68 u64 allReadSize; // use this to calculate progress value. 69 int progressValue; 70 71 int currentInputFile; 72 u32 currentInputBytesLeft; 73 int currentOutputFile; 74 }; 75