未验证 提交 1195582d 编写于 作者: S Skylot

feat(gui): option for search results count per page (#1652)

上级 258987b0
...@@ -5,7 +5,6 @@ import java.util.List; ...@@ -5,7 +5,6 @@ import java.util.List;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
...@@ -35,7 +34,6 @@ public class SearchTask extends CancelableBackgroundTask { ...@@ -35,7 +34,6 @@ public class SearchTask extends CancelableBackgroundTask {
private final TaskProgress taskProgress = new TaskProgress(); private final TaskProgress taskProgress = new TaskProgress();
private final AtomicInteger resultsCount = new AtomicInteger(0); private final AtomicInteger resultsCount = new AtomicInteger(0);
private final AtomicBoolean complete = new AtomicBoolean(false);
private int resultsLimit; private int resultsLimit;
private Future<TaskStatus> future; private Future<TaskStatus> future;
...@@ -60,7 +58,6 @@ public class SearchTask extends CancelableBackgroundTask { ...@@ -60,7 +58,6 @@ public class SearchTask extends CancelableBackgroundTask {
throw new IllegalStateException("Previous task not yet finished"); throw new IllegalStateException("Previous task not yet finished");
} }
resetCancel(); resetCancel();
complete.set(false);
resultsCount.set(0); resultsCount.set(0);
taskProgress.updateTotal(jobs.stream().mapToInt(s -> s.getProvider().total()).sum()); taskProgress.updateTotal(jobs.stream().mapToInt(s -> s.getProvider().total()).sum());
future = backgroundExecutor.execute(this); future = backgroundExecutor.execute(this);
...@@ -74,7 +71,6 @@ public class SearchTask extends CancelableBackgroundTask { ...@@ -74,7 +71,6 @@ public class SearchTask extends CancelableBackgroundTask {
this.resultsListener.accept(resultNode); this.resultsListener.accept(resultNode);
if (resultsLimit != 0 && resultsCount.incrementAndGet() >= resultsLimit) { if (resultsLimit != 0 && resultsCount.incrementAndGet() >= resultsLimit) {
cancel(); cancel();
complete.set(false);
return true; return true;
} }
return false; return false;
......
...@@ -79,6 +79,7 @@ public class JadxSettings extends JadxCLIArgs { ...@@ -79,6 +79,7 @@ public class JadxSettings extends JadxCLIArgs {
private boolean codeAreaLineWrap = false; private boolean codeAreaLineWrap = false;
private int srhResourceSkipSize = 1000; private int srhResourceSkipSize = 1000;
private String srhResourceFileExt = ".xml|.html|.js|.json|.txt"; private String srhResourceFileExt = ".xml|.html|.js|.json|.txt";
private int searchResultsPerPage = 50;
private boolean useAutoSearch = true; private boolean useAutoSearch = true;
private boolean keepCommonDialogOpen = false; private boolean keepCommonDialogOpen = false;
private boolean smaliAreaShowBytecode = false; private boolean smaliAreaShowBytecode = false;
...@@ -541,6 +542,14 @@ public class JadxSettings extends JadxCLIArgs { ...@@ -541,6 +542,14 @@ public class JadxSettings extends JadxCLIArgs {
srhResourceFileExt = all.trim(); srhResourceFileExt = all.trim();
} }
public int getSearchResultsPerPage() {
return searchResultsPerPage;
}
public void setSearchResultsPerPage(int searchResultsPerPage) {
this.searchResultsPerPage = searchResultsPerPage;
}
public boolean isUseAutoSearch() { public boolean isUseAutoSearch() {
return useAutoSearch; return useAutoSearch;
} }
......
...@@ -45,10 +45,6 @@ import javax.swing.SpinnerNumberModel; ...@@ -45,10 +45,6 @@ import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.WindowConstants; import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -676,48 +672,26 @@ public class JadxSettingsWindow extends JDialog { ...@@ -676,48 +672,26 @@ public class JadxSettingsWindow extends JDialog {
} }
private SettingsGroup makeSearchResGroup() { private SettingsGroup makeSearchResGroup() {
SettingsGroup group = new SettingsGroup(NLS.str("preferences.search_res_title")); JSpinner resultsPerPage = new JSpinner(
int prevSize = settings.getSrhResourceSkipSize(); new SpinnerNumberModel(settings.getSearchResultsPerPage(), 0, Integer.MAX_VALUE, 1));
String prevExts = settings.getSrhResourceFileExt(); resultsPerPage.addChangeListener(ev -> settings.setSearchResultsPerPage((Integer) resultsPerPage.getValue()));
SpinnerNumberModel sizeLimitModel = new SpinnerNumberModel(prevSize,
0, Integer.MAX_VALUE, 1);
JSpinner spinner = new JSpinner(sizeLimitModel);
JTextField fileExtField = new JTextField();
group.addRow(NLS.str("preferences.res_skip_file"), spinner);
group.addRow(NLS.str("preferences.res_file_ext"), fileExtField);
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
int size = (Integer) spinner.getValue();
settings.setSrhResourceSkipSize(size);
}
});
fileExtField.getDocument().addDocumentListener(new DocumentListener() {
private void update() {
String ext = fileExtField.getText();
settings.setSrhResourceFileExt(ext);
}
@Override
public void insertUpdate(DocumentEvent e) {
update();
}
@Override JSpinner sizeLimit = new JSpinner(
public void removeUpdate(DocumentEvent e) { new SpinnerNumberModel(settings.getSrhResourceSkipSize(), 0, Integer.MAX_VALUE, 1));
update(); sizeLimit.addChangeListener(ev -> settings.setSrhResourceSkipSize((Integer) sizeLimit.getValue()));
}
@Override JTextField fileExtField = new JTextField();
public void changedUpdate(DocumentEvent e) { fileExtField.getDocument().addDocumentListener(new DocumentUpdateListener((ev) -> {
update(); String ext = fileExtField.getText();
} settings.setSrhResourceFileExt(ext);
}); }));
fileExtField.setText(prevExts); fileExtField.setText(settings.getSrhResourceFileExt());
return group; SettingsGroup searchGroup = new SettingsGroup(NLS.str("preferences.search_group_title"));
searchGroup.addRow(NLS.str("preferences.search_results_per_page"), resultsPerPage);
searchGroup.addRow(NLS.str("preferences.res_skip_file"), sizeLimit);
searchGroup.addRow(NLS.str("preferences.res_file_ext"), fileExtField);
return searchGroup;
} }
private void needReload() { private void needReload() {
......
...@@ -409,7 +409,7 @@ public class SearchDialog extends CommonSearchDialog { ...@@ -409,7 +409,7 @@ public class SearchDialog extends CommonSearchDialog {
updateTableHighlight(); updateTableHighlight();
prepareForSearch(); prepareForSearch();
}); });
this.searchTask.setResultsLimit(50); this.searchTask.setResultsLimit(mainWindow.getSettings().getSearchResultsPerPage());
this.searchTask.setProgressListener(this::updateProgress); this.searchTask.setProgressListener(this::updateProgress);
this.searchTask.fetchResults(); this.searchTask.fetchResults();
LOG.debug("Total search items count estimation: {}", this.searchTask.getTaskProgress().total()); LOG.debug("Total search items count estimation: {}", this.searchTask.getTaskProgress().total());
......
...@@ -194,7 +194,8 @@ preferences.rename=Umbenennen ...@@ -194,7 +194,8 @@ preferences.rename=Umbenennen
preferences.rename_case=System unterscheidet zwischen Groß/Kleinschreibung preferences.rename_case=System unterscheidet zwischen Groß/Kleinschreibung
preferences.rename_valid=Ist eine gültige Kennung preferences.rename_valid=Ist eine gültige Kennung
preferences.rename_printable=Ist druckbar preferences.rename_printable=Ist druckbar
preferences.search_res_title=Ressourcen durchsuchen preferences.search_group_title=Ressourcen durchsuchen
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Dateierweiterungen (z.B. .xml|.html), * bedeutet alle preferences.res_file_ext=Dateierweiterungen (z.B. .xml|.html), * bedeutet alle
preferences.res_skip_file=Dateien überspringen (MB) preferences.res_skip_file=Dateien überspringen (MB)
......
...@@ -194,9 +194,10 @@ preferences.rename=Rename identifiers ...@@ -194,9 +194,10 @@ preferences.rename=Rename identifiers
preferences.rename_case=To fix case sensitivity issues preferences.rename_case=To fix case sensitivity issues
preferences.rename_valid=To make them valid preferences.rename_valid=To make them valid
preferences.rename_printable=To make printable preferences.rename_printable=To make printable
preferences.search_res_title=Search Resource preferences.search_group_title=Search
preferences.res_file_ext=File Extensions (e.g. .xml|.html), * means all preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_skip_file=Skip files exceed (MB) preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
preferences.res_skip_file=Skip resources files if larger (MB)
msg.open_file=Please open file msg.open_file=Please open file
msg.saving_sources=Saving sources msg.saving_sources=Saving sources
......
...@@ -194,9 +194,10 @@ preferences.reset_title=Reestablecer preferencias ...@@ -194,9 +194,10 @@ preferences.reset_title=Reestablecer preferencias
#preferences.rename_case= #preferences.rename_case=
#preferences.rename_valid= #preferences.rename_valid=
#preferences.rename_printable= #preferences.rename_printable=
#preferences.search_res_title= #preferences.search_group_title=Search
#preferences.res_file_ext= #preferences.search_results_per_page=Results per page (0 - no limit)
#preferences.res_skip_file= #preferences.res_file_ext=Resource files extensions ('xml|html', * for all)
#preferences.res_skip_file=Skip resources files if larger (MB)
msg.open_file=Por favor, abra un archivo msg.open_file=Por favor, abra un archivo
msg.saving_sources=Guardando fuente msg.saving_sources=Guardando fuente
......
...@@ -194,7 +194,8 @@ preferences.rename=이름 바꾸기 ...@@ -194,7 +194,8 @@ preferences.rename=이름 바꾸기
preferences.rename_case=시스템 대소문자 구분 preferences.rename_case=시스템 대소문자 구분
preferences.rename_valid=유효한 식별자로 바꾸기 preferences.rename_valid=유효한 식별자로 바꾸기
preferences.rename_printable=출력 가능하게 바꾸기 preferences.rename_printable=출력 가능하게 바꾸기
preferences.search_res_title=리소스 검색 preferences.search_group_title=리소스 검색
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=파일 확장자 (예: .xml|.html) (* 은 전체를 의미) preferences.res_file_ext=파일 확장자 (예: .xml|.html) (* 은 전체를 의미)
preferences.res_skip_file=이 옵션보다 큰 파일 건너 뛰기 (MB) preferences.res_skip_file=이 옵션보다 큰 파일 건너 뛰기 (MB)
......
...@@ -194,7 +194,8 @@ preferences.rename=Renomear identificadores ...@@ -194,7 +194,8 @@ preferences.rename=Renomear identificadores
preferences.rename_case=Corrigir problemas de capitalização (case sensitivity) preferences.rename_case=Corrigir problemas de capitalização (case sensitivity)
preferences.rename_valid=Deixá-las válidas preferences.rename_valid=Deixá-las válidas
preferences.rename_printable=Deixá-las imprimíveis (printable) preferences.rename_printable=Deixá-las imprimíveis (printable)
preferences.search_res_title=Buscar recursos preferences.search_group_title=Buscar recursos
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=Extensões de arquivos (ex: .xml|.html), * significa todas preferences.res_file_ext=Extensões de arquivos (ex: .xml|.html), * significa todas
preferences.res_skip_file=Pular arquivos excedidos preferences.res_skip_file=Pular arquivos excedidos
......
...@@ -194,7 +194,8 @@ preferences.rename=重命名标识符 ...@@ -194,7 +194,8 @@ preferences.rename=重命名标识符
preferences.rename_case=需要标识符能区分大小写 preferences.rename_case=需要标识符能区分大小写
preferences.rename_valid=需要标识符能符合规范 preferences.rename_valid=需要标识符能符合规范
preferences.rename_printable=需要标识符可正常显示 preferences.rename_printable=需要标识符可正常显示
preferences.search_res_title=搜索资源 preferences.search_group_title=搜索资源
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=文件扩展名 (e.g. .xml|.html),* 表示所有 preferences.res_file_ext=文件扩展名 (e.g. .xml|.html),* 表示所有
preferences.res_skip_file=跳过文件大小(MB) preferences.res_skip_file=跳过文件大小(MB)
......
...@@ -194,7 +194,8 @@ preferences.rename=重新命名識別碼 ...@@ -194,7 +194,8 @@ preferences.rename=重新命名識別碼
preferences.rename_case=以修復區分大小寫問題 preferences.rename_case=以修復區分大小寫問題
preferences.rename_valid=以使其有效 preferences.rename_valid=以使其有效
preferences.rename_printable=以使其可列印 preferences.rename_printable=以使其可列印
preferences.search_res_title=搜尋資源 preferences.search_group_title=搜尋資源
#preferences.search_results_per_page=Results per page (0 - no limit)
preferences.res_file_ext=副檔名 (e.g. .xml|.html), * 表示全部 preferences.res_file_ext=副檔名 (e.g. .xml|.html), * 表示全部
preferences.res_skip_file=略過大於此值的檔案 (MB) preferences.res_skip_file=略過大於此值的檔案 (MB)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册