mirror of
https://github.com/Sunnyyoung/WeChatTweak-macOS.git
synced 2026-07-28 22:14:33 +08:00
Sticker Message Menu Add Export Sticker Item
This commit is contained in:
@@ -173,3 +173,19 @@ typedef NS_ENUM(unsigned int, MessageDataType) {
|
||||
@property(retain, nonatomic) NSImage *displayedImage;
|
||||
|
||||
@end
|
||||
|
||||
@interface MMService : NSObject
|
||||
|
||||
@end
|
||||
|
||||
@interface EmoticonMgr : MMService
|
||||
|
||||
- (id)getEmotionDataWithMD5:(id)arg1;
|
||||
|
||||
@end
|
||||
|
||||
@interface NSDictionary (XMLDictionary)
|
||||
|
||||
+ (id)dictionaryWithXMLString:(id)arg1;
|
||||
|
||||
@end
|
||||
|
||||
@@ -20,3 +20,4 @@
|
||||
"Tweak.MessageMenuItem.OpenInBrowser" = "Open In Browser";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCode" = "Identify QRCode";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "The result of the recognition has been copied to the pasteboard";
|
||||
"Tweak.MessageMenuItem.ExportSticker" = "Export Sticker";
|
||||
|
||||
@@ -20,3 +20,4 @@
|
||||
"Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "识别结果已复制到粘贴板";
|
||||
"Tweak.MessageMenuItem.ExportSticker" = "导出表情";
|
||||
|
||||
@@ -20,3 +20,4 @@
|
||||
"Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode";
|
||||
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "識別結果已復製到粘貼板";
|
||||
"Tweak.MessageMenuItem.ExportSticker" = "導出貼圖";
|
||||
|
||||
@@ -70,7 +70,7 @@ static void __attribute__((constructor)) tweak(void) {
|
||||
[objc_getClass("MMMessageCellView") jr_swizzleMethod:NSSelectorFromString(@"initWithFrame:") withMethod:@selector(tweak_initWithFrame:) error:nil];
|
||||
[objc_getClass("MMMessageCellView") jr_swizzleMethod:NSSelectorFromString(@"populateWithMessage:") withMethod:@selector(tweak_populateWithMessage:) error:nil];
|
||||
[objc_getClass("MMMessageCellView") jr_swizzleMethod:NSSelectorFromString(@"layout") withMethod:@selector(tweak_layout) error:nil];
|
||||
|
||||
|
||||
objc_property_attribute_t type = { "T", "@\"NSString\"" }; // NSString
|
||||
objc_property_attribute_t atom = { "N", "" }; // nonatomic
|
||||
objc_property_attribute_t ownership = { "&", "" }; // C = copy & = strong
|
||||
@@ -319,10 +319,47 @@ static void __attribute__((constructor)) tweak(void) {
|
||||
NSMenuItem *qrCodeItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.IdentifyQRCode"] action:@selector(tweakIdentifyQRCode:) keyEquivalent:@""];
|
||||
qrCodeItem;
|
||||
})];
|
||||
} else if (view.messageTableItem.message.messageType == MessageDataTypeSticker) {
|
||||
[menu addItem:[NSMenuItem separatorItem]];
|
||||
[menu addItem:({
|
||||
NSMenuItem *exportStickerItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.ExportSticker"] action:@selector(tweakExportSticker:) keyEquivalent:@""];
|
||||
exportStickerItem;
|
||||
})];
|
||||
}
|
||||
return menu;
|
||||
}
|
||||
|
||||
- (void)tweakExportSticker:(id)sender {
|
||||
MMMessageCellView *cell = (MMMessageCellView *)self;
|
||||
MessageData *messageData = cell.messageTableItem.message;
|
||||
NSString *content = messageData.msgContent;
|
||||
NSDictionary *dictionary = [NSDictionary dictionaryWithXMLString:content];
|
||||
NSDictionary *emojiDictionary = dictionary[@"emoji"];
|
||||
if (![emojiDictionary objectForKey:@"_md5"]) {
|
||||
return;
|
||||
}
|
||||
NSString *stickerMD5 = emojiDictionary[@"_md5"];
|
||||
if (!stickerMD5.length) {
|
||||
return;
|
||||
}
|
||||
NSString *localID = [messageData savingImageFileNameWithLocalID];
|
||||
NSSavePanel *panel = [NSSavePanel savePanel];
|
||||
[panel setNameFieldStringValue:localID];
|
||||
[panel setAllowsOtherFileTypes:YES];
|
||||
[panel setAllowedFileTypes:@[@"gif"]];
|
||||
[panel setExtensionHidden:NO];
|
||||
[panel setCanCreateDirectories:YES];
|
||||
[panel beginSheetModalForWindow:cell.window completionHandler:^(NSModalResponse result) {
|
||||
if (result == NSModalResponseOK) {
|
||||
NSString *path = panel.URL.path;
|
||||
MMServiceCenter *serviceCenter = [objc_getClass("MMServiceCenter") defaultCenter];
|
||||
EmoticonMgr *emoticonMgr = [serviceCenter getService:objc_getClass("EmoticonMgr")];
|
||||
NSData *stickerData = [emoticonMgr getEmotionDataWithMD5:stickerMD5];
|
||||
[stickerData writeToFile:path atomically:YES];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)tweakCopyUrl:(id)sender {
|
||||
NSString *url = [self _tweakMessageContentUrl];
|
||||
if (url.length) {
|
||||
|
||||
Reference in New Issue
Block a user