| 436 | } |
| 437 | |
| 438 | void UEFITool::extract(const UINT8 mode) |
| 439 | { |
| 440 | QModelIndex index = ui->structureTreeView->selectionModel()->currentIndex(); |
| 441 | if (!index.isValid()) |
| 442 | return; |
| 443 | |
| 444 | TreeModel* model = ffsEngine->treeModel(); |
| 445 | UINT8 type = model->type(index); |
| 446 | |
| 447 | QString path; |
| 448 | if (mode == EXTRACT_MODE_AS_IS) { |
| 449 | switch (type) { |
| 450 | case Types::Capsule: |
| 451 | path = QFileDialog::getSaveFileName(this, tr("Save capsule to file"), currentDir, "Capsule files (*.cap *.bin);;All files (*)"); |
| 452 | break; |
| 453 | case Types::Image: |
| 454 | path = QFileDialog::getSaveFileName(this, tr("Save image to file"), currentDir, "Image files (*.rom *.bin);;All files (*)"); |
| 455 | break; |
| 456 | case Types::Region: |
| 457 | path = QFileDialog::getSaveFileName(this, tr("Save region to file"), currentDir, "Region files (*.rgn *.bin);;All files (*)"); |
| 458 | break; |
| 459 | case Types::Padding: |
| 460 | path = QFileDialog::getSaveFileName(this, tr("Save padding to file"), currentDir, "Padding files (*.pad *.bin);;All files (*)"); |
| 461 | break; |
| 462 | case Types::Volume: |
| 463 | path = QFileDialog::getSaveFileName(this, tr("Save volume to file"), currentDir, "Volume files (*.vol *.bin);;All files (*)"); |
| 464 | break; |
| 465 | case Types::File: |
| 466 | path = QFileDialog::getSaveFileName(this, tr("Save FFS file to file"), currentDir, "FFS files (*.ffs *.bin);;All files (*)"); |
| 467 | break; |
| 468 | case Types::Section: |
| 469 | path = QFileDialog::getSaveFileName(this, tr("Save section file to file"), currentDir, "Section files (*.sct *.bin);;All files (*)"); |
| 470 | break; |
| 471 | default: |
| 472 | path = QFileDialog::getSaveFileName(this, tr("Save object to file"), currentDir, "Binary files (*.bin);;All files (*)"); |
| 473 | } |
| 474 | } |
| 475 | else if (mode == EXTRACT_MODE_BODY) { |
| 476 | switch (type) { |
| 477 | case Types::Capsule: |
| 478 | path = QFileDialog::getSaveFileName(this, tr("Save capsule body to image file"), currentDir, "Image files (*.rom *.bin);;All files (*)"); |
| 479 | break; |
| 480 | case Types::Volume: |
| 481 | path = QFileDialog::getSaveFileName(this, tr("Save volume body to file"), currentDir, "Volume body files (*.vbd *.bin);;All files (*)"); |
| 482 | break; |
| 483 | case Types::File: { |
| 484 | if (model->subtype(index) == EFI_FV_FILETYPE_ALL || model->subtype(index) == EFI_FV_FILETYPE_RAW) |
| 485 | path = QFileDialog::getSaveFileName(this, tr("Save FFS file body to raw file"), currentDir, "Raw files (*.raw *.bin);;All files (*)"); |
| 486 | else |
| 487 | path = QFileDialog::getSaveFileName(this, tr("Save FFS file body to file"), currentDir, "FFS file body files (*.fbd *.bin);;All files (*)"); |
| 488 | } |
| 489 | break; |
| 490 | case Types::Section: { |
| 491 | if (model->subtype(index) == EFI_SECTION_COMPRESSION || model->subtype(index) == EFI_SECTION_GUID_DEFINED || model->subtype(index) == EFI_SECTION_DISPOSABLE) |
| 492 | path = QFileDialog::getSaveFileName(this, tr("Save encapsulation section body to FFS body file"), currentDir, "FFS file body files (*.fbd *.bin);;All files (*)"); |
| 493 | else if (model->subtype(index) == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) |
| 494 | path = QFileDialog::getSaveFileName(this, tr("Save section body to volume file"), currentDir, "Volume files (*.vol *.bin);;All files (*)"); |
| 495 | else if (model->subtype(index) == EFI_SECTION_RAW) |
nothing calls this directly
no test coverage detected