Skip to content

Commit

Permalink
Fixing Hooks.panelActions
Browse files Browse the repository at this point in the history
  • Loading branch information
marigostra committed Jun 7, 2022
1 parent c015521 commit 1b9fd72
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 64 deletions.
45 changes: 44 additions & 1 deletion src/main/java/org/luwrain/app/commander/Hooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,57 @@
package org.luwrain.app.commander;

import java.util.*;
import org.graalvm.polyglot.*;
import org.apache.commons.vfs2.*;

import org.luwrain.core.*;

import org.luwrain.app.base.*;
import static org.luwrain.script.Hooks.*;
import static org.luwrain.script2.ScriptUtils.*;
import static org.luwrain.app.commander.PanelArea.*;

final class Hooks
{
static private final String
PANEL_ACTIONS = "luwrain.commander.panel.actions";

private final App app;
Hooks(App app) { this.app = app; }

LayoutBase.ActionInfo[] panelActions(MainLayout layout, PanelArea panelArea, PanelArea otherPanelArea)
{
final List<LayoutBase.ActionInfo> res = new ArrayList<>();
final Object[] items = collectorForArrays(app.getLuwrain(), PANEL_ACTIONS, new Object[0]);
if (items == null)
return new LayoutBase.ActionInfo[0];
for(Object item: items)
{
final String
name = asString(getMember(item, "name")),
title = asString(getMember(item, "title"));
if (name == null || name.trim().isEmpty() ||
title == null || title.trim().isEmpty())
continue;
final Value action = getMember(item, "action");
if (action == null || action.isNull() || !action.canExecute())
continue;
res.add(layout.action(name.trim(), title.trim(), ()->{
final String selected;
final List<String> marked = new ArrayList<>();
if (panelArea.getSelectedEntry() != null)
selected = asFile(panelArea.getSelectedEntry()).getAbsolutePath(); else
selected = null;
for(FileObject o: panelArea.getToProcess())
marked.add(asFile(o).getAbsolutePath());
final Value actRes = action.execute(new Object[]{
selected,
getArray(marked)
});
if (actRes == null || actRes.isNull() || !actRes.isBoolean())
return false;
return actRes.asBoolean();
}));
}
return res.toArray(new LayoutBase.ActionInfo[res.size()]);
}
}
11 changes: 3 additions & 8 deletions src/main/java/org/luwrain/app/commander/MainLayout.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,12 @@
final class MainLayout extends LayoutBase
{
private final App app;
final PanelArea leftPanel;
final PanelArea rightPanel;
final PanelArea leftPanel, rightPanel;
private final FileActions fileActions;

MainLayout(App app)
{
super(app);
NullCheck.notNull(app, "app");
this.app = app;
this.fileActions = new FileActions(app);

Expand All @@ -54,7 +52,6 @@ final class MainLayout extends LayoutBase
this.leftPanel = new PanelArea(params, getLuwrain()) {
@Override public boolean onSystemEvent(SystemEvent event)
{
NullCheck.notNull(event, "event");
if (event.getType() == SystemEvent.Type.REGULAR)
switch(event.getCode())
{
Expand All @@ -73,7 +70,6 @@ final class MainLayout extends LayoutBase
this.rightPanel = new PanelArea(params, getLuwrain()) {
@Override public boolean onSystemEvent(SystemEvent event)
{
NullCheck.notNull(event, "event");
if (event.getType() == SystemEvent.Type.REGULAR)
switch(event.getCode())
{
Expand Down Expand Up @@ -104,9 +100,7 @@ final class MainLayout extends LayoutBase

private Actions getPanelActions(Side side)
{
NullCheck.notNull(side, "side");
final PanelArea panelArea;
final PanelArea oppositePanelArea;
final PanelArea panelArea, oppositePanelArea;
if (side == Side.LEFT)
{
panelArea = leftPanel;
Expand All @@ -117,6 +111,7 @@ private Actions getPanelActions(Side side)
oppositePanelArea = leftPanel;
}
return actions(
app.getHooks().panelActions(this, panelArea, oppositePanelArea),
action("copy", app.getStrings().actionCopy(), new InputEvent(InputEvent.Special.F5), ()->fileActions.localCopy(panelArea, oppositePanelArea)),
action("move", app.getStrings().actionMove(), new InputEvent(InputEvent.Special.F6), ()->fileActions.localMove(panelArea, oppositePanelArea)),
action("mkdir", app.getStrings().actionMkdir(), new InputEvent(InputEvent.Special.F7), ()->fileActions.localMkdir(panelArea)),
Expand Down
55 changes: 0 additions & 55 deletions src/main/java/org/luwrain/app/commander/PanelArea.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.io.*;
import java.nio.file.*;
import java.net.*;
import org.luwrain.script.hooks.*;

import org.apache.commons.vfs2.*;

Expand All @@ -39,7 +38,6 @@ class PanelArea extends CommanderArea<FileObject>
PanelArea(Params<FileObject> params, Luwrain luwrain)
{
super(params);
NullCheck.notNull(luwrain, "luwrain");
this.luwrain = luwrain;
}

Expand All @@ -50,7 +48,6 @@ class PanelArea extends CommanderArea<FileObject>

void open(File file)
{
NullCheck.notNull(file, "file");
try {
open(getCommanderModel().getFileSystemManager().resolveFile(file.getAbsolutePath()));
}
Expand All @@ -62,7 +59,6 @@ void open(File file)

@Override public boolean onAreaQuery(AreaQuery query)
{
NullCheck.notNull(query, "query");
if (query.getQueryCode() == AreaQuery.CURRENT_DIR && query instanceof CurrentDirQuery)
{
final CurrentDirQuery currentDirQuery = (CurrentDirQuery)query;
Expand All @@ -75,56 +71,6 @@ void open(File file)
return super.onAreaQuery(query);
}

boolean runHookOnSelected(String hookPrefix)
{
NullCheck.notEmpty(hookPrefix, "hookPrefix");
final FileObject obj = getSelectedEntry();
if (obj == null)
return false;
if (isLocalDir())
{
if (!(obj instanceof org.apache.commons.vfs2.provider.local.LocalFile))
throw new RuntimeException("The entry is not a local file while the local dir is opened");
final File f = new File(obj.getName().getPath());
if (new ChainOfResponsibilityHook(luwrain).runNoExcept(hookPrefix + ".local.custom", new Object[]{f}))
return true;
return new ChainOfResponsibilityHook(luwrain).runNoExcept(hookPrefix + ".local.default", new Object[]{f});
}
//FIXME:remote
return false;
}

boolean runHookOnFilesToProcess(String hookPrefix, boolean background)
{
NullCheck.notEmpty(hookPrefix, "hookPrefix");
final Object arg;
final String hookName;
if (isLocalDir())
{
final File[] files = asFile(getToProcess());
if (files.length == 0)
return false;
final String[] names = new String[files.length];
for(int i = 0;i < files.length;i++)
names[i] = files[i].getAbsolutePath();
arg = ScriptUtils.createReadOnlyArray(names);
hookName = hookPrefix + ".local";
} else
return false;
if (!background)
{
if (new ChainOfResponsibilityHook(luwrain).runNoExcept(hookName + ".custom", new Object[]{arg}))
return true;
return new ChainOfResponsibilityHook(luwrain).runNoExcept(hookName, new Object[]{arg});
}
luwrain.executeBkg(new FutureTask<>(()->{
if (new ChainOfResponsibilityHook(luwrain).runNoExcept(hookName + ".custom", new Object[]{arg}))
return;
new ChainOfResponsibilityHook(luwrain).runNoExcept(hookName, new Object[]{arg});
}, null));
return true;
}

boolean isLocalDir()
{
final FileObject o = opened();
Expand Down Expand Up @@ -160,7 +106,6 @@ boolean openLocalPath(String path)

boolean openInitial(String path)
{
NullCheck.notNull(path, "path");
try {
return open(CommanderUtilsVfs.prepareLocation((CommanderUtilsVfs.Model)getCommanderModel(), path), false);
}
Expand Down

0 comments on commit 1b9fd72

Please sign in to comment.