diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java index c0400806e..7c2b95851 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/CompressMenuProvider.java @@ -199,6 +199,11 @@ public class CompressMenuProvider implements BrowserMenuBranchProvider { builder.build().executeAsync(); } + @Override + public boolean isApplicable(BrowserFileSystemTabModel model, List entries) { + return entries.stream().allMatch(browserEntry -> browserEntry.getRawFileEntry().getKind() == FileKind.FILE); + } + @Override protected String getExtension() { return "gz"; diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/ZipActionProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/ZipActionProvider.java index 678a805d9..4a006374f 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/ZipActionProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/compress/ZipActionProvider.java @@ -5,6 +5,7 @@ import io.xpipe.app.browser.action.BrowserActionProvider; import io.xpipe.app.browser.file.BrowserEntry; import io.xpipe.app.ext.FileKind; import io.xpipe.app.process.CommandBuilder; +import io.xpipe.app.process.ProcessOutputException; import io.xpipe.app.process.ShellDialects; import io.xpipe.core.FilePath; import io.xpipe.core.OsType; @@ -84,6 +85,11 @@ public class ZipActionProvider implements BrowserActionProvider { sc.command(command).execute(); } } + } catch (ProcessOutputException pex) { + // Unix zip does not like empty dirs + if (!pex.getOutput().contains("Nothing to do")) { + throw pex; + } } finally { model.refreshSync(); }