Subversion Repositories spk

Rev

Rev 91 | Rev 96 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 91 Rev 93
Line 2... Line 2...
2
#include "emp.h"
2
#include "emp.h"
3
 
3
 
4
#include <time.h>
4
#include <time.h>
5
#include <vector>
5
#include <vector>
6
 
6
 
-
 
7
#include "OriginalFiles.h"
-
 
8
 
7
#ifdef _RAR
9
#ifdef _RAR
8
#include <unrar.h>
10
#include <unrar.h>
9
#endif
11
#endif
10
 
12
 
11
enum {READ_START, READ_GLOBAL, READ_SCRIPT, READ_SCRIPTFILE, READ_WARES};
13
enum {READ_START, READ_GLOBAL, READ_SCRIPT, READ_SCRIPTFILE, READ_WARES};
Line 26... Line 28...
26
	CLinkList<SComponantEntry2>	lEntries;
28
	CLinkList<SComponantEntry2>	lEntries;
27
} SComponantEntry;
29
} SComponantEntry;
28
 
30
 
29
CyString CPackages::m_sTempDir;
31
CyString CPackages::m_sTempDir;
30
 
32
 
31
CPackages::CPackages() : m_pCurrentGameExe(NULL)
33
CPackages::CPackages() : m_pCurrentGameExe(NULL),
-
 
34
	_pOriginalFiles(NULL)
32
{
35
{
33
	m_bRenameText = false;
36
	m_bRenameText = false;
34
	m_iLanguage = 0;
37
	m_iLanguage = 0;
35
	m_iGame = -1;
38
	m_iGame = -1;
36
	m_iGameVersion = -1;
39
	m_iGameVersion = -1;
Line 81... Line 84...
81
	m_lFiles.MemoryClear();
84
	m_lFiles.MemoryClear();
82
	m_lUninstallFiles.MemoryClear();
85
	m_lUninstallFiles.MemoryClear();
83
	for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() )
86
	for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() )
84
		pNode->Data()->GetFileList()->clear();
87
		pNode->Data()->GetFileList()->clear();
85
	m_lPackages.MemoryClear();
88
	m_lPackages.MemoryClear();
-
 
89
 
86
	m_lOriginalFiles.MemoryClear();
90
	SafeDelete(_pOriginalFiles);
-
 
91
 
87
	m_iFakePatch = -1;
92
	m_iFakePatch = -1;
88
	m_bVanilla = false;
93
	m_bVanilla = false;
89
	m_pEnabledMod = NULL;
94
	m_pEnabledMod = NULL;
90
	m_bLoaded = false;
95
	m_bLoaded = false;
91
	m_iLanguage = 0;
96
	m_iLanguage = 0;
Line 184... Line 189...
184
	m_iSaveGameManager = -1;
189
	m_iSaveGameManager = -1;
185
	m_lNonRemovedFiles.Clear();
190
	m_lNonRemovedFiles.Clear();
186
	m_lGlobals.Clear();
191
	m_lGlobals.Clear();
187
	m_lFakePatchOrder.Clear();
192
	m_lFakePatchOrder.Clear();
188
 
193
 
-
 
194
	if ( _pOriginalFiles ) delete _pOriginalFiles;
-
 
195
	_pOriginalFiles = new COriginalFiles(m_sCurrentDir.ToString());
-
 
196
 
189
	m_bVanilla = true;
197
	m_bVanilla = true;
190
 
198
 
191
	// check the pluginmanager data file exists
199
	// check the pluginmanager data file exists
192
	CFileIO datFile(m_sCurrentDir + "/PluginManager/pluginmanager.dat");
200
	CFileIO datFile(m_sCurrentDir + "/PluginManager/pluginmanager.dat");
193
	if ( datFile.exists() )
201
	if ( datFile.exists() )
Line 436... Line 444...
436
				else if ( cmd == "spkinstaller" )
444
				else if ( cmd == "spkinstaller" )
437
				{
445
				{
438
					fVersion = rest.toFloat();
446
					fVersion = rest.toFloat();
439
					spkinstaller = true;
447
					spkinstaller = true;
440
				}
448
				}
441
				else if ( cmd == "BetaVersion" )
449
				else if ( cmd == "betaversion" )
442
					fBeta = rest.toFloat();
450
					fBeta = rest.toFloat();
443
				else if ( cmd == "Uninstall" )
451
				else if ( cmd == "uninstall" )
444
				{
452
				{
445
					C_File *uf = new C_File();
453
					C_File *uf = new C_File();
446
					uf->SetFileType(FILETYPE_SCRIPT);
454
					uf->SetFileType(FILETYPE_SCRIPT);
447
					uf->SetCreationTime(rest.token(" ", 1).toLong());
455
					uf->SetCreationTime(rest.token(" ", 1).toLong());
448
					uf->SetFilename(m_sCurrentDir + "/Scripts/" + rest.tokens(" ", 2));
456
					uf->SetFilename(m_sCurrentDir + "/Scripts/" + rest.tokens(" ", 2));
449
					m_lUninstallFiles.push_back(uf);
457
					m_lUninstallFiles.push_back(uf);
450
				}
458
				}
451
				else if ( cmd == "NonRemovedFile" )
459
				else if ( cmd == "nonremovedfile" )
452
				{
460
				{
453
					if ( !CFileIO::Remove(rest) )
461
					if ( !CFileIO::Remove(rest) )
454
						m_lNonRemovedFiles.PushBack(CyString(rest));
462
						m_lNonRemovedFiles.PushBack(CyString(rest));
455
				}
463
				}
456
				else if ( cmd == "Original" )
464
				else if ( cmd == "original" )
457
				{
-
 
458
					C_File *uf = new C_File();
-
 
459
					uf->SetFileType(rest.token(" ", 1).toLong());
-
 
460
					if ( uf->GetFileType() == FILETYPE_EXTRA )
-
 
461
					{
-
 
462
						uf->SetDir(rest.tokens(" ", 2).tokens(":", 2));
-
 
463
						uf->SetFilename(rest.tokens(" ", 2).token(":", 1));
-
 
464
					}
-
 
465
					else
-
 
466
						uf->SetFilename(rest.tokens(" ", 2));
-
 
467
					uf->SetFilename(m_sCurrentDir + "/" + uf->GetNameDirectory(NULL));
-
 
468
					m_lOriginalFiles.push_back(uf);
465
					_pOriginalFiles->parse(rest);
469
				}
-
 
470
				else if ( cmd.Compare("GlobalSetting") )
466
				else if ( cmd.Compare("GlobalSetting") )
471
					m_lGlobals.PushBack(CyString(rest.token(":", 1)), CyString(rest.tokens(":", 2)));
467
					m_lGlobals.PushBack(CyString(rest.token(":", 1)), CyString(rest.tokens(":", 2)));
472
				else if ( cmd.Compare("FakePatchOrder") )
468
				else if ( cmd.Compare("FakePatchOrder") )
473
					m_lFakePatchOrder.PushBack(CyString(rest.token(":", 1)), CyString(rest.tokens(":", 2)));
469
					m_lFakePatchOrder.PushBack(CyString(rest.token(":", 1)), CyString(rest.tokens(":", 2)));
474
				else if ( cmd.Compare("EMPPriceOverride") )
470
				else if ( cmd.Compare("EMPPriceOverride") )
Line 998... Line 994...
998
bool CPackages::UpdatePackages(int doStatus, bool individual)
994
bool CPackages::UpdatePackages(int doStatus, bool individual)
999
{
995
{
1000
	// if theres no original files, then set the current structure as the base
996
	// if theres no original files, then set the current structure as the base
1001
	if ( doStatus == 0 || doStatus == -1 )
997
	if ( doStatus == 0 || doStatus == -1 )
1002
	{
998
	{
1003
		if ( m_lOriginalFiles.empty() || m_bRedo )
-
 
1004
		{
-
 
1005
			StoreOriginalFiles(FILETYPE_SCRIPT, "scripts");
999
		_pOriginalFiles->update(m_bRedo, &m_lFiles);
1006
			StoreOriginalFiles(FILETYPE_TEXT, "t");
-
 
1007
			StoreOriginalFiles(FILETYPE_SOUND, "soundtrack");
-
 
1008
			StoreOriginalFiles(FILETYPE_EXTRA, "mov");
-
 
1009
		}
-
 
1010
	}
1000
	}
1011
 
1001
 
1012
	// update each package
1002
	// update each package
1013
	// parent/child, signed status
1003
	// parent/child, signed status
1014
	if ( doStatus == -1 || doStatus == 1 )
1004
	if ( doStatus == -1 || doStatus == 1 )
Line 1459... Line 1449...
1459
		// find any uninstall files and remove them
1449
		// find any uninstall files and remove them
1460
		CLog::log(CLog::Log_Install, 3, "Purging uninstall scripts");
1450
		CLog::log(CLog::Log_Install, 3, "Purging uninstall scripts");
1461
		this->PurgeUninstallScripts(package, errors);
1451
		this->PurgeUninstallScripts(package, errors);
1462
 
1452
 
1463
		// backup any original files before installing
1453
		// backup any original files before installing
1464
		CLog::log(CLog::Log_Install, 3, "Checking for any original files to backup");
-
 
1465
		CDirIO oDir(m_sCurrentDir + "/PluginManager/Original");
-
 
1466
		for ( CListNode<C_File> *oNode = m_lOriginalFiles.Front(); oNode; oNode = oNode->next() )
-
 
1467
		{
-
 
1468
			C_File *of = oNode->Data();
-
 
1469
			for ( CListNode<C_File> *checkNode = package->GetFileList()->Front(); checkNode; checkNode = checkNode->next() )
-
 
1470
			{
-
 
1471
				C_File *f = checkNode->Data();
-
 
1472
 
-
 
1473
				// match the same filetype
-
 
1474
				if ( of->GetFileType() != f->GetFileType() )
-
 
1475
					continue;
-
 
1476
 
-
 
1477
				// same file
-
 
1478
				if ( of->GetFilename().Compare(f->GetFilename()) )
-
 
1479
				{
-
 
1480
					// check if original file already exists (assume already backed up)
-
 
1481
					if ( !BackupOriginalFile(of, errors) )
1454
		_pOriginalFiles->backup(package, errors);
1482
						continue;
-
 
1483
					break;
-
 
1484
				}
-
 
1485
			}
-
 
1486
		}
-
 
1487
	}
1455
	}
1488
 
1456
 
1489
	// install all the files
1457
	// install all the files
1490
	CLog::log(CLog::Log_Install, 3, "Checking for any existing files");
1458
	CLog::log(CLog::Log_Install, 3, "Checking for any existing files");
1491
	if ( oldPackage )
1459
	if ( oldPackage )
Line 1881... Line 1849...
1881
		if ( f->GetFileType() == FILETYPE_EXTRA && f->GetDir().Left(6).lower() == "extras" )
1849
		if ( f->GetFileType() == FILETYPE_EXTRA && f->GetDir().Left(6).lower() == "extras" )
1882
			removeDirs.PushBack("Extras", true);
1850
			removeDirs.PushBack("Extras", true);
1883
 
1851
 
1884
		if ( RemoveFile(f, errors) )
1852
		if ( RemoveFile(f, errors) )
1885
		{
1853
		{
1886
			// check if its an original file and restore
-
 
1887
			if ( IsOriginalFile(f) )
1854
			original = _pOriginalFiles->restoreFile(f, errors);
1888
			{
-
 
1889
				CFileIO of(m_sCurrentDir + "/PluginManager/Original/" + f->GetNameDirectory(NULL));
-
 
1890
				if ( of.exists() )
-
 
1891
				{
-
 
1892
					original = true;
-
 
1893
					if ( of.Rename(m_sCurrentDir + "/" + f->GetNameDirectory(NULL)) )
-
 
1894
						this->AddLogEntry(SPKINSTALL_ORIGINAL_RESTORE, f->GetNameDirectory(NULL), errors);
-
 
1895
					else
-
 
1896
						this->AddLogEntry(SPKINSTALL_ORIGINAL_RESTORE_FAIL, f->GetNameDirectory(NULL), errors);
-
 
1897
				}
-
 
1898
			}
-
 
1899
		}
1855
		}
1900
		else // problem removeing (try when the program closes)
1856
		else // problem removeing (try when the program closes)
1901
			m_lNonRemovedFiles.PushBack(f->GetFilePointer());
1857
			m_lNonRemovedFiles.PushBack(f->GetFilePointer());
1902
 
1858
 
1903
		// check for fake patchs
1859
		// check for fake patchs
Line 2741... Line 2697...
2741
			lines.PushBack(uString);
2697
			lines.PushBack(uString);
2742
		}
2698
		}
2743
	}
2699
	}
2744
 
2700
 
2745
	// write the original file data
2701
	// write the original file data
2746
	if ( !m_lOriginalFiles.empty() )
2702
	_pOriginalFiles->writeData(&lines);
2747
	{
-
 
2748
		for ( CListNode<C_File> *node = m_lOriginalFiles.Front(); node; node = node->next() )
-
 
2749
		{
-
 
2750
			C_File *uf = node->Data();
-
 
2751
			CyString uString = "Original: ";
-
 
2752
			uString += CyString::Number((long)uf->GetFileType()) + " ";
-
 
2753
			uString += uf->GetFilename();
-
 
2754
			if ( uf->GetFileType() == FILETYPE_EXTRA && !uf->GetDir().Empty())
-
 
2755
			{
-
 
2756
				uString += ":";
-
 
2757
				uString += uf->GetDir();
-
 
2758
			}
-
 
2759
			lines.PushBack(uString);
-
 
2760
		}
-
 
2761
	}
-
 
2762
 
2703
 
2763
	// write the global changes
2704
	// write the global changes
2764
	if ( !m_lGlobals.Empty() )
2705
	if ( !m_lGlobals.Empty() )
2765
	{
2706
	{
2766
		for ( SStringList *str = m_lGlobals.Head(); str; str = str->next )
2707
		for ( SStringList *str = m_lGlobals.Head(); str; str = str->next )
Line 3053... Line 2994...
3053
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, f->GetDirectory(package), errors);
2994
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, f->GetDirectory(package), errors);
3054
			}
2995
			}
3055
		}
2996
		}
3056
 
2997
 
3057
		// check if theres an original file to backup
2998
		// check if theres an original file to backup
3058
		C_File *of = GetOriginalFile(f);
-
 
3059
		if ( of )
-
 
3060
		{
-
 
3061
			// check if the orignal file is already backed up
-
 
3062
			if ( !CFileIO(m_sCurrentDir + "/PluginManager/Original/" + f->GetNameDirectory(package)).ExistsOld() )
-
 
3063
			{
-
 
3064
				// lets back up the file now
-
 
3065
				BackupOriginalFile(of, errors);
2999
		_pOriginalFiles->doBackup(f, errors);
3066
			}
-
 
3067
		}
-
 
3068
 
3000
 
3069
		CyString newFilename = f->GetNameDirectory(package);
3001
		CyString newFilename = f->GetNameDirectory(package);
3070
 
3002
 
3071
		// fake patches need to be renamed
3003
		// fake patches need to be renamed
3072
		if ( f->IsFakePatch() )
3004
		if ( f->IsFakePatch() )
Line 3303... Line 3235...
3303
		}
3235
		}
3304
 
3236
 
3305
		// must have been fine
3237
		// must have been fine
3306
		this->AddLogEntry(SPKINSTALL_DISABLEFILE, f->GetNameDirectory(checkPackage), errors);
3238
		this->AddLogEntry(SPKINSTALL_DISABLEFILE, f->GetNameDirectory(checkPackage), errors);
3307
 
3239
 
3308
		// check if its an original file and restore
-
 
3309
		if ( IsOriginalFile(f) )
3240
		original = _pOriginalFiles->restoreFile(f, errors);
3310
		{
-
 
3311
			CFileIO of(m_sCurrentDir + "/PluginManager/Original/" + f->GetNameDirectory(checkPackage));
-
 
3312
			if ( of.exists() )
-
 
3313
			{
-
 
3314
				original = true;
-
 
3315
				if ( of.Rename(m_sCurrentDir + "/" + f->GetNameDirectory(checkPackage)) )
-
 
3316
					this->AddLogEntry(SPKINSTALL_ORIGINAL_RESTORE, f->GetNameDirectory(checkPackage), errors);
-
 
3317
				else
-
 
3318
					this->AddLogEntry(SPKINSTALL_ORIGINAL_RESTORE_FAIL, f->GetNameDirectory(checkPackage), errors);
-
 
3319
			}
-
 
3320
		}
-
 
3321
 
3241
 
3322
		// extra file thats not in the extras directory
3242
		// extra file thats not in the extras directory
3323
		if ( f->GetFileType() == FILETYPE_EXTRA || f->GetFileType() == FILETYPE_MAP || f->GetFileType() == FILETYPE_SOUND )
3243
		if ( f->GetFileType() == FILETYPE_EXTRA || f->GetFileType() == FILETYPE_MAP || f->GetFileType() == FILETYPE_SOUND )
3324
			removeDirs.PushBack(f->GetDirectory(checkPackage), NullString, true);
3244
			removeDirs.PushBack(f->GetDirectory(checkPackage), NullString, true);
3325
 
3245
 
Line 4037... Line 3957...
4037
 
3957
 
4038
	return false;
3958
	return false;
4039
 
3959
 
4040
}
3960
}
4041
 
3961
 
4042
/**
-
 
4043
 * Update original files list
-
 
4044
 *
-
 
4045
 * Scan the current directory for any fiels that are already there, ie ones that have not been installed
-
 
4046
 * Original files should be all the scripts/sounds, etc that are in an unmodified game directory
-
 
4047
 *
-
 
4048
 * Save list of files and check if any packages overright these files
-
 
4049
 * Any file that gets overrighten from this list will automatically be backed up, and restored once the packages are removed
-
 
4050
 */
-
 
4051
void CPackages::StoreOriginalFiles(int filetype, CyString searchPath)
-
 
4052
{
-
 
4053
	CyString ext = "pck";
-
 
4054
	switch ( filetype )
-
 
4055
	{
-
 
4056
		case FILETYPE_SOUND:
-
 
4057
			ext = "mp3";
-
 
4058
			break;
-
 
4059
	}
-
 
4060
 
-
 
4061
	CDirIO Dir(m_sCurrentDir + "/" + searchPath);
-
 
4062
 
-
 
4063
	CyStringList *files = Dir.DirList();
-
 
4064
	if ( !files )
-
 
4065
		return;
-
 
4066
 
-
 
4067
	for ( SStringList *node = files->Head(); node; node = node->next )
-
 
4068
	{
-
 
4069
		CFileIO File(Dir.File(node->str));
-
 
4070
 
-
 
4071
		if ( File.GetFileExtension().Compare(ext) )
-
 
4072
			AddOriginalFile(filetype, File.GetFilename(), searchPath);
-
 
4073
	}
-
 
4074
 
-
 
4075
	delete files;
-
 
4076
}
-
 
4077
 
-
 
4078
/**
-
 
4079
 * Adds a file onto the original files list
-
 
4080
 *
-
 
4081
 * Checks if it already exists so we dont create multiples
-
 
4082
 */
-
 
4083
void CPackages::AddOriginalFile(int filetype, CyString filename, CyString searchPath)
-
 
4084
{
-
 
4085
	// dont add plugin manager as original files
-
 
4086
	if ( filetype == FILETYPE_SCRIPT && filename.IsIn("!init.pmanager") )
-
 
4087
		return;
-
 
4088
	// first check if a matching one exists
-
 
4089
	for ( CListNode<C_File> *node = m_lOriginalFiles.Front(); node; node = node->next() )
-
 
4090
	{
-
 
4091
		C_File *file = node->Data();
-
 
4092
		if ( file->GetFileType() != filetype )
-
 
4093
			continue;
-
 
4094
 
-
 
4095
		if ( file->GetFilename().Compare(filename) )
-
 
4096
			return;
-
 
4097
	}
-
 
4098
 
-
 
4099
	// check that no packages are currently using them either, not original if being used already
-
 
4100
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
-
 
4101
	{
-
 
4102
		C_File *file = node->Data();
-
 
4103
		if ( file->GetFileType() != filetype )
-
 
4104
			continue;
-
 
4105
 
-
 
4106
		if ( file->GetFilename().Compare(filename) )
-
 
4107
			return;
-
 
4108
	}
-
 
4109
 
-
 
4110
	C_File *of = new C_File(filename);
-
 
4111
	of->SetFileType(filetype);
-
 
4112
	if ( filetype == FILETYPE_EXTRA )
-
 
4113
		of->SetDir(searchPath);
-
 
4114
	of->SetFilename(m_sCurrentDir + "/" + of->GetNameDirectory(NULL));
-
 
4115
 
-
 
4116
	m_lOriginalFiles.push_back(of);
-
 
4117
}
-
 
4118
 
-
 
4119
/**
-
 
4120
 * Check for original file
-
 
4121
 *
-
 
4122
 * Checks if the file is an original file or not
-
 
4123
 */
-
 
4124
bool CPackages::IsOriginalFile(C_File *file)
-
 
4125
{
-
 
4126
	if ( GetOriginalFile(file) )
-
 
4127
		return true;
-
 
4128
	return false;
-
 
4129
}
-
 
4130
 
-
 
4131
/**
-
 
4132
 * Get original file
-
 
4133
 *
-
 
4134
 * Finds a matching original file entry and returns it
-
 
4135
 */
-
 
4136
C_File *CPackages::GetOriginalFile(C_File *file)
-
 
4137
{
-
 
4138
	if ( !file )
-
 
4139
		return NULL;
-
 
4140
 
-
 
4141
	for ( CListNode<C_File> *node = m_lOriginalFiles.Front(); node; node = node->next() )
-
 
4142
	{
-
 
4143
		C_File *of = node->Data();
-
 
4144
 
-
 
4145
		// not of the same file type
-
 
4146
		if ( of->GetFileType() != file->GetFileType() )
-
 
4147
			continue;
-
 
4148
 
-
 
4149
		// same file name, must be the same file
-
 
4150
		if ( of->GetFilename().Compare(file->GetFilename()) )
-
 
4151
			return of;
-
 
4152
	}
-
 
4153
 
-
 
4154
	return NULL;
-
 
4155
}
-
 
4156
 
-
 
4157
/**
-
 
4158
 * Backs up an original file
-
 
4159
 *
-
 
4160
 * Moves the file into the PluginManager/Original directory so packages dont replace them
-
 
4161
 * Allows these files to be restored when the package is remove to prevent breaking the game
-
 
4162
 */
-
 
4163
bool CPackages::BackupOriginalFile(C_File *f, CyStringList *errors)
-
 
4164
{
-
 
4165
	CyString newDir = CyString("PluginManager/Original/") + f->GetDirectory(NULL);
-
 
4166
	CDirIO oDir(m_sCurrentDir);
-
 
4167
	if ( oDir.Exists(newDir + "/" + f->GetFilename()) )
-
 
4168
		return true;
-
 
4169
 
-
 
4170
	// make sure the directory exissts
-
 
4171
	if ( !oDir.Exists(newDir) )
-
 
4172
	{
-
 
4173
		if ( !oDir.Create(newDir) )
-
 
4174
		{
-
 
4175
			CLog::logf(CLog::Log_Install, 2, "Unable to create directory to backup original files, %s", newDir.c_str());
-
 
4176
			this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, newDir, errors);
-
 
4177
			return false;
-
 
4178
		}
-
 
4179
 
-
 
4180
		CLog::logf(CLog::Log_Install, 2, "Created new directory, %s", newDir.c_str());
-
 
4181
		this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, newDir, errors);
-
 
4182
	}
-
 
4183
 
-
 
4184
	// now lets copy the file
-
 
4185
	CFileIO CopyFile(f->GetFilePointer());
-
 
4186
	if ( CopyFile.copy(oDir.File(newDir + "/" + f->GetFilename()).ToString()) )
-
 
4187
	{
-
 
4188
		CLog::logf(CLog::Log_Install, 2, "Original file: %s has been backed up", f->GetNameDirectory(NULL).c_str());
-
 
4189
		this->AddLogEntry(SPKINSTALL_ORIGINAL_BACKUP, f->GetNameDirectory(NULL), errors);
-
 
4190
		return true;
-
 
4191
	}
-
 
4192
	else
-
 
4193
	{
-
 
4194
		CLog::logf(CLog::Log_Install, 2, "Failed to backup the original file: %s", f->GetNameDirectory(NULL).c_str());
-
 
4195
		this->AddLogEntry(SPKINSTALL_ORIGINAL_BACKUP_FAIL, f->GetNameDirectory(NULL), errors);
-
 
4196
		return false;
-
 
4197
	}
-
 
4198
}
-
 
4199
 
-
 
4200
void CPackages::ShuffleTextFiles(CyStringList *errors)
3962
void CPackages::ShuffleTextFiles(CyStringList *errors)
4201
{
3963
{
4202
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
3964
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
4203
	{
3965
	{
4204
		C_File *f = node->Data();
3966
		C_File *f = node->Data();
Line 4914... Line 4676...
4914
int CPackages::RemoveAllPackages(CyStringList *errors, CProgressInfo *progress)
4676
int CPackages::RemoveAllPackages(CyStringList *errors, CProgressInfo *progress)
4915
{
4677
{
4916
	int files = 0;
4678
	int files = 0;
4917
 
4679
 
4918
	// remove all files
4680
	// remove all files
4919
	int max = m_lFiles.size() + m_lOriginalFiles.size() + m_lUninstallFiles.size();
4681
	int max = m_lFiles.size() + _pOriginalFiles->count() + m_lUninstallFiles.size();
4920
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
4682
	for ( CListNode<C_File> *node = m_lFiles.Front(); node; node = node->next() )
4921
	{
4683
	{
4922
		// update the progress
4684
		// update the progress
4923
		if ( progress )
4685
		if ( progress )
4924
			progress->UpdateProgress(files, max);
4686
			progress->UpdateProgress(files, max);
Line 4928... Line 4690...
4928
		delete node->Data();
4690
		delete node->Data();
4929
	}
4691
	}
4930
	m_lFiles.clear();
4692
	m_lFiles.clear();
4931
 
4693
 
4932
	// restore any original files that are backed up
4694
	// restore any original files that are backed up
4933
	for ( CListNode<C_File> *oNode = m_lOriginalFiles.Front(); oNode; oNode = oNode->next() )
-
 
4934
	{
-
 
4935
		// update the progress
4695
	//TODO: find a better way to do the progress
4936
		if ( progress )
-
 
4937
			progress->UpdateProgress(files, max);
4696
	files = _pOriginalFiles->restoreAll(progress, files, max);
4938
		++files;
-
 
4939
 
-
 
4940
		C_File *f = oNode->Data();
-
 
4941
		CFileIO of(m_sCurrentDir + "/PluginManager/Original/" + f->GetNameDirectory(NULL));
-
 
4942
		if ( of.exists() )
-
 
4943
			of.Rename(m_sCurrentDir + "/" + f->GetNameDirectory(NULL));
-
 
4944
 
-
 
4945
		//RemoveFile(oNode->Data());
-
 
4946
		delete oNode->Data();
-
 
4947
	}
-
 
4948
	m_lOriginalFiles.clear();
-
 
4949
 
4697
 
4950
	// remove any uninstall files that remain
4698
	// remove any uninstall files that remain
4951
	for ( CListNode<C_File> *uNode = m_lUninstallFiles.Front(); uNode; uNode = uNode->next() )
4699
	for ( CListNode<C_File> *uNode = m_lUninstallFiles.Front(); uNode; uNode = uNode->next() )
4952
	{
4700
	{
4953
		// update the progress
4701
		// update the progress