App url message menu add some items

This commit is contained in:
Jeason Lee 2019-09-02 17:20:20 +08:00 committed by Sunnyyoung
parent 36393a61cf
commit 6b43144d29
9 changed files with 55 additions and 2 deletions

View File

@ -17,7 +17,8 @@ typedef NS_ENUM(unsigned int, MessageDataType) {
MessageDataTypeVoice = 34, MessageDataTypeVoice = 34,
MessageDataTypeVideo = 43, MessageDataTypeVideo = 43,
MessageDataTypeSticker = 47, MessageDataTypeSticker = 47,
MessageDataTypeLink = 49, MessageDataTypeAppUrl = 49,
MessageDataTypePrompt = 10000
}; };
@interface NSString (MD5) @interface NSString (MD5)
@ -151,3 +152,16 @@ typedef NS_ENUM(unsigned int, MessageDataType) {
- (id)initWithViewControllers:(NSArray *)arg1; - (id)initWithViewControllers:(NSArray *)arg1;
@end @end
@interface MMMessageTableItem : NSObject
@property(retain, nonatomic) MessageData *message;
@end
@interface MMMessageCellView : NSTableCellView
@property(retain, nonatomic) NSView *avatarImgView;
@property(retain, nonatomic) MMMessageTableItem *messageTableItem;
@end

View File

@ -16,3 +16,5 @@
"Tweak.Message.Sticker" = "Sticker"; "Tweak.Message.Sticker" = "Sticker";
"Tweak.Message.Link" = "Link"; "Tweak.Message.Link" = "Link";
"Tweak.Message.AMessage" = "a message"; "Tweak.Message.AMessage" = "a message";
"Tweak.MessageMenuItem.CopyLink" = "Copy Link";
"Tweak.MessageMenuItem.OpenInBrowser" = "Open In Browser";

View File

@ -16,3 +16,5 @@
"Tweak.Message.Sticker" = "表情"; "Tweak.Message.Sticker" = "表情";
"Tweak.Message.Link" = "链接"; "Tweak.Message.Link" = "链接";
"Tweak.Message.AMessage" = "一条消息"; "Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "复制链接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用浏览器打开";

View File

@ -16,3 +16,5 @@
"Tweak.Message.Sticker" = "表情"; "Tweak.Message.Sticker" = "表情";
"Tweak.Message.Link" = "链接"; "Tweak.Message.Link" = "链接";
"Tweak.Message.AMessage" = "一条消息"; "Tweak.Message.AMessage" = "一条消息";
"Tweak.MessageMenuItem.CopyLink" = "複製鏈接";
"Tweak.MessageMenuItem.OpenInBrowser" = "使用瀏覽器打開";

View File

@ -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("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("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("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 type = { "T", "@\"NSString\"" }; // NSString
objc_property_attribute_t atom = { "N", "" }; // nonatomic 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; [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Video"]]; break;
case MessageDataTypeSticker: case MessageDataTypeSticker:
[msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Sticker"]]; break; [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Sticker"]]; break;
case MessageDataTypeLink: case MessageDataTypeAppUrl:
[msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Link"]]; break; [msgContent appendFormat:@"<%@>", [NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.Link"]]; break;
default: default:
[msgContent appendString:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.Message.AMessage"]]; break; [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:@"<url>" to:@"</url>"];
[[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:@"<url>" to:@"</url>"];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];
}
#pragma mark - Mutiple Instance #pragma mark - Mutiple Instance
+ (BOOL)tweak_HasWechatInstance { + (BOOL)tweak_HasWechatInstance {