diff --git a/WeChatTweak.framework/Versions/A/Headers/WeChatTweak.h b/WeChatTweak.framework/Versions/A/Headers/WeChatTweak.h index 17df520..f16de10 100644 --- a/WeChatTweak.framework/Versions/A/Headers/WeChatTweak.h +++ b/WeChatTweak.framework/Versions/A/Headers/WeChatTweak.h @@ -10,6 +10,7 @@ #import #import #import +#import FOUNDATION_EXPORT double WeChatTweakVersionNumber; FOUNDATION_EXPORT const unsigned char WeChatTweakVersionString[]; diff --git a/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings b/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings index f25f6a1..11c44db 100644 Binary files a/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings and b/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings differ diff --git a/WeChatTweak.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings b/WeChatTweak.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings index e93eff2..238168f 100644 Binary files a/WeChatTweak.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings and b/WeChatTweak.framework/Versions/A/Resources/zh-Hans.lproj/Localizable.strings differ diff --git a/WeChatTweak.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings b/WeChatTweak.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings index 38008bf..ca7c411 100644 Binary files a/WeChatTweak.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings and b/WeChatTweak.framework/Versions/A/Resources/zh-Hant.lproj/Localizable.strings differ diff --git a/WeChatTweak.framework/Versions/A/WeChatTweak b/WeChatTweak.framework/Versions/A/WeChatTweak index 2631c5d..65ba1f2 100755 Binary files a/WeChatTweak.framework/Versions/A/WeChatTweak and b/WeChatTweak.framework/Versions/A/WeChatTweak differ diff --git a/WeChatTweak/Supporting Files/WeChatTweakHeaders.h b/WeChatTweak/Supporting Files/WeChatTweakHeaders.h index a5cfbab..e6099bc 100644 --- a/WeChatTweak/Supporting Files/WeChatTweakHeaders.h +++ b/WeChatTweak/Supporting Files/WeChatTweakHeaders.h @@ -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 diff --git a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings index e93627b..ec65ef0 100644 --- a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings @@ -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"; diff --git a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings index f319f2e..cebdb31 100644 --- a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -18,3 +18,5 @@ "Tweak.Message.AMessage" = "一条消息"; "Tweak.MessageMenuItem.CopyLink" = "复制链接"; "Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开"; +"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码"; +"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "识别结果已复制到粘贴板"; diff --git a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings index 1660343..8f2f53d 100644 --- a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -18,3 +18,5 @@ "Tweak.Message.AMessage" = "一条消息"; "Tweak.MessageMenuItem.CopyLink" = "複製鏈接"; "Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開"; +"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode"; +"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "識別結果已復製到粘貼板"; diff --git a/WeChatTweak/WeChatTweak.h b/WeChatTweak/WeChatTweak.h index 17df520..f16de10 100644 --- a/WeChatTweak/WeChatTweak.h +++ b/WeChatTweak/WeChatTweak.h @@ -10,6 +10,7 @@ #import #import #import +#import FOUNDATION_EXPORT double WeChatTweakVersionNumber; FOUNDATION_EXPORT const unsigned char WeChatTweakVersionString[]; diff --git a/WeChatTweak/WeChatTweak.m b/WeChatTweak/WeChatTweak.m index 6d67c6d..1496c2b 100755 --- a/WeChatTweak/WeChatTweak.m +++ b/WeChatTweak/WeChatTweak.m @@ -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;