Subversion Repositories spk

Rev

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

Rev 118 Rev 121
Line 176... Line 176...
176
	}
176
	}
177
 
177
 
178
	return oldPlugin;
178
	return oldPlugin;
179
}
179
}
180
 
180
 
-
 
181
bool CPackages::read(const Utils::String &dir, CProgressInfo *progress)
-
 
182
{
-
 
183
	return Read(CyString(dir), progress);
-
 
184
}
-
 
185
 
181
bool CPackages::Read ( CyString dir, CProgressInfo *progress )
186
bool CPackages::Read(CyString dir, CProgressInfo *progress)
182
{
187
{
183
	m_sCurrentDir = dir;
188
	m_sCurrentDir = dir;
184
	m_sCurrentDir = m_sCurrentDir.FindReplace("\\", "/");
189
	m_sCurrentDir = m_sCurrentDir.FindReplace("\\", "/");
185
	m_bOldPlugin = false;
190
	m_bOldPlugin = false;
186
	m_lCreatedFiles.Clear();
191
	m_lCreatedFiles.Clear();
Line 1584... Line 1589...
1584
		}
1589
		}
1585
		else
1590
		else
1586
		{
1591
		{
1587
			CDirIO Dir(m_sCurrentDir);
1592
			CDirIO Dir(m_sCurrentDir);
1588
			bool ready = true;
1593
			bool ready = true;
1589
			if ( !Dir.Exists("PluginManager") )
1594
			if ( !Dir.exists("PluginManager") )
1590
			{
1595
			{
1591
				if ( !Dir.Create("PluginManager") )
1596
				if ( !Dir.Create("PluginManager") )
1592
					ready = false;
1597
					ready = false;
1593
			}
1598
			}
1594
			if ( ready && !Dir.Exists("PluginManager/Icons") )
1599
			if ( ready && !Dir.exists("PluginManager/Icons") )
1595
			{
1600
			{
1596
				if ( !Dir.Create("PluginManager/Icons") )
1601
				if ( !Dir.Create("PluginManager/Icons") )
1597
					ready = false;
1602
					ready = false;
1598
			}
1603
			}
1599
 
1604
 
Line 1847... Line 1852...
1847
	{
1852
	{
1848
		removeDirs.PushBack(CyString("PluginManager/Uninstall"));
1853
		removeDirs.PushBack(CyString("PluginManager/Uninstall"));
1849
 
1854
 
1850
		// make sure the scripts directory is created, even thou it should always be there anyways
1855
		// make sure the scripts directory is created, even thou it should always be there anyways
1851
		CDirIO scriptDir(m_sCurrentDir);
1856
		CDirIO scriptDir(m_sCurrentDir);
1852
		if ( !scriptDir.Exists("scripts") )
1857
		if ( !scriptDir.exists("scripts") )
1853
		{
1858
		{
1854
			if ( scriptDir.Create("Scripts") )
1859
			if ( scriptDir.Create("Scripts") )
1855
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, "Scripts", errors);
1860
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, "Scripts", errors);
1856
			else
1861
			else
1857
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, "Scripts", errors);
1862
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, "Scripts", errors);
Line 2422... Line 2427...
2422
			CLog::log(CLog::Log_Directory, 2, "Copying mod file: " + m_sSetMod.ToString() + ", to PluginManager.cat");
2427
			CLog::log(CLog::Log_Directory, 2, "Copying mod file: " + m_sSetMod.ToString() + ", to PluginManager.cat");
2423
			CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".dat").copy(m_sCurrentDir.ToString() + "/mods/PluginManager.dat");
2428
			CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".dat").copy(m_sCurrentDir.ToString() + "/mods/PluginManager.dat");
2424
			CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".cat").copy(m_sCurrentDir.ToString() + "/mods/PluginManager.cat");
2429
			CFileIO(m_sCurrentDir + "/mods/" + m_sSetMod + ".cat").copy(m_sCurrentDir.ToString() + "/mods/PluginManager.cat");
2425
		}
2430
		}
2426
 
2431
 
2427
		if ( !CDirIO(m_sCurrentDir).Exists("mods") )
2432
		if ( !CDirIO(m_sCurrentDir).exists("mods") )
2428
			CDirIO(m_sCurrentDir).Create("mods");
2433
			CDirIO(m_sCurrentDir).Create("mods");
2429
 
2434
 
2430
		SetupWares();
2435
		SetupWares();
2431
		SetupShips();
2436
		SetupShips();
2432
		CreateEMPFile();
2437
		CreateEMPFile();
Line 2452... Line 2457...
2452
		CyStringList removeDirs;
2457
		CyStringList removeDirs;
2453
		removeDirs.PushBack(".");
2458
		removeDirs.PushBack(".");
2454
		RemoveUnusedDirectories(removeDirs, errors);
2459
		RemoveUnusedDirectories(removeDirs, errors);
2455
	}
2460
	}
2456
 
2461
 
-
 
2462
	m_sCurrentDir = "";
2457
	m_bLoaded = false;
2463
	m_bLoaded = false;
2458
	return true;
2464
	return true;
2459
}
2465
}
2460
 
2466
 
2461
CyString CPackages::GetModKey()
2467
CyString CPackages::GetModKey()
Line 2776... Line 2782...
2776
	lines.PushBack("</scripts>");
2782
	lines.PushBack("</scripts>");
2777
 
2783
 
2778
	CFileIO datFile(m_sCurrentDir + "/PluginManager/PluginManager.new");
2784
	CFileIO datFile(m_sCurrentDir + "/PluginManager/PluginManager.new");
2779
 
2785
 
2780
	CDirIO Dir(m_sCurrentDir);
2786
	CDirIO Dir(m_sCurrentDir);
2781
	if ( !Dir.Exists("PluginManager") ) {
2787
	if ( !Dir.exists("PluginManager") ) {
2782
		CLog::log(CLog::Log_IO, 2, "Creating PluginManager directory");
2788
		CLog::log(CLog::Log_IO, 2, "Creating PluginManager directory");
2783
 		Dir.Create("PluginManager");
2789
 		Dir.Create("PluginManager");
2784
	}
2790
	}
2785
 
2791
 
2786
	CLog::log(CLog::Log_IO, 2, "Writing data file: " + m_sCurrentDir.ToString() + "/PluginManager/PluginManager.new");
2792
	CLog::log(CLog::Log_IO, 2, "Writing data file: " + m_sCurrentDir.ToString() + "/PluginManager/PluginManager.new");
Line 2942... Line 2948...
2942
		CDirIO Dir(m_sCurrentDir);
2948
		CDirIO Dir(m_sCurrentDir);
2943
 
2949
 
2944
		// fake patches are in the root, no need for directory
2950
		// fake patches are in the root, no need for directory
2945
		if ( !f->IsFakePatch() )
2951
		if ( !f->IsFakePatch() )
2946
		{
2952
		{
2947
			if ( !Dir.Exists(f->GetDirectory(package)) )
2953
			if ( !Dir.exists(f->getDirectory(package)) )
2948
			{
2954
			{
2949
				if ( !Dir.Create(f->GetDirectory(package)) )
2955
				if ( !Dir.Create(f->getDirectory(package)) )
2950
				{
2956
				{
2951
					this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, f->GetDirectory(package), errors);
2957
					this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, f->GetDirectory(package), errors);
2952
					continue;
2958
					continue;
2953
				}
2959
				}
2954
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, f->GetDirectory(package), errors);
2960
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY, f->GetDirectory(package), errors);
Line 3131... Line 3137...
3131
		}
3137
		}
3132
 
3138
 
3133
		// file is not being used by any enabled package
3139
		// file is not being used by any enabled package
3134
		// set disabled and move to disabled directory
3140
		// set disabled and move to disabled directory
3135
		CDirIO Dir(m_sCurrentDir);
3141
		CDirIO Dir(m_sCurrentDir);
3136
		CyString newFilename = "PluginManager/Disabled/";
3142
		Utils::String newFilename = "PluginManager/Disabled/";
3137
 
3143
 
3138
		// fake patches have thier own special directory
3144
		// fake patches have thier own special directory
3139
		if ( f->IsFakePatch() )
3145
		if ( f->IsFakePatch() )
3140
			newFilename += "FakePatches";
3146
			newFilename += "FakePatches";
3141
		// otherwise we put them in thier usual directory structure inside the disabled dir
3147
		// otherwise we put them in thier usual directory structure inside the disabled dir
3142
		else
3148
		else
3143
			newFilename += f->GetDirectory(NULL);
3149
			newFilename += f->getDirectory(NULL);
3144
 
3150
 
3145
		// make sure the directory exists so we can move the file
3151
		// make sure the directory exists so we can move the file
3146
		if ( !Dir.Exists(newFilename) )
3152
		if ( !Dir.exists(newFilename) )
3147
		{
3153
		{
3148
			// we couldn't create the directory for some reason, this is not good
3154
			// we couldn't create the directory for some reason, this is not good
3149
			if ( !Dir.Create(newFilename) )
3155
			if ( !Dir.Create(newFilename) )
3150
			{
3156
			{
3151
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, newFilename, errors);
3157
				this->AddLogEntry(SPKINSTALL_CREATEDIRECTORY_FAIL, newFilename, errors);
Line 3160... Line 3166...
3160
		if ( f->IsFakePatch() )
3166
		if ( f->IsFakePatch() )
3161
		{
3167
		{
3162
			// find package the fake patch belongs to
3168
			// find package the fake patch belongs to
3163
			if ( checkPackage )
3169
			if ( checkPackage )
3164
			{
3170
			{
3165
				newFilename = m_sCurrentDir + "/PluginManager/Disabled/FakePatches/FakePatch_" + checkPackage->GetNameValidFile() + "_" + checkPackage->author() + "_" + f->GetName();
3171
				newFilename = Utils::String(m_sCurrentDir.ToString()) + "/PluginManager/Disabled/FakePatches/FakePatch_" + checkPackage->GetNameValidFile().ToString() + "_" + checkPackage->author() + "_" + f->GetName().ToString();
3166
				shuffle = true;
3172
				shuffle = true;
3167
			}
3173
			}
3168
		}
3174
		}
3169
		else if ( f->IsAutoTextFile() )
3175
		else if ( f->IsAutoTextFile() )
3170
		{
3176
		{
3171
			if ( checkPackage )
3177
			if ( checkPackage )
3172
			{
3178
			{
3173
				newFilename = m_sCurrentDir + "/PluginManager/Disabled/TextFiles/Text_" + checkPackage->GetNameValidFile() + "_" + checkPackage->author() + "_" + f->GetName();
3179
				newFilename = Utils::String(m_sCurrentDir.ToString()) + "/PluginManager/Disabled/TextFiles/Text_" + checkPackage->GetNameValidFile().ToString() + "_" + checkPackage->author() + "_" + f->GetName().ToString();
3174
				shuffle = true;
3180
				shuffle = true;
3175
			}
3181
			}
3176
		}
3182
		}
3177
		// otherwise we can just use the standard filename
3183
		// otherwise we can just use the standard filename
3178
		else
3184
		else
3179
			newFilename = m_sCurrentDir + "/PluginManager/Disabled/" + f->GetNameDirectory(checkPackage);
3185
			newFilename = Utils::String(m_sCurrentDir.ToString()) + "/PluginManager/Disabled/" + f->GetNameDirectory(checkPackage).ToString();
3180
 
3186
 
3181
		// now to move the file by renameing it to its new location
3187
		// now to move the file by renameing it to its new location
3182
		// !!error checking!!
3188
		// !!error checking!!
3183
		// check the file, if it doesn't exist, and exists as disabled, we should just adjust the setting instead of an error
3189
		// check the file, if it doesn't exist, and exists as disabled, we should just adjust the setting instead of an error
3184
		CFileIO currentFile(f->GetFilePointer());
3190
		CFileIO currentFile(f->GetFilePointer());
Line 4236... Line 4242...
4236
	CDirIO Dir((dir.Empty()) ? m_sCurrentDir : dir);
4242
	CDirIO Dir((dir.Empty()) ? m_sCurrentDir : dir);
4237
 
4243
 
4238
	int check = start;
4244
	int check = start;
4239
	while ( check > 0 )
4245
	while ( check > 0 )
4240
	{
4246
	{
4241
		CyString checkStr = CyString::Number(check).PadNumber(2);
4247
		Utils::String checkStr = Utils::String::PadNumber(check, 2);
4242
 
4248
 
4243
		// check if a cat file exists
4249
		// check if a cat file exists
4244
		if ( !Dir.Exists(checkStr + ".cat") )
4250
		if ( !Dir.exists(checkStr + ".cat") )
4245
		{
4251
		{
4246
			// it doen't, check if theres a dat file (incase of package error)
4252
			// it doen't, check if theres a dat file (incase of package error)
4247
			if ( !Dir.Exists(checkStr + ".dat") )
4253
			if ( !Dir.exists(checkStr + ".dat") )
4248
				break;
4254
				break;
4249
		}
4255
		}
4250
		--check;
4256
		--check;
4251
	}
4257
	}
4252
 
4258
 
Line 4264... Line 4270...
4264
 
4270
 
4265
	int check = start;
4271
	int check = start;
4266
	while ( check < 99 )
4272
	while ( check < 99 )
4267
	{
4273
	{
4268
		++check;
4274
		++check;
4269
		CyString checkStr = CyString::Number(check).PadNumber(2);
4275
		Utils::String checkStr = Utils::String::PadNumber(check, 2);
4270
 
4276
 
4271
		// check if a cat file exists
4277
		// check if a cat file exists
4272
		if ( !Dir.Exists(checkStr + ".cat") )
4278
		if ( !Dir.exists(checkStr + ".cat") )
4273
		{
4279
		{
4274
			// it doen't, check if theres a dat file (incase of package error)
4280
			// it doen't, check if theres a dat file (incase of package error)
4275
			if ( !Dir.Exists(checkStr + ".dat") )
4281
			if ( !Dir.exists(checkStr + ".dat") )
4276
				break;
4282
				break;
4277
		}
4283
		}
4278
	}
4284
	}
4279
 
4285
 
4280
	return check;
4286
	return check;
Line 4339... Line 4345...
4339
		return;
4345
		return;
4340
 
4346
 
4341
	CDirIO Dir(m_sCurrentDir);
4347
	CDirIO Dir(m_sCurrentDir);
4342
 
4348
 
4343
	// check for lang.dat file
4349
	// check for lang.dat file
4344
	if ( Dir.Exists("lang.dat") )
4350
	if ( Dir.exists("lang.dat") )
4345
	{
4351
	{
4346
		CFileIO File(Dir.File("lang.dat"));
4352
		CFileIO File(Dir.File("lang.dat"));
4347
 
4353
 
4348
		size_t size;
4354
		size_t size;
4349
		char *data = File.ReadToData(&size);
4355
		char *data = File.ReadToData(&size);
Line 4768... Line 4774...
4768
		m_gameExe.ParseExe("x3tc.exe|35:5:NO_XOR|TC_TEXT|MYDOCLOG:HKCU/Software/Egosoft/X3TC/ModName:X3 Terran Conflict:Egosoft/X3TC:3:1933464!1933520:2.0 Aldrin Expansion:-1:2.5 A New Home (Superbox):-1:3.0 Balance of Power");
4774
		m_gameExe.ParseExe("x3tc.exe|35:5:NO_XOR|TC_TEXT|MYDOCLOG:HKCU/Software/Egosoft/X3TC/ModName:X3 Terran Conflict:Egosoft/X3TC:3:1933464!1933520:2.0 Aldrin Expansion:-1:2.5 A New Home (Superbox):-1:3.0 Balance of Power");
4769
		m_gameExe.ParseExe("x3ap.exe|38:2:NO_XOR|TC_TEXT|MYDOCLOG|ADDON:HKCU/Software/Egosoft/X3AP/ModName:X3 Albion Prelude:Egosoft/X3AP:addon!x3tc.exe:3:-1:2.0 The War Continues:-1:2.5 Operation Loose Ends:-1:3.0 Shady Business");
4775
		m_gameExe.ParseExe("x3ap.exe|38:2:NO_XOR|TC_TEXT|MYDOCLOG|ADDON:HKCU/Software/Egosoft/X3AP/ModName:X3 Albion Prelude:Egosoft/X3AP:addon!x3tc.exe:3:-1:2.0 The War Continues:-1:2.5 Operation Loose Ends:-1:3.0 Shady Business");
4770
	}
4776
	}
4771
}
4777
}
4772
 
4778
 
4773
int CPackages::GetGameLanguage(CyString dir)
4779
int CPackages::GetGameLanguage() const
4774
{
4780
{
-
 
4781
	return this->GetGameLanguage(m_sCurrentDir.ToString());
-
 
4782
}
-
 
4783
int CPackages::GetGameLanguage(const Utils::String &sDir) const
-
 
4784
{
-
 
4785
	Utils::String dir = sDir;
4775
	if ( dir.Empty() )
4786
	if (dir.empty())
4776
		dir = m_sCurrentDir;
4787
		dir = m_sCurrentDir.ToString();
-
 
4788
	else
-
 
4789
		dir = this->getProperDir(dir);
4777
 
4790
 
4778
	CDirIO Dir(dir);
4791
	CDirIO Dir(dir);
4779
 
4792
 
4780
	// check for lang.dat file
4793
	// check for lang.dat file
4781
	if ( Dir.Exists("lang.dat") )
4794
	if ( Dir.exists("lang.dat") )
4782
	{
4795
	{
4783
		CFileIO File(Dir.File("lang.dat"));
4796
		CFileIO File(Dir.file("lang.dat"));
4784
 
4797
 
4785
		size_t size;
4798
		size_t size;
4786
		char *data = File.ReadToData(&size);
4799
		char *data = File.ReadToData(&size);
4787
 
4800
 
4788
		if ( data )
4801
		if ( data )
4789
		{
4802
		{
4790
			CyString str(data);
4803
			Utils::String str(data);
4791
			return str.GetToken("\n", 1, 1).GetToken(" ", 1, 1).ToInt();
4804
			return str.token("\n", 1).token(" ", 1).toLong();
4792
		}
4805
		}
4793
	}
4806
	}
4794
 
4807
 
4795
	return 0;
4808
	return 0;
4796
}
4809
}
4797
CyString CPackages::GetGameRunExe(CyString dir)
4810
Utils::String CPackages::GetGameRunExe(const Utils::String &dir)
-
 
4811
{
-
 
4812
	return m_gameExe.GetGameRunExe(dir);
-
 
4813
}
-
 
4814
Utils::String CPackages::GetGameRunExe()
4798
{
4815
{
4799
	return m_gameExe.GetGameRunExe((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString());
4816
	return m_gameExe.GetGameRunExe(m_sCurrentDir.ToString());
4800
}
4817
}
4801
 
4818
 
4802
CyString CPackages::GetGameNameFromType(int game)
4819
CyString CPackages::GetGameNameFromType(int game)
4803
{
4820
{
4804
	return m_gameExe.GetGameNameFromType(game - 1);
4821
	return m_gameExe.GetGameNameFromType(game - 1);
4805
}
4822
}
-
 
4823
Utils::String CPackages::getGameName() const
-
 
4824
{
-
 
4825
	return getGameName(m_sCurrentDir.ToString());
-
 
4826
}
-
 
4827
 
-
 
4828
Utils::String CPackages::getGameName(const Utils::String &dir) const
-
 
4829
{
-
 
4830
	return m_gameExe.GetGameName(dir.empty() ? m_sCurrentDir.ToString() : dir);
-
 
4831
}
-
 
4832
 
4806
CyString CPackages::GetGameName(CyString dir)
4833
CyString CPackages::GetGameName(CyString dir)
4807
{
4834
{
4808
	return m_gameExe.GetGameName((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString());
4835
	return m_gameExe.GetGameName((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString());
4809
}
4836
}
4810
CyString CPackages::GetProperDir(CyString dir)
4837
CyString CPackages::GetProperDir(CyString dir)
Line 4813... Line 4840...
4813
}
4840
}
4814
CyString CPackages::GetAddonDir(CyString dir)
4841
CyString CPackages::GetAddonDir(CyString dir)
4815
{
4842
{
4816
	return m_gameExe.GetAddonDir((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString());
4843
	return m_gameExe.GetAddonDir((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString());
4817
}
4844
}
-
 
4845
Utils::String CPackages::getProperDir() const
-
 
4846
{
-
 
4847
	return getProperDir(m_sCurrentDir.ToString());
-
 
4848
}
4818
int CPackages::GetGameAddons(CyStringList &exes, CyString dir)
4849
Utils::String CPackages::getProperDir(const Utils::String &dir) const
-
 
4850
{
-
 
4851
	return m_gameExe.GetProperDir((dir.empty()) ? m_sCurrentDir.ToString() : dir);
-
 
4852
}
-
 
4853
Utils::String CPackages::getAddonDir() const
4819
{
4854
{
-
 
4855
	return getAddonDir(m_sCurrentDir.ToString());
-
 
4856
}
-
 
4857
Utils::String CPackages::getAddonDir(const Utils::String &dir) const
-
 
4858
{
-
 
4859
	return m_gameExe.GetAddonDir((dir.empty()) ? m_sCurrentDir.ToString() : dir);
-
 
4860
}
-
 
4861
int CPackages::GetGameAddons(Utils::CStringList &exes, const Utils::String &dir)
-
 
4862
{
4820
	return m_gameExe.GetGameAddons((dir.Empty()) ? m_sCurrentDir.ToString() : dir.ToString(), exes);
4863
	return m_gameExe.GetGameAddons((dir.empty()) ? m_sCurrentDir.ToString() : dir, exes);
-
 
4864
}
-
 
4865
int CPackages::GetGameAddons(Utils::CStringList &exes)
-
 
4866
{
-
 
4867
	return m_gameExe.GetGameAddons(m_sCurrentDir.ToString(), exes);
4821
}
4868
}
4822
 
4869
 
4823
CyString CPackages::GetGameTypesString(CBaseFile *package, bool includeVersion)
4870
CyString CPackages::GetGameTypesString(CBaseFile *package, bool includeVersion)
4824
{
4871
{
4825
	if ( !package->AnyGameCompatability() )
4872
	if ( !package->AnyGameCompatability() )
Line 5430... Line 5477...
5430
	int lang = m_iLanguage;
5477
	int lang = m_iLanguage;
5431
	if ( !lang || lang < 0 )
5478
	if ( !lang || lang < 0 )
5432
		lang = 44;
5479
		lang = 44;
5433
 
5480
 
5434
	CDirIO Dir(m_sCurrentDir);
5481
	CDirIO Dir(m_sCurrentDir);
5435
	if ( !Dir.Exists("t") )
5482
	if ( !Dir.exists("t") )
5436
		Dir.Create("t");
5483
		Dir.Create("t");
5437
 
5484
 
5438
	CyString filename = SPK::FormatTextName(PMTEXTFILE, lang, (m_iGameFlags & EXEFLAG_TCTEXT));
5485
	CyString filename = SPK::FormatTextName(PMTEXTFILE, lang, (m_iGameFlags & EXEFLAG_TCTEXT));
5439
	CFileIO textFile(m_sCurrentDir + "/t/" + filename + ".xml");
5486
	CFileIO textFile(m_sCurrentDir + "/t/" + filename + ".xml");
5440
 
5487
 
Line 5480... Line 5527...
5480
	int lang = m_iLanguage;
5527
	int lang = m_iLanguage;
5481
	if ( !lang || lang < 0 )
5528
	if ( !lang || lang < 0 )
5482
		lang = 44;
5529
		lang = 44;
5483
 
5530
 
5484
	CDirIO Dir(m_sCurrentDir);
5531
	CDirIO Dir(m_sCurrentDir);
5485
	if ( !Dir.Exists("t") )
5532
	if ( !Dir.exists("t") )
5486
		Dir.Create("t");
5533
		Dir.Create("t");
5487
 
5534
 
5488
	m_iLastUpdated = (int)time(NULL);
5535
	m_iLastUpdated = (int)time(NULL);
5489
 
5536
 
5490
	CyString filename = SPK::FormatTextName(PMTEXTFILE, lang, (m_iGameFlags & EXEFLAG_TCTEXT));
5537
	CyString filename = SPK::FormatTextName(PMTEXTFILE, lang, (m_iGameFlags & EXEFLAG_TCTEXT));
Line 5732... Line 5779...
5732
		}
5779
		}
5733
	}
5780
	}
5734
	textFile.remove();
5781
	textFile.remove();
5735
}
5782
}
5736
 
5783
 
5737
bool CPackages::IsCurrentDir(CyString dir)
5784
bool CPackages::isCurrentDir(const Utils::String &dir) const
5738
{
5785
{
-
 
5786
	Utils::String cur = m_sCurrentDir.ToString();
-
 
5787
 
5739
	if ( dir.Compare(m_sCurrentDir) )
5788
	if ( dir.Compare(cur) )
5740
		return true;
5789
		return true;
5741
 
5790
 
5742
	CyString checkDir = m_sCurrentDir;
5791
	Utils::String checkDir = cur;
5743
	checkDir = checkDir.FindReplace("/", "\\");
5792
	checkDir = checkDir.findReplace("/", "\\");
5744
	if ( checkDir.Compare(dir) )
5793
	if ( checkDir.Compare(dir) )
5745
		return true;
5794
		return true;
5746
 
5795
 
5747
	checkDir = checkDir.FindReplace("\\", "/");
5796
	checkDir = checkDir.findReplace("\\", "/");
5748
	if ( checkDir.Compare(dir) )
5797
	if ( checkDir.Compare(dir) )
5749
		return true;
5798
		return true;
5750
 
5799
 
5751
	return false;
5800
	return false;
5752
}
5801
}
Line 5757... Line 5806...
5757
	Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5806
	Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5758
 
5807
 
5759
	// make sure the directory exists
5808
	// make sure the directory exists
5760
	CDirIO saveDir(this->saveDirectory());
5809
	CDirIO saveDir(this->saveDirectory());
5761
	CDirIO gameSaveDir(m_sCurrentDir);
5810
	CDirIO gameSaveDir(m_sCurrentDir);
5762
	if ( !gameSaveDir.Exists("PluginManager") )
5811
	if ( !gameSaveDir.exists("PluginManager") )
5763
		gameSaveDir.Create("PluginManager");
5812
		gameSaveDir.Create("PluginManager");
5764
	gameSaveDir.cd("PluginManager");
5813
	gameSaveDir.cd("PluginManager");
5765
	if ( !gameSaveDir.Exists("Saves") )
5814
	if ( !gameSaveDir.exists("Saves") )
5766
		gameSaveDir.Create("Saves");
5815
		gameSaveDir.Create("Saves");
5767
	gameSaveDir.cd("Saves");
5816
	gameSaveDir.cd("Saves");
5768
	if ( !gameSaveDir.Exists(dir) )
5817
	if ( !gameSaveDir.exists(dir) )
5769
		gameSaveDir.Create(dir);
5818
		gameSaveDir.Create(dir);
5770
	gameSaveDir.cd(dir);
5819
	gameSaveDir.cd(dir);
5771
 
5820
 
5772
	// backup the saves
5821
	// backup the saves
5773
	CyStringList *files = saveDir.DirList();
5822
	CyStringList *files = saveDir.DirList();
Line 5862... Line 5911...
5862
	Dir.RemoveDir("objects", false, true, 0);
5911
	Dir.RemoveDir("objects", false, true, 0);
5863
	Dir.RemoveDir("types", false, true, 0);
5912
	Dir.RemoveDir("types", false, true, 0);
5864
	Dir.RemoveDir("textures", false, true, 0);
5913
	Dir.RemoveDir("textures", false, true, 0);
5865
 
5914
 
5866
	// remove the plugin manager mod files
5915
	// remove the plugin manager mod files
5867
	if ( Dir.Exists("mods/PluginManager.cat") )	CFileIO::Remove(Dir.File("mods/PluginManager.cat").ToString());
5916
	if ( Dir.exists("mods/PluginManager.cat") )	CFileIO::Remove(Dir.file("mods/PluginManager.cat"));
5868
	if ( Dir.Exists("mods/PluginManager.dat") )	CFileIO::Remove(Dir.File("mods/PluginManager.dat").ToString());
5917
	if ( Dir.exists("mods/PluginManager.dat") )	CFileIO::Remove(Dir.file("mods/PluginManager.dat"));
5869
 
5918
 
5870
	return true;
5919
	return true;
5871
}
5920
}
5872
 
5921
 
5873
void CPackages::CreateDummies()
5922
void CPackages::CreateDummies()
Line 7084... Line 7133...
7084
			if ( File.CheckFileExtension("bob") )
7133
			if ( File.CheckFileExtension("bob") )
7085
				ext = "pbb";
7134
				ext = "pbb";
7086
			else if ( File.CheckFileExtension("bod") )
7135
			else if ( File.CheckFileExtension("bod") )
7087
				ext = "pbd";
7136
				ext = "pbd";
7088
			CFileIO pckFile(File.ChangeFileExtension(ext));
7137
			CFileIO pckFile(File.ChangeFileExtension(ext));
7089
			if ( !CDirIO(pckFile.dir()).Exists() )
7138
			if ( !CDirIO(pckFile.dir()).exists() )
7090
				CDirIO(pckFile.dir()).Create();
7139
				CDirIO(pckFile.dir()).Create();
7091
			pckFile.WriteData((char *)pckData, newFileSize);
7140
			pckFile.WriteData((char *)pckData, newFileSize);
7092
			return true;
7141
			return true;
7093
		}
7142
		}
7094
	}
7143
	}
Line 7116... Line 7165...
7116
			if ( File.CheckFileExtension("pbb") )
7165
			if ( File.CheckFileExtension("pbb") )
7117
				ext = "bob";
7166
				ext = "bob";
7118
			else if ( File.CheckFileExtension("pbd") )
7167
			else if ( File.CheckFileExtension("pbd") )
7119
				ext = "bod";
7168
				ext = "bod";
7120
			CFileIO pckFile(File.ChangeFileExtension(ext));
7169
			CFileIO pckFile(File.ChangeFileExtension(ext));
7121
			if ( !CDirIO(pckFile.dir()).Exists() )
7170
			if ( !CDirIO(pckFile.dir()).exists() )
7122
				CDirIO(pckFile.dir()).Create();
7171
				CDirIO(pckFile.dir()).Create();
7123
			pckFile.WriteData((char *)pckData, newFileSize);
7172
			pckFile.WriteData((char *)pckData, newFileSize);
7124
 
7173
 
7125
			// check for xml and rename
7174
			// check for xml and rename
7126
			if ( checkxml )
7175
			if ( checkxml )
Line 7191... Line 7240...
7191
			if ( pckData )
7240
			if ( pckData )
7192
			{
7241
			{
7193
//				if ( !this->GetAddonDir().Empty() && CCatFile::IsAddonDir(filename) )
7242
//				if ( !this->GetAddonDir().Empty() && CCatFile::IsAddonDir(filename) )
7194
//					filename = this->GetAddonDir() + "/" + filename;
7243
//					filename = this->GetAddonDir() + "/" + filename;
7195
				CFileIO pckFile(m_sCurrentDir + "/" + filename);
7244
				CFileIO pckFile(m_sCurrentDir + "/" + filename);
7196
				if ( !CDirIO(pckFile.dir()).Exists() )
7245
				if ( !CDirIO(pckFile.dir()).exists() )
7197
					CDirIO(pckFile.dir()).Create();
7246
					CDirIO(pckFile.dir()).Create();
7198
				pckFile.WriteData((char *)pckData, newFileSize);
7247
				pckFile.WriteData((char *)pckData, newFileSize);
7199
				this->AddCreatedFile(pckFile.fullFilename());
7248
				this->AddCreatedFile(pckFile.fullFilename());
7200
				return true;
7249
				return true;
7201
			}
7250
			}
Line 7536... Line 7585...
7536
	}
7585
	}
7537
 
7586
 
7538
	return package;
7587
	return package;
7539
}
7588
}
7540
 
7589
 
7541
CyString CPackages::GetLanguageName()
7590
CyString CPackages::GetLanguageName() const
7542
{
7591
{
7543
	return CPackages::ConvertLanguage(m_iLanguage);
7592
	return CPackages::ConvertLanguage(m_iLanguage);
7544
}
7593
}
7545
 
7594
 
7546
CyString CPackages::ConvertLanguage(int lang)
7595
Utils::String CPackages::ConvertLanguage(int lang)
7547
{
7596
{
7548
	switch ( lang )
7597
	switch ( lang )
7549
	{
7598
	{
7550
		case 44:
7599
		case 44:
7551
			return "English";
7600
			return "English";
Line 7583... Line 7632...
7583
			return "Norweigen";
7632
			return "Norweigen";
7584
		case 48:
7633
		case 48:
7585
			return "Polish";
7634
			return "Polish";
7586
	}
7635
	}
7587
 
7636
 
7588
	return CyString::Number(lang);
7637
	return Utils::String::Number(lang);
7589
}
7638
}
7590
 
7639
 
7591
bool CPackages::CheckAccessRights(CyString dir)
7640
bool CPackages::CheckAccessRights(CyString dir)
7592
{
7641
{
7593
	if ( dir.Empty() )
7642
	if ( dir.Empty() )
Line 7896... Line 7945...
7896
}
7945
}
7897
 
7946
 
7898
int CPackages::AdjustFileType(CyString file, int filetype)
7947
int CPackages::AdjustFileType(CyString file, int filetype)
7899
{
7948
{
7900
	CFileIO File(file);
7949
	CFileIO File(file);
7901
	CyString dir = File.GetDirIO().TopDir();
7950
	Utils::String dir = File.GetDirIO().topDir();
7902
	CyString basename = File.baseName();
7951
	CyString basename = File.baseName();
7903
 
7952
 
7904
	// mod files
7953
	// mod files
7905
	if ( File.CheckFileExtension("cat") || File.CheckFileExtension("dat") )
7954
	if ( File.CheckFileExtension("cat") || File.CheckFileExtension("dat") )
7906
		return FILETYPE_MOD;
7955
		return FILETYPE_MOD;