0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-20 04:12:14 +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 // fire updates loop
main_loop: main_loop:
while (updating < MAX_UPDATES) { while (true) {
updating++;
// test and mark looping times
if (urlData.disableUpdates) updating = MAX_UPDATES;
else updating++;
// first notify modules // first notify modules
for (var module : modules.keySet()) { for (var module : modules.keySet()) {
@ -99,11 +96,23 @@ public class MainDialog extends Activity {
// skip own if required // skip own if required
if (!urlData.triggerOwn && module == urlData.trigger) continue; if (!urlData.triggerOwn && module == urlData.trigger) continue;
try { try {
var modifiedUrlData = module.onModifyUrl(urlData); var modifiedUrlData = new UrlData[]{null};
if (modifiedUrlData != 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 // modified, restart
modifiedUrlData.mergeData(urlData); modifiedUrlData[0].mergeData(urlData);
urlData = modifiedUrlData; urlData = modifiedUrlData[0];
continue main_loop; continue main_loop;
} }
} catch (Exception e) { } catch (Exception e) {

View File

@ -5,6 +5,7 @@ import android.app.Activity;
import com.trianguloy.urlchecker.dialogs.MainDialog; import com.trianguloy.urlchecker.dialogs.MainDialog;
import com.trianguloy.urlchecker.fragments.Fragment; import com.trianguloy.urlchecker.fragments.Fragment;
import com.trianguloy.urlchecker.url.UrlData; import com.trianguloy.urlchecker.url.UrlData;
import com.trianguloy.urlchecker.utilities.JavaUtils;
import java.util.Map; 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. * 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) { public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
return null;
} }
/** /**

View File

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

View File

@ -103,7 +103,7 @@ class PatternDialog extends AModuleDialog {
} }
@Override @Override
public UrlData onModifyUrl(UrlData urlData) { public void onModifyUrl(UrlData urlData, JavaUtils.Function<UrlData, Boolean> setNewUrl) {
// init // init
messages.clear(); messages.clear();
String url = urlData.url; String url = urlData.url;
@ -148,7 +148,7 @@ class PatternDialog extends AModuleDialog {
// automatic? apply // automatic? apply
if (data.optBoolean("automatic")) { 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(); e.printStackTrace();
} }
} }
// nothing to replace
return null;
} }
@Override @Override