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)
|
// 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;
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user