Merge branch 'upstream-develop' into develop

# Conflicts:
#	WeChatTweak.framework/Versions/A/WeChatTweak
This commit is contained in:
Jeason Lee 2019-11-01 11:26:55 +08:00
commit 382aea6c7d
11 changed files with 48 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,5 @@
"Tweak.Message.AMessage" = "a message";
"Tweak.MessageMenuItem.CopyLink" = "Copy Link";
"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";

View File

@ -18,3 +18,5 @@
"Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "复制链接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开";
"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码";
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "识别结果已复制到粘贴板";

View File

@ -18,3 +18,5 @@
"Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "複製鏈接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開";
"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode";
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "識別結果已復製到粘貼板";

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,34 @@ 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) {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard setString:content forType:NSStringPboardType];
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:({
NSUserNotification *notification = [[NSUserNotification alloc] init];
notification.informativeText = [NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.IdentifyQRCodeNotification"];
notification;
})];
NSURL *url = [NSURL URLWithString:content];
if ([url.scheme containsString:@"http"]) {
[[NSWorkspace sharedWorkspace] openURL:url];
}
}
}
}
}
- (NSString *)_tweakMessageContentUrl {
MMMessageCellView *cell = (MMMessageCellView *)self;
NSString *content = cell.messageTableItem.message.msgContent;