basic copy

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16008 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2006-01-19 18:15:01 +00:00
parent 30db9f527d
commit 5226491c72
+25 -13
View File
@@ -77,21 +77,32 @@ CopyEngine::LaunchFinishScript(BPath &path)
void void
CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu) CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
{ {
PartitionMenuItem *item = (PartitionMenuItem *)targetMenu->FindMarked(); PartitionMenuItem *targetItem = (PartitionMenuItem *)targetMenu->FindMarked();
if (!item) PartitionMenuItem *srcItem = (PartitionMenuItem *)srcMenu->FindMarked();
if (!srcItem || !targetItem)
return; return;
BPath directory; BPath targetDirectory;
BDiskDevice device; BDiskDevice device;
BPartition *partition; BPartition *partition;
if (fDDRoster.GetPartitionWithID(item->ID(), &device, &partition) == B_OK) { if (fDDRoster.GetPartitionWithID(targetItem->ID(), &device, &partition) == B_OK) {
if (partition->GetMountPoint(&directory)!=B_OK) if (partition->GetMountPoint(&targetDirectory)!=B_OK)
return; return;
} else if (fDDRoster.GetDeviceWithID(item->ID(), &device) == B_OK) { } else if (fDDRoster.GetDeviceWithID(targetItem->ID(), &device) == B_OK) {
if (device.GetMountPoint(&directory)!=B_OK) if (device.GetMountPoint(&targetDirectory)!=B_OK)
return; return;
} else } else
return; // shouldn't happen return; // shouldn't happen
BPath srcDirectory;
if (fDDRoster.GetPartitionWithID(srcItem->ID(), &device, &partition) == B_OK) {
if (partition->GetMountPoint(&srcDirectory)!=B_OK)
return;
} else if (fDDRoster.GetDeviceWithID(srcItem->ID(), &device) == B_OK) {
if (device.GetMountPoint(&srcDirectory)!=B_OK)
return;
} else
return; // shouldn't happen
// check not installing on boot volume // check not installing on boot volume
BVolume bootVolume; BVolume bootVolume;
@@ -102,7 +113,7 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
bootVolume.GetRootDirectory(&bootDir); bootVolume.GetRootDirectory(&bootDir);
bootDir.GetEntry(&bootEntry); bootDir.GetEntry(&bootEntry);
bootEntry.GetPath(&bootPath); bootEntry.GetPath(&bootPath);
if (strncmp(bootPath.Path(), directory.Path(), strlen(bootPath.Path())) == 0) { if (strncmp(bootPath.Path(), targetDirectory.Path(), strlen(bootPath.Path())) == 0) {
} }
@@ -110,18 +121,19 @@ CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu)
// ask if init ou mount as is // ask if init ou mount as is
LaunchInitScript(directory); LaunchInitScript(targetDirectory);
// copy source volume // copy source volume
BDirectory targetDir(directory.Path()); BDirectory targetDir(targetDirectory.Path());
bootPath.Append("/beos"); srcDirectory.Append("beos");
BEntry srcEntry(bootPath.Path()); BEntry srcEntry(srcDirectory.Path());
Undo undo; Undo undo;
printf("Copying folder '%s' to '%s'.\n", srcDirectory.Path(), targetDirectory.Path());
FSCopyFolder(&srcEntry, &targetDir, fControl, NULL, false, undo); FSCopyFolder(&srcEntry, &targetDir, fControl, NULL, false, undo);
// copy selected packages // copy selected packages
LaunchFinishScript(directory); LaunchFinishScript(targetDirectory);
} }