fixed archive behaviour

This commit is contained in:
Radek Davidek 2026-06-24 20:28:44 +02:00
parent b07e888bae
commit b65f459511

View File

@ -1199,9 +1199,7 @@ public class FilePanelTab extends JPanel {
if (row >= 0) { if (row >= 0) {
FileItem item = (viewMode == ViewMode.BRIEF) ? tableModel.getItemFromBriefLayout(row, briefCurrentColumn) : tableModel.getItem(row); FileItem item = (viewMode == ViewMode.BRIEF) ? tableModel.getItemFromBriefLayout(row, briefCurrentColumn) : tableModel.getItem(row);
if (item != null && !item.isFtp()) { if (item != null && !item.isFtp()) {
if (item.isDirectory() || (item.getFile() != null && FileOperations.canOpenAsArchive(item.getFile()))) { enterSelectedArchive(item, row, viewMode == ViewMode.BRIEF ? briefCurrentColumn : 0);
openSelectedItem();
}
} }
} }
e.consume(); e.consume();
@ -2281,32 +2279,20 @@ public class FilePanelTab extends JPanel {
FileOperations.rewriteArchiveFromDirectory(currentArchiveTempDir.toFile(), currentArchiveSourceFile, currentArchivePassword, callback); FileOperations.rewriteArchiveFromDirectory(currentArchiveTempDir.toFile(), currentArchiveSourceFile, currentArchivePassword, callback);
} }
private void openSelectedItem() { private boolean shouldEnterArchiveOnActivation(File file) {
int selectedRow = fileTable.getSelectedRow(); return FileOperations.isArchiveFile(file);
if (selectedRow >= 0) {
FileItem item;
if (viewMode == ViewMode.BRIEF) {
item = tableModel.getItemFromBriefLayout(selectedRow, briefCurrentColumn);
} else {
item = tableModel.getItem(selectedRow);
} }
if (item == null) return; private void enterSelectedArchive(FileItem item, int row, int column) {
if (item == null || item.isFtp()) return;
if (item.isFtp()) { if (!item.isDirectory() && FileOperations.canOpenAsArchive(item.getFile())) {
if (item.getName().equals("..")) { enterArchiveItem(item, row, column);
navigateFtpUp();
} else if (item.isDirectory()) {
String entryPath = item.getFtpPath();
loadFtpDirectory(entryPath, true, true);
} }
return;
} }
if (item.getName().equals("..")) { private void enterArchiveItem(FileItem item, int row, int column) {
navigateUp(); ReturnNavigationState returnState = rememberReturnStateForItem(item, row, column);
} else if (FileOperations.canOpenAsArchive(item.getFile())) {
ReturnNavigationState returnState = rememberReturnStateForItem(item, selectedRow, viewMode == ViewMode.BRIEF ? briefCurrentColumn : 0);
rememberArchiveReturnState(item.getFile()); rememberArchiveReturnState(item.getFile());
final File archiveFile = item.getFile(); final File archiveFile = item.getFile();
@ -2339,6 +2325,34 @@ public class FilePanelTab extends JPanel {
JOptionPane.showMessageDialog(FilePanelTab.this, error, "Archive Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(FilePanelTab.this, error, "Archive Error", JOptionPane.ERROR_MESSAGE);
} }
); );
}
private void openSelectedItem() {
int selectedRow = fileTable.getSelectedRow();
if (selectedRow >= 0) {
FileItem item;
if (viewMode == ViewMode.BRIEF) {
item = tableModel.getItemFromBriefLayout(selectedRow, briefCurrentColumn);
} else {
item = tableModel.getItem(selectedRow);
}
if (item == null) return;
if (item.isFtp()) {
if (item.getName().equals("..")) {
navigateFtpUp();
} else if (item.isDirectory()) {
String entryPath = item.getFtpPath();
loadFtpDirectory(entryPath, true, true);
}
return;
}
if (item.getName().equals("..")) {
navigateUp();
} else if (shouldEnterArchiveOnActivation(item.getFile())) {
enterArchiveItem(item, selectedRow, viewMode == ViewMode.BRIEF ? briefCurrentColumn : 0);
} else if (item.isDirectory()) { } else if (item.isDirectory()) {
rememberReturnStateForItem(item, selectedRow, viewMode == ViewMode.BRIEF ? briefCurrentColumn : 0); rememberReturnStateForItem(item, selectedRow, viewMode == ViewMode.BRIEF ? briefCurrentColumn : 0);
loadDirectory(item.getFile()); loadDirectory(item.getFile());
@ -2855,7 +2869,7 @@ public class FilePanelTab extends JPanel {
if (item.getName().equals("..")) { if (item.getName().equals("..")) {
navigateUp(); navigateUp();
} else if (FileOperations.canOpenAsArchive(item.getFile())) { } else if (shouldEnterArchiveOnActivation(item.getFile())) {
ReturnNavigationState returnState = rememberReturnStateForItem(item, row, viewMode == ViewMode.BRIEF ? col : 0); ReturnNavigationState returnState = rememberReturnStateForItem(item, row, viewMode == ViewMode.BRIEF ? col : 0);
rememberArchiveReturnState(item.getFile()); rememberArchiveReturnState(item.getFile());
final File archiveFile = item.getFile(); final File archiveFile = item.getFile();