Shifting to make application compatible with latest libKonogonka. Small UI enhancements: adding more colors to NCA Headers to simplify navigation.
continuous-integration/drone/push Build is failing Details

master
Dmitry Isaenko 2022-09-19 23:18:42 +03:00
parent 3634a8c98d
commit 32b8b8fc90
12 changed files with 221 additions and 176 deletions

View File

@ -1,6 +1,6 @@
# konogonka
[![Build Status](https://ci.redrise.ru/api/badges/desu/konogonka/status.svg)](https://ci.redrise.ru/desu/konogonka)
![License](https://img.shields.io/badge/License-GPLv3-blue.svg) [![Build Status](https://ci.redrise.ru/api/badges/desu/konogonka/status.svg)](https://ci.redrise.ru/desu/konogonka)
GitHub mirror. [Click here to get it from independent source code location](https://git.redrise.ru/desu/konogonka)

View File

@ -23,6 +23,7 @@ import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import konogonka.AppPreferences;
@ -32,6 +33,7 @@ import libKonogonka.Converter;
import konogonka.MediatorControl;
import libKonogonka.Tools.NCA.NCAContent;
import konogonka.Workers.DumbNCA3ContentExtractor;
import libKonogonka.Tools.PFS0.IPFS0Provider;
import java.io.File;
import java.net.URL;
@ -44,25 +46,27 @@ public class NCASectionContentController implements Initializable {
private int sectionNumber;
@FXML
private Button extractRawConentBtn;
private Button extractRawContentBtn;
@FXML
private NSPController SectionPFS0Controller;
@FXML
private RomFsController SectionRomFsController;
@FXML
private VBox sha256pane;
@FXML
private TitledPane pfs0TitledPane, RomFsTitledPane;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
extractRawConentBtn.setDisable(true);
extractRawConentBtn.setOnAction(event -> this.extractFiles());
extractRawContentBtn.setDisable(true);
extractRawContentBtn.setOnAction(event -> this.extractFiles());
}
public void resetTab() {
SectionPFS0Controller.resetTab();
SectionRomFsController.resetTab();
sha256pane.getChildren().clear();
extractRawConentBtn.setDisable(true);
extractRawContentBtn.setDisable(true);
}
public void populateFields(NCAContent ncaContent, int sectionNumber) {
@ -73,7 +77,7 @@ public class NCASectionContentController implements Initializable {
this.ncaContent = ncaContent;
this.sectionNumber = sectionNumber;
this.extractRawConentBtn.setDisable(false);
this.extractRawContentBtn.setDisable(false);
setPFS0Content();
setRomFsContent();
@ -82,10 +86,16 @@ public class NCASectionContentController implements Initializable {
if (ncaContent.getPfs0() != null)
SectionPFS0Controller.setData(ncaContent.getPfs0(), null);;
LinkedList<byte[]> sha256hashList = ncaContent.getPfs0SHA256hashes();
IPFS0Provider ipfs0Provider = ncaContent.getPfs0();
if (ipfs0Provider == null)
return;
LinkedList<byte[]> sha256hashList = ipfs0Provider.getPfs0SHA256hashes();
if (sha256hashList == null)
return;
for (int i = 0; i < sha256hashList.size(); i++){
Label numberLblTmp = new Label(String.format("%10d", i));
numberLblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
@ -94,10 +104,13 @@ public class NCASectionContentController implements Initializable {
sha256pane.getChildren().add(new HBox(numberLblTmp, sha256LblTmp));
}
pfs0TitledPane.setExpanded(true);
}
private void setRomFsContent(){
if (ncaContent.getRomfs() != null)
SectionRomFsController.setData(ncaContent.getRomfs());
if (ncaContent.getRomfs() == null)
return;
SectionRomFsController.setData(ncaContent.getRomfs());
RomFsTitledPane.setExpanded(true);
}
private void extractFiles(){
@ -114,11 +127,11 @@ public class NCASectionContentController implements Initializable {
if (!dir.exists())
return;
extractRawConentBtn.setDisable(true);
extractRawContentBtn.setDisable(true);
DumbNCA3ContentExtractor extractor = new DumbNCA3ContentExtractor(ncaContent, sectionNumber, dir.getAbsolutePath()+File.separator);
extractor.setOnSucceeded(e->{
extractRawConentBtn.setDisable(false);
extractRawContentBtn.setDisable(false);
});
Thread workThread = new Thread(extractor);
workThread.setDaemon(true);

View File

@ -50,10 +50,10 @@ public class RFSModelEntry implements IRowModel {
public String getFileName() { return fileSystemEntry.getName(); }
@Override
public long getFileSize() { return fileSystemEntry.getFileSize(); }
public long getFileSize() { return fileSystemEntry.getSize(); }
@Override
public long getFileOffset() { return fileSystemEntry.getFileOffset(); }
public long getFileOffset() { return fileSystemEntry.getOffset(); }
@Override
public boolean isMarkSelected() { return check; }

View File

@ -35,6 +35,8 @@ import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import static libKonogonka.Converter.byteArrToHexString;
public class HFSBlockController implements Initializable {
@FXML
private TitledPane currentTitledPane;
@ -91,13 +93,13 @@ public class HFSBlockController implements Initializable {
public void populateTab(HFS0Provider hfs0Provider){
if (hfs0Provider != null){
bodySize = hfs0Provider.getRawFileDataStart();
hfs0mainMagicNumLbl.setText(Boolean.toString(hfs0Provider.isMagicHFS0()));
hfs0mainFileCntLbl.setText(Integer.toString(hfs0Provider.getFilesCnt()));
hfs0mainMagicNumLbl.setText(hfs0Provider.getMagic());
hfs0mainFileCntLbl.setText(Integer.toString(hfs0Provider.getFilesCount()));
hfs0mainStrTblSizeLbl.setText(Integer.toString(hfs0Provider.getStringTableSize()));
hfs0mainPaddingLbl.setText(Boolean.toString(hfs0Provider.isPaddingHfs0()));
hfs0mainPaddingLbl.setText(byteArrToHexString(hfs0Provider.getPadding()));
hfs0mainRawFileDataStartLbl.setText(Long.toString(hfs0Provider.getRawFileDataStart()));
hfs0tableFilesListMainController.setContentToTable(hfs0Provider);
if (hfs0Provider.getFilesCnt() > 0)
if (hfs0Provider.getFilesCount() > 0)
extractMainBtn.setDisable(false);
}
else {

View File

@ -215,7 +215,7 @@ public class Hfs0TableViewController implements Initializable {
return;
}
// Note: 'i' in here is extra important to be stored in sequence items added.
for (int i = 0; i < hfs0.getFilesCnt(); i++){
for (int i = 0; i < hfs0.getFilesCount(); i++){
rowsObsLst.add(new Hfs0RowModel(
hfs0.getHfs0Files()[i].getName(),
hfs0.getHfs0Files()[i].getSize(),

View File

@ -5,22 +5,17 @@ import konogonka.ModelControllers.EMsgType;
import konogonka.ModelControllers.LogPrinter;
import libKonogonka.Tools.NCA.NCAContent;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PipedInputStream;
public class DumbNCA3ContentExtractor extends Task<Void> {
private NCAContent ncaContent;
private int ncaNumberInFile;
private LogPrinter logPrinter;
private String filesDestPath;
private final NCAContent ncaContent;
private final int ncaNumberInFile;
private final LogPrinter logPrinter;
private final String filesDestinationPath;
public DumbNCA3ContentExtractor(NCAContent ncaContent, int ncaNumberInFile, String filesDestPath){
public DumbNCA3ContentExtractor(NCAContent ncaContent, int ncaNumberInFile, String filesDestinationPath){
this.ncaContent = ncaContent;
this.ncaNumberInFile = ncaNumberInFile;
this.filesDestPath = filesDestPath;
this.filesDestinationPath = filesDestinationPath;
this.logPrinter = new LogPrinter();
}
@ -30,42 +25,10 @@ public class DumbNCA3ContentExtractor extends Task<Void> {
if (ncaContent.getRomfs() != null){
lv6mark = " [lv6 "+ncaContent.getRomfs().getLevel6Offset()+"]";
}
logPrinter.print("\tStart dummy extracting: \n"+filesDestPath+"NCAContent_"+ncaNumberInFile+lv6mark+".bin", EMsgType.INFO);
File contentFile = new File(filesDestPath + "NCAContent_"+ncaNumberInFile+lv6mark+".bin");
try {
BufferedOutputStream extractedFileBOS = new BufferedOutputStream(new FileOutputStream(contentFile));
PipedInputStream pis = ncaContent.getRawDataContentPipedInpStream();
byte[] readBuf = new byte[0x200]; // 8mb NOTE: consider switching to 1mb 1048576
int readSize;
//*** PROGRESS BAR VARS START
long progressHandleFSize = ncaContent.getRawDataContentSize();
int progressHandleFRead = 0;
//*** PROGRESS BAR VARS END
while ((readSize = pis.read(readBuf)) > -1) {
extractedFileBOS.write(readBuf, 0, readSize);
readBuf = new byte[0x200];
//*** PROGRESS BAR DECORCATIONS START
progressHandleFRead += readSize;
//System.out.println(readSize);
try {
logPrinter.updateProgress((progressHandleFRead)/(progressHandleFSize/100.0) / 100.0);
}catch (InterruptedException ignore){}
//*** PROGRESS BAR DECORCATIONS END
}
try {
logPrinter.updateProgress(1.0);
}
catch (InterruptedException ignored){}
extractedFileBOS.close();
} catch (Exception ioe) {
logPrinter.print("\tExtracting dummy issue\n\t" + ioe.getMessage(), EMsgType.INFO);
return null;
} finally {
logPrinter.print("\tEnd dummy extracting", EMsgType.INFO);
logPrinter.close();
}
logPrinter.print("\tStart dummy extracting: \n"+ filesDestinationPath +"NCAContent_"+ncaNumberInFile+lv6mark+".bin", EMsgType.INFO);
ncaContent.exportMediaBlock(filesDestinationPath + "NCAContent_"+ncaNumberInFile+lv6mark+".bin");
logPrinter.print("\tEnd dummy extracting", EMsgType.INFO);
logPrinter.close();
return null;
}
}

View File

@ -10,6 +10,7 @@ import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PipedInputStream;
import java.nio.file.Files;
import java.util.List;
public class DumbRomFsExtractor extends Task<Void> {
@ -63,17 +64,17 @@ public class DumbRomFsExtractor extends Task<Void> {
}
return null;
}
// TODO: Update # backend and then here
private void exportSingleFile(FileSystemEntry entry, String saveToLocation) throws Exception{
File contentFile = new File(saveToLocation + entry.getName());
BufferedOutputStream extractedFileBOS = new BufferedOutputStream(new FileOutputStream(contentFile));
BufferedOutputStream extractedFileBOS = new BufferedOutputStream(Files.newOutputStream(contentFile.toPath()));
PipedInputStream pis = provider.getContent(entry);
byte[] readBuf = new byte[0x200]; // 8mb NOTE: consider switching to 1mb 1048576
int readSize;
//*** PROGRESS BAR VARS START
long progressHandleFSize = entry.getFileSize();
long progressHandleFSize = entry.getSize();
int progressHandleFRead = 0;
//*** PROGRESS BAR VARS END
while ((readSize = pis.read(readBuf)) > -1) {

View File

@ -15,8 +15,8 @@
<GridPane prefWidth="860.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAFsHeaderController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="200.0" minWidth="150.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="175.0" minWidth="160.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="850.0" minWidth="100.0" />
</columnConstraints>
<rowConstraints>
@ -28,7 +28,7 @@
<RowConstraints maxHeight="30.0" minHeight="30.0" />
<RowConstraints maxHeight="30.0" minHeight="30.0" />
<RowConstraints vgrow="SOMETIMES" />
<RowConstraints vgrow="SOMETIMES" />
<RowConstraints minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="30.0" />
@ -300,11 +300,11 @@
<font>
<Font name="System Bold" size="13.0" />
</font></Label>
<TitledPane fx:id="romFsTitlePanel" animated="false" expanded="false" text="RomFS SuperBlock">
<TitledPane fx:id="romFsTitlePanel" contentDisplay="CENTER" expanded="false" styleClass="romFsSuperblock" text="RomFS SuperBlock">
<content>
<VBox spacing="5.0">
<VBox spacing="5.0" style="-fx-background-color: #aadff3;">
<children>
<GridPane gridLinesVisible="true">
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -472,7 +472,7 @@
<Font name="System Bold" size="13.0" />
</font>
</Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #aea6f3;">
<GridPane gridLinesVisible="true" style="-fx-background-color: #b6aeff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -576,7 +576,7 @@
<Font name="System Bold" size="13.0" />
</font>
</Label>
<GridPane gridLinesVisible="true" style="romFsReservedTailLbl6: #bfb2ff;">
<GridPane gridLinesVisible="true" style="-fx-background-color: #d7bdff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -784,7 +784,7 @@
<Font name="System Bold" size="13.0" />
</font>
</Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d7c4ff;">
<GridPane gridLinesVisible="true" style="-fx-background-color: #eddaff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -888,7 +888,7 @@
<Font name="System Bold" size="13.0" />
</font>
</Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #91c3f6;">
<GridPane gridLinesVisible="true" style="-fx-background-color: #eaeaff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -992,7 +992,7 @@
<Font name="System Bold" size="13.0" />
</font>
</Label>
<GridPane gridLinesVisible="true" style="-fx-background-color: #a4c8ef;">
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffecec;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1091,7 +1091,7 @@
<Insets />
</opaqueInsets>
</GridPane>
<GridPane gridLinesVisible="true">
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1165,11 +1165,11 @@
</VBox>
</content>
</TitledPane>
<TitledPane fx:id="pfs0TitlePanel" expanded="false" text="PFS0 SuperBlock">
<TitledPane fx:id="pfs0TitlePanel" styleClass="pfs0Superblock" text="PFS0 SuperBlock">
<content>
<VBox spacing="5.0">
<VBox spacing="5.0" style="-fx-background-color: #ffc5c6;">
<children>
<GridPane gridLinesVisible="true">
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
@ -1299,9 +1299,6 @@
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="0x28">
@ -1314,7 +1311,7 @@
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Offset of hash-table. Normally zero?" GridPane.columnIndex="2">
<Label text="Offset Hash-table (Normally zero?)" GridPane.columnIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -1329,57 +1326,12 @@
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x38" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x40" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x48" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xb0" GridPane.columnIndex="1" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Size of hash-table" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="PFS0 header offset (relative to section-start)" GridPane.columnIndex="2" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="PFS0 filesystem size (in bytes) relative to the PFS0 header" GridPane.columnIndex="2" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Normally zeros" GridPane.columnIndex="2" GridPane.rowIndex="4">
<Label text="Size Hash-table" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -1389,17 +1341,89 @@
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0relativeToSectionStartOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="2">
</children>
</GridPane>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d5d5d5;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="0x38">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0sizePfs0Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="3">
<Label text="0x40" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<TextField fx:id="pfs0zeroesTf" editable="false" text="-" GridPane.columnIndex="3" GridPane.rowIndex="4" />
<Label text="0x8" GridPane.columnIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Offset PFS0 (header, relative to section-start)" GridPane.columnIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Size PFS0 (in bytes, relative to the PFS0 header)" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0relativeToSectionStartOffsetLbl" text="-" GridPane.columnIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="pfs0sizePfs0Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</GridPane>
<GridPane gridLinesVisible="true" style="-fx-background-color: #d5d5d5;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label text="0x48">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xb0" GridPane.columnIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Normally zeros" GridPane.columnIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<TextField fx:id="pfs0zeroesTf" editable="false" text="-" GridPane.columnIndex="3" />
</children>
</GridPane>
</children>
@ -1419,11 +1443,11 @@
</Label>
</children>
</AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="8" GridPane.vgrow="ALWAYS">
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000; -fx-background-color: #ffee70;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="8" GridPane.vgrow="ALWAYS">
<content>
<TitledPane text="PatchInfo">
<TitledPane expanded="false" styleClass="patchInfo" text="Patch Info">
<content>
<VBox spacing="5.0" style="-fx-background-color: #ffee70;">
<VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #ffee70;">
<children>
<Label text="Indirect Info">
<font>
@ -1435,7 +1459,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1538,7 +1562,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1639,7 +1663,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1693,7 +1717,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -1787,6 +1811,9 @@
</children>
</VBox>
</content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane>
</content>
</ScrollPane>
@ -1941,16 +1968,16 @@
</AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="11">
<content>
<TitledPane text="Sparse Info">
<TitledPane expanded="false" styleClass="sparseInfo" text="Sparse Info">
<content>
<VBox spacing="5.0" style="-fx-background-color: #c5dbff;">
<VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #c5dbff;">
<children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2053,7 +2080,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2149,7 +2176,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2222,6 +2249,9 @@
</children>
</VBox>
</content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane>
</content>
</ScrollPane>
@ -2263,16 +2293,16 @@
</AnchorPane>
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="12">
<content>
<TitledPane text="Compression Info">
<TitledPane expanded="false" styleClass="compressionInfo" text="Compression Info">
<content>
<VBox spacing="5.0" style="-fx-background-color: #99ff66;">
<VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #99ff66;">
<children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2375,7 +2405,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2471,7 +2501,7 @@
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="250.0" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2502,6 +2532,9 @@
</children>
</VBox>
</content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane>
</content>
</ScrollPane>
@ -2517,16 +2550,16 @@
<AnchorPane style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="3" GridPane.rowIndex="13" />
<ScrollPane fitToWidth="true" style="-fx-border-color: #000000;" styleClass="customGrid" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="13">
<content>
<TitledPane text="Meta Data Hash Data Info">
<TitledPane expanded="false" styleClass="metaDataHashDataInfo" text="Meta Data Hash Data Info">
<content>
<VBox spacing="5.0" style="-fx-background-color: #ffb380;">
<VBox fillWidth="false" spacing="5.0" style="-fx-background-color: #ffb380;">
<children>
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffffff;">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="75.0" minWidth="60.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="140.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="150.0" minWidth="120.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="180.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
@ -2623,12 +2656,12 @@
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.rowIndex="3">
<Label text="0x10" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="3">
<Label text="0x20" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -2648,6 +2681,9 @@
</children>
</VBox>
</content>
<padding>
<Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
</padding>
</TitledPane>
</content>
</ScrollPane>

View File

@ -10,11 +10,11 @@
<?import javafx.scene.shape.SVGPath?>
<?import javafx.scene.text.Font?>
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCASectionContentController">
<VBox spacing="5.0" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCASectionContentController">
<children>
<HBox alignment="TOP_CENTER" spacing="5.0">
<children>
<Button fx:id="extractRawConentBtn" disable="true" mnemonicParsing="false" text="%btnExtract">
<Button fx:id="extractRawContentBtn" disable="true" mnemonicParsing="false" text="%btnExtract">
<graphic>
<SVGPath content="M2,10.96C1.5,10.68 1.35,10.07 1.63,9.59L3.13,7C3.24,6.8 3.41,6.66 3.6,6.58L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.66,6.72 20.82,6.88 20.91,7.08L22.36,9.6C22.64,10.08 22.47,10.69 22,10.96L21,11.54V16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V10.96C2.7,11.13 2.32,11.14 2,10.96M12,4.15V4.15L12,10.85V10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V12.69L14,15.59C13.67,15.77 13.3,15.76 13,15.6V19.29L19,15.91M13.85,13.36L20.13,9.73L19.55,8.72L13.27,12.35L13.85,13.36Z" />
</graphic>
@ -24,7 +24,7 @@
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
<TitledPane expanded="false" text="PFS0">
<TitledPane fx:id="pfs0TitledPane" expanded="false" text="PFS0">
<content>
<VBox spacing="5.0">
<TitledPane expanded="false" text="SHA256 hashes">
@ -60,7 +60,7 @@
<fx:include fx:id="SectionPFS0" source="../NSP/NSPTab.fxml" />
</VBox>
</content></TitledPane>
<TitledPane text="'RomFS'" VBox.vgrow="ALWAYS">
<TitledPane fx:id="RomFsTitledPane" expanded="false" text="'RomFS'" VBox.vgrow="ALWAYS">
<content>
<fx:include fx:id="SectionRomFs" source="../RomFS/RFSTab.fxml" />
</content>

View File

@ -12,7 +12,7 @@
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAController">
<ScrollPane fitToWidth="true" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCAController">
<VBox spacing="5.0">
<children>
<TitledPane animated="false" expanded="false" text="Header">
@ -22,7 +22,7 @@
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="130.0" minWidth="125.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="450.0" prefWidth="500.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
</columnConstraints>
@ -248,7 +248,7 @@
</AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="18">
<children>
<Label text="0x10*0x4(0x40)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="0x40" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -257,7 +257,7 @@
</AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="17">
<children>
<Label text="0x20*0x4(0x80)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="0x80" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -266,7 +266,7 @@
</AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="1" GridPane.rowIndex="16">
<children>
<Label text="0x10*0x4(0x40)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="0x40" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -442,7 +442,7 @@
</AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="17">
<children>
<Label text="Table of SHA256 hashes, over each 0x200-byte Section Header Block." AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="Table of SHA256 hashes, over each 0x200-byte Section Header Block (0x20*0x4)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -451,7 +451,7 @@
</AnchorPane>
<AnchorPane styleClass="customGrid" GridPane.columnIndex="2" GridPane.rowIndex="18">
<children>
<Label text="Key area" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<Label text="Key area (0x10 * 0x4)" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
@ -592,12 +592,12 @@
<Label text="Encrypted" />
<TextField fx:id="keyAreaEnKey0TF" editable="false" />
<TextField fx:id="keyAreaEnKey1TF" editable="false" />
<TextField fx:id="keyAreaEnKey2TF" editable="false" />
<TextField fx:id="keyAreaEnKey2TF" editable="false" style="-fx-background-color: #ffc2f2;" />
<TextField fx:id="keyAreaEnKey3TF" editable="false" />
<Label text="Decrypted" />
<TextField fx:id="keyAreaDecKey0TF" editable="false" />
<TextField fx:id="keyAreaDecKey1TF" editable="false" />
<TextField fx:id="keyAreaDecKey2TF" editable="false" />
<TextField fx:id="keyAreaDecKey2TF" editable="false" style="-fx-background-color: #ffc2f2;" />
<TextField fx:id="keyAreaDecKey3TF" editable="false" />
</children>
</VBox>

View File

@ -8,7 +8,7 @@
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?>
<GridPane gridLinesVisible="true" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCATableController">
<GridPane gridLinesVisible="true" style="-fx-background-color: #ffe3b4;" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="konogonka.Controllers.NCA.NCATableController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />

View File

@ -384,10 +384,10 @@
{
-fx-background-color: #efebe6;
-fx-background-insets: 0, 1, 2;
-fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0;
-fx-background-radius: 2 2 2 2;
-fx-padding: 3 11 5 11;
-fx-border-width: 1;
-fx-border-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0;
-fx-border-radius: 2 2 2 2;
-fx-border-color: #c8c8c8;
}
@ -395,10 +395,10 @@
{
-fx-background-color: #d5713f;
-fx-background-insets: 0, 1, 2;
-fx-background-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0;
-fx-background-radius: 2 2 2 2;
-fx-padding: 3 11 5 11;
-fx-border-width: 1;
-fx-border-radius: 5 5 0 0, 4 4 0 0, 3 3 0 0;
-fx-border-radius: 2 2 2 2;
-fx-border-color: #c8c8c8;
}
@ -428,6 +428,36 @@
-fx-background-color: white, white;
}
.patchInfo > .title
{
-fx-background-color: #fed850;
}
.sparseInfo > .title
{
-fx-background-color: #a6cdff;
}
.compressionInfo > .title
{
-fx-background-color: #8eec5e;
}
.metaDataHashDataInfo > .title
{
-fx-background-color: #eca576;
}
.romFsSuperblock > .title
{
-fx-background-color: #9ed0e2;
}
.pfs0Superblock > .title
{
-fx-background-color: #f4bdbd;
}
.regionFolder {
-fx-shape: "M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z";
-fx-background-color: #ffbf00;