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

use callback in onModifyUrl to allow continuing

fixes infinite loop
fixes disableUpdate not working

fixes #208
This commit is contained in:
TrianguloY 2023-03-23 16:21:38 +01:00
parent 5a942f0eaa
commit f47c63c342
4 changed files with 28 additions and 20 deletions

View File

@ -76,11 +76,8 @@ public class MainDialog extends Activity {
// fire updates loop
main_loop:
while (updating < MAX_UPDATES) {
// test and mark looping times
if (urlData.disableUpdates) updating = MAX_UPDATES;
else updating++;
while (true) {
updating++;
// first notify modules
for (var module : modules.keySet()) {
@ -99,11 +96,23 @@ public class MainDialog extends Activity {
// skip own if required
if (!urlData.triggerOwn && module == urlData.trigger) continue;
try {
var modifiedUrlData = module.onModifyUrl(urlData);
if (modifiedUrlData != null) {
var modifiedUrlData = new UrlData[]{null};
module.onModifyUrl(urlData, newUrl -> {
// callback to replace the url. Alternative to throwing an exception and catch it here.
// can't use a return value directly because the caller needs to know if it should continue or not.
if (!urlData.disableUpdates && updating < MAX_UPDATES) {
// new url accepted
modifiedUrlData[0] = newUrl;
return true;
} else {
// a new url is not accepted
return false;
}
});
if (modifiedUrlData[0] != null) {
// modified, restart
modifiedUrlData.mergeData(urlData);
urlData = modifiedUrlData;
modifiedUrlData[0].mergeData(urlData);
urlData = modifiedUrlData[0];
continue main_loop;
}
} catch (Exception e) {

View File

@ -5,6 +5,7 @@ import android.app.Activity;
import com.trianguloy.urlchecker.dialogs.MainDialog;
import com.trianguloy.urlchecker.fragments.Fragment;
import com.trianguloy.urlchecker.url.UrlData;
import com.trianguloy.urlchecker.utilities.JavaUtils;
import java.util.Map;
@ -33,10 +34,10 @@ public abstract class AModuleDialog implements Fragment {
/**
* Analyze and optionally modify an url. This may not be called for new modules.
* Return the new url if needed, null for no changes.
* To modify the url call the setNewUrl callback. It will return true iff you can stop processing changes (false if you need to continue).
* > if(setNewUrl.apply(new UrlData(""))) return;
*/
public UrlData onModifyUrl(UrlData urlData) {
return null;
public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
}
/**

View File

@ -16,6 +16,7 @@ import com.trianguloy.urlchecker.modules.companions.ClearUrlCatalog;
import com.trianguloy.urlchecker.url.UrlData;
import com.trianguloy.urlchecker.utilities.AndroidUtils;
import com.trianguloy.urlchecker.utilities.GenericPref;
import com.trianguloy.urlchecker.utilities.JavaUtils;
import org.json.JSONArray;
import org.json.JSONException;
@ -135,7 +136,7 @@ class ClearUrlDialog extends AModuleDialog {
}
@Override
public UrlData onModifyUrl(UrlData urlData) {
public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
cleared = urlData.url;
data = new Data();
@ -283,7 +284,8 @@ class ClearUrlDialog extends AModuleDialog {
// url changed
if (!cleared.equals(urlData.url)) {
// apply automatically if required
if (auto.get()) return new UrlData(cleared).putData(CLEARED, CLEARED);
if (auto.get())
if (setNewUrl.apply(new UrlData(cleared).putData(CLEARED, CLEARED))) return;
// enable button
data.enabled = true;
@ -291,7 +293,6 @@ class ClearUrlDialog extends AModuleDialog {
data.info += "\n\n -> " + cleared;
}
}
return null;
}
@Override

View File

@ -103,7 +103,7 @@ class PatternDialog extends AModuleDialog {
}
@Override
public UrlData onModifyUrl(UrlData urlData) {
public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
// init
messages.clear();
String url = urlData.url;
@ -148,7 +148,7 @@ class PatternDialog extends AModuleDialog {
// automatic? apply
if (data.optBoolean("automatic")) {
return new UrlData(message.newUrl).putData(APPLIED + pattern, APPLIED);
if (setNewUrl.apply(new UrlData(message.newUrl).putData(APPLIED + pattern, APPLIED))) return;
}
}
}
@ -162,9 +162,6 @@ class PatternDialog extends AModuleDialog {
e.printStackTrace();
}
}
// nothing to replace
return null;
}
@Override