1818#include < QByteArrayList>
1919#include < QQmlEngine>
2020
21-
2221FF7SaveInfo *FF7SaveInfo::instance ()
2322{
2423 static FF7SaveInfo m;
@@ -51,6 +50,8 @@ int FF7SaveInfo::fileSize(FF7SaveInfo::FORMAT format)
5150 case FORMAT::VMC: return instance ()->d ->VMC_FILE_SIZE ;
5251 case FORMAT::PSP: return instance ()->d ->PSP_FILE_SIZE ;
5352 case FORMAT::PS3: return instance ()->d ->PS3_FILE_SIZE ;
53+ case FORMAT::PS4: return instance ()->d ->PS4_FILE_SIZE ;
54+ case FORMAT::PS4BIN: return instance ()->d ->PS4_BINFILE_SIZE ;
5455 case FORMAT::DEX: return instance ()->d ->DEX_FILE_SIZE ;
5556 case FORMAT::VGS: return instance ()->d ->VGS_FILE_SIZE ;
5657 case FORMAT::SWITCH: return instance ()->d ->SWITCH_FILE_SIZE ;
@@ -67,6 +68,8 @@ int FF7SaveInfo::fileHeaderSize(FF7SaveInfo::FORMAT format)
6768 case FORMAT::VMC: return instance ()->d ->VMC_FILE_HEADER_SIZE ;
6869 case FORMAT::PSP: return instance ()->d ->PSP_FILE_HEADER_SIZE ;
6970 case FORMAT::PS3: return instance ()->d ->PS3_FILE_HEADER_SIZE ;
71+ case FORMAT::PS4: return instance ()->d ->PS4_FILE_HEADER_SIZE ;
72+ case FORMAT::PS4BIN: return instance ()->d ->PS4_BINFILE_FILE_ID_SIZE ;
7073 case FORMAT::DEX: return instance ()->d ->DEX_FILE_HEADER_SIZE ;
7174 case FORMAT::VGS: return instance ()->d ->VGS_FILE_HEADER_SIZE ;
7275 case FORMAT::SWITCH: return instance ()->d ->SWITCH_FILE_HEADER_SIZE ;
@@ -83,6 +86,7 @@ int FF7SaveInfo::slotHeaderSize(FF7SaveInfo::FORMAT format)
8386 case FORMAT::VMC:
8487 case FORMAT::PSP:
8588 case FORMAT::PS3:
89+ case FORMAT::PS4:
8690 case FORMAT::DEX:
8791 case FORMAT::PGE:
8892 case FORMAT::PDA:
@@ -98,6 +102,7 @@ int FF7SaveInfo::slotFooterSize(FF7SaveInfo::FORMAT format)
98102 case FORMAT::VMC:
99103 case FORMAT::PSP:
100104 case FORMAT::PS3:
105+ case FORMAT::PS4:
101106 case FORMAT::DEX:
102107 case FORMAT::PGE:
103108 case FORMAT::PDA:
@@ -112,7 +117,8 @@ int FF7SaveInfo::slotCount(FF7SaveInfo::FORMAT format)
112117 case FORMAT::PDA:
113118 case FORMAT::PGE:
114119 case FORMAT::PSX:
115- case FORMAT::PS3: return 1 ;
120+ case FORMAT::PS3:
121+ case FORMAT::PS4: return 1 ;
116122 case FORMAT::VMC:
117123 case FORMAT::PSP:
118124 case FORMAT::DEX:
@@ -131,6 +137,8 @@ QByteArray FF7SaveInfo::fileIdentifier(FF7SaveInfo::FORMAT format)
131137 case FORMAT::VMC: return instance ()->d ->VMC_FILE_ID ;
132138 case FORMAT::PSP: return instance ()->d ->PSP_FILE_ID ;
133139 case FORMAT::PS3: return instance ()->d ->PS3_FILE_ID ;
140+ case FORMAT::PS4: return instance ()->d ->PS4_FILE_ID ;
141+ case FORMAT::PS4BIN: return instance ()->d ->PS4_BINFILE_FILE_ID ;
134142 case FORMAT::DEX: return instance ()->d ->DEX_FILE_ID ;
135143 case FORMAT::VGS: return instance ()->d ->VGS_FILE_ID ;
136144 case FORMAT::SWITCH: return instance ()->d ->SWITCH_FILE_ID ;
@@ -148,6 +156,7 @@ QByteArray FF7SaveInfo::fileHeader(FF7SaveInfo::FORMAT format)
148156 case FORMAT::VMC: return QByteArray (fileIdentifier (format)).append (fileHeaderSize (format) - fileIdentifier (format).length (), 0x00 );
149157 case FORMAT::PSP: return instance ()->d ->PSP_FILE_HEADER ;
150158 case FORMAT::PS3: return instance ()->d ->PS3_FILE_HEADER ;
159+ case FORMAT::PS4: return instance ()->d ->PS4_FILE_HEADER ;
151160 default : return QByteArray ();
152161 }
153162}
@@ -161,6 +170,7 @@ QByteArray FF7SaveInfo::slotHeader(FF7SaveInfo::FORMAT format, int slot)
161170 case FORMAT::PSX:
162171 case FORMAT::PSP:
163172 case FORMAT::PS3:
173+ case FORMAT::PS4:
164174 case FORMAT::DEX:
165175 case FORMAT::VGS:
166176 case FORMAT::VMC: return QByteArray (instance ()->d ->PSX_SLOT_HEADER .at (slot)).append (256 , 0x00 );
@@ -176,6 +186,7 @@ QByteArray FF7SaveInfo::slotFooter(FF7SaveInfo::FORMAT format)
176186 case FORMAT::PSX:
177187 case FORMAT::PSP:
178188 case FORMAT::PS3:
189+ case FORMAT::PS4:
179190 case FORMAT::DEX:
180191 case FORMAT::VGS:
181192 case FORMAT::VMC: return QByteArray (instance ()->d ->PSX_SLOT_FOOTER_SIZE , 0x00 );
@@ -188,6 +199,7 @@ QByteArray FF7SaveInfo::signingKey(FF7SaveInfo::FORMAT format)
188199 switch (format) {
189200 case FORMAT::PSP:
190201 case FORMAT::PS3: return instance ()->d ->PS_SIGNING_KEY ;
202+ case FORMAT::PS4: return instance ()->d ->PS4_SIGNING_KEY ;
191203 default : return QByteArray ();
192204 }
193205}
@@ -208,6 +220,7 @@ QByteArray FF7SaveInfo::signingIV(FF7SaveInfo::FORMAT format)
208220 switch (format) {
209221 case FORMAT::PSP:
210222 case FORMAT::PS3: return instance ()->d ->PS_SIGNING_IV ;
223+ case FORMAT::PS4: return instance ()->d ->PS4_SIGNING_IV ;
211224 default : return QByteArray ();
212225 }
213226}
@@ -217,6 +230,7 @@ int FF7SaveInfo::fileSeedOffset(FF7SaveInfo::FORMAT format)
217230 switch (format) {
218231 case FORMAT::PSP: return instance ()->d ->PSP_SEED_OFFSET ;
219232 case FORMAT::PS3: return instance ()->d ->PS3_SEED_OFFSET ;
233+ case FORMAT::PS4: return instance ()->d ->PS4_SEED_OFFSET ;
220234 default : return -1 ;
221235 }
222236}
@@ -226,6 +240,7 @@ int FF7SaveInfo::fileSignatureOffset(FF7SaveInfo::FORMAT format)
226240 switch (format) {
227241 case FORMAT::PSP: return instance ()->d ->PSP_SIGNATURE_OFFSET ;
228242 case FORMAT::PS3: return instance ()->d ->PS3_SIGNATURE_OFFSET ;
243+ case FORMAT::PS4: return instance ()->d ->PS4_SIGNATURE_OFFSET ;
229244 default : return -1 ;
230245 }
231246}
@@ -235,6 +250,7 @@ int FF7SaveInfo::fileSignatureSize(FF7SaveInfo::FORMAT format)
235250 switch (format) {
236251 case FORMAT::PSP:
237252 case FORMAT::PS3: return instance ()->d ->PS_SIGNATURE_SIZE ;
253+ case FORMAT::PS4: return instance ()->d ->PS4_SIGNATURE_SIZE ;
238254 default : return 0 ;
239255 }
240256}
@@ -251,6 +267,7 @@ QRegularExpression FF7SaveInfo::validNames(FF7SaveInfo::FORMAT format)
251267 case FORMAT::PSX: return instance ()->d ->PSX_VALID_NAME_REGEX ;
252268 case FORMAT::PSP: return instance ()->d ->PSP_VALID_NAME_REGEX ;
253269 case FORMAT::PS3: return instance ()->d ->PS3_VALID_NAME_REGEX ;
270+ case FORMAT::PS4: return instance ()->d ->PS4_VALID_NAME_REGEX ;
254271 case FORMAT::DEX: return instance ()->d ->DEX_VALID_NAME_REGEX ;
255272 case FORMAT::VGS: return instance ()->d ->VGS_VALID_NAME_REGEX ;
256273 case FORMAT::VMC: return instance ()->d ->VMC_VALID_NAME_REGEX ;
@@ -268,6 +285,7 @@ QString FF7SaveInfo::typeDescription(FF7SaveInfo::FORMAT format)
268285 case FORMAT::PSX: return tr (instance ()->d ->PSX_FILE_DESCRIPTION .toUtf8 ());
269286 case FORMAT::PSP: return tr (instance ()->d ->PSP_FILE_DESCRIPTION .toUtf8 ());
270287 case FORMAT::PS3: return tr (instance ()->d ->PS3_FILE_DESCRIPTION .toUtf8 ());
288+ case FORMAT::PS4: return tr (instance ()->d ->PS4_FILE_DESCRIPTION .toUtf8 ());
271289 case FORMAT::DEX: return tr (instance ()->d ->DEX_FILE_DESCRIPTION .toUtf8 ());
272290 case FORMAT::VGS: return tr (instance ()->d ->VGS_FILE_DESCRIPTION .toUtf8 ());
273291 case FORMAT::VMC: return tr (instance ()->d ->VMC_FILE_DESCRIPTION .toUtf8 ());
@@ -285,6 +303,7 @@ QStringList FF7SaveInfo::typeExtension(FF7SaveInfo::FORMAT format)
285303 case FORMAT::PSX: return instance ()->d ->PSX_VALID_EXTENSIONS ;
286304 case FORMAT::PSP: return instance ()->d ->PSP_VALID_EXTENSIONS ;
287305 case FORMAT::PS3: return instance ()->d ->PS3_VALID_EXTENSIONS ;
306+ case FORMAT::PS4: return instance ()->d ->PS4_VALID_EXTENSIONS ;
288307 case FORMAT::DEX: return instance ()->d ->DEX_VALID_EXTENSIONS ;
289308 case FORMAT::VGS: return instance ()->d ->VGS_VALID_EXTENSIONS ;
290309 case FORMAT::VMC: return instance ()->d ->VMC_VALID_EXTENSIONS ;
@@ -305,25 +324,27 @@ QString FF7SaveInfo::typeFilter(FF7SaveInfo::FORMAT format)
305324QString FF7SaveInfo::knownTypesFilter ()
306325{
307326 QString space = QStringLiteral (" " );
308- QString allTypes = QStringLiteral (" %1 %2 %3 %4 %5 %6 %7 %8 %9 %10" )
327+ QString allTypes = QStringLiteral (" %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 " )
309328 .arg (instance ()->d ->PC_VALID_EXTENSIONS .join (space)
310329 , instance ()->d ->PSX_VALID_EXTENSIONS .join (space)
311330 , instance ()->d ->PSP_VALID_EXTENSIONS .join (space)
312331 , instance ()->d ->PS3_VALID_EXTENSIONS .join (space)
332+ , instance ()->d ->PS4_VALID_EXTENSIONS .join (space)
313333 , instance ()->d ->DEX_VALID_EXTENSIONS .join (space)
314334 , instance ()->d ->VGS_VALID_EXTENSIONS .join (space)
315335 , instance ()->d ->VMC_VALID_EXTENSIONS .join (space)
316336 , instance ()->d ->SWITCH_VALID_EXTENSIONS .join (space)
317337 , instance ()->d ->PGE_VALID_EXTENSIONS .join (space)
318338 , instance ()->d ->PDA_VALID_EXTENSIONS .join (space));
319339
320- return QStringLiteral (" %1;;%2;;%3;;%4;;%5;;%6;;%7;;%8;;%9;;%10;;%11;;%12" )
340+ return QStringLiteral (" %1;;%2;;%3;;%4;;%5;;%6;;%7;;%8;;%9;;%10;;%11;;%12;;%13 " )
321341 .arg (tr (" Known FF7 Save Types (%1)" ).arg (allTypes)
322342 , typeFilter (FORMAT::PC)
323343 , typeFilter (FORMAT::SWITCH)
324344 , typeFilter (FORMAT::VMC)
325345 , typeFilter (FORMAT::PSX)
326346 , typeFilter (FORMAT::PS3)
347+ , typeFilter (FORMAT::PS4)
327348 , typeFilter (FORMAT::PSP)
328349 , typeFilter (FORMAT::DEX)
329350 , typeFilter (FORMAT::VGS)
@@ -336,6 +357,7 @@ bool FF7SaveInfo::isTypePC(FF7SaveInfo::FORMAT format)
336357{
337358 switch (format) {
338359 case FORMAT::SWITCH:
360+ case FORMAT::PS4:
339361 case FORMAT::PC: return true ;
340362 default : return false ;
341363 };
@@ -384,4 +406,3 @@ int FF7SaveInfo::psxSaveNameOffset(FF7SaveInfo::FORMAT format)
384406 default : return -1 ;
385407 }
386408}
387-
0 commit comments