0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-19 20:02:16 +02:00

sort applied patterns

This commit is contained in:
TrianguloY 2024-05-12 16:30:22 +02:00
parent 143ddfb375
commit 58e6b2ad15
2 changed files with 53 additions and 36 deletions

View File

@ -128,9 +128,6 @@ class PatternDialog extends AModuleDialog {
// get regex (must exists)
if (!data.has("regex")) continue;
// applied previously?
message.applied = urlData.getData(APPLIED + pattern) != null;
// encode if required
if (data.optBoolean("encode")) {
url = URLEncoder.encode(url);
@ -156,9 +153,8 @@ class PatternDialog extends AModuleDialog {
var replacements = data.opt("replacement");
if (replacements != null) {
// data exists
if (replacements instanceof JSONArray) {
if (replacements instanceof JSONArray replacementsArray) {
// array, get random
var replacementsArray = (JSONArray) replacements;
replacement = replacementsArray.getString(new Random().nextInt(replacementsArray.length()));
} else {
// single data, get that one
@ -177,14 +173,14 @@ class PatternDialog extends AModuleDialog {
// automatic? apply
if (data.optBoolean("automatic")) {
if (setNewUrl.apply(new UrlData(message.newUrl).putData(APPLIED + pattern, APPLIED))) return;
if (setNewUrl.apply(new UrlData(message.newUrl).putData(APPLIED + pattern, pattern))) return;
}
}
}
// add
if (message.applied || message.matches) messages.add(message);
if (message.matches) messages.add(message);
} catch (Exception e) {
// invalid pattern? ignore
@ -197,22 +193,32 @@ class PatternDialog extends AModuleDialog {
public void onDisplayUrl(UrlData urlData) {
// visualize
box.removeAllViews();
if (messages.isEmpty()) {
// no messages, all good
// add applied + matching
for (var entry : urlData.getDataByPrefix(APPLIED)) {
addMessage(true, new Message(entry));
}
for (var message : messages) {
addMessage(false, message);
}
// set visibility
if (box.getChildCount() == 0) {
txt_noPatterns.setVisibility(View.VISIBLE);
setVisibility(false);
} else {
// messages to show, set them
txt_noPatterns.setVisibility(View.GONE);
setVisibility(true);
}
}
for (Message message : messages) {
// either matches and/or applied is true
/** Creates a new button for an applied/matching pattern */
private void addMessage(boolean applied, Message message) {
View row = Inflater.inflate(R.layout.button_text, box);
// text
TextView text = row.findViewById(R.id.text);
text.setText(message.applied
text.setText(applied
? getActivity().getString(R.string.mPttrn_fixed, message.pattern)
: message.pattern
);
@ -222,9 +228,7 @@ class PatternDialog extends AModuleDialog {
Button fix = row.findViewById(R.id.button);
fix.setText(R.string.mPttrn_fix);
fix.setEnabled(message.newUrl != null);
if (message.newUrl != null) fix.setOnClickListener(v -> setUrl(new UrlData(message.newUrl).putData(APPLIED + message.pattern, APPLIED)));
}
}
if (message.newUrl != null) fix.setOnClickListener(v -> setUrl(new UrlData(message.newUrl).putData(APPLIED + message.pattern, message.pattern)));
}
/**
@ -232,9 +236,8 @@ class PatternDialog extends AModuleDialog {
*/
private static class Message {
final String pattern;
boolean applied;
public boolean matches;
String newUrl;
public boolean matches = false;
String newUrl = null;
public Message(String pattern) {
this.pattern = pattern;

View File

@ -2,8 +2,9 @@ package com.trianguloy.urlchecker.url;
import com.trianguloy.urlchecker.modules.AModuleDialog;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/**
* Manages an url and extra data associated with it
@ -58,7 +59,7 @@ public class UrlData {
// ------------------- extra data -------------------
private final Map<String, String> extraData = new HashMap<>();
private final LinkedHashMap<String, String> extraData = new LinkedHashMap<>(); // keeps order
/**
* saves a key-value data, will be kept with automatic updates (but not with manual ones)
@ -75,11 +76,24 @@ public class UrlData {
return extraData.get(key);
}
/** Returns all entries with a given prefix, in insertion order */
public List<String> getDataByPrefix(String prefix) {
var entries = new ArrayList<String>();
for (var entry : extraData.entrySet()) {
if (entry.getKey().startsWith(prefix)) entries.add(entry.getValue());
}
return entries;
}
/**
* adds all data from the parameter into this object
* adds all data from the parameter into this object. Keeps insertion order [...urlData.extraData,...this.extraData]
*/
public void mergeData(UrlData urlData) {
// there is no putAllFirst
var thisExtraData = new LinkedHashMap<>(extraData);
extraData.clear();
extraData.putAll(urlData.extraData);
extraData.putAll(thisExtraData);
}
@Override