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:
parent
5a942f0eaa
commit
f47c63c342
@ -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) {
|
||||
|
@ -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) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user