Sticker Message Menu Add Export Sticker Item

This commit is contained in:
Jeason Lee
2020-01-15 15:51:13 +08:00
parent 7b39eeaccf
commit 08d3368523
18 changed files with 64 additions and 143 deletions
@@ -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" = "導出貼圖";
+38 -1
View File
@@ -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) {