make it easier to disable muclumbus in Config
This commit is contained in:
parent
716c804353
commit
ab0ea7096e
|
@ -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<String, List<Room>> 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<Room> 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<MuclumbusService.Rooms> call = muclumbusService.getRooms(1);
|
||||
try {
|
||||
call.enqueue(new Callback<MuclumbusService.Rooms>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<MuclumbusService.Rooms> call, @NonNull Response<MuclumbusService.Rooms> 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<MuclumbusService.Rooms> 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<MuclumbusService.Rooms> call = muclumbusService.getRooms(1);
|
||||
call.enqueue(
|
||||
new Callback<MuclumbusService.Rooms>() {
|
||||
@Override
|
||||
public void onResponse(
|
||||
@NonNull Call<MuclumbusService.Rooms> call,
|
||||
@NonNull Response<MuclumbusService.Rooms> 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<MuclumbusService.Rooms> 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<MuclumbusService.SearchResult> 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<MuclumbusService.SearchResult> searchResultCall =
|
||||
muclumbusService.search(searchRequest);
|
||||
searchResultCall.enqueue(
|
||||
new Callback<MuclumbusService.SearchResult>() {
|
||||
@Override
|
||||
public void onResponse(
|
||||
@NonNull Call<MuclumbusService.SearchResult> call,
|
||||
@NonNull Response<MuclumbusService.SearchResult> 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<MuclumbusService.SearchResult>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<MuclumbusService.SearchResult> call, @NonNull Response<MuclumbusService.SearchResult> 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<MuclumbusService.SearchResult> 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<MuclumbusService.SearchResult> 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<Jid, Account> 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<Jid, Account> 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<Jid> 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<Jid> 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<Room> rooms, String query, OnChannelSearchResultsFound listener) {
|
||||
private void finishDiscoSearch(
|
||||
List<Room> 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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 =
|
||||
|
|
Loading…
Reference in a new issue