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:
@@ -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.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -76,7 +76,10 @@ CopyEngine::MessageReceived(BMessage*msg)
|
|||||||
fWindow->GetTargetMenu());
|
fWindow->GetTargetMenu());
|
||||||
if (err != B_OK) {
|
if (err != B_OK) {
|
||||||
ERR("Start failed");
|
ERR("Start failed");
|
||||||
|
SetStatusMessage("Installation aborted.");
|
||||||
BMessenger(fWindow).SendMessage(RESET_INSTALL);
|
BMessenger(fWindow).SendMessage(RESET_INSTALL);
|
||||||
|
} else {
|
||||||
|
BMessenger(fWindow).SendMessage(INSTALL_FINISHED);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -229,7 +232,10 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
|
|||||||
// copy source volume
|
// copy source volume
|
||||||
BDirectory targetDir(targetDirectory.Path());
|
BDirectory targetDir(targetDirectory.Path());
|
||||||
BDirectory srcDir(srcDirectory.Path());
|
BDirectory srcDir(srcDirectory.Path());
|
||||||
CopyFolder(srcDir, targetDir);
|
err = CopyFolder(srcDir, targetDir);
|
||||||
|
|
||||||
|
if (err != B_OK)
|
||||||
|
return err;
|
||||||
|
|
||||||
// copy selected packages
|
// copy selected packages
|
||||||
if (fPackages) {
|
if (fPackages) {
|
||||||
@@ -239,25 +245,28 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
|
|||||||
int32 count = fPackages->CountItems();
|
int32 count = fPackages->CountItems();
|
||||||
for (int32 i = 0; i < count; i++) {
|
for (int32 i = 0; i < count; i++) {
|
||||||
if (fControl->CheckUserCanceled())
|
if (fControl->CheckUserCanceled())
|
||||||
return B_OK;
|
return B_CANCELED;
|
||||||
Package *p = static_cast<Package*>(fPackages->ItemAt(i));
|
Package *p = static_cast<Package*>(fPackages->ItemAt(i));
|
||||||
packageDir.SetTo(&srcDir, p->Folder());
|
packageDir.SetTo(&srcDir, p->Folder());
|
||||||
CopyFolder(packageDir, targetDir);
|
err = CopyFolder(packageDir, targetDir);
|
||||||
|
if (err != B_OK)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fControl->CheckUserCanceled()) {
|
if (err != B_OK)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if (fControl->CheckUserCanceled())
|
||||||
|
return B_CANCELED;
|
||||||
|
|
||||||
LaunchFinishScript(targetDirectory);
|
LaunchFinishScript(targetDirectory);
|
||||||
|
|
||||||
BMessage msg(INSTALL_FINISHED);
|
|
||||||
BMessenger(fWindow).SendMessage(&msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
status_t
|
||||||
CopyEngine::CopyFolder(BDirectory &srcDir, BDirectory &targetDir)
|
CopyEngine::CopyFolder(BDirectory &srcDir, BDirectory &targetDir)
|
||||||
{
|
{
|
||||||
BEntry entry;
|
BEntry entry;
|
||||||
@@ -283,8 +292,11 @@ CopyEngine::CopyFolder(BDirectory &srcDir, BDirectory &targetDir)
|
|||||||
BPath path;
|
BPath path;
|
||||||
entry.GetPath(&path);
|
entry.GetPath(&path);
|
||||||
ERR2("error while copying %s", path.Path());
|
ERR2("error while copying %s", path.Path());
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class CopyEngine : public BLooper {
|
|||||||
private:
|
private:
|
||||||
void LaunchInitScript(BPath &path);
|
void LaunchInitScript(BPath &path);
|
||||||
void LaunchFinishScript(BPath &path);
|
void LaunchFinishScript(BPath &path);
|
||||||
void CopyFolder(BDirectory &srcDir, BDirectory &targetDir);
|
status_t CopyFolder(BDirectory &srcDir, BDirectory &targetDir);
|
||||||
|
|
||||||
InstallerWindow *fWindow;
|
InstallerWindow *fWindow;
|
||||||
BDiskDeviceRoster fDDRoster;
|
BDiskDeviceRoster fDDRoster;
|
||||||
|
|||||||
@@ -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.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -213,7 +213,6 @@ InstallerWindow::MessageReceived(BMessage *msg)
|
|||||||
if (fCopyEngine->Cancel()) {
|
if (fCopyEngine->Cancel()) {
|
||||||
fInstallStatus = kCancelled;
|
fInstallStatus = kCancelled;
|
||||||
SetStatusMessage("Installation cancelled.");
|
SetStatusMessage("Installation cancelled.");
|
||||||
PostMessage(RESET_INSTALL);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kFinished:
|
case kFinished:
|
||||||
@@ -263,6 +262,7 @@ InstallerWindow::MessageReceived(BMessage *msg)
|
|||||||
}
|
}
|
||||||
case INSTALL_FINISHED:
|
case INSTALL_FINISHED:
|
||||||
fBeginButton->SetLabel("Quit");
|
fBeginButton->SetLabel("Quit");
|
||||||
|
SetStatusMessage("Installation completed.");
|
||||||
fInstallStatus = kFinished;
|
fInstallStatus = kFinished;
|
||||||
DisableInterface(false);
|
DisableInterface(false);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user