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