From ab0ea7096e57cdcc3f1056c7f8191680017ddbfa Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 12 Oct 2022 14:47:02 +0200 Subject: [PATCH] make it easier to disable muclumbus in Config --- .../services/ChannelDiscoveryService.java | 210 +++++++++++------- .../ui/ChannelDiscoveryActivity.java | 5 + .../conversations/ui/SettingsActivity.java | 18 +- 3 files changed, 143 insertions(+), 90 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java b/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java index c46568c3e..2f9553bfc 100644 --- a/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java +++ b/src/main/java/eu/siacs/conversations/services/ChannelDiscoveryService.java @@ -4,6 +4,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import com.google.common.base.Strings; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -39,7 +40,6 @@ public class ChannelDiscoveryService { private final XmppConnectionService service; - private MuclumbusService muclumbusService; private final Cache> cache; @@ -50,16 +50,21 @@ public class ChannelDiscoveryService { } void initializeMuclumbusService() { + if (Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) { + this.muclumbusService = null; + return; + } final OkHttpClient.Builder builder = HttpConnectionManager.OK_HTTP_CLIENT.newBuilder(); if (service.useTorToConnect()) { builder.proxy(HttpConnectionManager.getProxy()); } - Retrofit retrofit = new Retrofit.Builder() - .client(builder.build()) - .baseUrl(Config.CHANNEL_DISCOVERY) - .addConverterFactory(GsonConverterFactory.create()) - .callbackExecutor(Executors.newSingleThreadExecutor()) - .build(); + final Retrofit retrofit = + new Retrofit.Builder() + .client(builder.build()) + .baseUrl(Config.CHANNEL_DISCOVERY) + .addConverterFactory(GsonConverterFactory.create()) + .callbackExecutor(Executors.newSingleThreadExecutor()) + .build(); this.muclumbusService = retrofit.create(MuclumbusService.class); } @@ -67,7 +72,10 @@ public class ChannelDiscoveryService { cache.invalidateAll(); } - void discover(@NonNull final String query, Method method, OnChannelSearchResultsFound onChannelSearchResultsFound) { + void discover( + @NonNull final String query, + Method method, + OnChannelSearchResultsFound onChannelSearchResultsFound) { final List result = cache.getIfPresent(key(method, query)); if (result != null) { onChannelSearchResultsFound.onChannelSearchResultsFound(result); @@ -84,59 +92,82 @@ public class ChannelDiscoveryService { } } - private void discoverChannelsJabberNetwork(OnChannelSearchResultsFound listener) { - Call call = muclumbusService.getRooms(1); - try { - call.enqueue(new Callback() { - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - final MuclumbusService.Rooms body = response.body(); - if (body == null) { - listener.onChannelSearchResultsFound(Collections.emptyList()); - logError(response); - return; - } - cache.put(key(Method.JABBER_NETWORK, ""), body.items); - listener.onChannelSearchResultsFound(body.items); - } - - @Override - public void onFailure(@NonNull Call call, @NonNull Throwable throwable) { - Log.d(Config.LOGTAG, "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, throwable); - listener.onChannelSearchResultsFound(Collections.emptyList()); - } - }); - } catch (Exception e) { - e.printStackTrace(); + private void discoverChannelsJabberNetwork(final OnChannelSearchResultsFound listener) { + if (muclumbusService == null) { + listener.onChannelSearchResultsFound(Collections.emptyList()); + return; } + final Call call = muclumbusService.getRooms(1); + call.enqueue( + new Callback() { + @Override + public void onResponse( + @NonNull Call call, + @NonNull Response response) { + final MuclumbusService.Rooms body = response.body(); + if (body == null) { + listener.onChannelSearchResultsFound(Collections.emptyList()); + logError(response); + return; + } + cache.put(key(Method.JABBER_NETWORK, ""), body.items); + listener.onChannelSearchResultsFound(body.items); + } + + @Override + public void onFailure( + @NonNull Call call, + @NonNull Throwable throwable) { + Log.d( + Config.LOGTAG, + "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, + throwable); + listener.onChannelSearchResultsFound(Collections.emptyList()); + } + }); } - private void discoverChannelsJabberNetwork(final String query, OnChannelSearchResultsFound listener) { - MuclumbusService.SearchRequest searchRequest = new MuclumbusService.SearchRequest(query); - Call searchResultCall = muclumbusService.search(searchRequest); + private void discoverChannelsJabberNetwork( + final String query, final OnChannelSearchResultsFound listener) { + if (muclumbusService == null) { + listener.onChannelSearchResultsFound(Collections.emptyList()); + return; + } + final MuclumbusService.SearchRequest searchRequest = + new MuclumbusService.SearchRequest(query); + final Call searchResultCall = + muclumbusService.search(searchRequest); + searchResultCall.enqueue( + new Callback() { + @Override + public void onResponse( + @NonNull Call call, + @NonNull Response response) { + final MuclumbusService.SearchResult body = response.body(); + if (body == null) { + listener.onChannelSearchResultsFound(Collections.emptyList()); + logError(response); + return; + } + cache.put(key(Method.JABBER_NETWORK, query), body.result.items); + listener.onChannelSearchResultsFound(body.result.items); + } - searchResultCall.enqueue(new Callback() { - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) { - final MuclumbusService.SearchResult body = response.body(); - if (body == null) { - listener.onChannelSearchResultsFound(Collections.emptyList()); - logError(response); - return; - } - cache.put(key(Method.JABBER_NETWORK, query), body.result.items); - listener.onChannelSearchResultsFound(body.result.items); - } - - @Override - public void onFailure(@NonNull Call call, @NonNull Throwable throwable) { - Log.d(Config.LOGTAG, "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, throwable); - listener.onChannelSearchResultsFound(Collections.emptyList()); - } - }); + @Override + public void onFailure( + @NonNull Call call, + @NonNull Throwable throwable) { + Log.d( + Config.LOGTAG, + "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, + throwable); + listener.onChannelSearchResultsFound(Collections.emptyList()); + } + }); } - private void discoverChannelsLocalServers(final String query, final OnChannelSearchResultsFound listener) { + private void discoverChannelsLocalServers( + final String query, final OnChannelSearchResultsFound listener) { final Map localMucService = getLocalMucServices(); Log.d(Config.LOGTAG, "checking with " + localMucService.size() + " muc services"); if (localMucService.size() == 0) { @@ -156,38 +187,49 @@ public class ChannelDiscoveryService { for (Map.Entry entry : localMucService.entrySet()) { IqPacket itemsRequest = service.getIqGenerator().queryDiscoItems(entry.getKey()); queriesInFlight.incrementAndGet(); - service.sendIqPacket(entry.getValue(), itemsRequest, (account, itemsResponse) -> { - if (itemsResponse.getType() == IqPacket.TYPE.RESULT) { - final List items = IqParser.items(itemsResponse); - for (Jid item : items) { - IqPacket infoRequest = service.getIqGenerator().queryDiscoInfo(item); - queriesInFlight.incrementAndGet(); - service.sendIqPacket(account, infoRequest, new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(Account account, IqPacket infoResponse) { - if (infoResponse.getType() == IqPacket.TYPE.RESULT) { - final Room room = IqParser.parseRoom(infoResponse); - if (room != null) { - rooms.add(room); - } - if (queriesInFlight.decrementAndGet() <= 0) { - finishDiscoSearch(rooms, query, listener); - } - } else { - queriesInFlight.decrementAndGet(); - } + service.sendIqPacket( + entry.getValue(), + itemsRequest, + (account, itemsResponse) -> { + if (itemsResponse.getType() == IqPacket.TYPE.RESULT) { + final List items = IqParser.items(itemsResponse); + for (Jid item : items) { + IqPacket infoRequest = + service.getIqGenerator().queryDiscoInfo(item); + queriesInFlight.incrementAndGet(); + service.sendIqPacket( + account, + infoRequest, + new OnIqPacketReceived() { + @Override + public void onIqPacketReceived( + Account account, IqPacket infoResponse) { + if (infoResponse.getType() + == IqPacket.TYPE.RESULT) { + final Room room = + IqParser.parseRoom(infoResponse); + if (room != null) { + rooms.add(room); + } + if (queriesInFlight.decrementAndGet() <= 0) { + finishDiscoSearch(rooms, query, listener); + } + } else { + queriesInFlight.decrementAndGet(); + } + } + }); } - }); - } - } - if (queriesInFlight.decrementAndGet() <= 0) { - finishDiscoSearch(rooms, query, listener); - } - }); + } + if (queriesInFlight.decrementAndGet() <= 0) { + finishDiscoSearch(rooms, query, listener); + } + }); } } - private void finishDiscoSearch(List rooms, String query, OnChannelSearchResultsFound listener) { + private void finishDiscoSearch( + List rooms, String query, OnChannelSearchResultsFound listener) { Collections.sort(rooms); cache.put(key(Method.LOCAL_SERVER, ""), rooms); if (query.isEmpty()) { @@ -241,7 +283,7 @@ public class ChannelDiscoveryService { try { Log.d(Config.LOGTAG, "error body=" + errorBody.string()); } catch (IOException e) { - //ignored + // ignored } } diff --git a/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java b/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java index 4687e5f63..5cf9417e9 100644 --- a/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ChannelDiscoveryActivity.java @@ -20,6 +20,8 @@ import android.widget.Toast; import androidx.databinding.DataBindingUtil; +import com.google.common.base.Strings; + import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -90,6 +92,9 @@ public class ChannelDiscoveryActivity extends XmppActivity implements MenuItem.O } private static ChannelDiscoveryService.Method getMethod(final Context c) { + if ( Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) { + return ChannelDiscoveryService.Method.LOCAL_SERVER; + } if (QuickConversationsService.isQuicksy()) { return ChannelDiscoveryService.Method.JABBER_NETWORK; } diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index 5e21e0b26..07c8a55db 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -23,6 +23,8 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; +import com.google.common.base.Strings; + import java.io.File; import java.security.KeyStoreException; import java.util.ArrayList; @@ -96,20 +98,24 @@ public class SettingsActivity extends XmppActivity implements OnSharedPreference changeOmemoSettingSummary(); - if (QuickConversationsService.isQuicksy()) { - final PreferenceCategory connectionOptions = - (PreferenceCategory) mSettingsFragment.findPreference("connection_options"); + if (QuickConversationsService.isQuicksy() + || Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) { final PreferenceCategory groupChats = (PreferenceCategory) mSettingsFragment.findPreference("group_chats"); final Preference channelDiscoveryMethod = mSettingsFragment.findPreference("channel_discovery_method"); + if (groupChats != null && channelDiscoveryMethod != null) { + groupChats.removePreference(channelDiscoveryMethod); + } + } + + if (QuickConversationsService.isQuicksy()) { + final PreferenceCategory connectionOptions = + (PreferenceCategory) mSettingsFragment.findPreference("connection_options"); PreferenceScreen expert = (PreferenceScreen) mSettingsFragment.findPreference("expert"); if (connectionOptions != null) { expert.removePreference(connectionOptions); } - if (groupChats != null && channelDiscoveryMethod != null) { - groupChats.removePreference(channelDiscoveryMethod); - } } PreferenceScreen mainPreferenceScreen =