diff --git a/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings b/WeChatTweak.framework/Versions/A/Resources/en.lproj/Localizable.strings index f4a6cc1..f25f6a1 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 3e88c1f..e93eff2 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 34b7bfe..38008bf 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 bee887c..099ac01 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 69a9f32..32b89c9 100644 --- a/WeChatTweak/Supporting Files/WeChatTweakHeaders.h +++ b/WeChatTweak/Supporting Files/WeChatTweakHeaders.h @@ -17,7 +17,8 @@ typedef NS_ENUM(unsigned int, MessageDataType) { MessageDataTypeVoice = 34, MessageDataTypeVideo = 43, MessageDataTypeSticker = 47, - MessageDataTypeLink = 49, + MessageDataTypeAppUrl = 49, + MessageDataTypePrompt = 10000 }; @interface NSString (MD5) @@ -151,3 +152,16 @@ typedef NS_ENUM(unsigned int, MessageDataType) { - (id)initWithViewControllers:(NSArray *)arg1; @end + +@interface MMMessageTableItem : NSObject + +@property(retain, nonatomic) MessageData *message; + +@end + +@interface MMMessageCellView : NSTableCellView + +@property(retain, nonatomic) NSView *avatarImgView; +@property(retain, nonatomic) MMMessageTableItem *messageTableItem; + +@end diff --git a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings index 7e8c745..e93627b 100644 --- a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings @@ -16,3 +16,5 @@ "Tweak.Message.Sticker" = "Sticker"; "Tweak.Message.Link" = "Link"; "Tweak.Message.AMessage" = "a message"; +"Tweak.MessageMenuItem.CopyLink" = "Copy Link"; +"Tweak.MessageMenuItem.OpenInBrowser" = "Open In Browser"; diff --git a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings index b03046e..f319f2e 100644 --- a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -16,3 +16,5 @@ "Tweak.Message.Sticker" = "表情"; "Tweak.Message.Link" = "链接"; "Tweak.Message.AMessage" = "一条消息"; +"Tweak.MessageMenuItem.CopyLink" = "复制链接"; +"Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开"; diff --git a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings index 9dcf40c..1660343 100644 --- a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -16,3 +16,5 @@ "Tweak.Message.Sticker" = "表情"; "Tweak.Message.Link" = "链接"; "Tweak.Message.AMessage" = "一条消息"; +"Tweak.MessageMenuItem.CopyLink" = "複製鏈接"; +"Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開"; diff --git a/WeChatTweak/WeChatTweak.m b/WeChatTweak/WeChatTweak.m index f14d69e..1a52a7b 100755 --- a/WeChatTweak/WeChatTweak.m +++ b/WeChatTweak/WeChatTweak.m @@ -63,6 +63,7 @@ static void __attribute__((constructor)) tweak(void) { [objc_getClass("CUtility") jr_swizzleClassMethod:NSSelectorFromString(@"FFSvrChatInfoMsgWithImgZZ") withClassMethod:@selector(tweak_HasWechatInstance) error:nil]; [objc_getClass("NSRunningApplication") jr_swizzleClassMethod:NSSelectorFromString(@"runningApplicationsWithBundleIdentifier:") withClassMethod:@selector(tweak_runningApplicationsWithBundleIdentifier:) error:nil]; [objc_getClass("MASPreferencesWindowController") jr_swizzleMethod:NSSelectorFromString(@"initWithViewControllers:") withMethod:@selector(tweak_initWithViewControllers:) error:nil]; + [objc_getClass("MMMessageCellView") jr_swizzleMethod:NSSelectorFromString(@"contextMenu") withMethod:@selector(tweak_contextMenu) error:nil]; objc_property_attribute_t type = { "T", "@\"NSString\"" }; // NSString objc_property_attribute_t atom = { "N", "" }; // nonatomic @@ -121,7 +122,7 @@ static void __attribute__((constructor)) tweak(void) { [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Video"]]; break; case MessageDataTypeSticker: [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Sticker"]]; break; - case MessageDataTypeLink: + case MessageDataTypeAppUrl: [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Link"]]; break; default: [msgContent appendString:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.AMessage"]]; break; @@ -171,6 +172,38 @@ static void __attribute__((constructor)) tweak(void) { }); } +#pragma mark - AppUrlMessageMenu + +- (id)tweak_contextMenu { + MMMessageCellView *view = (MMMessageCellView *)self; + NSMenu *menu = (NSMenu *)[self tweak_contextMenu]; + if (view.messageTableItem.message.messageType == MessageDataTypeAppUrl) { + [menu addItem:[NSMenuItem separatorItem]]; + [menu addItem:({ + NSMenuItem *copyUrlItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.CopyLink"] action:@selector(tweakCopyUrl:) keyEquivalent:@""]; + copyUrlItem; + })]; + [menu addItem:({ + NSMenuItem *openUrlItem = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.OpenInBrowser"] action:@selector(tweakOpenUrlItem:) keyEquivalent:@""]; + openUrlItem; + })]; + } + return menu; +} + +- (void)tweakCopyUrl:(id)sender { + MMMessageCellView *cell = (MMMessageCellView *)self; + NSString *url = [cell.messageTableItem.message.msgContent tweak_subStringFrom:@"" to:@""]; + [[NSPasteboard generalPasteboard] clearContents]; + [[NSPasteboard generalPasteboard] setString:url forType:NSStringPboardType]; +} + +- (void)tweakOpenUrlItem:(id)sender { + MMMessageCellView *cell = (MMMessageCellView *)self; + NSString *url = [cell.messageTableItem.message.msgContent tweak_subStringFrom:@"" to:@""]; + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; +} + #pragma mark - Mutiple Instance + (BOOL)tweak_HasWechatInstance {