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->GetMissingDependacies(package, &missingList) )
|
943 |
if (m_pPackages->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->data;
|
975 |
requires += name + " V" + version + " by " + author;
|
908 |
else
|
976 |
else
|
909 |
requires += strNode->str + " by " + strNode->data;
|
977 |
requires += name + " by " + 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->str.GetToken("|", 2, 2) + " by " + strNode->data + "\n";
|
1275 |
sDep = (*itr)->str.token("|", 1) + " V" + (*itr)->str.token("|", 2) + " 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 |
|