Image Message Menu Add Identify QRCode

This commit is contained in:
Jeason Lee 2019-10-17 17:42:26 +08:00 committed by Sunnyyoung
parent ba0add3200
commit 62d1045211
11 changed files with 34 additions and 0 deletions

View File

@ -10,6 +10,7 @@
#import <objc/runtime.h>
#import <objc/message.h>
#import <JRSwizzle/JRSwizzle.h>
#import <CoreImage/CoreImage.h>
FOUNDATION_EXPORT double WeChatTweakVersionNumber;
FOUNDATION_EXPORT const unsigned char WeChatTweakVersionString[];

View File

@ -167,3 +167,9 @@ typedef NS_ENUM(unsigned int, MessageDataType) {
@property(retain, nonatomic) MMMessageTableItem *messageTableItem;
@end
@interface MMImageMessageCellView : MMMessageCellView
@property(retain, nonatomic) NSImage *displayedImage;
@end

View File

@ -18,3 +18,4 @@
"Tweak.Message.AMessage" = "a message";
"Tweak.MessageMenuItem.CopyLink" = "Copy Link";
"Tweak.MessageMenuItem.OpenInBrowser" = "Open In Browser";
"Tweak.MessageMenuItem.IdentifyQRCode" = "Identify QRCode";

View File

@ -18,3 +18,4 @@
"Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "复制链接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开";
"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码";

View File

@ -18,3 +18,4 @@
"Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "複製鏈接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開";
"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode";

View File

@ -10,6 +10,7 @@
#import <objc/runtime.h>
#import <objc/message.h>
#import <JRSwizzle/JRSwizzle.h>
#import <CoreImage/CoreImage.h>
FOUNDATION_EXPORT double WeChatTweakVersionNumber;
FOUNDATION_EXPORT const unsigned char WeChatTweakVersionString[];

View File

@ -211,6 +211,12 @@ static void __attribute__((constructor)) tweak(void) {
NSMenuItem *openUrlItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.OpenInBrowser"] action:@selector(tweakOpenUrlItem:) keyEquivalent:@""];
openUrlItem;
})];
} else if (view.messageTableItem.message.messageType == MessageDataTypeImage) {
[menu addItem:[NSMenuItem separatorItem]];
[menu addItem:({
NSMenuItem *qrCodeItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.IdentifyQRCode"] action:@selector(tweakIdentifyQRCode:) keyEquivalent:@""];
qrCodeItem;
})];
}
return menu;
}
@ -230,6 +236,23 @@ static void __attribute__((constructor)) tweak(void) {
}
}
- (void)tweakIdentifyQRCode:(id)sender {
MMImageMessageCellView *cell = (MMImageMessageCellView *)self;
NSImage *image = cell.displayedImage;
if (image) {
NSData *imageData = [image TIFFRepresentation];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}];
NSArray *results = [detector featuresInImage:[CIImage imageWithData:imageData]];
if (results.count) {
CIQRCodeFeature *result = results.firstObject;
NSString *content = result.messageString;
if (content.length) {
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:content]];
}
}
}
}
- (NSString *)_tweakMessageContentUrl {
MMMessageCellView *cell = (MMMessageCellView *)self;
NSString *content = cell.messageTableItem.message.msgContent;