diff --git a/src/apps/installer/CopyEngine.cpp b/src/apps/installer/CopyEngine.cpp index 5bdbf0f2ac..598c158b79 100644 --- a/src/apps/installer/CopyEngine.cpp +++ b/src/apps/installer/CopyEngine.cpp @@ -5,6 +5,7 @@ #include "CopyEngine.h" #include "InstallerWindow.h" +#include "PartitionMenuItem.h" #include #include #include @@ -98,11 +99,12 @@ SourceVisitor::SourceVisitor(BMenu *menu) bool SourceVisitor::Visit(BDiskDevice *device) { - if (!device->Type() || strcmp(device->Type(), kPartitionTypeBFS)!=0) + if (!device->ContentType() || strcmp(device->ContentType(), kPartitionTypeBFS)!=0) return false; BPath path; if (device->GetPath(&path)==B_OK) - printf("SourceVisitor::Visit(BDiskDevice *) : %s\n", path.Path()); + printf("SourceVisitor::Visit(BDiskDevice *) : %s type:%s, contentType:%s\n", path.Path(), device->Type(), device->ContentType()); + fMenu->AddItem(new PartitionMenuItem(device->Name(), new BMessage(SRC_PARTITION), device->ID())); return false; } @@ -110,12 +112,13 @@ SourceVisitor::Visit(BDiskDevice *device) bool SourceVisitor::Visit(BPartition *partition, int32 level) { - if (!partition->Type() || strcmp(partition->Type(), kPartitionTypeBFS)!=0) + if (!partition->ContentType() || strcmp(partition->ContentType(), kPartitionTypeBFS)!=0) return false; BPath path; if (partition->GetPath(&path)==B_OK) printf("SourceVisitor::Visit(BPartition *) : %s\n", path.Path()); printf("SourceVisitor::Visit(BPartition *) : %s\n", partition->Name()); + fMenu->AddItem(new PartitionMenuItem(partition->Name(), new BMessage(SRC_PARTITION), partition->ID())); return false; } @@ -134,6 +137,7 @@ TargetVisitor::Visit(BDiskDevice *device) BPath path; if (device->GetPath(&path)==B_OK) printf("TargetVisitor::Visit(BDiskDevice *) : %s\n", path.Path()); + fMenu->AddItem(new PartitionMenuItem(device->Name(), new BMessage(TARGET_PARTITION), device->ID())); return false; } @@ -147,5 +151,6 @@ TargetVisitor::Visit(BPartition *partition, int32 level) if (partition->GetPath(&path)==B_OK) printf("TargetVisitor::Visit(BPartition *) : %s\n", path.Path()); printf("TargetVisitor::Visit(BPartition *) : %s\n", partition->Name()); + fMenu->AddItem(new PartitionMenuItem(partition->Name(), new BMessage(TARGET_PARTITION), partition->ID())); return false; } diff --git a/src/apps/installer/InstallerWindow.cpp b/src/apps/installer/InstallerWindow.cpp index e93e870230..a82b517222 100644 --- a/src/apps/installer/InstallerWindow.cpp +++ b/src/apps/installer/InstallerWindow.cpp @@ -24,8 +24,6 @@ const uint32 BEGIN_MESSAGE = 'iBGN'; const uint32 SHOW_BOTTOM_MESSAGE = 'iSBT'; const uint32 SETUP_MESSAGE = 'iSEP'; const uint32 START_SCAN = 'iSSC'; -const uint32 SRC_PARTITION = 'iSPT'; -const uint32 DST_PARTITION = 'iDPT'; const uint32 PACKAGE_CHECKBOX = 'iPCB'; class LogoView : public BBox { @@ -273,9 +271,9 @@ InstallerWindow::StartScan() fCopyEngine.ScanDisksPartitions(fSrcMenu, fDestMenu); - fSrcMenu->AddItem(new PartitionMenuItem("BeOS 5 PE Max Edition V3.1 beta", + /*fSrcMenu->AddItem(new PartitionMenuItem("BeOS 5 PE Max Edition V3.1 beta", new BMessage(SRC_PARTITION), "/BeOS 5 PE Max Edition V3.1 beta")); - + */ if (fSrcMenu->ItemAt(0)) { fSrcMenu->ItemAt(0)->SetMarked(true); PublishPackages(); @@ -292,7 +290,19 @@ InstallerWindow::PublishPackages() if (!item) return; - BPath directory(item->Path()); + BPath directory; + BDiskDeviceRoster roster; + BDiskDevice device; + BPartition *partition; + if (roster.GetPartitionWithID(item->ID(), &device, &partition) == B_OK) { + if (partition->GetPath(&directory)!=B_OK) + return; + } else if (roster.GetDeviceWithID(item->ID(), &device) == B_OK) { + if (device.GetPath(&directory)!=B_OK) + return; + } else + return; // shouldn't happen + directory.Append("_packages_"); BDirectory dir(directory.Path()); if (dir.InitCheck()!=B_OK) diff --git a/src/apps/installer/PartitionMenuItem.cpp b/src/apps/installer/PartitionMenuItem.cpp index 72d27cc07f..23635773ac 100644 --- a/src/apps/installer/PartitionMenuItem.cpp +++ b/src/apps/installer/PartitionMenuItem.cpp @@ -9,15 +9,14 @@ #include "PartitionMenuItem.h" -PartitionMenuItem::PartitionMenuItem(const char *label, BMessage *msg, const char* path) +PartitionMenuItem::PartitionMenuItem(const char *label, BMessage *msg, partition_id id) : BMenuItem(label, msg) { - fPath = strdup(path); + fID = id; } PartitionMenuItem::~PartitionMenuItem() { - free(fPath); } diff --git a/src/apps/installer/PartitionMenuItem.h b/src/apps/installer/PartitionMenuItem.h index dff9c580da..b7095c2033 100644 --- a/src/apps/installer/PartitionMenuItem.h +++ b/src/apps/installer/PartitionMenuItem.h @@ -6,17 +6,19 @@ #ifndef __PARTITIONMENUITEM_H_ #define __PARTITIONMENUITEM_H_ - #include +#include +const uint32 SRC_PARTITION = 'iSPT'; +const uint32 TARGET_PARTITION = 'iTPT'; class PartitionMenuItem : public BMenuItem { public: - PartitionMenuItem(const char *label, BMessage *msg, const char* path); + PartitionMenuItem(const char *label, BMessage *msg, partition_id id); ~PartitionMenuItem(); - const char* Path() { return fPath; }; + partition_id ID() const { return fID; }; private: - char *fPath; + partition_id fID; }; #endif /* __PARTITIONMENUITEM_H_ */