aboutsummaryrefslogtreecommitdiffstats
path: root/apps/X11/InstallMgr/src/StatusFrm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apps/X11/InstallMgr/src/StatusFrm.cpp')
-rw-r--r--apps/X11/InstallMgr/src/StatusFrm.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/apps/X11/InstallMgr/src/StatusFrm.cpp b/apps/X11/InstallMgr/src/StatusFrm.cpp
new file mode 100644
index 0000000..36911d2
--- /dev/null
+++ b/apps/X11/InstallMgr/src/StatusFrm.cpp
@@ -0,0 +1,175 @@
+//---------------------------------------------------------------------------
+#include <vcl.h>
+#pragma hdrstop
+
+#include "StatusFrm.h"
+#include "MainFrm.h"
+//---------------------------------------------------------------------------
+#pragma package(smart_init)
+#pragma resource "*.dfm"
+TStatusForm *StatusForm;
+//---------------------------------------------------------------------------
+__fastcall TStatusForm::TStatusForm(TComponent* Owner)
+ : TForm(Owner)
+{
+}
+//---------------------------------------------------------------------------
+void __fastcall TStatusForm::FormShow(TObject *Sender)
+{
+ abort = false;
+ ftpThread = new TFTPThread(ist, src.c_str(), dest.c_str(), dirTransfer, true);
+ ftpThread->OnTerminate = Cleanup;
+ ftpThread->Resume();
+}
+//---------------------------------------------------------------------------
+__fastcall TStatusForm::TFTPThread::TFTPThread(InstallSourceTab *iist, const char *isrc, const char *idest, bool idirTransfer, bool CreateSuspended)
+ : TThread(CreateSuspended)
+{
+ ist = iist;
+ src = isrc;
+ dest = idest;
+ dirTransfer = idirTransfer;
+ Priority = tpNormal;
+ FreeOnTerminate = true;
+ Synchronize((TThreadMethod)&CreateFTPObject);
+}
+
+__fastcall TStatusForm::TFTPThread::~TFTPThread()
+{
+ delete FTPLink;
+}
+
+
+void __fastcall TStatusForm::TFTPThread::Execute()
+{
+ Synchronize((TThreadMethod)&PreConnect);
+ FTPLink->OnPacketRecvd = FTPLinkPacketRecvd;
+ FTPLink->ParseList = true;
+ FTPLink->Host = ist->Source.c_str();
+ FTPLink->Port = 21;
+ FTPLink->UserID = "ftp";
+ FTPLink->Password = "installmgr@user.com";
+
+ try {
+ FTPLink->Connect();
+ FTPLink->Mode(MODE_IMAGE);
+ FTPLink->ChangeDir(ist->Directory.c_str());
+ }
+ catch(...) {
+ StatusForm->Button1Click(0); // abort thread
+ }
+
+ if (!Terminated) {
+ if (dirTransfer) {
+ FTPLink->ChangeDir(src.c_str());
+ fileList.clear();
+ FTPLink->List();
+ int fileCount = FTPLink->FTPDirectoryList->name->Count;
+ for (int i = 0; i < fileCount; i++) {
+ if (FTPLink->FTPDirectoryList->Attribute->Strings[i].c_str()[0] != 'd') {
+ buffer = dest + "/" + FTPLink->FTPDirectoryList->name->Strings[i].c_str();
+ buffer2 = "Downloading (";
+ buffer2 += IntToStr(i+1).c_str();
+ buffer2 += " of ";
+ buffer2 += IntToStr(fileCount).c_str();
+ buffer2 += "): ";
+ buffer2 += FTPLink->FTPDirectoryList->name->Strings[i].c_str();
+ // SWLog::systemlog->LogInformation("%s", buffer.c_str());
+ TMainForm::createParent(buffer.c_str()); // make sure parent directory exists
+ Synchronize((TThreadMethod)&PreDownload1);
+ try {
+ FTPLink->Download(FTPLink->FTPDirectoryList->name->Strings[i].c_str(), buffer.c_str());
+ }
+ catch(...) {}
+ if (Terminated)
+ break;
+ }
+ }
+
+ }
+ else {
+ Synchronize((TThreadMethod)&PreDownload2);
+ FTPLink->Download(src.c_str(), dest.c_str());
+ }
+ try {
+ FTPLink->Disconnect();
+ }
+ catch(...){}
+ }
+}
+
+
+void __fastcall TStatusForm::TFTPThread::FTPLinkPacketRecvd(TObject *Sender)
+{
+ Synchronize((TThreadMethod)&UpdateBytes);
+}
+
+
+void __fastcall TStatusForm::TFTPThread::UpdateBytes(void)
+{
+ StatusForm->statusBar->Caption = IntToStr(FTPLink->BytesRecvd) + " bytes out of " + IntToStr(FTPLink->BytesTotal) + " transferred (" + IntToStr((int)((float)(FTPLink->BytesRecvd + 1) / (float)(FTPLink->BytesTotal + 1) * 100)) + "%)";
+ StatusForm->statusBar->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::CreateFTPObject(void)
+{
+ FTPLink = new TNMFTP(0);
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreConnect(void)
+{
+ buffer = "Connecting to server at ";
+ buffer += ist->Source.c_str();
+ buffer += "...";
+ StatusForm->actionBar->Caption = buffer.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreDownload1(void)
+{
+// SWLog::systemlog->LogInformation("Creating parent dir: %s", buffer.c_str());
+// SWLog::systemlog->LogInformation("Return: %d", ret);
+ StatusForm->actionBar->Caption = buffer2.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+}
+
+
+void __fastcall TStatusForm::TFTPThread::PreDownload2(void)
+{
+ buffer = "Downloading: ";
+ buffer += src.c_str();
+ StatusForm->actionBar->Caption = buffer.c_str();
+ StatusForm->statusBar->Caption = "";
+ StatusForm->Repaint();
+ MainForm->createParent(dest.c_str()); // make sure parent directory exists
+}
+
+
+void __fastcall TStatusForm::Cleanup(TObject *Sender)
+//void __fastcall TStatusForm::TFTPThread::Cleanup()
+{
+ if (abort)
+ StatusForm->ModalResult = mrCancel;
+ else StatusForm->ModalResult = mrOk;
+// StatusForm->Close();
+}
+
+void __fastcall TStatusForm::FormClose(TObject *Sender, TCloseAction &Action)
+{
+ MainForm->SetFocus();
+}
+//---------------------------------------------------------------------------
+
+void __fastcall TStatusForm::Button1Click(TObject *Sender)
+{
+ abort = true;
+ ftpThread->Terminate();
+ ftpThread->FTPLink->Abort();
+}
+//---------------------------------------------------------------------------
+