make it easier to disable muclumbus in Config

This commit is contained in:
Daniel Gultsch 2022-10-12 14:47:02 +02:00
parent 716c804353
commit ab0ea7096e
3 changed files with 143 additions and 90 deletions

View file

@ -4,6 +4,7 @@ import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.common.base.Strings;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
@ -39,7 +40,6 @@ public class ChannelDiscoveryService {
private final XmppConnectionService service; private final XmppConnectionService service;
private MuclumbusService muclumbusService; private MuclumbusService muclumbusService;
private final Cache<String, List<Room>> cache; private final Cache<String, List<Room>> cache;
@ -50,11 +50,16 @@ public class ChannelDiscoveryService {
} }
void initializeMuclumbusService() { void initializeMuclumbusService() {
if (Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) {
this.muclumbusService = null;
return;
}
final OkHttpClient.Builder builder = HttpConnectionManager.OK_HTTP_CLIENT.newBuilder(); final OkHttpClient.Builder builder = HttpConnectionManager.OK_HTTP_CLIENT.newBuilder();
if (service.useTorToConnect()) { if (service.useTorToConnect()) {
builder.proxy(HttpConnectionManager.getProxy()); builder.proxy(HttpConnectionManager.getProxy());
} }
Retrofit retrofit = new Retrofit.Builder() final Retrofit retrofit =
new Retrofit.Builder()
.client(builder.build()) .client(builder.build())
.baseUrl(Config.CHANNEL_DISCOVERY) .baseUrl(Config.CHANNEL_DISCOVERY)
.addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create())
@ -67,7 +72,10 @@ public class ChannelDiscoveryService {
cache.invalidateAll(); cache.invalidateAll();
} }
void discover(@NonNull final String query, Method method, OnChannelSearchResultsFound onChannelSearchResultsFound) { void discover(
@NonNull final String query,
Method method,
OnChannelSearchResultsFound onChannelSearchResultsFound) {
final List<Room> result = cache.getIfPresent(key(method, query)); final List<Room> result = cache.getIfPresent(key(method, query));
if (result != null) { if (result != null) {
onChannelSearchResultsFound.onChannelSearchResultsFound(result); onChannelSearchResultsFound.onChannelSearchResultsFound(result);
@ -84,12 +92,18 @@ public class ChannelDiscoveryService {
} }
} }
private void discoverChannelsJabberNetwork(OnChannelSearchResultsFound listener) { private void discoverChannelsJabberNetwork(final OnChannelSearchResultsFound listener) {
Call<MuclumbusService.Rooms> call = muclumbusService.getRooms(1); if (muclumbusService == null) {
try { listener.onChannelSearchResultsFound(Collections.emptyList());
call.enqueue(new Callback<MuclumbusService.Rooms>() { return;
}
final Call<MuclumbusService.Rooms> call = muclumbusService.getRooms(1);
call.enqueue(
new Callback<MuclumbusService.Rooms>() {
@Override @Override
public void onResponse(@NonNull Call<MuclumbusService.Rooms> call, @NonNull Response<MuclumbusService.Rooms> response) { public void onResponse(
@NonNull Call<MuclumbusService.Rooms> call,
@NonNull Response<MuclumbusService.Rooms> response) {
final MuclumbusService.Rooms body = response.body(); final MuclumbusService.Rooms body = response.body();
if (body == null) { if (body == null) {
listener.onChannelSearchResultsFound(Collections.emptyList()); listener.onChannelSearchResultsFound(Collections.emptyList());
@ -101,23 +115,34 @@ public class ChannelDiscoveryService {
} }
@Override @Override
public void onFailure(@NonNull Call<MuclumbusService.Rooms> call, @NonNull Throwable throwable) { public void onFailure(
Log.d(Config.LOGTAG, "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, throwable); @NonNull Call<MuclumbusService.Rooms> call,
@NonNull Throwable throwable) {
Log.d(
Config.LOGTAG,
"Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY,
throwable);
listener.onChannelSearchResultsFound(Collections.emptyList()); listener.onChannelSearchResultsFound(Collections.emptyList());
} }
}); });
} catch (Exception e) {
e.printStackTrace();
}
} }
private void discoverChannelsJabberNetwork(final String query, OnChannelSearchResultsFound listener) { private void discoverChannelsJabberNetwork(
MuclumbusService.SearchRequest searchRequest = new MuclumbusService.SearchRequest(query); final String query, final OnChannelSearchResultsFound listener) {
Call<MuclumbusService.SearchResult> searchResultCall = muclumbusService.search(searchRequest); if (muclumbusService == null) {
listener.onChannelSearchResultsFound(Collections.emptyList());
searchResultCall.enqueue(new Callback<MuclumbusService.SearchResult>() { return;
}
final MuclumbusService.SearchRequest searchRequest =
new MuclumbusService.SearchRequest(query);
final Call<MuclumbusService.SearchResult> searchResultCall =
muclumbusService.search(searchRequest);
searchResultCall.enqueue(
new Callback<MuclumbusService.SearchResult>() {
@Override @Override
public void onResponse(@NonNull Call<MuclumbusService.SearchResult> call, @NonNull Response<MuclumbusService.SearchResult> response) { public void onResponse(
@NonNull Call<MuclumbusService.SearchResult> call,
@NonNull Response<MuclumbusService.SearchResult> response) {
final MuclumbusService.SearchResult body = response.body(); final MuclumbusService.SearchResult body = response.body();
if (body == null) { if (body == null) {
listener.onChannelSearchResultsFound(Collections.emptyList()); listener.onChannelSearchResultsFound(Collections.emptyList());
@ -129,14 +154,20 @@ public class ChannelDiscoveryService {
} }
@Override @Override
public void onFailure(@NonNull Call<MuclumbusService.SearchResult> call, @NonNull Throwable throwable) { public void onFailure(
Log.d(Config.LOGTAG, "Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY, throwable); @NonNull Call<MuclumbusService.SearchResult> call,
@NonNull Throwable throwable) {
Log.d(
Config.LOGTAG,
"Unable to query muclumbus on " + Config.CHANNEL_DISCOVERY,
throwable);
listener.onChannelSearchResultsFound(Collections.emptyList()); listener.onChannelSearchResultsFound(Collections.emptyList());
} }
}); });
} }
private void discoverChannelsLocalServers(final String query, final OnChannelSearchResultsFound listener) { private void discoverChannelsLocalServers(
final String query, final OnChannelSearchResultsFound listener) {
final Map<Jid, Account> localMucService = getLocalMucServices(); final Map<Jid, Account> localMucService = getLocalMucServices();
Log.d(Config.LOGTAG, "checking with " + localMucService.size() + " muc services"); Log.d(Config.LOGTAG, "checking with " + localMucService.size() + " muc services");
if (localMucService.size() == 0) { if (localMucService.size() == 0) {
@ -156,17 +187,27 @@ public class ChannelDiscoveryService {
for (Map.Entry<Jid, Account> entry : localMucService.entrySet()) { for (Map.Entry<Jid, Account> entry : localMucService.entrySet()) {
IqPacket itemsRequest = service.getIqGenerator().queryDiscoItems(entry.getKey()); IqPacket itemsRequest = service.getIqGenerator().queryDiscoItems(entry.getKey());
queriesInFlight.incrementAndGet(); queriesInFlight.incrementAndGet();
service.sendIqPacket(entry.getValue(), itemsRequest, (account, itemsResponse) -> { service.sendIqPacket(
entry.getValue(),
itemsRequest,
(account, itemsResponse) -> {
if (itemsResponse.getType() == IqPacket.TYPE.RESULT) { if (itemsResponse.getType() == IqPacket.TYPE.RESULT) {
final List<Jid> items = IqParser.items(itemsResponse); final List<Jid> items = IqParser.items(itemsResponse);
for (Jid item : items) { for (Jid item : items) {
IqPacket infoRequest = service.getIqGenerator().queryDiscoInfo(item); IqPacket infoRequest =
service.getIqGenerator().queryDiscoInfo(item);
queriesInFlight.incrementAndGet(); queriesInFlight.incrementAndGet();
service.sendIqPacket(account, infoRequest, new OnIqPacketReceived() { service.sendIqPacket(
account,
infoRequest,
new OnIqPacketReceived() {
@Override @Override
public void onIqPacketReceived(Account account, IqPacket infoResponse) { public void onIqPacketReceived(
if (infoResponse.getType() == IqPacket.TYPE.RESULT) { Account account, IqPacket infoResponse) {
final Room room = IqParser.parseRoom(infoResponse); if (infoResponse.getType()
== IqPacket.TYPE.RESULT) {
final Room room =
IqParser.parseRoom(infoResponse);
if (room != null) { if (room != null) {
rooms.add(room); rooms.add(room);
} }
@ -187,7 +228,8 @@ public class ChannelDiscoveryService {
} }
} }
private void finishDiscoSearch(List<Room> rooms, String query, OnChannelSearchResultsFound listener) { private void finishDiscoSearch(
List<Room> rooms, String query, OnChannelSearchResultsFound listener) {
Collections.sort(rooms); Collections.sort(rooms);
cache.put(key(Method.LOCAL_SERVER, ""), rooms); cache.put(key(Method.LOCAL_SERVER, ""), rooms);
if (query.isEmpty()) { if (query.isEmpty()) {

View file

@ -20,6 +20,8 @@ import android.widget.Toast;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import com.google.common.base.Strings;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicReference; 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) { private static ChannelDiscoveryService.Method getMethod(final Context c) {
if ( Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) {
return ChannelDiscoveryService.Method.LOCAL_SERVER;
}
if (QuickConversationsService.isQuicksy()) { if (QuickConversationsService.isQuicksy()) {
return ChannelDiscoveryService.Method.JABBER_NETWORK; return ChannelDiscoveryService.Method.JABBER_NETWORK;
} }

View file

@ -23,6 +23,8 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.google.common.base.Strings;
import java.io.File; import java.io.File;
import java.security.KeyStoreException; import java.security.KeyStoreException;
import java.util.ArrayList; import java.util.ArrayList;
@ -96,20 +98,24 @@ public class SettingsActivity extends XmppActivity implements OnSharedPreference
changeOmemoSettingSummary(); changeOmemoSettingSummary();
if (QuickConversationsService.isQuicksy()) { if (QuickConversationsService.isQuicksy()
final PreferenceCategory connectionOptions = || Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY)) {
(PreferenceCategory) mSettingsFragment.findPreference("connection_options");
final PreferenceCategory groupChats = final PreferenceCategory groupChats =
(PreferenceCategory) mSettingsFragment.findPreference("group_chats"); (PreferenceCategory) mSettingsFragment.findPreference("group_chats");
final Preference channelDiscoveryMethod = final Preference channelDiscoveryMethod =
mSettingsFragment.findPreference("channel_discovery_method"); 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"); PreferenceScreen expert = (PreferenceScreen) mSettingsFragment.findPreference("expert");
if (connectionOptions != null) { if (connectionOptions != null) {
expert.removePreference(connectionOptions); expert.removePreference(connectionOptions);
} }
if (groupChats != null && channelDiscoveryMethod != null) {
groupChats.removePreference(channelDiscoveryMethod);
}
} }
PreferenceScreen mainPreferenceScreen = PreferenceScreen mainPreferenceScreen =