@@ -231,6 +231,101 @@ public fun CreateDeleteAllUnpinnedMessagesAlert(
231231 }
232232}
233233
234+ @JvmStatic
235+ public fun CreateDeleteAllYourMessagesInAllTopicsAlert (
236+ currentAccount : Int ,
237+ dialogId : Long ,
238+ context : Context ) {
239+
240+ val create = { text: String , callback: () -> Unit ->
241+ val builder = AlertDialog .Builder (context);
242+ builder.setTitle(LocaleController .getString(
243+ " DeleteAllYourMessages" ,
244+ R .string.DeleteAllYourMessages ));
245+ builder.setMessage(AndroidUtilities .replaceTags(text));
246+
247+ builder.setPositiveButton(
248+ LocaleController .getString(" OK" , R .string.OK ),
249+ { _: DialogInterface ? , _: Int -> callback(); });
250+ builder.setNegativeButton(
251+ LocaleController .getString(" Cancel" , R .string.Cancel ),
252+ null );
253+ val dialog = builder.show();
254+ val button = dialog.getButton(DialogInterface .BUTTON_POSITIVE ) as TextView ;
255+ button.setTextColor(Theme .getColor(Theme .key_text_RedBold));
256+ };
257+
258+ val messagesController = AccountInstance .getInstance(currentAccount).messagesController;
259+ val topicsController = AccountInstance .getInstance(currentAccount).topicsController;
260+ val meId = UserConfig .getInstance(UserConfig .selectedAccount).clientUserId;
261+ val chatId = - dialogId;
262+
263+ val deleteFor = { to: Long , found: ArrayList <TLRPC .Message > ->
264+ val messages: java.util.ArrayList <Int > = ArrayList (found.map { it.id });
265+ AndroidUtilities .runOnUIThread {
266+ messagesController.deleteMessages(
267+ messages,
268+ null ,
269+ null ,
270+ to,
271+ 0 ,
272+ true ,
273+ 0 );
274+ };
275+ };
276+
277+ create(
278+ LocaleController .getString(
279+ " DeleteAllYourMessagesInfo" ,
280+ R .string.DeleteAllYourMessagesInfo ) + " \n\n " +
281+ " This will delete your messages in ALL topics of this group."
282+ ) {
283+ create(LocaleController .getString(" ReallySure" , R .string.ReallySure )) {
284+ val topics = topicsController.getTopics(chatId);
285+ val mePeer = messagesController.getInputPeer(meId);
286+ val dialogPeer = messagesController.getInputPeer(dialogId);
287+
288+ if (topics != null && topics.isNotEmpty()) {
289+ // Delete messages in each topic
290+ for (topic in topics) {
291+ // Use the main dialog peer but search within specific topic
292+ ForkApi .SearchAllMessages (
293+ currentAccount,
294+ dialogPeer,
295+ mePeer,
296+ { found: ArrayList <TLRPC .Message > ->
297+ // Filter messages that belong to this topic
298+ val topicMessages = found.filter { message ->
299+ val topicId = if (message.reply_to != null && message.reply_to.reply_to_top_id != 0 ) {
300+ message.reply_to.reply_to_top_id
301+ } else if (message.reply_to != null && message.reply_to.reply_to_msg_id != 0 ) {
302+ message.reply_to.reply_to_msg_id
303+ } else {
304+ message.id
305+ }
306+ topicId == topic.id
307+ }
308+ if (topicMessages.isNotEmpty()) {
309+ deleteFor(dialogId, ArrayList (topicMessages))
310+ }
311+ },
312+ {}
313+ );
314+ }
315+ } else {
316+ // Fallback to main dialog if no topics
317+ ForkApi .SearchAllMessages (
318+ currentAccount,
319+ dialogPeer,
320+ mePeer,
321+ { found: ArrayList <TLRPC .Message > -> deleteFor(dialogId, found); },
322+ {}
323+ );
324+ }
325+ }
326+ }
327+ }
328+
234329@JvmStatic
235330public fun CreateFieldAlert (
236331 context : Context ,
0 commit comments