Skip to content

Commit

Permalink
feat: Copy Sticker Set
Browse files Browse the repository at this point in the history
  • Loading branch information
omg-xtao committed Apr 3, 2024
1 parent 400d457 commit 5c1d3fa
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
Expand Up @@ -120,6 +120,7 @@
import tw.nekomimi.nekogram.utils.ProxyUtil;
import xyz.nextalone.nagram.NaConfig;
import xyz.nextalone.nagram.helper.ExternalStickerCacheHelper;
import xyz.nextalone.nagram.helper.StickerSetHelper;

public class StickersAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate {

Expand Down Expand Up @@ -179,6 +180,7 @@ public interface StickersAlertCustomButtonDelegate {
private int menu_archive = 102;
private final int menuRefreshExternalCache = 100;
private final int menuDeleteExternalCache = 101;
private final int menu_copy_sticker_set = 103;

private TLRPC.TL_messages_stickerSet stickerSet;
private TLRPC.Document selectedSticker;
Expand Down Expand Up @@ -1021,6 +1023,7 @@ public void requestLayout() {
optionsButton.addSubItem(menuRefreshExternalCache, R.drawable.menu_views_reposts, LocaleController.getString(R.string.ExternalStickerCacheRefresh));
optionsButton.addSubItem(menuDeleteExternalCache, R.drawable.msg_delete, LocaleController.getString(R.string.ExternalStickerCacheDelete));
}
optionsButton.addSubItem(menu_copy_sticker_set, R.drawable.msg_copy, LocaleController.getString(R.string.StickersCopyStickerSet));

optionsButton.setOnClickListener(v -> {
checkOptions();
Expand Down Expand Up @@ -1309,6 +1312,14 @@ protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count, TLRPC.TL_fo
// Na: [ExternalStickerCache] delete cache files
ExternalStickerCacheHelper.deleteCacheFiles(stickerSet);
enableEditMode();
} else if (id == menu_copy_sticker_set) {
// Na: copy sticker set
dismiss();
StickersDialogs.showShortNameEditorDialog(resourcesProvider, containerView.getContext(), short_name -> {
StickersDialogs.showNameEditorDialog(null, resourcesProvider, containerView.getContext(), pack_name -> {
StickerSetHelper.INSTANCE.copyStickerSet(short_name, pack_name, stickerSet, UserConfig.selectedAccount);
});
});
} else if (id == 4) {
StickersDialogs.showNameEditorDialog(stickerSet.set, resourcesProvider, getContext(), arg -> {
titleTextView.setText(arg);
Expand Down
@@ -0,0 +1,59 @@
package xyz.nextalone.nagram.helper

import android.text.TextUtils
import org.telegram.messenger.AndroidUtilities
import org.telegram.messenger.MediaDataController
import org.telegram.messenger.MessageObject
import org.telegram.messenger.NotificationCenter
import org.telegram.messenger.UserConfig
import org.telegram.tgnet.ConnectionsManager
import org.telegram.tgnet.TLObject
import org.telegram.tgnet.TLRPC.TL_error
import org.telegram.tgnet.TLRPC.TL_inputStickerSetItem
import org.telegram.tgnet.TLRPC.TL_inputUserSelf
import org.telegram.tgnet.TLRPC.TL_messages_stickerSet
import org.telegram.tgnet.TLRPC.TL_stickers_createStickerSet
import org.telegram.ui.Components.BulletinFactory

object StickerSetHelper {
fun copyStickerSet(shortName: CharSequence, packName: CharSequence, oldStickerSet: TL_messages_stickerSet, currentAccount: Int) {
val stickers = processOldStickerSet(oldStickerSet, currentAccount)
createStickerSet(shortName, packName, stickers, currentAccount)
}

private fun processOldStickerSet(oldStickerSet: TL_messages_stickerSet, currentAccount: Int): ArrayList<TL_inputStickerSetItem> {
val stickers = ArrayList<TL_inputStickerSetItem>()
if (oldStickerSet.documents != null) {
oldStickerSet.documents.forEach {
if (it != null) {
var emoji = MessageObject.findAnimatedEmojiEmoticon(it, "\uD83D\uDE00", currentAccount)
if (TextUtils.isEmpty(emoji)) {
emoji = "\uD83D\uDE00"
}
val sticker = MediaDataController.getInputStickerSetItem(it, emoji)
stickers.add(sticker)
}
}
}
return stickers
}

private fun createStickerSet(shortName: CharSequence, packName: CharSequence, stickers: ArrayList<TL_inputStickerSetItem>, currentAccount: Int) {
val req = TL_stickers_createStickerSet()
req.user_id = TL_inputUserSelf()
req.title = packName.toString()
req.short_name = shortName.toString()
req.stickers.addAll(stickers)
ConnectionsManager.getInstance(currentAccount).sendRequest(req) { response: TLObject?, error: TL_error? ->
AndroidUtilities.runOnUIThread {
if (response is TL_messages_stickerSet) {
MediaDataController.getInstance(currentAccount).toggleStickerSet(null, response, 2, null, false, false)
AndroidUtilities.runOnUIThread({ NotificationCenter.getInstance(UserConfig.selectedAccount).postNotificationNameOnUIThread(NotificationCenter.customStickerCreated, false, response) }, 250)
}
if (error != null) {
BulletinFactory.showError(error)
}
}
}
}
}
1 change: 1 addition & 0 deletions TMessagesProj/src/main/res/values-zh-rCN/strings_na.xml
Expand Up @@ -133,4 +133,5 @@
<string name="PushServiceTypeInAppDialog">显示常驻通知</string>
<string name="PushServiceTypeUnifiedGateway">Unified Push Gateway</string>
<string name="SendMp4DocumentAsVideo">MP4 视频作为文件发送时可预览</string>
<string name="StickersCopyStickerSet">复制整个贴纸包</string>
</resources>
1 change: 1 addition & 0 deletions TMessagesProj/src/main/res/values/strings_na.xml
Expand Up @@ -134,4 +134,5 @@
<string name="PushServiceTypeUnifiedGateway">Unified Push Gateway</string>
<string name="SendMp4DocumentAsVideo">Send mp4 document as video</string>
<string name="StickersChooseShortNameForStickerPack">Choose a short name for your pack.</string>
<string name="StickersCopyStickerSet">Copy Sticker Set</string>
</resources>

0 comments on commit 5c1d3fa

Please sign in to comment.