summaryrefslogtreecommitdiff
path: root/apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp')
-rw-r--r--apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp1021
1 files changed, 0 insertions, 1021 deletions
diff --git a/apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp b/apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp
deleted file mode 100644
index 55eb8fb..0000000
--- a/apps/windoze/CBuilder4/InstallMgr/MainFrm.cpp
+++ /dev/null
@@ -1,1021 +0,0 @@
-//---------------------------------------------------------------------------
-#include <vcl.h>
-#pragma hdrstop
-
-#include "MainFrm.h"
-#include "StatusFrm.h"
-#include "RemoteMntFrm.h"
-#include "InfoFrm.h"
-#include "cipherfrm.h"
-#include "UninstallFrm.h"
-//---------------------------------------------------------------------------
-#pragma package(smart_init)
-#pragma resource "*.dfm"
-
-#include <swwinlog.h>
-#include <shellapi.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <io.h>
-#include <sys/stat.h>
-#include <dir.h>
-
-TMainForm *MainForm;
-
-
-VersionInfo::VersionInfo(const char *version) {
- char *buf = new char[ strlen(version) + 1 ];
- char *tok;
- major = minor = minor2 = minor3 = 0;
-
- strcpy(buf, version);
- tok = strtok(buf, ".");
- if (tok)
- major = atoi(tok);
- tok = strtok(0, ".");
- if (tok)
- minor = atoi(tok);
- tok = strtok(0, ".");
- if (tok)
- minor2 = atoi(tok);
- tok = strtok(0, ".");
- if (tok)
- minor3 = atoi(tok);
- delete [] buf;
-}
-
-
-int VersionInfo::compare(const VersionInfo &vi) const {
- if (major == vi.major)
- if (minor == vi.minor)
- if (minor2 == vi.minor2)
- if (minor3 == vi.minor3)
- return 0;
- else return minor3 - vi.minor3;
- else return minor2 - vi.minor2;
- else return minor - vi.minor;
- else return major - vi.major;
-}
-
-
-__fastcall InstallSourceTab::InstallSourceTab(TComponent *Owner, const char *confEnt, const char *type) : TControl(Owner) {
- char *buf = new char [ strlen(confEnt) + 1 ];
-
- strcpy(buf, confEnt);
-
- Caption = strtok(buf, "|");
- Source = strtok(0, "|");
- Directory = strtok(0, "|");
- delete [] buf;
- Type = type;
- mgr = 0;
-}
-
-__fastcall InstallSourceTab::~InstallSourceTab() {
- if (mgr)
- delete mgr;
-}
-
-__fastcall TMainForm::TMainForm(TComponent* Owner)
- : TForm(Owner)
-{
- manager = new SWMgr();
- installConf = new SWConfig("./InstallMgr.conf");
- localMgr = 0;
-}
-
-
-__fastcall TMainForm::~TMainForm()
-{
- delete manager;
- delete installConf;
- if (localMgr)
- delete localMgr;
-}
-
-
-void __fastcall TMainForm::FormCreate(TObject *Sender) {
-
- refreshPageControl();
-
- if (SWLog::systemlog)
- delete SWLog::systemlog;
- SWLog::systemlog = new SWWinLog(this->Handle); // set the system logger to our MSWindows specific SWLog class
-
- fillInstallTree();
- fillSourceTree(getLocalDir(), localTree);
-}
-
-
-void TMainForm::refreshPageControl()
-{
- SectionMap::iterator sources;
- ConfigEntMap::iterator sourceBegin;
- ConfigEntMap::iterator sourceEnd;
-
- while (PageControl1->PageCount > 1) {
- delete PageControl1->Pages[1];
- }
-
- sources = installConf->Sections.find("Sources");
-
- if (sources != installConf->Sections.end()) {
- sourceBegin = sources->second.lower_bound("FTPSource");
- sourceEnd = sources->second.upper_bound("FTPSource");
-
- if (sourceBegin != sourceEnd) {
- while (sourceBegin != sourceEnd) {
- addSource(new InstallSourceTab(this, sourceBegin->second.c_str(), "FTP"));
- sourceBegin++;
- }
- }
- }
-}
-
-
-void TMainForm::addSource(InstallSourceTab *ist)
-{
- TTabSheet *newtab = new TTabSheet(this);
- TTreeView *newtree = new TTreeView(this);
- TSpeedButton *newbutton = new TSpeedButton(this);
- TPanel *newpanel = new TPanel(this);
- char buf[512];
- SectionMap::iterator sit;
-
- newtab->Caption = ist->Caption.c_str();
- newtab->Hint = ist->Source.c_str();
- newtab->ShowHint = true;
- newtab->PageControl = PageControl1;
- ist->Parent = newtab;
- ist->tree = newtree;
- newpanel->Parent = newtab;
- newpanel->Align = alTop;
- newpanel->BevelOuter = bvNone;
- newpanel->BevelInner = bvNone;
- newpanel->Height = 25;
- newbutton->Parent = newpanel;
- newbutton->Caption = "Refresh from Remote Source";
- newbutton->Width = 175;
- newbutton->OnClick = RefreshRemoteSource;
- newbutton->Flat = true;
- newbutton->Glyph = SpeedButton2->Glyph;
- newtree->Parent = newtab;
- newtree->Align = alClient;
- newtree->ReadOnly = true;
- newtree->OnDblClick = localTreeDblClick;
- newtree->Images = ImageList1;
- newtree->StateImages = ImageList2;
- string parent = "./sources/" + ist->Source + "/file";
- createParent(parent.c_str());
- parent = "./sources/" + ist->Source;
- fillSourceTree(parent.c_str(), newtree);
-}
-
-
-const char *TMainForm::getLocalDir()
-{
- ConfigEntMap::iterator entry;
-
- entry = installConf->Sections["Sources"].find("LocalPath");
- if (entry == installConf->Sections["Sources"].end()) {
- installConf->Sections["Sources"].insert(ConfigEntMap::value_type("LocalPath", "d:/sword"));
- entry = installConf->Sections["Sources"].find("LocalPath");
- }
- return entry->second.c_str();
-
-}
-
-
-void TMainForm::setLocalDir(const char *idir)
-{
- installConf->Sections["Sources"].erase("LocalPath"); installConf->Sections["Sources"].insert(ConfigEntMap::value_type("LocalPath", idir));
-}
-
-
-//---------------------------------------------------------------------------
-void __fastcall TMainForm::LocalPath1Click(TObject *Sender)
-{
- localPathDlg->Title = "Select a file in the directory to choose";
- localPathDlg->InitialDir = getLocalDir();
- if (localPathDlg->Execute()) {
- char *buf = new char [ strlen(localPathDlg->FileName.c_str()) + 1 ];
-
- strcpy(buf, localPathDlg->FileName.c_str());
- int end = strlen(buf) - 1;
- while (end) {
- if ((buf[end] == '/') || (buf[end] == '\\'))
- break;
- end--;
- }
- buf[end+1] = 0;
- setLocalDir(buf);
- delete [] buf;
- }
-
- installConf->Save();
- fillSourceTree(getLocalDir(), localTree);
-}
-//---------------------------------------------------------------------------
-
-void TMainForm::fillInstallTree()
-{
- ModMap::iterator mods;
- TTreeNode *node;
- string nodeName;
-
- installTree->Items->Clear();
-
- if (!manager->configPath)
- return;
-
- for (mods = manager->Modules.begin(); mods != manager->Modules.end(); mods++) {
- for (node = installTree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
- if (!strcmp(node->Text.c_str(), mods->second->Type())) {
- break;
- }
- }
- if (!node) { // Add Section
- if (!strncmp(mods->second->Type(), "Bibl", 4)) // If Bibles, put first in list
- node = installTree->Items->AddChildFirst(0, mods->second->Type());
- else node = installTree->Items->AddChild(0, mods->second->Type());
- }
- nodeName = "[";
- nodeName += mods->second->Name();
- nodeName += "] ";
- nodeName += mods->second->Description();
- node = installTree->Items->AddChildObject(node, nodeName.c_str(), mods->second->Name());
- }
-}
-
-
-void TMainForm::fillSourceTree(const char *sourceConf, TTreeView *tree)
-{
- ModMap::iterator mods;
- TTreeNode *node;
- SectionMap::iterator sections, targetSection;
- ConfigEntMap::iterator entry;
- string secName;
- const char * modDesc;
- string nodeName;
- string targetVersion;
- string sourceVersion;
- bool cipher;
-
- SWMgr *mgr;
-
- if (tree == localTree) {
- if (localMgr)
- delete localMgr;
- mgr = localMgr = new SWMgr(sourceConf);
- }
- else {
- InstallSourceTab *ist = (InstallSourceTab *) MainForm->PageControl1->ActivePage->Controls[0];
- if (ist->mgr)
- delete ist->mgr;
- mgr = ist->mgr = new SWMgr(sourceConf);
- }
-
- tree->Items->Clear();
-
- if (!mgr->configPath)
- return;
-
- for (sections = mgr->config->Sections.begin(); sections != mgr->config->Sections.end(); sections++) {
-
- cipher = false;
-
- if (!strcmp(sections->first.c_str(), "Globals")) // skip [Globals]
- continue;
-
- mods = mgr->Modules.find(sections->first.c_str());
- if (mods != mgr->Modules.end())
- secName = mods->second->Type();
- else {
- secName = "Other";
- }
- entry = sections->second.find("Description");
- if (entry != sections->second.end())
- modDesc = entry->second.c_str();
- else modDesc = "";
-
-
- targetVersion = "0.0";
- sourceVersion = "1.0";
-
- entry = sections->second.find("CipherKey");
- if (entry != sections->second.end())
- cipher = true;
-
- entry = sections->second.find("Version");
- if (entry != sections->second.end())
- sourceVersion = entry->second.c_str();
-
- targetSection = manager->config->Sections.find(sections->first);
- if (targetSection != manager->config->Sections.end()) {
- targetVersion = "1.0";
- entry = targetSection->second.find("Version");
- if (entry != targetSection->second.end())
- targetVersion = entry->second;
- }
-
- if (VersionInfo(sourceVersion.c_str()) > VersionInfo(targetVersion.c_str())) {
-
-
- for (node = tree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
- if (!strcmp(node->Text.c_str(), secName.c_str())) {
- break;
- }
- }
-
- if (!node) { // Add Section
- if (!strncmp(secName.c_str(), "Bibl", 4)) // If Bibles, put first in list
- node = tree->Items->AddChildFirst(0, secName.c_str());
- else node = tree->Items->AddChild(0, secName.c_str());
- node->ImageIndex = 0;
- }
- nodeName = "[" + sections->first + "] " + modDesc;
- node = tree->Items->AddChildObject(node, nodeName.c_str(), (void *) sections->first.c_str());
- if (VersionInfo(targetVersion.c_str()) < VersionInfo("1.0")) {
- node->ImageIndex = 1;
- node->SelectedIndex = 1;
- }
- else {
- node->ImageIndex = 2;
- node->SelectedIndex = 2;
- }
- if (cipher) {
- node->ImageIndex += 2;
- node->SelectedIndex += 2;
- }
- node->StateIndex = 0;
- }
- }
-}
-
-
-void __fastcall TMainForm::Button5Click(TObject *Sender)
-{
- TTreeView *tree;
- for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
- if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
- tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
- break;
- }
- }
- TTreeNode *node = tree->Selected;
- if (node) {
- if (node->Parent) {
- if (node->StateIndex == 1)
- node->StateIndex = 0; //node->StateIndex;
- else node->StateIndex = 1;
- tree->Repaint();
- }
- }
-}
-//---------------------------------------------------------------------------
-
-void __fastcall TMainForm::localTreeDblClick(TObject *Sender)
-{
- Button5Click(Sender);
-}
-//---------------------------------------------------------------------------
-
-int TMainForm::selectAll(TTreeView *tree, bool sel)
-{
- TTreeNode *node;
- TTreeNode *node2;
- int retCount = 0;
-
- for (node = tree->Items->GetFirstNode(); node; node = node->getNextSibling()) {
- for (node2 = node->getFirstChild(); node2; node2 = node2->getNextSibling()) {
- if (node2->StateIndex == 1) {
- if (!sel) {
- node2->StateIndex = 0; //node2->StateIndex;
- retCount++;
- }
- }
- else {
- if (sel) {
- node2->StateIndex = 1;
- retCount++;
- }
- }
- }
- }
- return retCount;
-}
-
-
-void __fastcall TMainForm::Button6Click(TObject *Sender) // SELECT ALL
-{
- TTreeView *tree;
- for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
- if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
- tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
- break;
- }
- }
- if (!selectAll(tree, true))
- selectAll(tree, false);
- tree->Repaint();
-}
-//---------------------------------------------------------------------------
-
-void __fastcall TMainForm::Image1Click(TObject *Sender)
-{
- ShellExecute(this->Handle, "open", "http://www.crosswire.org", NULL, NULL, SW_SHOWNORMAL);
-
-}
-//---------------------------------------------------------------------------
-
-
-int TMainForm::removeModule(const char *modName)
-{
- SectionMap::iterator module;
- ConfigEntMap::iterator fileBegin;
- ConfigEntMap::iterator fileEnd, entry;
-
- module = manager->config->Sections.find(modName);
-
- if (module != manager->config->Sections.end()) {
- entry = module->second.find("CipherKey");
- if (entry != module->second.end())
- CipherForm->cipherEdit->Text = entry->second.c_str();
-
- fileBegin = module->second.lower_bound("File");
- fileEnd = module->second.upper_bound("File");
-
- if (fileBegin != fileEnd) { // remove each file
- while (fileBegin != fileEnd) {
- //remove file
- remove(fileBegin->second.c_str());
- fileBegin++;
- }
- }
- else { //remove all files in DataPath directory
-
- DIR *dir;
- struct dirent *ent;
- ConfigEntMap::iterator entry;
- string modDir;
- string modFile;
-
- entry = module->second.find("DataPath");
- if (entry != module->second.end()) {
- modDir = entry->second.c_str();
- entry = module->second.find("ModDrv");
- if (entry != module->second.end()) {
- if (!strcmp(entry->second.c_str(), "RawLD")) {
- char *buf = new char [ strlen(modDir.c_str()) + 1 ];
-
- strcpy(buf, modDir.c_str());
- int end = strlen(buf) - 1;
- while (end) {
- if (buf[end] == '/')
- break;
- end--;
- }
- buf[end] = 0;
- modDir = buf;
- delete [] buf;
- }
- }
-
- if (dir = opendir(modDir.c_str())) {
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = modDir;
- modFile += "/";
- modFile += ent->d_name;
- remove(modFile.c_str());
- }
- }
- closedir(dir);
- }
- if (dir = opendir(manager->configPath)) { // find and remove .conf file
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = manager->configPath;
- modFile += "/";
- modFile += ent->d_name;
- SWConfig *config = new SWConfig(modFile.c_str());
- if (config->Sections.find(modName) != config->Sections.end()) {
- delete config;
- remove(modFile.c_str());
- }
- else delete config;
- }
- }
- closedir(dir);
- }
- }
- }
- return 0;
- }
- return 1;
-}
-
-
-int TMainForm::createParent(const char *pName)
-{
- char *buf = new char [ strlen(pName) + 1 ];
- int retCode;
-
- strcpy(buf, pName);
- int end = strlen(buf) - 1;
- while (end) {
- if (buf[end] == '/')
- break;
- end--;
- }
- buf[end] = 0;
- if (!strlen(buf))
- return -1;
-
- if ((retCode = mkdir(buf))) {
- createParent(buf);
- retCode = mkdir(buf);
- }
- delete [] buf;
- return retCode;
-}
-
-
-int TMainForm::createPathAndFile(const char *fName)
-{
- int fd;
-
- fd = open(fName, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
- if (fd < 1) {
- createParent(fName);
- fd = open(fName, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
- }
- return fd;
-}
-
-
-int TMainForm::copyFileToCWD(const char *sourceDir, const char *fName)
-{
- string sourcePath = sourceDir;
- sourcePath += fName;
-
- return copyFile(sourcePath.c_str(), fName);
-}
-
-
-int TMainForm::copyFile(const char *sourceFile, const char *targetFile)
-{
- int sfd, dfd, len;
- char buf[4096];
-
- if ((sfd = open(sourceFile, O_RDONLY|O_BINARY)) < 1)
- return -1;
- if ((dfd = createPathAndFile(targetFile)) < 1)
- return -1;
-
- do {
- len = read(sfd, buf, 4096);
- write(dfd, buf, len);
- }
- while(len == 4096);
- close(dfd);
- close(sfd);
-
- return 0;
-}
-
-
-int TMainForm::installModule(const char *modName, InstallSourceTab *ist)
-{
- SectionMap::iterator module, section;
- ConfigEntMap::iterator fileBegin;
- ConfigEntMap::iterator fileEnd;
- ConfigEntMap::iterator entry;
- string sourceDir;
- string buffer;
- bool aborted = false;
- bool cipher = false;
-
- if (ist)
- sourceDir = "./sources/" + ist->Source;
- else sourceDir = getLocalDir();
-
- SWMgr mgr(sourceDir.c_str());
-
- module = mgr.config->Sections.find(modName);
-
- if (module != mgr.config->Sections.end()) {
-
- entry = module->second.find("CipherKey");
- if (entry != module->second.end())
- cipher = true;
-
- fileEnd = module->second.upper_bound("File");
- fileBegin = module->second.lower_bound("File");
-
- if (fileBegin != fileEnd) { // copy each file
- if (ist) {
- while (fileBegin != fileEnd) { // ftp each file first
- buffer = sourceDir + "/" + fileBegin->second;
- if (FTPCopy(ist, fileBegin->second.c_str(), buffer.c_str())) {
- aborted = true;
- break; // user aborted
- }
- fileBegin++;
- }
- fileBegin = module->second.lower_bound("File");
- }
-
- if (!aborted) {
- // DO THE INSTALL
- while (fileBegin != fileEnd) {
- copyFileToCWD(sourceDir.c_str(), fileBegin->second.c_str());
- fileBegin++;
- }
- }
- //---------------
-
- if (ist) {
- fileBegin = module->second.lower_bound("File");
- while (fileBegin != fileEnd) { // delete each tmp ftp file
- buffer = sourceDir + "/" + fileBegin->second;
- remove(buffer.c_str());
- fileBegin++;
- }
- }
- }
- else { //copy all files in DataPath directory
- DIR *dir;
- struct dirent *ent;
- ConfigEntMap::iterator entry;
- string modDir;
- string modFile;
- string sourceOrig = sourceDir;
-
- entry = module->second.find("DataPath");
- if (entry != module->second.end()) {
- modDir = entry->second.c_str();
- entry = module->second.find("ModDrv");
- if (entry != module->second.end()) {
- if (!strcmp(entry->second.c_str(), "RawLD")) {
- char *buf = new char [ strlen(modDir.c_str()) + 1 ];
-
- strcpy(buf, modDir.c_str());
- int end = strlen(buf) - 1;
- while (end) {
- if (buf[end] == '/')
- break;
- end--;
- }
- buf[end] = 0;
- modDir = buf;
- delete [] buf;
- }
- }
-
- if (ist) {
- buffer = sourceDir + "/" + modDir;
- if (FTPCopy(ist, modDir.c_str(), buffer.c_str(), true)) {
- aborted = true; // user aborted
- }
- }
- sourceDir += "/";
- sourceDir += modDir;
- if (!aborted) {
- if (dir = opendir(sourceDir.c_str())) {
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = modDir;
- modFile += "/";
- modFile += ent->d_name;
- copyFileToCWD(sourceOrig.c_str(), modFile.c_str());
- }
- }
- closedir(dir);
- }
- }
- if (ist) { // delete tmp ftp files
- if (dir = opendir(sourceDir.c_str())) {
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = sourceOrig + "/" + modDir;
- modFile += "/";
- modFile += ent->d_name;
- remove(modFile.c_str());
- }
- }
- closedir(dir);
- }
- }
- sourceDir = sourceOrig;
- sourceDir += "/mods.d/";
- if (!aborted) {
- if (dir = opendir(sourceDir.c_str())) { // find and copy .conf file
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = sourceDir;
- modFile += ent->d_name;
- SWConfig *config = new SWConfig(modFile.c_str());
- if (config->Sections.find(modName) != config->Sections.end()) {
- delete config;
- string targetFile = "./mods.d/";
- targetFile += ent->d_name;
- copyFile(modFile.c_str(), targetFile.c_str());
- if (cipher) {
- CipherForm->modName = modName;
- CipherForm->confFile = targetFile;
- CipherForm->ShowModal();
- }
- }
- else delete config;
- }
- }
- closedir(dir);
- }
- }
- }
- }
- return (aborted) ? -1 : 0;
- }
- return 1;
-}
-
-
-void TMainForm::fillAllSourceTrees()
-{
- fillSourceTree(getLocalDir(), localTree);
- for (int i = 1; i < PageControl1->PageCount; i++) {
- InstallSourceTab *ist = (InstallSourceTab *) MainForm->PageControl1->Pages[i]->Controls[0];
- string parent = "./sources/" + ist->Source;
- fillSourceTree(parent.c_str(), ist->tree);
- }
-}
-
-
-void __fastcall TMainForm::Button4Click(TObject *Sender) // REMOVE MODULE
-{
- TTreeNode *node = installTree->Selected;
- if (node) {
- if (node->Parent) {
- removeModule((const char *)node->Data);
- delete manager;
- manager = new SWMgr();
- fillInstallTree();
- fillAllSourceTrees();
- }
- }
-}
-//---------------------------------------------------------------------------
-
-void __fastcall TMainForm::Button2Click(TObject *Sender) // INSTALL
-{
- TTreeNode *node;
- int count = 0;
- int abort = 0;
-
- class TWaitCursor {
- public:
- TWaitCursor() : oldc(Screen->Cursor) { Screen->Cursor = crHourGlass; }
- ~TWaitCursor() { Screen->Cursor = oldc; }
- private:
- TCursor oldc;
- } wait; // show hourglass
-
- TTreeView *tree;
- for (int i = 0; i < PageControl1->ActivePage->ControlCount; i++) {
- if (PageControl1->ActivePage->Controls[i]->ClassNameIs("TTreeView")) {
- tree = (TTreeView*)(PageControl1->ActivePage->Controls[i]);
- break;
- }
- }
-
- for (node = tree->Items->GetFirstNode(); node; node = node->GetNext()) {
- if (node->StateIndex == 1)
- count++;
- } // do true progress bar
-
- if (!count) return; // if nothing is selected, do nothing
-
- progressBar->Max = count;
- progressBar->Position = 0;
-
- for (node = tree->Items->GetFirstNode(); node; node = node->GetNext()) {
- if (node->StateIndex == 1) { // if selected for install
- CipherForm->cipherEdit->Text = "";
- if ((node->ImageIndex == 2) || (node->ImageIndex == 4)) { // if this is an upgrade
- removeModule((const char *)node->Data);
- }
- // install module
- statusBar->Caption = "Installing: " + node->Text + "...";
- statusBar->Repaint();
- if (tree == localTree)
- abort = installModule((const char *)node->Data);
- else abort = installModule((const char *)node->Data, (InstallSourceTab *) PageControl1->ActivePage->Controls[0]);
- if (abort)
- break;
- progressBar->Position++;
- }
- }
- delete manager;
- manager = new SWMgr();
- fillInstallTree();
- fillAllSourceTrees();
- statusBar->Caption = "";
- progressBar->Position = 0;
-}
-
-
-int TMainForm::FTPCopy(InstallSourceTab *ist, const char *src, const char *dest, bool dirTransfer)
-{
- StatusForm->ist = ist;
- StatusForm->src = src;
- StatusForm->dest = dest;
- StatusForm->dirTransfer = dirTransfer;
-
- Application->ProcessMessages();
- if (StatusForm->ShowModal() == mrCancel)
- return -1;
- else return 0;
-}
-
-
-void __fastcall TMainForm::RefreshRemoteSource(TObject *Sender)
-{
- InstallSourceTab *ist = (InstallSourceTab *) MainForm->PageControl1->ActivePage->Controls[0];
- DIR *dir;
- struct dirent *ent;
- ConfigEntMap::iterator entry;
- string modDir;
- string modFile;
- string target = "./sources/";
- target += ist->Source.c_str();
- target += "/mods.d";
-
- if (dir = opendir(target.c_str())) {
- rewinddir(dir);
- while ((ent = readdir(dir))) {
- if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) {
- modFile = target;
- modFile += "/";
- modFile += ent->d_name;
- remove(modFile.c_str());
- }
- }
- closedir(dir);
- }
-
-
- FTPCopy(ist, "mods.d", target.c_str(), true);
-
- target = "./sources/";
- target += ist->Source.c_str();
-
- fillSourceTree(target.c_str(), ist->tree);
-}
-
-
-
-void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
-{
- InfoForm->Caption = "W A R N I N G";
- InfoForm->info = "\\qc {\\b \\fs20 -=+* WARNING *+=- -=+* WARNING *+=-}\\par\\par\\pard ";
- InfoForm->info += "Although Install Manager provides a convenient way for installing and upgrading SWORD components, it also uses a systematic method for accessing sites which gives packet sniffers a target to lock into for singling out users. \\par\\par ";
- InfoForm->info += "\\b\\qc IF YOU LIVE IN A PERSECUTED COUNTRY AND DO NOT WISH TO RISK DETECTION, YOU SHOULD *NOT* USE INSTALL MANAGER'S REMOTE SOURCE FEATURES.";
- InfoForm->ShowModal();
- if (RemoteMntForm->ShowModal() == mrOk) {
- delete installConf;
- installConf = new SWConfig("./InstallMgr.conf");
-
- refreshPageControl();
- }
-}
-
-void __fastcall TMainForm::SpeedButton5Click(TObject *Sender)
-{
- TTreeView *tree;
- InstallSourceTab *ist = 0;
- SectionMap::iterator module;
- ConfigEntMap::iterator entry, entryEnd;
- string sourceDir;
-
- if (PageControl1->ActivePage != PageControl1->Pages[0]) {
- ist = (InstallSourceTab *) PageControl1->ActivePage->Controls[0];
- tree = ist->tree;
- }
- else tree = localTree;
-
- TTreeNode *node = tree->Selected;
- if (node) {
- if (node->Parent) {
- if (ist)
- sourceDir = "./sources/" + ist->Source;
- else sourceDir = getLocalDir();
- SWMgr *mgr = new SWMgr(sourceDir.c_str());
-
- module = mgr->config->Sections.find((const char *)node->Data);
-
- if (module != mgr->config->Sections.end()) {
- string targetVersion = "0.0";
- string sourceVersion = "1.0";
- SectionMap::iterator targetSection;
-
- entry = module->second.find("Version");
- if (entry != module->second.end())
- sourceVersion = entry->second.c_str();
-
- targetSection = manager->config->Sections.find(module->first);
- if (targetSection != manager->config->Sections.end()) {
- targetVersion = "1.0";
- entry = targetSection->second.find("Version");
- if (entry != targetSection->second.end())
- targetVersion = entry->second;
- }
- if (VersionInfo(targetVersion.c_str()) < VersionInfo("1.0")) {
- InfoForm->info = "\\pard{\\b * Additional Module Available for Install. } \\par ";
- }
- else {
- InfoForm->info = "\\pard{\\b + Upgraded Module Available for Install.}\\par\\tab Current Version: \\tab " + targetVersion + " \\par\\tab Upgrade Version:\\tab " + sourceVersion + " \\par ";
- bool changes = false;
- for (entry = module->second.begin(); entry != module->second.end(); entry++) {
- if (!strncmp(entry->first.c_str(), "History_", 8)) {
- if (VersionInfo(&entry->first.c_str()[8]) > VersionInfo(targetVersion.c_str())) {
- if (!changes) {
- changes = true;
- InfoForm->info += "\\par{\\b Changes: }\\par ";
- }
- InfoForm->info += "\\tab ";
- InfoForm->info += entry->second.c_str();
- InfoForm->info += "\\par ";
- }
- }
- }
- }
-
- entry = module->second.find("About");
- if (entry != module->second.end()) {
- InfoForm->info += "\\par{\\b About: } \\par\\par ";
- InfoForm->info += entry->second.c_str();
- }
- InfoForm->Caption = "Module Information";
- InfoForm->ShowModal();
- }
- delete mgr;
- }
- }
-}
-//---------------------------------------------------------------------------
-
-void __fastcall TMainForm::Exit1Click(TObject *Sender)
-{
- Close();
-}
-//---------------------------------------------------------------------------
-
-
-void TMainForm::deleteAllModules() {
-
- SWMgr *mgr = new SWMgr();
-
-
- int count = mgr->Modules.size();
-
- if (!count)
- return;
-
- UninstallForm->Show();
- UninstallForm->ProgressBar1->Max = count;
- UninstallForm->ProgressBar1->Position = 0;
-
- ModMap::iterator it;
- for (it = mgr->Modules.begin(); it != mgr->Modules.end(); it++) {
- string label = "Uninstalling: [";
- label += it->second->Name();
- label += "] ";
- label += it->second->Description();
- UninstallForm->Label1->Caption = label.c_str();
- UninstallForm->Label1->Repaint();
- removeModule(it->second->Name());
- UninstallForm->ProgressBar1->Position = UninstallForm->ProgressBar1->Position + 1;
- UninstallForm->ProgressBar1->Repaint();
- }
- delete mgr;
- UninstallForm->Hide();
- return;
-}
-void __fastcall TMainForm::FormShow(TObject *Sender)
-{
- for (int i=0;i<=ParamCount();i++) {
- if (LowerCase(ParamStr(i)) == "-uninstall") {
- deleteAllModules();
- Application->Terminate();
- }
- }
-
-}
-//---------------------------------------------------------------------------
-