Subversion Repositories spk

Rev

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

Rev 43 Rev 46
Line 14... Line 14...
14
#include "File_IO.h"
14
#include "File_IO.h"
15
#include "CatFile.h"
15
#include "CatFile.h"
16
#include "archive/zip.h"
16
#include "archive/zip.h"
17
#include "Packages.h"
17
#include "Packages.h"
18
 
18
 
-
 
19
#include <Package/InstallText.h>
19
 
20
 
-
 
21
// remove these eventually
-
 
22
using namespace SPK;
-
 
23
using namespace Package;
20
 
24
 
21
CArchiveFile::~CArchiveFile()
25
CArchiveFile::~CArchiveFile()
22
{
26
{
23
	Delete ();
27
	Delete ();
24
}
28
}
Line 30... Line 34...
30
	m_iType = TYPE_ARCHIVE;
34
	m_iType = TYPE_ARCHIVE;
31
}
35
}
32
 
36
 
33
void CBaseFile::SetDefaults ()
37
void CBaseFile::SetDefaults ()
34
{
38
{
-
 
39
	_setDefaults();
-
 
40
 
35
	m_pIconFile = NULL;
41
	m_pIconFile = NULL;
36
 
42
 
37
	m_bAutoGenerateUpdateFile = false;
43
	m_bAutoGenerateUpdateFile = false;
38
	m_SHeader.iValueCompression = SPKCOMPRESS_ZLIB;
44
	m_SHeader.iValueCompression = SPKCOMPRESS_ZLIB;
39
	m_SHeader2.iFileCompression = SPKCOMPRESS_ZLIB;
45
	m_SHeader2.iFileCompression = SPKCOMPRESS_ZLIB;
Line 49... Line 55...
49
 
55
 
50
	m_bFullyLoaded = false;
56
	m_bFullyLoaded = false;
51
	m_bSigned = false;
57
	m_bSigned = false;
52
	m_bEnable = m_bGlobal = m_bProfile = m_bModifiedEnabled = true;
58
	m_bEnable = m_bGlobal = m_bProfile = m_bModifiedEnabled = true;
53
	m_bOverrideFiles = false;
59
	m_bOverrideFiles = false;
54
 
-
 
55
	m_iRecommended = m_iEaseOfUse = m_iGameChanging = -1;
-
 
56
}
60
}
57
 
61
 
58
CBaseFile::CBaseFile()
62
CBaseFile::CBaseFile()
59
{
63
{
60
	SetDefaults ();
64
	SetDefaults ();
Line 74... Line 78...
74
	{
78
	{
75
		delete m_pIconFile;
79
		delete m_pIconFile;
76
		m_pIconFile = NULL;
80
		m_pIconFile = NULL;
77
	}
81
	}
78
 
82
 
79
	m_lInstallText.clear(true);
-
 
80
	m_lUninstallText.clear(true);
-
 
81
	m_lNames.clear(true);
83
	m_lNames.clear(true);
82
}
84
}
83
 
85
 
84
CyString CBaseFile::GetLanguageName ( int lang )
86
CyString CBaseFile::GetLanguageName ( int lang )
85
{
87
{
Line 586... Line 588...
586
			m_bChanged = true;
588
			m_bChanged = true;
587
		}
589
		}
588
	}
590
	}
589
}
591
}
590
 
592
 
591
void CBaseFile::AddLanguageName ( int lang, CyString name )
593
void CBaseFile::AddLanguageName ( int lang, const Utils::String &name )
592
{
594
{
593
	// first check for an existing language
595
	// first check for an existing language
594
	SNames *n;
596
	SNames *n;
595
	for ( n = m_lNames.First(); n; n = m_lNames.Next() )
597
	for ( n = m_lNames.First(); n; n = m_lNames.Next() )
596
	{
598
	{
Line 608... Line 610...
608
	m_lNames.push_back ( n );
610
	m_lNames.push_back ( n );
609
 
611
 
610
	m_bChanged = true;
612
	m_bChanged = true;
611
}
613
}
612
 
614
 
613
/*
-
 
614
	Func:   AddInstallText
-
 
615
	Input:	before - true for before text, false for after text
-
 
616
			install - true to add to install text list, false for unisntall text list
-
 
617
			lang - string containing the language to use
-
 
618
			data - The text to add for the language
-
 
619
	Return: install text - Returns the text struct that it used to add
-
 
620
	Desc:   Adds the text to list, adds either install or uninstall text
-
 
621
			If language already exists, then its overwritten
-
 
622
			Allows adding before and after seperatly to the same entry
-
 
623
*/
-
 
624
SInstallText *CBaseFile::AddInstallText ( bool before, bool install, int lang, CyString data )
-
 
625
{
-
 
626
	CLinkList<SInstallText> *list = NULL;
-
 
627
	if ( install )
-
 
628
		list = &m_lInstallText;
-
 
629
	else
-
 
630
		list = &m_lUninstallText;
-
 
631
 
-
 
632
 
-
 
633
	SInstallText *unist = NULL;
-
 
634
	// check if language already exists and overright if needed
-
 
635
	for ( SInstallText *u = list->First(); u; u = list->Next() )
-
 
636
	{
-
 
637
		if ( u->iLanguage == lang )
-
 
638
		{
-
 
639
			unist = u;
-
 
640
			break;
-
 
641
		}
-
 
642
	}
-
 
643
 
-
 
644
	if ( !unist )
-
 
645
	{
-
 
646
		unist = new SInstallText;
-
 
647
		unist->iLanguage = lang;
-
 
648
		if ( lang == 0 )
-
 
649
			list->push_front ( unist );
-
 
650
		else
-
 
651
			list->push_back ( unist );
-
 
652
	}
-
 
653
 
-
 
654
	if ( !before )
-
 
655
		unist->sAfter = data;
-
 
656
	else
-
 
657
		unist->sBefore = data;
-
 
658
 
-
 
659
	m_bChanged = true;
-
 
660
 
-
 
661
	return unist;
-
 
662
}
-
 
663
 
-
 
664
SInstallText *CBaseFile::FindInstallText ( bool install, int lang )
-
 
665
{
-
 
666
	CLinkList<SInstallText> *list = NULL;
-
 
667
	if ( install )
-
 
668
		list = &m_lInstallText;
-
 
669
	else
-
 
670
		list = &m_lUninstallText;
-
 
671
 
-
 
672
	for ( SInstallText *it = list->First(); it; it = list->Next() )
-
 
673
	{
-
 
674
		if ( it->iLanguage == lang )
-
 
675
			return it;
-
 
676
	}
-
 
677
	return NULL;
-
 
678
}
-
 
679
 
-
 
680
void CBaseFile::AddInstallText ( SInstallText *add )
-
 
681
{
-
 
682
	SInstallText *it = FindInstallText ( true, add->iLanguage );
-
 
683
	if ( it == add )
-
 
684
		return;
-
 
685
 
-
 
686
	if ( it )
-
 
687
	{
-
 
688
		m_lInstallText.remove ( it );
-
 
689
		delete it;
-
 
690
	}
-
 
691
 
-
 
692
	m_bChanged = true;
-
 
693
 
-
 
694
	m_lInstallText.push_back ( add );
-
 
695
}
-
 
696
 
-
 
697
void CBaseFile::AddUninstallText ( SInstallText *add )
-
 
698
{
-
 
699
	SInstallText *it = FindInstallText ( false, add->iLanguage );
-
 
700
	if ( it == add )
-
 
701
		return;
-
 
702
 
-
 
703
	if ( it )
-
 
704
	{
-
 
705
		m_lUninstallText.remove ( it );
-
 
706
		delete it;
-
 
707
	}
-
 
708
 
-
 
709
	m_bChanged = true;
-
 
710
 
-
 
711
	m_lUninstallText.push_back ( add );
-
 
712
}
-
 
713
 
-
 
714
void CBaseFile::RemoveInstallText ( bool install, int lang )
-
 
715
{
-
 
716
	SInstallText *it = FindInstallText ( install, lang );
-
 
717
	if ( it )
-
 
718
	{
-
 
719
		if ( install )
-
 
720
			m_lInstallText.remove ( it );
-
 
721
		else
-
 
722
			m_lUninstallText.remove ( it );
-
 
723
		delete it;
-
 
724
		m_bChanged = true;
-
 
725
	}
-
 
726
}
-
 
727
 
-
 
728
bool CBaseFile::IsThereInstallText ( bool install )
-
 
729
{
-
 
730
	CLinkList<SInstallText> *list = NULL;
-
 
731
	if ( install )
-
 
732
		list = &m_lInstallText;
-
 
733
	else
-
 
734
		list = &m_lUninstallText;
-
 
735
 
-
 
736
	if ( list->size() > 1 )
-
 
737
		return true;
-
 
738
	if ( list->size() <= 0 )
-
 
739
		return false;
-
 
740
 
-
 
741
	SInstallText *it = list->First();
-
 
742
	if ( !it->sAfter.Empty() )
-
 
743
		return true;
-
 
744
	if ( !it->sBefore.Empty() )
-
 
745
		return true;
-
 
746
	return false;
-
 
747
}
-
 
748
 
-
 
749
CyString CBaseFile::GetBeforeText ( CLinkList<SInstallText> *list, int lang, bool noDefault )
-
 
750
{
-
 
751
	CyString beforetext;
-
 
752
	for ( SInstallText *u = list->First(); u; u = list->Next() )
-
 
753
	{
-
 
754
		if ( !noDefault )
-
 
755
		{
-
 
756
			if ( (beforetext.Empty()) && (u->iLanguage == 0) )
-
 
757
				beforetext = u->sBefore;
-
 
758
		}
-
 
759
 
-
 
760
		if ( (u->iLanguage == lang) && (!u->sBefore.Empty()) )
-
 
761
			beforetext = u->sBefore;
-
 
762
	}
-
 
763
	return beforetext;
-
 
764
}
-
 
765
 
-
 
766
CyString CBaseFile::GetAfterText ( CLinkList<SInstallText> *list, int lang, bool noDefault )
-
 
767
{
-
 
768
	CyString text;
-
 
769
	for ( SInstallText *u = list->First(); u; u = list->Next() )
-
 
770
	{
-
 
771
		if ( (u->iLanguage == lang) && (!u->sAfter.Empty()) )
-
 
772
			text = u->sAfter;
-
 
773
 
-
 
774
		if ( !noDefault )
-
 
775
		{
-
 
776
			if ( (text.Empty()) && (u->iLanguage == 0) )
-
 
777
				text = u->sAfter;
-
 
778
		}
-
 
779
	}
-
 
780
	return text;
-
 
781
}
-
 
782
 
-
 
783
CyString CBaseFile::GetFullPackageName(CyString format, int lang)
615
CyString CBaseFile::GetFullPackageName(CyString format, int lang)
784
{
616
{
785
	if ( format.Empty() )
617
	if ( format.Empty() )
786
		return GetFullPackageName(lang);
618
		return GetFullPackageName(lang);
787
 
619
 
Line 1543... Line 1375...
1543
		if ( m_lGames.Back() ) {
1375
		if ( m_lGames.Back() ) {
1544
			m_lGames.Back()->Data()->iVersion = rest;
1376
			m_lGames.Back()->Data()->iVersion = rest;
1545
		}
1377
		}
1546
	}
1378
	}
1547
	else if ( first.Compare("Game:") )
1379
	else if ( first.Compare("Game:") )
1548
		this->AddGameCompatability(rest, NullString);
1380
		this->AddGameCompatability(rest, "");
1549
	else if ( first.Compare("GameCompat:") )
1381
	else if ( first.Compare("GameCompat:") )
1550
		this->AddGameCompatability(rest.token(" ", 1), rest.tokens(" ", 2));
1382
		this->AddGameCompatability(rest.token(" ", 1), rest.tokens(" ", 2));
1551
	else if ( first.Compare("GameCompatExact:") )
1383
	else if ( first.Compare("GameCompatExact:") )
1552
		this->AddGameCompatability(rest.token(" ", 1), rest.tokens(" ", 2));
1384
		this->AddGameCompatability(rest.token(" ", 1), rest.tokens(" ", 2));
1553
	else if ( first.Compare("Date:") )
1385
	else if ( first.Compare("Date:") )
Line 1605... Line 1437...
1605
 
1437
 
1606
				m_sDescription = firstStr + lastStr;
1438
				m_sDescription = firstStr + lastStr;
1607
			}
1439
			}
1608
		}
1440
		}
1609
	}
1441
	}
1610
	else if ( first.Compare("UninstallAfter:") )
-
 
1611
		AddUninstallAfterText(ParseInstallText(rest.token("|", 1)), rest.tokens("|", 2));
1442
	else if ( first.Compare("UninstallAfter:") )	this->addUninstallText(ParseInstallText(rest.token("|", 1)), false, rest.tokens("|", 2));
1612
	else if ( first.Compare("UninstallBefore:") )
-
 
1613
		AddUninstallBeforeText(ParseInstallText(rest.token("|", 1)), rest.tokens("|", 2));
1443
	else if ( first.Compare("UninstallBefore:") )	this->addUninstallText(ParseInstallText(rest.token("|", 1)), true, rest.tokens("|", 2));
1614
	else if ( first.Compare("InstallAfter:") )
-
 
1615
		AddInstallAfterText(ParseInstallText(rest.token("|", 1)), rest.tokens("|", 2));
1444
	else if ( first.Compare("InstallAfter:") )		this->addInstallText(ParseInstallText(rest.token("|", 1)), false, rest.tokens("|", 2));
1616
	else if ( first.Compare("InstallBefore:") )
-
 
1617
		AddInstallBeforeText(ParseInstallText(rest.token("|", 1)), rest.tokens("|", 2));
1445
	else if ( first.Compare("InstallBefore:") )		this->addInstallText(ParseInstallText(rest.token("|", 1)), true, rest.tokens("|", 2));
1618
	else if ( first.Compare("ScriptName:") )
1446
	else if ( first.Compare("ScriptName:") )
1619
		AddLanguageName(ParseLanguage(rest.token(":", 1)), rest.token(":", 2));
1447
		AddLanguageName(ParseLanguage(rest.token(":", 1)), rest.token(":", 2));
1620
	else if ( first.Compare("GameChanging:") )
1448
	else if ( first.Compare("GameChanging:") )	this->setGameChanging(rest);
1621
		m_iGameChanging = rest;
-
 
1622
	else if ( first.Compare("EaseOfUse:") )
1449
	else if ( first.Compare("EaseOfUse:") )		this->setEaseOfUse(rest);
1623
		m_iEaseOfUse = rest;
-
 
1624
	else if ( first.Compare("Recommended:") )
1450
	else if ( first.Compare("Recommended:") )	this->setRecommended(rest);
1625
		m_iRecommended = rest;
-
 
1626
	else if ( first.Compare("NeededLibrary:") )
1451
	else if ( first.Compare("NeededLibrary:") )
1627
		this->AddNeededLibrary(rest.token("||", 1), rest.token("||", 2), rest.token("||", 3));
1452
		this->AddNeededLibrary(rest.token("||", 1), rest.token("||", 2), rest.token("||", 3));
1628
	else if ( first.Compare("FakePatchBefore:") )
1453
	else if ( first.Compare("FakePatchBefore:") )
1629
		this->AddFakePatchOrder(false, rest.token("||", 1), rest.token("||", 2));
1454
		this->AddFakePatchOrder(false, rest.token("||", 1), rest.token("||", 2));
1630
	else if ( first.Compare("FakePatchAfter:") )
1455
	else if ( first.Compare("FakePatchAfter:") )
Line 1660... Line 1485...
1660
 
1485
 
1661
	return langID;
1486
	return langID;
1662
}
1487
}
1663
 
1488
 
1664
 
1489
 
1665
int CBaseFile::ParseInstallText(CyString lang)
1490
int CBaseFile::ParseInstallText(const Utils::String &lang)
1666
{
1491
{
1667
	return this->ParseLanguage(lang);
1492
	return this->ParseLanguage(lang);
1668
}
1493
}
1669
 
1494
 
1670
 
1495
 
Line 2038... Line 1863...
2038
		desc.remove('\r');
1863
		desc.remove('\r');
2039
		values += "Desc: " + desc + "\n";
1864
		values += "Desc: " + desc + "\n";
2040
	}
1865
	}
2041
 
1866
 
2042
	for ( CListNode<SGameCompat> *gc = m_lGames.Front(); gc; gc = gc->next() ) {
1867
	for ( CListNode<SGameCompat> *gc = m_lGames.Front(); gc; gc = gc->next() ) {
2043
		if ( !gc->Data()->sVersion.Empty() )
1868
		if ( !gc->Data()->sVersion.empty() )
2044
			values += Utils::String("GameCompatExact: ") + (long)gc->Data()->iGame + " " + gc->Data()->sVersion.ToString() + "\n";
1869
			values += Utils::String("GameCompatExact: ") + (long)gc->Data()->iGame + " " + gc->Data()->sVersion + "\n";
2045
		else
1870
		else
2046
			values += Utils::String("GameCompat: ") + (long)gc->Data()->iGame + " " + (long)gc->Data()->iVersion + "\n";
1871
			values += Utils::String("GameCompat: ") + (long)gc->Data()->iGame + " " + (long)gc->Data()->iVersion + "\n";
2047
	}
1872
	}
2048
	if ( !m_sForumLink.Empty() )
1873
	if ( !m_sForumLink.Empty() )
2049
		values += Utils::String("ForumLink: ") + m_sForumLink.ToString() + "\n";
1874
		values += Utils::String("ForumLink: ") + m_sForumLink.ToString() + "\n";
2050
 
1875
 
2051
	if ( m_bSigned )
1876
	if ( m_bSigned )
2052
		values += "Signed\n";
1877
		values += "Signed\n";
2053
 
1878
 
-
 
1879
	for ( int j = 0; j < 2; j++ ) {
2054
	CListNode<SInstallText> *it;
1880
		const CInstallText *text;
2055
	for ( it = m_lUninstallText.Front(); it; it = it->next() ) {
1881
		Utils::String textStart;
2056
		if ( !it->Data()->sAfter.Empty() )
1882
		switch(j) {
2057
			values += (CyString("UninstallAfter: ") + CyString::Number(it->Data()->iLanguage) + "|" + it->Data()->sAfter + "\n").ToString();
1883
			case 0:	textStart = "Uninstall"; text = this->uninstallText(); break;
2058
		if ( !it->Data()->sBefore.Empty() )
-
 
2059
			values += (CyString("UninstallBefore: ") + CyString::Number(it->Data()->iLanguage) + "|" + it->Data()->sBefore + "\n").ToString();
1884
			case 1: textStart = "Install"; text = this->installText(); break;
2060
	}
1885
		}
2061
	for ( it = m_lInstallText.Front(); it; it = it->next() ) {
1886
		for ( unsigned int i = 0; i < text->count(); i++ ) {
2062
		if ( !it->Data()->sAfter.Empty() )
1887
			int iLang = text->language(i);
2063
			values += (CyString("InstallAfter: ") + CyString::Number(it->Data()->iLanguage) + "|" + it->Data()->sAfter + "\n").ToString();
1888
			if ( !text->getBefore(iLang).empty() ) values += textStart + "Before: " + (long)iLang + "|" + text->getBefore(iLang) + "\n";
2064
		if ( !it->Data()->sBefore.Empty() )
-
 
2065
			values += (CyString("InstallBefore: ") + CyString::Number(it->Data()->iLanguage) + "|" + it->Data()->sBefore + "\n").ToString();
1889
			if ( !text->getAfter(iLang).empty() ) values += textStart + "After: " + (long)iLang + "|" + text->getAfter(iLang) + "\n";
-
 
1890
		}
2066
	}
1891
	}
2067
 
1892
 
2068
	values += Utils::String("GameChanging: ") + (long)m_iGameChanging + "\n";
1893
	values += Utils::String("GameChanging: ") + (long)gameChanging() + "\n";
2069
	values += Utils::String("EaseOfUse: ") + (long)m_iEaseOfUse + "\n";
1894
	values += Utils::String("EaseOfUse: ") + (long)easeOfUse() + "\n";
2070
	values += Utils::String("Recommended: ") + (long)m_iRecommended + "\n";
1895
	values += Utils::String("Recommended: ") + (long)recommended() + "\n";
2071
 
1896
 
2072
	for ( CListNode<SNames> *nNode = m_lNames.Front(); nNode; nNode = nNode->next() )
1897
	for ( CListNode<SNames> *nNode = m_lNames.Front(); nNode; nNode = nNode->next() )
2073
		values += Utils::String("ScriptName: ") + (long)nNode->Data()->iLanguage + ":" + nNode->Data()->sName.ToString() + "\n";
1898
		values += Utils::String("ScriptName: ") + (long)nNode->Data()->iLanguage + ":" + nNode->Data()->sName + "\n";
2074
 
1899
 
2075
	for ( CListNode<SNeededLibrary> *libNode = m_lNeededLibrarys.Front(); libNode; libNode = libNode->next() ) {
1900
	for ( CListNode<SNeededLibrary> *libNode = m_lNeededLibrarys.Front(); libNode; libNode = libNode->next() ) {
2076
		SNeededLibrary *l = libNode->Data();
1901
		SNeededLibrary *l = libNode->Data();
2077
		values += (CyString("NeededLibrary: ") + l->sName + "||" + l->sAuthor + "||" + l->sMinVersion + "\n").ToString();
1902
		values += (CyString("NeededLibrary: ") + l->sName + "||" + l->sAuthor + "||" + l->sMinVersion + "\n").ToString();
2078
	}
1903
	}
Line 2429... Line 2254...
2429
 
2254
 
2430
	return m_bSigned;
2255
	return m_bSigned;
2431
}
2256
}
2432
 
2257
 
2433
 
2258
 
2434
bool CBaseFile::IsPackageNeeded(CyString scriptName, CyString author)
2259
bool CBaseFile::IsPackageNeeded(const Utils::String &scriptName, const Utils::String &author)
2435
{
2260
{
2436
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2261
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2437
	{
2262
	{
2438
		SNeededLibrary *l = node->Data();
2263
		SNeededLibrary *l = node->Data();
2439
		if ( l->sName.Compare(scriptName) && l->sAuthor.Compare(author) )
2264
		if ( l->sName.Compare(scriptName) && l->sAuthor.Compare(author) )
Line 2441... Line 2266...
2441
	}
2266
	}
2442
 
2267
 
2443
	return false;
2268
	return false;
2444
}
2269
}
2445
 
2270
 
2446
SNeededLibrary *CBaseFile::FindPackageNeeded(CyString scriptName, CyString author)
2271
SNeededLibrary *CBaseFile::FindPackageNeeded(const Utils::String &scriptName, const Utils::String &author)
2447
{
2272
{
2448
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2273
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2449
	{
2274
	{
2450
		SNeededLibrary *l = node->Data();
2275
		SNeededLibrary *l = node->Data();
2451
		if ( l->sName.Compare(scriptName) && l->sAuthor.Compare(author) )
2276
		if ( l->sName.Compare(scriptName) && l->sAuthor.Compare(author) )
Line 2497... Line 2322...
2497
	// cant have it on both list
2322
	// cant have it on both list
2498
	RemoveFakePatchOrder(!after, scriptName, author);
2323
	RemoveFakePatchOrder(!after, scriptName, author);
2499
 
2324
 
2500
	list->PushBack(scriptName, author);
2325
	list->PushBack(scriptName, author);
2501
}
2326
}
2502
void CBaseFile::AddNeededLibrary(CyString scriptName, CyString author, CyString minVersion)
2327
void CBaseFile::AddNeededLibrary(const Utils::String &scriptName, const Utils::String &author, const Utils::String &minVersion)
2503
{
2328
{
2504
	SNeededLibrary *l = this->FindPackageNeeded(scriptName, author);
2329
	SNeededLibrary *l = this->FindPackageNeeded(scriptName, author);
2505
	if ( !l )
2330
	if ( !l )
2506
	{
2331
	{
2507
		l = new SNeededLibrary;
2332
		l = new SNeededLibrary;
Line 2510... Line 2335...
2510
		m_lNeededLibrarys.push_back(l);
2335
		m_lNeededLibrarys.push_back(l);
2511
	}
2336
	}
2512
	l->sMinVersion = minVersion;
2337
	l->sMinVersion = minVersion;
2513
}
2338
}
2514
 
2339
 
2515
void CBaseFile::RemovePackageNeeded(CyString scriptName, CyString author)
2340
void CBaseFile::RemovePackageNeeded(const Utils::String &scriptName, const Utils::String &author)
2516
{
2341
{
2517
	SNeededLibrary *l = this->FindPackageNeeded(scriptName, author);
2342
	SNeededLibrary *l = this->FindPackageNeeded(scriptName, author);
2518
	if ( l )
2343
	if ( l )
2519
	{
2344
	{
2520
		m_lNeededLibrarys.remove(l);
2345
		m_lNeededLibrarys.remove(l);
Line 2523... Line 2348...
2523
}
2348
}
2524
 
2349
 
2525
void CBaseFile::ClearNeededPackages()
2350
void CBaseFile::ClearNeededPackages()
2526
{
2351
{
2527
	SNeededLibrary *ns = this->FindPackageNeeded("<package>", "<author>");
2352
	SNeededLibrary *ns = this->FindPackageNeeded("<package>", "<author>");
2528
	CyString version;
2353
	Utils::String version;
2529
	if ( ns )
-
 
2530
		version = ns->sMinVersion;
2354
	if ( ns ) version = ns->sMinVersion;
-
 
2355
 
2531
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2356
	for ( CListNode<SNeededLibrary> *node = m_lNeededLibrarys.Front(); node; node = node->next() )
2532
		node->DeleteData();
2357
		node->DeleteData();
2533
	m_lNeededLibrarys.clear();
2358
	m_lNeededLibrarys.clear();
2534
 
2359
 
2535
	if ( !version.Empty() )
-
 
2536
		this->AddNeededLibrary("<package>", "<author>", version);
2360
	if ( !version.empty() )	this->AddNeededLibrary("<package>", "<author>", version);
2537
}
2361
}
2538
 
2362
 
2539
 
2363
 
2540
bool CBaseFile::GeneratePackagerScript(bool wildcard, CyStringList *list, bool datafile)
2364
bool CBaseFile::GeneratePackagerScript(bool wildcard, CyStringList *list, bool datafile)
2541
{
2365
{
Line 2579... Line 2403...
2579
	if ( !m_lGames.empty() ) {
2403
	if ( !m_lGames.empty() ) {
2580
		list->PushBack("# The game version the script is for <game> <version> (can have multiple games)");
2404
		list->PushBack("# The game version the script is for <game> <version> (can have multiple games)");
2581
		for ( SGameCompat *g = m_lGames.First(); g; g = m_lGames.Next() ) {
2405
		for ( SGameCompat *g = m_lGames.First(); g; g = m_lGames.Next() ) {
2582
			Utils::String game = CBaseFile::ConvertGameToString(g->iGame);
2406
			Utils::String game = CBaseFile::ConvertGameToString(g->iGame);
2583
 
2407
 
2584
			if ( !g->sVersion.Empty() )
2408
			if ( !g->sVersion.empty() )
2585
			{
2409
			{
2586
				game += " ";
2410
				game += " ";
2587
				game += g->sVersion.ToString();
2411
				game += g->sVersion;
2588
			}
2412
			}
2589
			else
2413
			else
2590
			{
2414
			{
2591
				game += " ";
2415
				game += " ";
2592
				game += (long)g->iVersion;
2416
				game += (long)g->iVersion;
Line 2654... Line 2478...
2654
			list->PushBack(CyString("Depend: ") + node->Data()->sName + "|" + node->Data()->sMinVersion + "|" + node->Data()->sAuthor);
2478
			list->PushBack(CyString("Depend: ") + node->Data()->sName + "|" + node->Data()->sMinVersion + "|" + node->Data()->sAuthor);
2655
 
2479
 
2656
		list->PushBack("");
2480
		list->PushBack("");
2657
	}
2481
	}
2658
 
2482
 
2659
	if ( m_iEaseOfUse != -1 && m_iRecommended != -1 && m_iGameChanging != -1 )
2483
	if ( !_noRatings() )
2660
	{
2484
	{
2661
		list->PushBack("# Ratings Values, 0 to 5, <ease> <changing> <recommended>");
2485
		list->PushBack("# Ratings Values, 0 to 5, <ease> <changing> <recommended>");
2662
		list->PushBack(CyString("Ratings: ") + (long)m_iEaseOfUse + " " + (long)m_iGameChanging + " " + (long)m_iRecommended);
2486
		list->PushBack(CyString("Ratings: ") + (long)easeOfUse() + " " + (long)gameChanging() + " " + (long)recommended());
2663
		list->PushBack("");
2487
		list->PushBack("");
2664
	}
2488
	}
2665
 
2489
 
2666
	if ( m_lNames.size() )
2490
	if ( m_lNames.size() )
2667
	{
2491
	{
Line 2669... Line 2493...
2669
		for ( CListNode<SNames> *node = m_lNames.Front(); node; node = node->next() )
2493
		for ( CListNode<SNames> *node = m_lNames.Front(); node; node = node->next() )
2670
			list->PushBack(CyString("ScriptName: ") + (long)node->Data()->iLanguage + " " + node->Data()->sName);
2494
			list->PushBack(CyString("ScriptName: ") + (long)node->Data()->iLanguage + " " + node->Data()->sName);
2671
		list->PushBack("");
2495
		list->PushBack("");
2672
	}
2496
	}
2673
 
2497
 
-
 
2498
	for ( int j = 0; j < 2; j++ ) {
-
 
2499
		Utils::String installText = (j == 0) ? "Install" : "Uninstall";
-
 
2500
		const CInstallText *pText = (j == 0) ? this->installText() : this->uninstallText();
2674
	if ( m_lInstallText.size() )
2501
		if ( pText->any() )
2675
	{
2502
		{
2676
		list->PushBack("# Install Texts, display text before and/or after installing to inform the use of special conditions");
2503
			list->PushBack(CyString("# " + installText + " Texts, display text before and/or after " + installText + "ing to inform the use of special conditions"));
2677
		for ( CListNode<SInstallText> *node = m_lInstallText.Front(); node; node = node->next() )
2504
			for ( unsigned int i = 0; i < pText->count(); i++ ) {
2678
		{
-
 
2679
			if ( !node->Data()->sBefore.Empty() )
2505
				long iLang = pText->language(i);
2680
				list->PushBack(CyString("InstallBefore: ") + (long)node->Data()->iLanguage + " " + node->Data()->sBefore);
2506
				if ( !pText->getBefore(iLang).empty() )	list->PushBack(CyString(installText + "Before: ") + iLang + " " + pText->getBefore(iLang));
2681
			if ( !node->Data()->sAfter.Empty() )
-
 
2682
				list->PushBack(CyString("InstallAfter: ") + (long)node->Data()->iLanguage + " " + node->Data()->sAfter);
2507
				if ( !pText->getAfter(iLang).empty()  )	list->PushBack(CyString(installText + "After: ") + iLang + " " + pText->getAfter(iLang));
2683
		}
2508
			}
2684
		list->PushBack("");
2509
			list->PushBack("");
2685
	}
-
 
2686
 
-
 
2687
	if ( m_lUninstallText.size() )
-
 
2688
	{
-
 
2689
		list->PushBack("# Uninstall Texts, display text before and/or after uninstalling to inform the use of special conditions");
-
 
2690
		for ( CListNode<SInstallText> *node = m_lUninstallText.Front(); node; node = node->next() )
-
 
2691
		{
-
 
2692
			if ( !node->Data()->sBefore.Empty() )
-
 
2693
				list->PushBack(CyString("UninstallBefore: ") + (long)node->Data()->iLanguage + " " + node->Data()->sBefore);
-
 
2694
			if ( !node->Data()->sAfter.Empty() )
-
 
2695
				list->PushBack(CyString("UninstallAfter: ") + (long)node->Data()->iLanguage + " " + node->Data()->sAfter);
-
 
2696
		}
2510
		}
2697
		list->PushBack("");
-
 
2698
	}
2511
	}
2699
 
2512
 
2700
	list->PushBack("# Plugin Type, the type the plugin is, mainly used to show users the type, types include: Normal, Stable, Experimental, Cheat, Mod");
2513
	list->PushBack("# Plugin Type, the type the plugin is, mainly used to show users the type, types include: Normal, Stable, Experimental, Cheat, Mod");
2701
	switch ( this->GetPluginType() )
2514
	switch ( this->GetPluginType() )
2702
	{
2515
	{
Line 2813... Line 2626...
2813
	bool foundAll = false;
2626
	bool foundAll = false;
2814
	for ( CListNode<SGameCompat> *node = m_lGames.Front(); node; node = node->next() ) {
2627
	for ( CListNode<SGameCompat> *node = m_lGames.Front(); node; node = node->next() ) {
2815
		if ( node->Data()->iGame == 0 )
2628
		if ( node->Data()->iGame == 0 )
2816
			foundAll = true;
2629
			foundAll = true;
2817
		else if ( node->Data()->iGame == game ) { // now check the version
2630
		else if ( node->Data()->iGame == game ) { // now check the version
2818
			if ( node->Data()->sVersion.Empty() ) {
2631
			if ( node->Data()->sVersion.empty() ) {
2819
				if ( node->Data()->sVersion.CompareVersion(sVersion) == COMPARE_OLDER )
2632
				if ( CyString(node->Data()->sVersion).CompareVersion(sVersion) == COMPARE_OLDER )
2820
					return false;
2633
					return false;
2821
				return true;
2634
				return true;
2822
			}
2635
			}
2823
			else {
2636
			else {
2824
				if ( node->Data()->iVersion > iVersion )
2637
				if ( node->Data()->iVersion > iVersion )
Line 2852... Line 2665...
2852
	}
2665
	}
2853
 
2666
 
2854
	return NULL;
2667
	return NULL;
2855
}
2668
}
2856
 
2669
 
2857
void CBaseFile::AddGameCompatability(int game, CyString version)
2670
void CBaseFile::AddGameCompatability(int game, const Utils::String &version)
2858
{
2671
{
2859
	// first check if we already have it on the list
2672
	// first check if we already have it on the list
2860
	SGameCompat *Found = this->GetGameCompatability(game);
2673
	SGameCompat *Found = this->GetGameCompatability(game);
2861
	if ( !Found ) {
2674
	if ( !Found ) {
2862
		Found = new SGameCompat;
2675
		Found = new SGameCompat;
2863
		m_lGames.push_back(Found);
2676
		m_lGames.push_back(Found);
2864
	}
2677
	}
2865
 
2678
 
2866
	Found->iGame = game;
2679
	Found->iGame = game;
2867
	Found->iVersion = -1;
2680
	Found->iVersion = -1;
2868
	Found->sVersion = NullString;
2681
	Found->sVersion = "";
2869
 
2682
 
2870
	if ( version.IsIn(".") || !version.IsNumber() )
2683
	if ( version.isin(".") || !version.isNumber() )
2871
		Found->sVersion = version;
2684
		Found->sVersion = version;
2872
	else
2685
	else
2873
		Found->iVersion = version.ToInt();
2686
		Found->iVersion = version;
2874
	m_bChanged = true;
2687
	m_bChanged = true;
2875
}
2688
}
2876
 
2689
 
2877
bool CBaseFile::LoadPackageData(const Utils::String &sFirst, const Utils::String &sRest)
2690
bool CBaseFile::LoadPackageData(const Utils::String &sFirst, const Utils::String &sRest)
2878
{
2691
{
Line 2880... Line 2693...
2880
		m_sName = sRest;
2693
		m_sName = sRest;
2881
	else if ( sFirst.Compare("Author") )
2694
	else if ( sFirst.Compare("Author") )
2882
		m_sAuthor = sRest;
2695
		m_sAuthor = sRest;
2883
	else if ( sFirst.Compare("ScriptName") )
2696
	else if ( sFirst.Compare("ScriptName") )
2884
		AddLanguageName(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2697
		AddLanguageName(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2885
	else if ( sFirst.Compare("UninstallBefore") )
-
 
2886
		this->AddUninstallBeforeText(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2698
	else if ( sFirst.Compare("UninstallBefore") )	this->addUninstallText(ParseLanguage(sRest.token(" ", 1)), true, sRest.tokens(" ", 2));
2887
	else if ( sFirst.Compare("UninstallAfter") )
-
 
2888
		this->AddUninstallAfterText(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2699
	else if ( sFirst.Compare("UninstallAfter") )	this->addUninstallText(ParseLanguage(sRest.token(" ", 1)), false, sRest.tokens(" ", 2));
2889
	else if ( sFirst.Compare("InstallBefore") )
-
 
2890
		this->AddInstallBeforeText(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2700
	else if ( sFirst.Compare("InstallBefore") )		this->addInstallText(ParseLanguage(sRest.token(" ", 1)), true, sRest.tokens(" ", 2));
2891
	else if ( sFirst.Compare("InstallAfter") )
-
 
2892
		this->AddInstallAfterText(ParseLanguage(sRest.token(" ", 1)), sRest.tokens(" ", 2));
2701
	else if ( sFirst.Compare("InstallAfter") )		this->addInstallText(ParseLanguage(sRest.token(" ", 1)), false, sRest.tokens(" ", 2));
2893
	else if ( sFirst.Compare("Date") )
2702
	else if ( sFirst.Compare("Date") )
2894
		m_sCreationDate = sRest;
2703
		m_sCreationDate = sRest;
2895
	else if ( sFirst.Compare("Version") )
2704
	else if ( sFirst.Compare("Version") )
2896
		m_sVersion = sRest;
2705
		m_sVersion = sRest;
2897
	// old version
2706
	// old version
Line 2968... Line 2777...
2968
		this->AddWebMirror(sRest);
2777
		this->AddWebMirror(sRest);
2969
	else if ( sFirst.Compare("WebMirror2") )
2778
	else if ( sFirst.Compare("WebMirror2") )
2970
		this->AddWebMirror(sRest);
2779
		this->AddWebMirror(sRest);
2971
	else if ( sFirst.Compare("Ftp") )
2780
	else if ( sFirst.Compare("Ftp") )
2972
		m_sFtpAddr = sRest;
2781
		m_sFtpAddr = sRest;
2973
	else if ( sFirst.Compare("Ratings") )
2782
	else if ( sFirst.Compare("Ratings") )		_setRatings(sRest.token(" ", 1), sRest.token(" ", 2), sRest.token(" ", 3));
2974
	{
-
 
2975
		m_iEaseOfUse = sRest.token(" ", 1);
-
 
2976
		m_iGameChanging = sRest.token(" ", 2);
-
 
2977
		m_iRecommended = sRest.token(" ", 3);
-
 
2978
	}
-
 
2979
	else if ( sFirst.Compare("EaseOfUse") )
2783
	else if ( sFirst.Compare("EaseOfUse") )		setEaseOfUse(sRest);
2980
		m_iEaseOfUse = sRest;
-
 
2981
	else if ( sFirst.Compare("GameChanging") )
2784
	else if ( sFirst.Compare("GameChanging"))	setGameChanging(sRest);
2982
		m_iGameChanging = sRest;
-
 
2983
	else if ( sFirst.Compare("Recommended") )
2785
	else if ( sFirst.Compare("Recommended") )	setRecommended(sRest);
2984
		m_iRecommended = sRest;
-
 
2985
	else if ( sFirst.Compare("Depend") )
2786
	else if ( sFirst.Compare("Depend") )
2986
	{
2787
	{
2987
		CyString version = sRest.token("|", 2);
2788
		Utils::String version = sRest.token("|", 2);
2988
		CyString name = sRest.token("|", 1);
2789
		Utils::String name = sRest.token("|", 1);
2989
		CyString author = sRest.tokens("|", 3);
2790
		Utils::String author = sRest.tokens("|", 3);
2990
 
2791
 
2991
		this->AddNeededLibrary(name, author, version);
2792
		this->AddNeededLibrary(name, author, version);
2992
	}
2793
	}
2993
	else if ( sFirst.Compare("DependPackage") )
2794
	else if ( sFirst.Compare("DependPackage") )
2994
	{
2795
	{
2995
		CPackages p;
2796
		CPackages p;
2996
		CBaseFile *spk =  p.OpenPackage(sRest, 0, 0, SPKREAD_VALUES);
2797
		CBaseFile *spk =  p.OpenPackage(sRest, 0, 0, SPKREAD_VALUES);
2997
		if ( spk )
2798
		if ( spk )
2998
		{
2799
		{
2999
			this->AddNeededLibrary(spk->GetName(), spk->GetAuthor(), spk->GetVersion());
2800
			this->AddNeededLibrary(spk->GetName().ToString(), spk->GetAuthor().ToString(), spk->GetVersion().ToString());
3000
			delete spk;
2801
			delete spk;
3001
		}
2802
		}
3002
	}
2803
	}
3003
	else if ( sFirst.Compare("Icon") )
2804
	else if ( sFirst.Compare("Icon") )
3004
	{
2805
	{