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:
parent
143ddfb375
commit
58e6b2ad15
@ -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,44 +193,51 @@ 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
|
||||
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
|
||||
*/
|
||||
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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user