1/* 2 * Copyright 2005-2006, J��r��me DUVAL. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "CopyEngine.h" 7#include "InstallerWindow.h" 8#include "PartitionMenuItem.h" 9#include <Alert.h> 10#include <FindDirectory.h> 11#include <Path.h> 12#include <String.h> 13#include <VolumeRoster.h> 14 15//#define COPY_TRACE 16#ifdef COPY_TRACE 17#define CALLED() printf("CALLED %s\n",__PRETTY_FUNCTION__) 18#else 19#define CALLED() 20#endif 21 22const char BOOT_PATH[] = "/boot"; 23 24extern void SizeAsString(off_t size, char *string); 25 26 27CopyEngine::CopyEngine(InstallerWindow *window) 28 : BLooper("copy_engine"), 29 fWindow(window), 30 fPackages(NULL), 31 fSpaceRequired(0) 32{ 33 Run(); 34} 35 36 37void 38CopyEngine::MessageReceived(BMessage*msg) 39{ 40 CALLED(); 41 switch (msg->what) { 42 case ENGINE_START: 43 Start(fWindow->GetSourceMenu(), fWindow->GetTargetMenu()); 44 break; 45 } 46} 47 48 49void 50CopyEngine::SetStatusMessage(char *status) 51{ 52 BMessage msg(STATUS_MESSAGE); 53 msg.AddString("status", status); 54 BMessenger(fWindow).SendMessage(&msg); 55} 56 57 58void 59CopyEngine::Start(BMenu *srcMenu, BMenu *targetMenu) 60{ 61 CALLED(); 62 PartitionMenuItem *targetItem = (PartitionMenuItem *)targetMenu->FindMarked(); 63 PartitionMenuItem *srcItem = (PartitionMenuItem *)srcMenu->FindMarked(); 64 if (!srcItem || !targetItem) { 65 fprintf(stderr, "bad menu items\n"); 66 return; 67 } 68 69 BMessage msg(INSTALL_FINISHED); 70 BMessenger(fWindow).SendMessage(&msg); 71} 72 73 74void 75CopyEngine::ScanDisksPartitions(BMenu *srcMenu, BMenu *targetMenu) 76{ 77 PartitionMenuItem *item = new PartitionMenuItem(NULL, "boot", NULL, new BMessage(SRC_PARTITION), 0); 78 srcMenu->AddItem(item); 79 80 PartitionMenuItem *item2 = new PartitionMenuItem(NULL, "target", NULL, new BMessage(TARGET_PARTITION), 0); 81 targetMenu->AddItem(item2); 82} 83 84 85void 86CopyEngine::SetPackagesList(BList *list) 87{ 88 if (fPackages) 89 delete fPackages; 90 fPackages = list; 91} 92 93