Subversion Repositories spk

Rev

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

Rev 129 Rev 133
Line 876... Line 876...
876
	{
876
	{
877
		for ( int i = 0; i < this->ListPackages->Items->Count; i++ )
877
		for ( int i = 0; i < this->ListPackages->Items->Count; i++ )
878
			this->ListPackages->Items[i]->Selected = false;
878
			this->ListPackages->Items[i]->Selected = false;
879
		PackageListSelected(ListPackages, gcnew System::EventArgs());
879
		PackageListSelected(ListPackages, gcnew System::EventArgs());
880
	}
880
	}
-
 
881
 
-
 
882
	void MainGui::FindPackages()
-
 
883
	{
-
 
884
		if (m_lAvailablePackages)
-
 
885
			m_lAvailablePackages->MemoryClear();
-
 
886
		if (!m_lAvailablePackages)
-
 
887
			m_lAvailablePackages = new CLinkList<CBaseFile>;
-
 
888
 
-
 
889
		String ^curDir = System::IO::FileInfo(System::Windows::Forms::Application::ExecutablePath).DirectoryName;
-
 
890
		m_pPackages->findAllPackages(*m_lAvailablePackages, _S(curDir));
-
 
891
 
-
 
892
		// find packages from registry key
-
 
893
		RegistryKey ^searchKey = Registry::CurrentUser->OpenSubKey("Software\\Egosoft\\SuperBox");
-
 
894
		if (searchKey)
-
 
895
		{
-
 
896
			String ^dir = System::Convert::ToString(searchKey->GetValue("Addons"));
-
 
897
			if (dir)
-
 
898
				m_pPackages->findPackageDirectories(*m_lAvailablePackages, _S(dir));
-
 
899
		}
-
 
900
 
-
 
901
		// find packages from DVD
-
 
902
		cli::array<IO::DriveInfo ^> ^Drives = IO::DriveInfo::GetDrives();
-
 
903
		if (Drives)
-
 
904
		{
-
 
905
			for (int i = 0; i < Drives->Length; i++)
-
 
906
			{
-
 
907
				IO::DriveInfo ^info = Drives[i];
-
 
908
				if (info->DriveType != IO::DriveType::CDRom)
-
 
909
					continue;
-
 
910
				if (info->IsReady)
-
 
911
					m_pPackages->findPackageDirectories(*m_lAvailablePackages, _S(info->RootDirectory + "XPluginManager"));
-
 
912
			}
-
 
913
		}
-
 
914
 
-
 
915
		int num = 0;
-
 
916
		for (CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next())
-
 
917
		{
-
 
918
			p->SetNum(num);
-
 
919
			++num;
-
 
920
		}
-
 
921
	}
-
 
922
 
881
 
923
 
882
	bool MainGui::StartInstalling(bool builtin, bool background, bool archive)
924
	bool MainGui::StartInstalling(bool builtin, bool background, bool archive)
883
	{
925
	{
884
		// no packages to install
926
		// no packages to install
885
		if ( !m_pPackages->GetNumPackagesInQueue() )
927
		if ( !m_pPackages->GetNumPackagesInQueue() )
Line 890... Line 932...
890
 
932
 
891
		// lets install them now
933
		// lets install them now
892
		CLinkList<CBaseFile> lCheckPackages;
934
		CLinkList<CBaseFile> lCheckPackages;
893
		if ( m_pPackages->CheckPreparedInstallRequired(&lCheckPackages) )
935
		if ( m_pPackages->CheckPreparedInstallRequired(&lCheckPackages) )
894
		{
936
		{
-
 
937
			CLinkList<CBaseFile> *installRequired = new CLinkList<CBaseFile>();
895
			for ( CListNode<CBaseFile> *pNode = lCheckPackages.Front(); pNode; pNode = pNode->next() )
938
			for ( CListNode<CBaseFile> *pNode = lCheckPackages.Front(); pNode; pNode = pNode->next() )
896
			{
939
			{
897
				CBaseFile *package = pNode->Data();
940
				CBaseFile *package = pNode->Data();
898
				CSpkFile *spk = (CSpkFile *)package;
941
				CSpkFile *spk = (CSpkFile *)package;
899
 
942
 
900
				CyStringList missingList;
-
 
901
				if ( m_pPackages-&gt;GetMissingDependacies(package, &missingList) )
943
				if (m_pPackages-&gt;findAllNeededDependacies(package, *m_lAvailablePackages, installRequired, false, true))
902
				{
944
				{
-
 
945
					bool added = false;
-
 
946
					for (auto itr = installRequired->Front(); itr; itr = itr->next())
-
 
947
					{
-
 
948
						if (itr->Data() == package || (itr->Data()->name().Compare(package->name()) && itr->Data()->author().Compare(package->author())))
-
 
949
						{
-
 
950
							added = true;
-
 
951
							break;
-
 
952
						}
-
 
953
					}
-
 
954
					if (!added)
-
 
955
						installRequired->push_back(package);
-
 
956
					continue;
-
 
957
				}
-
 
958
 
-
 
959
				Utils::CStringList missingList;
-
 
960
				if ( m_pPackages->GetMissingDependacies(package, &missingList) )
-
 
961
				{
903
					CyString requires;
962
					Utils::String requires;
904
					for ( SStringList *strNode = missingList.Head(); strNode; strNode = strNode->next )
963
					for (auto itr = missingList.begin(); itr != missingList.end(); itr++)
905
					{
964
					{
-
 
965
						Utils::String name = (*itr)->str;;
-
 
966
						Utils::String author = (*itr)->data;
-
 
967
						Utils::String version;
906
						if ( strNode->str.IsIn("|") )
968
						if (name.contains("|"))
-
 
969
						{
-
 
970
							version = name.token("|", 2);
-
 
971
							name = name.token("|", 1);
-
 
972
						}
-
 
973
 
-
 
974
						if (!version.empty())
907
							requires += strNode->str.GetToken("|", 1, 1) + " V" + strNode->str.GetToken("|", 2, 2) + " by " + strNode-&gt;data;
975
							requires += name + " V" + version + &quot; by " + author;
908
						else
976
						else
909
							requires += strNode->str + " by &quot; + strNode->data;
977
							requires += name + " by &quot; + author;
910
						requires += "\n";
978
						requires += "\n";
911
					}
979
					}
-
 
980
 
912
					this->DisplayMessageBox(false, "Installing", "Missing Package for " + SystemStringFromCyString(package->GetLanguageName(m_pPackages->GetLanguage())) + "\nRequires:\n" + SystemStringFromCyString(requires), MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
981
					this->DisplayMessageBox(false, "Installing", "Missing Package for " + SystemStringFromCyString(package->GetLanguageName(m_pPackages->GetLanguage())) + "\nRequires:\n" + _US(requires), MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
-
 
982
				}
-
 
983
			}
-
 
984
 
-
 
985
			bool restart = false;
-
 
986
			if (installRequired->size())
-
 
987
			{
-
 
988
				bool errored = false;
-
 
989
				for (auto itr = installRequired->Front(); itr; itr = itr->next())
-
 
990
				{
-
 
991
					CBaseFile *package = NULL;
-
 
992
					int error = 0;
-
 
993
					if (CFileIO::Exists(itr->Data()->filename()))
-
 
994
						if (!this->InstallPackage(_US(itr->Data()->filename()), false, builtin, background))
-
 
995
							errored = true;
913
				}
996
				}
-
 
997
				if (!errored)
-
 
998
					restart = true;
914
			}
999
			}
-
 
1000
 
-
 
1001
			delete installRequired;
-
 
1002
			lCheckPackages.MemoryClear();
-
 
1003
			if(restart)
-
 
1004
				return StartInstalling(builtin, background);
915
		}
1005
		}
916
 
1006
 
917
		// no packages to install
1007
		// no packages to install
918
		if ( !m_pPackages->GetNumPackagesInQueue() )
1008
		if ( !m_pPackages->GetNumPackagesInQueue() )
919
		{
1009
		{
Line 1026... Line 1116...
1026
				//m_pPackages->RestoreSaves();
1116
				//m_pPackages->RestoreSaves();
1027
			m_pPackages->UpdatePackages();
1117
			m_pPackages->UpdatePackages();
1028
			m_pPackages->ReadGameLanguage(true);
1118
			m_pPackages->ReadGameLanguage(true);
1029
			System::String ^mod = PluginManager::ReadRegistryValue(m_pPackages->GetModKey());
1119
			System::String ^mod = PluginManager::ReadRegistryValue(m_pPackages->GetModKey());
1030
			m_pPackages->SetMod(CyStringFromSystemString(mod));
1120
			m_pPackages->SetMod(CyStringFromSystemString(mod));
-
 
1121
			if(m_lAvailablePackages)
-
 
1122
				m_lAvailablePackages->MemoryClear();
-
 
1123
			this->FindPackages();
1031
		}
1124
		}
1032
		else
1125
		else
1033
		{
1126
		{
1034
			this->DisplayMessageBox(true, "Error", "unable to open new directory", MessageBoxButtons::OK, MessageBoxIcon::Error);
1127
			this->DisplayMessageBox(true, "Error", "unable to open new directory", MessageBoxButtons::OK, MessageBoxIcon::Error);
1035
			this->CloseCurrentDirectory();
1128
			this->CloseCurrentDirectory();
Line 1171... Line 1264...
1171
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nParent mod is not enabled", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1264
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nParent mod is not enabled", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1172
			else if ( m_pPackages->GetError() == PKERR_MODIFIED )
1265
			else if ( m_pPackages->GetError() == PKERR_MODIFIED )
1173
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nPackage is modified and game is currently set to vanilla\nSwitch to modified mode to enable", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1266
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nPackage is modified and game is currently set to vanilla\nSwitch to modified mode to enable", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1174
			else if ( m_pPackages->GetError() == PKERR_MISSINGDEP )
1267
			else if ( m_pPackages->GetError() == PKERR_MISSINGDEP )
1175
			{
1268
			{
1176
				CyStringList depList;
1269
				Utils::CStringList depList;
1177
				m_pPackages->GetMissingDependacies(p, &depList, true);
1270
				m_pPackages->GetMissingDependacies(p, &depList, true);
1178
				CyString sDep;
1271
				Utils::String sDep;
1179
				for ( SStringList *strNode = depList.Head(); strNode; strNode = strNode->;next )
1272
				for(auto itr = depList.begin(); itr != depList.end(); itr++)
1180
				{
1273
				{
1181
					if ( strNode->str.IsIn("|") )
1274
					if ( (*itr)->str.contains("|") )
1182
						sDep = strNode->str.GetToken("|", 1, 1) + " V" + strNode-&gt;str.GetToken("|", 2, 2) + " by " + strNode->data + "\n";
1275
						sDep = (*itr)->str.token("|", 1) + " V" + (*itr)->str.token("|", 2) + &quot; by " + (*itr)->data + "\n";
1183
					else
1276
					else
1184
						sDep = strNode->str + " by " + strNode->data + "\n";
1277
						sDep = (*itr)->str + " by " + (*itr)->data + "\n";
1185
				}
1278
				}
1186
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nMissing Enabled Dependacies:\n" + SystemStringFromCyString(sDep), MessageBoxButtons::OK, MessageBoxIcon::Warning);
1279
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nMissing Enabled Dependacies:\n" + _US(sDep), MessageBoxButtons::OK, MessageBoxIcon::Warning);
1187
			}
1280
			}
1188
			else
1281
			else
1189
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nUnknown Error", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1282
				this->DisplayMessageBox(false, "Enable Error", "Error enabling package\n" + SystemStringFromCyString(p->GetFullPackageName(m_pPackages->GetLanguage())) + "\n\nUnknown Error", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1190
			return false;
1283
			return false;
1191
		}
1284
		}
Line 1256... Line 1349...
1256
	}
1349
	}
1257
 
1350
 
1258
	void MainGui::PackageBrowserEvent(System::Object ^Sender, System::EventArgs ^E)
1351
	void MainGui::PackageBrowserEvent(System::Object ^Sender, System::EventArgs ^E)
1259
	{
1352
	{
1260
		this->Enabled = false;
1353
		this->Enabled = false;
1261
		PackageBrowser ^mod = gcnew PackageBrowser(m_pPackages, this->imageList1);
1354
		PackageBrowser ^mod = gcnew PackageBrowser(m_pPackages, m_lAvailablePackages, this->imageList1);
1262
		if ( !mod->AnyPackages() )
1355
		if ( !mod->AnyPackages() )
1263
		{
1356
		{
1264
			System::String ^game = _US(m_pPackages->getGameName());
1357
			System::String ^game = _US(m_pPackages->getGameName());
1265
			this->DisplayMessageBox(false, "No Available Packages", "No available packages found for " + game, MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
1358
			this->DisplayMessageBox(false, "No Available Packages", "No available packages found for " + game, MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
1266
 
1359