Subversion Repositories spk

Rev

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

Rev 125 Rev 126
Line 93... Line 93...
93
		}
93
		}
94
	}
94
	}
95
	m_bVanilla = b;
95
	m_bVanilla = b;
96
}
96
}
97
 
97
 
-
 
98
void CPackages::setSaveGameManager(bool managed)
-
 
99
{
-
 
100
	m_iSaveGameManager = managed ? 1 : 0;
-
 
101
	
-
 
102
	if (managed)
-
 
103
	{
-
 
104
		// find new save directory
-
 
105
		CDirIO dir(this->saveDirectory());
-
 
106
		if (dir.exists())
-
 
107
		{
-
 
108
			int id = 1;
-
 
109
			while (dir.exists(Utils::String::PadNumber(id, 4)))
-
 
110
				++id;
-
 
111
			Utils::String d = Utils::String::PadNumber(id, 4);
-
 
112
			dir.Create(d);
-
 
113
			_sSaveDir = d;
-
 
114
 
-
 
115
			CDirIO destDir1(dir.dir(d));
-
 
116
			destDir1.Create("Vanilla");
-
 
117
			destDir1.cd("Vanilla");
-
 
118
			CDirIO destDir2(dir.dir(d));
-
 
119
			destDir2.Create("Modified");
-
 
120
			destDir2.cd("Modified");
-
 
121
 
-
 
122
			Utils::CStringList files;
-
 
123
			if (dir.dirList(files, Utils::String::Null(), "*.sav"))
-
 
124
			{
-
 
125
				for (auto itr = files.begin(); itr != files.end(); ++itr)
-
 
126
				{
-
 
127
					Utils::String f = dir.file((*itr)->str);
-
 
128
					CFileIO(f).copy(destDir1.file((*itr)->str));
-
 
129
					CFileIO(f).copy(destDir2.file((*itr)->str));
-
 
130
				}
-
 
131
			}
-
 
132
		}
-
 
133
	}
-
 
134
	else
-
 
135
	{
-
 
136
		_sSaveDir.clear();
-
 
137
	}
-
 
138
}
-
 
139
 
-
 
140
 
98
void CPackages::Reset()
141
void CPackages::Reset()
99
{
142
{
100
	m_lFiles.MemoryClear();
143
	m_lFiles.MemoryClear();
101
	m_lUninstallFiles.MemoryClear();
144
	m_lUninstallFiles.MemoryClear();
102
	for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() )
145
	for ( CListNode<CBaseFile> *pNode = m_lPackages.Front(); pNode; pNode = pNode->next() )
Line 439... Line 482...
439
				}
482
				}
440
				else if ( cmd == "setmod" )
483
				else if ( cmd == "setmod" )
441
					m_sSetMod = rest;
484
					m_sSetMod = rest;
442
				else if ( cmd == "shipbuffer" )
485
				else if ( cmd == "shipbuffer" )
443
					m_iShipBuffer = rest.toLong();
486
					m_iShipBuffer = rest.toLong();
-
 
487
				else if(cmd == "savedir")
-
 
488
					_sSaveDir = rest;
444
				else if ( cmd == "warebuffers" )
489
				else if ( cmd == "warebuffers" )
445
				{
490
				{
446
					int max = rest.countToken(" ");
491
					int max = rest.countToken(" ");
447
					for ( int i = 0; i < WAREBUFFERS; i++ )
492
					for ( int i = 0; i < WAREBUFFERS; i++ )
448
					{
493
					{
Line 2411... Line 2456...
2411
		CLog::log(CLog::Log_Directory, 2, "Creating other language files for game");
2456
		CLog::log(CLog::Log_Directory, 2, "Creating other language files for game");
2412
		CreateLanguageTextFiles(errors);
2457
		CreateLanguageTextFiles(errors);
2413
	}
2458
	}
2414
 
2459
 
2415
	CLog::log(CLog::Log_Directory, 2, "Backing up save game files");
2460
	CLog::log(CLog::Log_Directory, 2, "Backing up save game files");
2416
	this->BackupSaves();
-
 
2417
 
2461
 
2418
	if ( CFileIO(m_sCurrentDir + "/mods/PluginManager.dat").ExistsOld() ) {
2462
	if ( CFileIO(m_sCurrentDir + "/mods/PluginManager.dat").ExistsOld() ) {
2419
		CLog::log(CLog::Log_IO, 3, "Removing old PluginManager.dat file");
2463
		CLog::log(CLog::Log_IO, 3, "Removing old PluginManager.dat file");
2420
		CFileIO::Remove(m_sCurrentDir.ToString() + "/mods/PluginManager.dat");
2464
		CFileIO::Remove(m_sCurrentDir.ToString() + "/mods/PluginManager.dat");
2421
	}
2465
	}
Line 2635... Line 2679...
2635
		lines.PushBack("UsedWare");
2679
		lines.PushBack("UsedWare");
2636
	if ( m_bSurpressProtectedWarning )
2680
	if ( m_bSurpressProtectedWarning )
2637
		lines.PushBack("SurpressProtectedWarning");
2681
		lines.PushBack("SurpressProtectedWarning");
2638
	if ( !m_sSetMod.Empty() )
2682
	if ( !m_sSetMod.Empty() )
2639
		lines.PushBack(CyString("SetMod: ") + m_sSetMod);
2683
		lines.PushBack(CyString("SetMod: ") + m_sSetMod);
-
 
2684
	if (!_sSaveDir.empty())
-
 
2685
		lines.PushBack(CyString("SaveDir: ") + _sSaveDir);
2640
	lines.PushBack(CyString("ShipBuffer: ") + (long)m_iShipBuffer);
2686
	lines.PushBack(CyString("ShipBuffer: ") + (long)m_iShipBuffer);
2641
	CyString wareBuffer = "WareBuffers:";
2687
	CyString wareBuffer = "WareBuffers:";
2642
	for ( int i = 0; i < WAREBUFFERS; i++ )
2688
	for ( int i = 0; i < WAREBUFFERS; i++ )
2643
		wareBuffer += CyString(" ") + (long)m_iWareBuffer[i];
2689
		wareBuffer += CyString(" ") + (long)m_iWareBuffer[i];
2644
	lines.PushBack(wareBuffer);
2690
	lines.PushBack(wareBuffer);
Line 5179... Line 5225...
5179
	if ( m_iGame == GAME_X3TC )
5225
	if ( m_iGame == GAME_X3TC )
5180
	{
5226
	{
5181
		if ( maxsize ) (*maxsize) = EMP_X3TC;
5227
		if ( maxsize ) (*maxsize) = EMP_X3TC;
5182
		return GetX3TCEmp();
5228
		return GetX3TCEmp();
5183
	}
5229
	}
5184
	else if ( m_iGame == GAME_X3AP )
5230
	else if (m_iGame == GAME_X3AP)
-
 
5231
	{
-
 
5232
		if (maxsize) (*maxsize) = EMP_X3AP;
-
 
5233
		return GetX3TCEmp();
-
 
5234
	}
-
 
5235
	else if (m_iGame == GAME_X3FL)
5185
	{
5236
	{
5186
		if ( maxsize ) (*maxsize) = EMP_X3AP;
5237
		if (maxsize) (*maxsize) = EMP_X3FL;
5187
		return GetX3TCEmp();
5238
		return GetX3TCEmp();
5188
	}
5239
	}
5189
	else if ( m_iGame == GAME_X3 )
5240
	else if ( m_iGame == GAME_X3 )
5190
	{
5241
	{
5191
		if ( maxsize ) (*maxsize) = EMP_X3;
5242
		if ( maxsize ) (*maxsize) = EMP_X3;
Line 5377... Line 5428...
5377
						}
5428
						}
5378
 
5429
 
5379
						// no remove them all
5430
						// no remove them all
5380
						wareLines.DeleteFrom(maxsize);
5431
						wareLines.DeleteFrom(maxsize);
5381
					}
5432
					}
5382
					else if ( m_iGame == GAME_X3TC || m_iGame == GAME_X3AP ) // check if old emp is included, and convert it
5433
					else if ( m_iGame == GAME_X3TC || m_iGame == GAME_X3AP || m_iGame == GAME_X3FL) // check if old emp is included, and convert it
5383
					{
5434
					{
5384
						if ( wareLines.Count() > 128 )
5435
						if ( wareLines.Count() > 128 )
5385
						{
5436
						{
5386
							CyString test = wareLines.GetAt(128)->str;
5437
							CyString test = wareLines.GetAt(128)->str;
5387
							if ( test.GetToken(";", -2).Compare("SS_WARE_SW_CUSTOM16_1;") )
5438
							if ( test.GetToken(";", -2).Compare("SS_WARE_SW_CUSTOM16_1;") )
Line 5491... Line 5542...
5491
 
5542
 
5492
	switch(m_iGame) {
5543
	switch(m_iGame) {
5493
		case GAME_X3: return 30;
5544
		case GAME_X3: return 30;
5494
		case GAME_X3TC: return 35;
5545
		case GAME_X3TC: return 35;
5495
		case GAME_X3AP: return 38;
5546
		case GAME_X3AP: return 38;
-
 
5547
		case GAME_X3FL: return 39;
5496
		default: return 0;
5548
		default: return 0;
5497
	}
5549
	}
5498
}
5550
}
5499
 
5551
 
5500
void CPackages::createPluginManagerOpenText()
5552
void CPackages::createPluginManagerOpenText()
Line 5742... Line 5794...
5742
	}
5794
	}
5743
 
5795
 
5744
	writeData.push_back(CyString("	</page>"));
5796
	writeData.push_back(CyString("	</page>"));
5745
 
5797
 
5746
	// wares
5798
	// wares
5747
	if ( m_iGame == GAME_X3AP || m_iGame == GAME_X3TC || m_iGame == GAME_X3 || lWares.size() || lShips.size() )
5799
	if ( m_iGame == GAME_X3AP || m_iGame == GAME_X3TC || m_iGame == GAME_X3FL || m_iGame == GAME_X3 || lWares.size() || lShips.size() )
5748
	{
5800
	{
5749
		if ( !gameNumber )
5801
		if ( !gameNumber )
5750
			writeData.push_back(CyString("  <page id=\"17\" title=\"Plugin Manager Objects\">"));
5802
			writeData.push_back(CyString("  <page id=\"17\" title=\"Plugin Manager Objects\">"));
5751
		else
5803
		else
5752
			writeData.push_back(CyString("  <page id=\"") + (long)gameNumber + "0017\" title=\"Plugin Manager Objects\">");
5804
			writeData.push_back(CyString("  <page id=\"") + (long)gameNumber + "0017\" title=\"Plugin Manager Objects\">");
5753
 
5805
 
5754
		writeData.push_back(CyString("		<t id=\"") + (long)(SHIPSTARTTEXT - 1) + "\">ZZ_BLANKSHIP</t>");
5806
		writeData.push_back(CyString("		<t id=\"") + (long)(SHIPSTARTTEXT - 1) + "\">ZZ_BLANKSHIP</t>");
5755
		// do emp
5807
		// do emp
5756
		if ( m_iGame == GAME_X3TC || m_iGame == GAME_X3 || m_iGame == GAME_X3AP )
5808
		if ( m_iGame == GAME_X3TC || m_iGame == GAME_X3 || m_iGame == GAME_X3AP || m_iGame == GAME_X3FL)
5757
			writeData.push_back(GetEMPText());
5809
			writeData.push_back(GetEMPText());
5758
 
5810
 
5759
		// object names
5811
		// object names
5760
		for ( CListNode<SGameWare> *node = lWares.Front(); node; node = node->next() )
5812
		for ( CListNode<SGameWare> *node = lWares.Front(); node; node = node->next() )
5761
		{
5813
		{
Line 5825... Line 5877...
5825
		return true;
5877
		return true;
5826
 
5878
 
5827
	return false;
5879
	return false;
5828
}
5880
}
5829
 
5881
 
5830
void CPackages::BackupSaves(bool vanilla)
5882
void CPackages::backupSaves(bool vanilla)
5831
{
5883
{
-
 
5884
	if (!_sSaveDir.empty())
-
 
5885
	{
5832
	// copy any saves into the vanilla directory
5886
		// copy any saves into the vanilla directory
5833
	Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5887
		Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5834
 
5888
 
5835
	// make sure the directory exists
5889
		// make sure the directory exists
5836
	CDirIO saveDir(this->saveDirectory());
5890
		CDirIO saveDir(this->saveDirectory());
5837
	CDirIO gameSaveDir(m_sCurrentDir);
5891
		CDirIO gameSaveDir(saveDir.dir(_sSaveDir));
5838
	if ( !gameSaveDir.exists("PluginManager") )
-
 
5839
		gameSaveDir.Create("PluginManager");
-
 
5840
	gameSaveDir.cd("PluginManager");
-
 
5841
	if ( !gameSaveDir.exists("Saves") )
-
 
5842
		gameSaveDir.Create("Saves");
-
 
5843
	gameSaveDir.cd("Saves");
-
 
5844
	if ( !gameSaveDir.exists(dir) )
-
 
5845
		gameSaveDir.Create(dir);
-
 
5846
	gameSaveDir.cd(dir);
-
 
5847
 
5892
 
5848
	// backup the saves
5893
		if (!gameSaveDir.exists())
5849
	CyStringList *files = saveDir.DirList();
5894
			gameSaveDir.Create();
5850
	if ( files )
5895
		if (!gameSaveDir.exists(dir))
-
 
5896
			gameSaveDir.Create(dir);
-
 
5897
		gameSaveDir.cd(dir);
5851
	{
5898
 
-
 
5899
		// backup the saves
-
 
5900
		Utils::CStringList files;
5852
		for ( SStringList *node = files->Head(); node; node = node->next )
5901
		if(saveDir.dirList(files, Utils::String::Null(), "*.sav"))
5853
		{
5902
		{
-
 
5903
			for(auto itr = files.begin(); itr != files.end(); ++itr)
-
 
5904
			{
5854
			CFileIO File(saveDir.File(node->str));
5905
				CFileIO File(saveDir.file((*itr)->str));
5855
			if ( !File.CheckFileExtension("sav") )
5906
				if (!File.CheckFileExtension("sav"))
5856
				continue;
5907
					continue;
5857
			// remove the file if already exists
5908
				// remove the file if already exists
5858
			if (gameSaveDir.exists(node->str.ToString()))
5909
				if (gameSaveDir.exists((*itr)->str))
5859
				CFileIO::Remove(gameSaveDir.File(node->str).ToString());
5910
					CFileIO::Remove(gameSaveDir.file((*itr)->str));
5860
 
5911
 
5861
			// copy the file into the games save dir for backup
5912
				// copy the file into the games save dir for backup
5862
			File.copy(gameSaveDir.File(File.filename()).ToString(), true);
5913
				File.copy(gameSaveDir.file(File.filename()), true);
-
 
5914
			}
5863
		}
5915
		}
5864
 
-
 
5865
		delete files;
-
 
5866
	}
5916
	}
5867
 
-
 
5868
}
5917
}
5869
 
5918
 
5870
void CPackages::RestoreSaves(bool vanilla)
5919
void CPackages::restoreSaves(bool vanilla)
5871
{
5920
{
5872
	// get dir to restore from
5921
	// get dir to restore from
-
 
5922
	if (!_sSaveDir.empty())
-
 
5923
	{
5873
	Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5924
		Utils::String dir = (vanilla) ? "Vanilla" : "Modified";
5874
	CDirIO restoreDir(m_sCurrentDir + "/PluginManager/Saves/" + dir);
5925
		CDirIO toDir(this->saveDirectory());
5875
	CDirIO toDir(this->saveDirectory());
5926
		CDirIO restoreDir(toDir.dir(_sSaveDir));
-
 
5927
		restoreDir.cd(dir);
5876
 
5928
 
-
 
5929
		if (restoreDir.exists())
-
 
5930
		{
5877
	//if we are in vanilla mode, we should remove the saves (so we only have vanilla saves
5931
			//if we are in vanilla mode, we should remove the saves (so we only have vanilla saves
-
 
5932
			/*
5878
	if ( vanilla ) {
5933
			if (vanilla) {
5879
		CyStringList *files = toDir.DirList();
5934
				CyStringList *files = toDir.DirList();
5880
		if ( files ) {
5935
				if (files) {
5881
			for ( SStringList *node = files->Head(); node; node = node->next )
5936
					for (SStringList *node = files->Head(); node; node = node->next)
5882
			{
5937
					{
5883
				CFileIO saveFile(toDir.File(node->str));
5938
						CFileIO saveFile(toDir.File(node->str));
5884
				if ( saveFile.extension().Compare("sav") ) {
5939
						if (saveFile.extension().Compare("sav")) {
5885
					saveFile.remove();
5940
							saveFile.remove();
-
 
5941
						}
-
 
5942
					}
-
 
5943
					delete files;
5886
				}
5944
				}
5887
			}
5945
			}
5888
			delete files;
-
 
5889
		}
5946
			*/
5890
	}
-
 
5891
 
5947
 
5892
	// now we copy of the backed up save games
5948
			// now we copy of the backed up save games
5893
	CyStringList *dirs = restoreDir.DirList();
5949
			Utils::CStringList files;
5894
	if ( dirs )
5950
			if(restoreDir.dirList(files, Utils::String::Null(), "*.sav"))
5895
	{
5951
			{
5896
		for ( SStringList *node = dirs->Head(); node; node = node->next )
5952
				for(auto itr = files.begin(); itr != files.end(); itr++)
5897
		{
5953
				{
5898
			CFileIO File(restoreDir.File(node->str));
5954
					CFileIO File(restoreDir.file((*itr)->str));
5899
			// remove the file if already exists
5955
					// remove the file if already exists
5900
			if ( toDir.exists(node->str.ToString()) ) CFileIO::Remove(toDir.file(node->str.ToString()));
5956
					if (toDir.exists((*itr)->str)) CFileIO::Remove(toDir.file((*itr)->str));
5901
 
5957
 
5902
			// move file over
5958
					// move file over
5903
			File.copy(toDir.file(node->str.ToString()), true);
5959
					File.copy(toDir.file((*itr)->str), true);
-
 
5960
				}
-
 
5961
			}
5904
		}
5962
		}
5905
 
-
 
5906
		delete dirs;
-
 
5907
	}
5963
	}
5908
 
-
 
5909
}
5964
}
5910
 
5965
 
5911
bool CPackages::RemoveCurrentDirectory()
5966
bool CPackages::RemoveCurrentDirectory()
5912
{
5967
{
5913
	if ( !m_bLoaded )
5968
	if ( !m_bLoaded )
Line 5917... Line 5972...
5917
	this->RemoveAllPackages();
5972
	this->RemoveAllPackages();
5918
 
5973
 
5919
	// remove all plugin manager files
5974
	// remove all plugin manager files
5920
	this->RemoveCreatedFiles();
5975
	this->RemoveCreatedFiles();
5921
 
5976
 
5922
	// restore any vanilla saves
-
 
5923
	/*
-
 
5924
	if ( !m_bVanilla )
-
 
5925
	{
-
 
5926
		this->BackupSaves();
-
 
5927
		m_bVanilla = true;
-
 
5928
		this->RestoreSaves();
-
 
5929
	}*/
-
 
5930
 
-
 
5931
	this->Reset();
5977
	this->Reset();
5932
	m_bLoaded = false;
5978
	m_bLoaded = false;
5933
 
5979
 
5934
	// clear the plugin manager directory
5980
	// clear the plugin manager directory
5935
	CDirIO Dir(m_sCurrentDir);
5981
	CDirIO Dir(m_sCurrentDir);
Line 8360... Line 8406...
8360
	p->sFilename = CFileIO(package->filename()).filename();
8406
	p->sFilename = CFileIO(package->filename()).filename();
8361
 
8407
 
8362
	return p;
8408
	return p;
8363
}
8409
}
8364
 
8410
 
8365
CyString CPackages::FormatAvailablePackageData(CBaseFile *package)
8411
Utils::String CPackages::FormatAvailablePackageData(CBaseFile *package)
8366
{
8412
{
8367
	SAvailablePackage *p = CPackages::CreateAvailablePackageData(package);
8413
	SAvailablePackage *p = CPackages::CreateAvailablePackageData(package);
8368
	CyString ret = CPackages::FormatAvailablePackageData(p);
8414
	Utils::String ret = CPackages::FormatAvailablePackageData(p);
8369
	delete p;
8415
	delete p;
8370
	return ret;
8416
	return ret;
8371
}
8417
}
8372
 
8418
 
8373
CyString CPackages::FormatAvailablePackageData(SAvailablePackage *package)
8419
Utils::String CPackages::FormatAvailablePackageData(SAvailablePackage *package)
8374
{
8420
{
8375
	CyString ret = (long)package->iType;
8421
	Utils::String ret = (long)package->iType;
8376
 
8422
 
8377
	CyString gameCompat;
8423
	Utils::String gameCompat;
8378
	for ( CListNode<SGameCompat> *node = package->lGames.Front(); node; node = node->next() ) {
8424
	for ( CListNode<SGameCompat> *node = package->lGames.Front(); node; node = node->next() ) {
8379
		if ( !gameCompat.Empty() )
8425
		if ( !gameCompat.empty() )
8380
			gameCompat += "!";
8426
			gameCompat += "!";
8381
		gameCompat += CyString::Number(node->Data()->iGame);
8427
		gameCompat += Utils::String::Number(node->Data()->iGame);
8382
	}
8428
	}
8383
 
8429
 
8384
	if ( gameCompat.Empty() )
8430
	if ( gameCompat.empty() )
8385
		gameCompat = "0";
8431
		gameCompat = "0";
8386
 
8432
 
8387
	ret.AddToken("::", gameCompat);
8433
	ret = ret.addToken("::", gameCompat);
8388
	ret.AddToken("::", package->sName);
8434
	ret = ret.addToken("::", package->sName);
8389
	ret.AddToken("::", package->sAuthor);
8435
	ret = ret.addToken("::", package->sAuthor);
8390
	ret.AddToken("::", package->sVersion);
8436
	ret = ret.addToken("::", package->sVersion);
8391
	ret.AddToken("::", package->sUpdated);
8437
	ret = ret.addToken("::", package->sUpdated);
8392
	ret.AddToken("::", package->sFilename);
8438
	ret = ret.addToken("::", package->sFilename);
8393
	ret.AddToken("::", CyString::Number(package->iEase));
8439
	ret = ret.addToken("::", Utils::String::Number(package->iEase));
8394
	ret.AddToken("::", CyString::Number(package->iChanging));
8440
	ret = ret.addToken("::", Utils::String::Number(package->iChanging));
8395
	ret.AddToken("::", CyString::Number(package->iRec));
8441
	ret = ret.addToken("::", Utils::String::Number(package->iRec));
8396
	ret.AddToken("::", CyString::Number(package->iPluginType));
8442
	ret = ret.addToken("::", Utils::String::Number(package->iPluginType));
8397
	ret.AddToken("::", CyString::Number(package->iScriptType));
8443
	ret = ret.addToken("::", Utils::String::Number(package->iScriptType));
8398
	ret.AddToken("::", (package->bSigned) ? "1" : "0");
8444
	ret = ret.addToken("::", (package->bSigned) ? "1" : "0");
8399
	ret.AddToken("::", package->sDesc);
8445
	ret = ret.addToken("::", package->sDesc);
8400
 
8446
 
8401
	return ret;
8447
	return ret;
8402
}
8448
}
8403
 
8449
 
8404
void CPackages::ParseAvailablePackage(CyString sStr, CyString webaddress)
8450
void CPackages::ParseAvailablePackage(CyString sStr, CyString webaddress)
Line 8440... Line 8486...
8440
	p->sVersion = tok[4];
8486
	p->sVersion = tok[4];
8441
	p->sUpdated = tok[5];
8487
	p->sUpdated = tok[5];
8442
	p->sFilename = tok[6];
8488
	p->sFilename = tok[6];
8443
 
8489
 
8444
	if ( !webaddress.Empty() )
8490
	if ( !webaddress.Empty() )
8445
		p->sFilename = webaddress + "/" + p->sFilename;
8491
		p->sFilename = webaddress.ToString() + "/" + p->sFilename;
8446
 
8492
 
8447
	p->iChanging = p->iEase = p->iPluginType = p->iRec = p->iScriptType = -1;
8493
	p->iChanging = p->iEase = p->iPluginType = p->iRec = p->iScriptType = -1;
8448
 
8494
 
8449
	// check if we have the extra values
8495
	// check if we have the extra values
8450
	if ( num >= 12 )
8496
	if ( num >= 12 )
Line 8464... Line 8510...
8464
		}
8510
		}
8465
	}
8511
	}
8466
	else if ( num > 7 )
8512
	else if ( num > 7 )
8467
		p->sDesc = tok[8];
8513
		p->sDesc = tok[8];
8468
 
8514
 
8469
	if ( !p->sDesc.Empty() )
8515
	if ( !p->sDesc.empty() )
8470
		p->sDesc = p->sDesc.FindReplace("::newline::", "\\n");
8516
		p->sDesc = p->sDesc.findReplace("::newline::", "\\n");
8471
 
8517
 
8472
	AddAvailablePackage(p);
8518
	AddAvailablePackage(p);
8473
 
8519
 
8474
	CLEANSPLIT(tok, num);
8520
	CLEANSPLIT(tok, num);
8475
}
8521
}
8476
 
8522
 
8477
SAvailablePackage *CPackages::FindAvailablePackage(CyString &filename)
8523
SAvailablePackage *CPackages::FindAvailablePackage(const Utils::String &filename)
8478
{
8524
{
8479
	for ( CListNode<SAvailablePackage> *node = m_lAvailablePackages.Front(); node; node = node->next() )
8525
	for ( CListNode<SAvailablePackage> *node = m_lAvailablePackages.Front(); node; node = node->next() )
8480
	{
8526
	{
8481
		if ( node->Data()->sFilename.Compare(filename) )
8527
		if ( node->Data()->sFilename.Compare(filename) )
8482
			return node->Data();
8528
			return node->Data();
Line 8785... Line 8831...
8785
			CyString extradir;
8831
			CyString extradir;
8786
			int type = SPK::GetAutomaticFiletype(Name, &extradir, true);
8832
			int type = SPK::GetAutomaticFiletype(Name, &extradir, true);
8787
 
8833
 
8788
			C_File *f = NULL;
8834
			C_File *f = NULL;
8789
 
8835
 
-
 
8836
			Utils::String filename = CFileIO(Name).filename();
-
 
8837
			Utils::String dir = CFileIO(Name).dir();
-
 
8838
 
8790
			// check for special file types
8839
			// check for special file types
8791
			if ( type == FILETYPE_SCRIPT_UNINSTALL ) {
8840
			if ( type == FILETYPE_SCRIPT_UNINSTALL ) {
8792
				f = archive->AddFile(CFileIO(Name).filename(), CFileIO(Name).dir(), FILETYPE_SCRIPT);
8841
				f = archive->AddFile(filename, dir, FILETYPE_SCRIPT);
8793
				if ( f ) {
8842
				if ( f ) {
8794
					f->copyData((const unsigned char *)iBuf, ze.unc_size);
8843
					f->copyData((const unsigned char *)iBuf, ze.unc_size);
8795
				}
8844
				}
8796
				type = FILETYPE_UNINSTALL;
8845
				type = FILETYPE_UNINSTALL;
8797
			}
8846
			}
8798
 
8847
 
-
 
8848
			int game = 0;
-
 
8849
			// check for addons
-
 
8850
			if (dir.contains('/', true)) 
-
 
8851
			{
-
 
8852
				Utils::String first = dir.token("/", 1);
-
 
8853
				int g = m_gameExe.findAddonType(first);
-
 
8854
				if (g != -1)
-
 
8855
					game = g + 1;
-
 
8856
			}
-
 
8857
 
8799
			if ( type == -1 )
8858
			if ( type == -1 )
8800
				f = archive->AddFile(CFileIO(Name).filename(), CFileIO(Name).dir(), FILETYPE_EXTRA);
8859
				f = archive->AddFile(filename, dir, FILETYPE_EXTRA, game);
8801
			else
8860
			else
8802
				f = archive->AddFile(CFileIO(Name).filename(), extradir, type);
8861
				f = archive->AddFile(filename, extradir, type, game);
8803
 
8862
 
8804
			if ( f )
8863
			if ( f )
8805
				f->SetData((const unsigned char *)iBuf, ze.unc_size);
8864
				f->SetData((const unsigned char *)iBuf, ze.unc_size);
8806
			else
8865
			else
8807
				delete[] iBuf;
8866
				delete[] iBuf;
Line 8870... Line 8929...
8870
	return NullString;
8929
	return NullString;
8871
}
8930
}
8872
 
8931
 
8873
int CPackages::GeneratePackageUpdateData(CyString dir, bool includeSingle)
8932
int CPackages::GeneratePackageUpdateData(CyString dir, bool includeSingle)
8874
{
8933
{
8875
	CyStringList filedata;
8934
	Utils::CStringList filedata;
8876
 
8935
 
8877
	CPackages packages;
8936
	CPackages packages;
8878
 
8937
 
8879
	CDirIO Dir(dir);
8938
	CDirIO Dir(dir);
8880
	for ( int i = 0; i < 2; i++ )
8939
	for ( int i = 0; i < 2; i++ )
8881
	{
8940
	{
8882
		CyString pattern;
8941
		Utils::String pattern;
8883
		if ( i == 0 ) pattern = "*.spk";
8942
		if ( i == 0 ) pattern = "*.spk";
8884
		else if ( i == 1 ) pattern = ".xsp";
8943
		else if ( i == 1 ) pattern = ".xsp";
8885
		else break;
8944
		else break;
8886
 
8945
 
8887
		CyStringList *files = Dir.DirList("", pattern);
8946
		Utils::CStringList files;
8888
		if ( files )
8947
		if(Dir.dirList(files, "", pattern))
8889
		{
8948
		{
8890
			for ( SStringList *node = files->Head(); node; node = node->next )
8949
			for(auto itr = files.begin(); itr != files.end(); itr++)
8891
			{
8950
			{
8892
				int error = 0;
8951
				int error = 0;
8893
				CBaseFile *p = packages.OpenPackage(Dir.File(node->str), &error, 0, SPKREAD_NODATA);
8952
				CBaseFile *p = packages.OpenPackage(Dir.file((*itr)->str), &error, 0, SPKREAD_NODATA);
8894
				if ( !p )
8953
				if ( !p )
8895
					continue;
8954
					continue;
8896
 
8955
 
8897
				if ( includeSingle )
8956
				if ( includeSingle )
8898
					p->CreateUpdateFile(dir);
8957
					p->CreateUpdateFile(dir);
8899
				filedata.PushBack(CPackages::FormatAvailablePackageData(p));
8958
				filedata.pushBack(CPackages::FormatAvailablePackageData(p));
8900
				delete p;
8959
				delete p;
8901
			}
8960
			}
8902
			delete files;
-
 
8903
		}
8961
		}
8904
	}
8962
	}
8905
 
8963
 
8906
	if ( !filedata.Empty() )
8964
	if ( !filedata.empty() )
8907
	{
8965
	{
8908
		CFileIO File(dir + "/xpackagedata.dat");
8966
		CFileIO File(dir + "/xpackagedata.dat");
8909
		if ( File.WriteFile(&filedata) )
8967
		if ( File.writeFile(&filedata) )
8910
			return filedata.Count();
8968
			return filedata.size();
8911
	}
8969
	}
8912
 
8970
 
8913
	return 0;
8971
	return 0;
8914
}
8972
}
8915
 
8973