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