better handles error and cancellation when copying

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25772 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2008-06-02 22:34:48 +00:00
parent 1d0b3c1590
commit 87905063c3
3 changed files with 25 additions and 13 deletions
+22 -10
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2005-2006, Jérôme DUVAL. All rights reserved.
* Copyright 2005-2008, Jérôme DUVAL. All rights reserved.
* Distributed under the terms of the MIT License.
*/
@@ -76,7 +76,10 @@ CopyEngine::MessageReceived(BMessage*msg)
fWindow->GetTargetMenu());
if (err != B_OK) {
ERR("Start failed");
SetStatusMessage("Installation aborted.");
BMessenger(fWindow).SendMessage(RESET_INSTALL);
} else {
BMessenger(fWindow).SendMessage(INSTALL_FINISHED);
}
break;
}
@@ -229,7 +232,10 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
// copy source volume
BDirectory targetDir(targetDirectory.Path());
BDirectory srcDir(srcDirectory.Path());
CopyFolder(srcDir, targetDir);
err = CopyFolder(srcDir, targetDir);
if (err != B_OK)
return err;
// copy selected packages
if (fPackages) {
@@ -239,25 +245,28 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
int32 count = fPackages->CountItems();
for (int32 i = 0; i < count; i++) {
if (fControl->CheckUserCanceled())
return B_OK;
return B_CANCELED;
Package *p = static_cast<Package*>(fPackages->ItemAt(i));
packageDir.SetTo(&srcDir, p->Folder());
CopyFolder(packageDir, targetDir);
err = CopyFolder(packageDir, targetDir);
if (err != B_OK)
break;
}
}
if (!fControl->CheckUserCanceled()) {
LaunchFinishScript(targetDirectory);
if (err != B_OK)
return err;
BMessage msg(INSTALL_FINISHED);
BMessenger(fWindow).SendMessage(&msg);
}
if (fControl->CheckUserCanceled())
return B_CANCELED;
LaunchFinishScript(targetDirectory);
return B_OK;
}
void
status_t
CopyEngine::CopyFolder(BDirectory &srcDir, BDirectory &targetDir)
{
BEntry entry;
@@ -283,8 +292,11 @@ CopyEngine::CopyFolder(BDirectory &srcDir, BDirectory &targetDir)
BPath path;
entry.GetPath(&path);
ERR2("error while copying %s", path.Path());
return err;
}
}
return B_OK;
}
+1 -1
View File
@@ -32,7 +32,7 @@ class CopyEngine : public BLooper {
private:
void LaunchInitScript(BPath &path);
void LaunchFinishScript(BPath &path);
void CopyFolder(BDirectory &srcDir, BDirectory &targetDir);
status_t CopyFolder(BDirectory &srcDir, BDirectory &targetDir);
InstallerWindow *fWindow;
BDiskDeviceRoster fDDRoster;
+2 -2
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2005, Jérôme DUVAL. All rights reserved.
* Copyright 2005-2008, Jérôme DUVAL. All rights reserved.
* Distributed under the terms of the MIT License.
*/
@@ -213,7 +213,6 @@ InstallerWindow::MessageReceived(BMessage *msg)
if (fCopyEngine->Cancel()) {
fInstallStatus = kCancelled;
SetStatusMessage("Installation cancelled.");
PostMessage(RESET_INSTALL);
}
break;
case kFinished:
@@ -263,6 +262,7 @@ InstallerWindow::MessageReceived(BMessage *msg)
}
case INSTALL_FINISHED:
fBeginButton->SetLabel("Quit");
SetStatusMessage("Installation completed.");
fInstallStatus = kFinished;
DisableInterface(false);
break;