1
1
#include " rmerenamer.h"
2
2
#include " rmechart.h"
3
+ #include " rmecrypt.h"
3
4
#include " rmeutils.h"
4
5
5
6
#include < QDir>
@@ -13,6 +14,8 @@ using namespace RmeUtils;
13
14
class RmeRenamerPrivate
14
15
{
15
16
public:
17
+ bool renameSingleRmp (const QString &oldName, const QString &newName);
18
+
16
19
bool renameMp3 ();
17
20
bool renameBigPng ();
18
21
bool renameSmallPng ();
@@ -85,6 +88,38 @@ bool RmeRenamer::runToEasy()
85
88
return true ;
86
89
}
87
90
91
+ bool RmeRenamerPrivate::renameSingleRmp (const QString &oldName, const QString &newName)
92
+ {
93
+ static const QByteArray rmpKeyPrefix (" RMP4TT3RN" );
94
+
95
+ QFileInfo fi (m_dir.absoluteFilePath (oldName));
96
+ QFile f (fi.absolutePath ());
97
+ if (!f.open (QFile::ReadOnly))
98
+ return false ;
99
+
100
+ QByteArray arr = f.readAll ();
101
+ f.close ();
102
+
103
+ QByteArray rmpKeyOld = rmpKeyPrefix + fi.baseName ().toLatin1 ();
104
+ rmpKeyOld.resize (16 );
105
+ QByteArray decryptedArr = RmeCrypt::decryptXxteaOnly (arr, rmpKeyOld);
106
+
107
+ QFileInfo fiNew (m_dir.absoluteFilePath (newName));
108
+ QByteArray rmpKeyNew = rmpKeyPrefix + fiNew.baseName ().toLatin1 ();
109
+ rmpKeyNew.resize (16 );
110
+ QByteArray encryptedArr = RmeCrypt::encryptXxteaOnly (decryptedArr, rmpKeyNew);
111
+
112
+ QFile fNew (fiNew.absolutePath ());
113
+ if (!fNew .open (QFile::WriteOnly | QFile::Truncate))
114
+ return false ;
115
+ fNew .write (encryptedArr);
116
+ fNew .close ();
117
+
118
+ m_dir.remove (oldName);
119
+
120
+ return true ;
121
+ }
122
+
88
123
bool RmeRenamerPrivate::renameImdsToEasy ()
89
124
{
90
125
for (ExistNote i = IMD_4K_EZ; i <= MDE_HD; i = static_cast <ExistNote>(i << 1 )) {
@@ -141,7 +176,7 @@ bool RmeRenamerPrivate::renameRmpsToEasy()
141
176
i_easiest = static_cast <ExistNote>(i_easiest << 1 );
142
177
143
178
if ((m_dir.dirName () + noteFileNameSuffix (i_easiest)) != file_name)
144
- m_dir. rename (file_name, (m_dir.dirName () + noteFileNameSuffix (i_easiest)));
179
+ renameSingleRmp (file_name, (m_dir.dirName () + noteFileNameSuffix (i_easiest)));
145
180
}
146
181
}
147
182
@@ -281,7 +316,7 @@ bool RmeRenamerPrivate::renameRmps()
281
316
QString file_name;
282
317
file_name.append (m_dir.dirName ()).append (noteFileNameSuffix (i));
283
318
if (m_dir.exists (file_name))
284
- m_dir. rename (file_name, m_toRename + noteFileNameSuffix (i));
319
+ renameSingleRmp (file_name, m_toRename + noteFileNameSuffix (i));
285
320
}
286
321
287
322
return true ;
@@ -465,6 +500,92 @@ bool RmeConverter::convertImdJsonToImd()
465
500
return flag;
466
501
}
467
502
503
+ bool RmeConverter::convertRmpToImdJson ()
504
+ {
505
+ Q_D (RmeConverter);
506
+ if (!d->m_dir .exists ())
507
+ return false ;
508
+
509
+ bool flag = true ;
510
+
511
+ for (ExistNote i = RMP_4K_EZ; i <= RMP_6K_HD; i = static_cast <ExistNote>(i << 1 )) {
512
+ static const QByteArray rmpKeyPrefix (" RMP4TT3RN" );
513
+
514
+ QString file_name;
515
+ file_name.append (d->m_dir .dirName ()).append (noteFileNameSuffix (i));
516
+ if (d->m_dir .exists (file_name)) {
517
+ QFile f (d->m_dir .absoluteFilePath (file_name));
518
+ if (!f.open (QIODevice::ReadOnly)) {
519
+ flag = false ;
520
+ continue ;
521
+ }
522
+
523
+ QByteArray arr = f.readAll ();
524
+ f.close ();
525
+
526
+ ExistNote converted = static_cast <ExistNote>(i >> 9 );
527
+ QString toFileName;
528
+ toFileName.append (d->m_dir .dirName ()).append (noteFileNameSuffix (converted));
529
+
530
+ QByteArray rmpKeySuffix = file_name.chopped (4 ).toLatin1 ();
531
+ QByteArray imdjson = RmeCrypt::decryptFull (arr, rmpKeyPrefix + rmpKeySuffix);
532
+
533
+ QFile fImdJson (d->m_dir .absoluteFilePath (toFileName));
534
+ if (!fImdJson .open (QFile::WriteOnly)) {
535
+ flag = false ;
536
+ continue ;
537
+ }
538
+ fImdJson .write (imdjson);
539
+ fImdJson .close ();
540
+ }
541
+ }
542
+
543
+ return flag;
544
+ }
545
+
546
+ bool RmeConverter::convertImdJsonToRmp ()
547
+ {
548
+ Q_D (RmeConverter);
549
+ if (!d->m_dir .exists ())
550
+ return false ;
551
+
552
+ bool flag = true ;
553
+
554
+ for (ExistNote i = IMDJSON_4K_EZ; i <= IMDJSON_6K_HD; i = static_cast <ExistNote>(i << 1 )) {
555
+ static const QByteArray rmpKeyPrefix (" RMP4TT3RN" );
556
+
557
+ QString file_name;
558
+ file_name.append (d->m_dir .dirName ()).append (noteFileNameSuffix (i));
559
+ if (d->m_dir .exists (file_name)) {
560
+ QFile f (d->m_dir .absoluteFilePath (file_name));
561
+ if (!f.open (QIODevice::ReadOnly)) {
562
+ flag = false ;
563
+ continue ;
564
+ }
565
+
566
+ QByteArray arr = f.readAll ();
567
+ f.close ();
568
+
569
+ ExistNote converted = static_cast <ExistNote>(i << 9 );
570
+ QString toFileName;
571
+ toFileName.append (d->m_dir .dirName ()).append (noteFileNameSuffix (converted));
572
+
573
+ QByteArray rmpKeySuffix = toFileName.chopped (4 ).toLatin1 ();
574
+ QByteArray rmp = RmeCrypt::encryptFull (arr, rmpKeyPrefix + rmpKeySuffix);
575
+
576
+ QFile fRmp (d->m_dir .absoluteFilePath (toFileName));
577
+ if (!fRmp .open (QFile::WriteOnly)) {
578
+ flag = false ;
579
+ continue ;
580
+ }
581
+ fRmp .write (rmp);
582
+ fRmp .close ();
583
+ }
584
+ }
585
+
586
+ return flag;
587
+ }
588
+
468
589
void RmeConverter::setDir (const QDir &dir)
469
590
{
470
591
Q_D (RmeConverter);
0 commit comments