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) // get regex (must exists)
if (!data.has("regex")) continue; if (!data.has("regex")) continue;
// applied previously?
message.applied = urlData.getData(APPLIED + pattern) != null;
// encode if required // encode if required
if (data.optBoolean("encode")) { if (data.optBoolean("encode")) {
url = URLEncoder.encode(url); url = URLEncoder.encode(url);
@ -156,9 +153,8 @@ class PatternDialog extends AModuleDialog {
var replacements = data.opt("replacement"); var replacements = data.opt("replacement");
if (replacements != null) { if (replacements != null) {
// data exists // data exists
if (replacements instanceof JSONArray) { if (replacements instanceof JSONArray replacementsArray) {
// array, get random // array, get random
var replacementsArray = (JSONArray) replacements;
replacement = replacementsArray.getString(new Random().nextInt(replacementsArray.length())); replacement = replacementsArray.getString(new Random().nextInt(replacementsArray.length()));
} else { } else {
// single data, get that one // single data, get that one
@ -177,14 +173,14 @@ class PatternDialog extends AModuleDialog {
// automatic? apply // automatic? apply
if (data.optBoolean("automatic")) { 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 // add
if (message.applied || message.matches) messages.add(message); if (message.matches) messages.add(message);
} catch (Exception e) { } catch (Exception e) {
// invalid pattern? ignore // invalid pattern? ignore
@ -197,44 +193,51 @@ class PatternDialog extends AModuleDialog {
public void onDisplayUrl(UrlData urlData) { public void onDisplayUrl(UrlData urlData) {
// visualize // visualize
box.removeAllViews(); 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); txt_noPatterns.setVisibility(View.VISIBLE);
setVisibility(false); setVisibility(false);
} else { } else {
// messages to show, set them
txt_noPatterns.setVisibility(View.GONE); txt_noPatterns.setVisibility(View.GONE);
setVisibility(true); setVisibility(true);
for (Message message : messages) {
// either matches and/or applied is true
View row = Inflater.inflate(R.layout.button_text, box);
// text
TextView text = row.findViewById(R.id.text);
text.setText(message.applied
? getActivity().getString(R.string.mPttrn_fixed, message.pattern)
: message.pattern
);
AndroidUtils.setRoundedColor(message.matches ? R.color.warning : R.color.good, text);
// button
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)));
}
} }
} }
/** 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(applied
? getActivity().getString(R.string.mPttrn_fixed, message.pattern)
: message.pattern
);
AndroidUtils.setRoundedColor(message.matches ? R.color.warning : R.color.good, text);
// button
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, message.pattern)));
}
/** /**
* DataClass for pattern messages * DataClass for pattern messages
*/ */
private static class Message { private static class Message {
final String pattern; final String pattern;
boolean applied; public boolean matches = false;
public boolean matches; String newUrl = null;
String newUrl;
public Message(String pattern) { public Message(String pattern) {
this.pattern = pattern; this.pattern = pattern;

View File

@ -2,8 +2,9 @@ package com.trianguloy.urlchecker.url;
import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.modules.AModuleDialog;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Map; import java.util.LinkedHashMap;
import java.util.List;
/** /**
* Manages an url and extra data associated with it * Manages an url and extra data associated with it
@ -58,7 +59,7 @@ public class UrlData {
// ------------------- extra data ------------------- // ------------------- 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) * 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); 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) { public void mergeData(UrlData urlData) {
// there is no putAllFirst
var thisExtraData = new LinkedHashMap<>(extraData);
extraData.clear();
extraData.putAll(urlData.extraData); extraData.putAll(urlData.extraData);
extraData.putAll(thisExtraData);
} }
@Override @Override