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..d88ae61 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..0f2ea90 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..f57222b 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..c96deb7 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..e61be02 100644 --- a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings @@ -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"; diff --git a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings index f319f2e..4df47d0 100644 --- a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -18,3 +18,4 @@ "Tweak.Message.AMessage" = "一条消息"; "Tweak.MessageMenuItem.CopyLink" = "复制链接"; "Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开"; +"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码"; diff --git a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings index 1660343..085af13 100644 --- a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -18,3 +18,4 @@ "Tweak.Message.AMessage" = "一条消息"; "Tweak.MessageMenuItem.CopyLink" = "複製鏈接"; "Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開"; +"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode"; 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..9560e45 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,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;