mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 17:27:45 +00:00
multiple deletion frontend
This commit is contained in:
parent
0097dfc0bc
commit
4837c520e3
@ -55,6 +55,8 @@ import android.widget.Toast;
|
|||||||
import android.widget.ViewSwitcher;
|
import android.widget.ViewSwitcher;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import com.annimon.stream.operator.LongArray;
|
||||||
|
import com.google.common.primitives.Longs;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.MessageDetailsActivity;
|
import org.thoughtcrime.securesms.MessageDetailsActivity;
|
||||||
@ -113,6 +115,7 @@ import java.util.Comparator;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
@ -414,7 +417,8 @@ public class ConversationFragment extends Fragment
|
|||||||
menu.findItem(R.id.menu_context_reply).setVisible(isPublicChat && selectedMessageCount == 1);
|
menu.findItem(R.id.menu_context_reply).setVisible(isPublicChat && selectedMessageCount == 1);
|
||||||
String userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(getContext());
|
String userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(getContext());
|
||||||
boolean userCanModerate = isPublicChat && LokiPublicChatAPI.Companion.isUserModerator(userHexEncodedPublicKey, publicChat.getChannel(), publicChat.getServer());
|
boolean userCanModerate = isPublicChat && LokiPublicChatAPI.Companion.isUserModerator(userHexEncodedPublicKey, publicChat.getChannel(), publicChat.getServer());
|
||||||
boolean isDeleteOptionVisible = isPublicChat && selectedMessageCount == 1 && (isSentByUser || userCanModerate);
|
// boolean isDeleteOptionVisible = isPublicChat && selectedMessageCount == 1 && (isSentByUser || userCanModerate);
|
||||||
|
boolean isDeleteOptionVisible = isPublicChat && (isSentByUser || userCanModerate);
|
||||||
menu.findItem(R.id.menu_context_delete_message).setVisible(isDeleteOptionVisible);
|
menu.findItem(R.id.menu_context_delete_message).setVisible(isDeleteOptionVisible);
|
||||||
} else {
|
} else {
|
||||||
menu.findItem(R.id.menu_context_copy_public_key).setVisible(false);
|
menu.findItem(R.id.menu_context_copy_public_key).setVisible(false);
|
||||||
@ -520,53 +524,97 @@ public class ConversationFragment extends Fragment
|
|||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(MessageRecord... messageRecords) {
|
protected Void doInBackground(MessageRecord... messageRecords) {
|
||||||
|
ArrayList<Long> serverIDs = new ArrayList<>();
|
||||||
|
ArrayList<Long> ignoredMessages = new ArrayList<>();
|
||||||
|
ArrayList<Long> failedMessages = new ArrayList<>();
|
||||||
|
boolean isSentByUser = true;
|
||||||
|
LokiPublicChatAPI publicChatAPI = ApplicationContext.getInstance(getContext()).getLokiPublicChatAPI();
|
||||||
for (MessageRecord messageRecord : messageRecords) {
|
for (MessageRecord messageRecord : messageRecords) {
|
||||||
boolean isThreadDeleted;
|
isSentByUser = isSentByUser && messageRecord.isOutgoing();
|
||||||
|
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id);
|
||||||
if (publicChat != null) {
|
if (serverID != null) {
|
||||||
final SettableFuture<?>[] future = { new SettableFuture<Unit>() };
|
serverIDs.add(serverID);
|
||||||
|
|
||||||
LokiPublicChatAPI publicChatAPI = ApplicationContext.getInstance(getContext()).getLokiPublicChatAPI();
|
|
||||||
boolean isSentByUser = messageRecord.isOutgoing();
|
|
||||||
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id);
|
|
||||||
|
|
||||||
if (publicChatAPI != null && serverID != null) {
|
|
||||||
publicChatAPI
|
|
||||||
.deleteMessage(serverID, publicChat.getChannel(), publicChat.getServer(), isSentByUser)
|
|
||||||
.success(l -> {
|
|
||||||
@SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
|
||||||
f.set(Unit.INSTANCE);
|
|
||||||
return Unit.INSTANCE;
|
|
||||||
}).fail(e -> {
|
|
||||||
@SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
|
||||||
f.setException(e);
|
|
||||||
return Unit.INSTANCE;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
@SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
|
||||||
f.setException(new Exception("Message server ID is null."));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
@SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>)future[0];
|
|
||||||
f.get();
|
|
||||||
} catch (Exception exception) {
|
|
||||||
Log.d("Loki", "Couldn't delete message due to error: " + exception.toString() + ".");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
if (messageRecord.isMms()) {
|
ignoredMessages.add(messageRecord.getId());
|
||||||
isThreadDeleted = DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId());
|
|
||||||
} else {
|
|
||||||
isThreadDeleted = DatabaseFactory.getSmsDatabase(getActivity()).deleteMessage(messageRecord.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isThreadDeleted) {
|
|
||||||
threadId = -1;
|
|
||||||
listener.setThreadId(threadId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
long[] serverIDsArray = new long[serverIDs.size()];
|
||||||
|
for (int i=0; i < serverIDs.size(); i++) {
|
||||||
|
serverIDsArray[i] = serverIDs.get(i);
|
||||||
|
}
|
||||||
|
if (publicChat != null && publicChatAPI != null) {
|
||||||
|
publicChatAPI
|
||||||
|
.deleteMessages(serverIDsArray, publicChat.getChannel(), publicChat.getServer(), isSentByUser)
|
||||||
|
.success(l -> {
|
||||||
|
List<Long> longList = Longs.asList(l);
|
||||||
|
for (MessageRecord messageRecord : messageRecords) {
|
||||||
|
Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id);
|
||||||
|
if (longList.contains(serverID)) {
|
||||||
|
if (messageRecord.isMms()) {
|
||||||
|
DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId());
|
||||||
|
} else {
|
||||||
|
DatabaseFactory.getSmsDatabase(getActivity()).deleteMessage(messageRecord.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!ignoredMessages.contains(serverID)) {
|
||||||
|
failedMessages.add(messageRecord.getId());
|
||||||
|
Log.d("Loki", "Failed to delete message: " + messageRecord.getId() + ".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}). fail(e -> {
|
||||||
|
Log.d("Loki", "Couldn't delete message due to error: " + e.toString() + ".");
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// for (MessageRecord messageRecord : messageRecords) {
|
||||||
|
// boolean isThreadDeleted;
|
||||||
|
//
|
||||||
|
// if (publicChat != null) {
|
||||||
|
// final SettableFuture<?>[] future = { new SettableFuture<Unit>() };
|
||||||
|
//
|
||||||
|
// LokiPublicChatAPI publicChatAPI = ApplicationContext.getInstance(getContext()).getLokiPublicChatAPI();
|
||||||
|
// boolean isSentByUser = messageRecord.isOutgoing();
|
||||||
|
// Long serverID = DatabaseFactory.getLokiMessageDatabase(getContext()).getServerID(messageRecord.id);
|
||||||
|
//
|
||||||
|
// if (publicChatAPI != null && serverID != null) {
|
||||||
|
// publicChatAPI
|
||||||
|
// .deleteMessage(serverID, publicChat.getChannel(), publicChat.getServer(), isSentByUser)
|
||||||
|
// .success(l -> {
|
||||||
|
// @SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
||||||
|
// f.set(Unit.INSTANCE);
|
||||||
|
// return Unit.INSTANCE;
|
||||||
|
// }).fail(e -> {
|
||||||
|
// @SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
||||||
|
// f.setException(e);
|
||||||
|
// return Unit.INSTANCE;
|
||||||
|
// });
|
||||||
|
// } else {
|
||||||
|
// @SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>) future[0];
|
||||||
|
// f.setException(new Exception("Message server ID is null."));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// @SuppressWarnings("unchecked") SettableFuture<Unit> f = (SettableFuture<Unit>)future[0];
|
||||||
|
// f.get();
|
||||||
|
// } catch (Exception exception) {
|
||||||
|
// Log.d("Loki", "Couldn't delete message due to error: " + exception.toString() + ".");
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (messageRecord.isMms()) {
|
||||||
|
// isThreadDeleted = DatabaseFactory.getMmsDatabase(getActivity()).delete(messageRecord.getId());
|
||||||
|
// } else {
|
||||||
|
// isThreadDeleted = DatabaseFactory.getSmsDatabase(getActivity()).deleteMessage(messageRecord.getId());
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (isThreadDeleted) {
|
||||||
|
// threadId = -1;
|
||||||
|
// listener.setThreadId(threadId);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user