diff --git a/WeChatTweak/ContextMenu.m b/WeChatTweak/ContextMenu.m index dda7ddb..673ec05 100644 --- a/WeChatTweak/ContextMenu.m +++ b/WeChatTweak/ContextMenu.m @@ -11,6 +11,11 @@ #import +typedef NS_ENUM(NSUInteger, OpenMapMenuType) { + OpenMapMenuTypeGoogleMaps = 0, + OpenMapMenuTypeAmap +}; + @implementation NSObject (ContextMenu) static void __attribute__((constructor)) tweak(void) { @@ -76,6 +81,26 @@ static void __attribute__((constructor)) tweak(void) { })]; break; } + case MessageDataTypeLocation: { + [menu addItem:NSMenuItem.separatorItem]; + [menu addItem:({ + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.OpenInGoogleMaps"] + action:@selector(tweakOpenMaps:) + keyEquivalent:@""]; + item.target = self; + item.tag = OpenMapMenuTypeGoogleMaps; + item; + })]; + [menu addItem:({ + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.MessageMenuItem.OpenInAmap"] + action:@selector(tweakOpenMaps:) + keyEquivalent:@""]; + item.target = self; + item.tag = OpenMapMenuTypeAmap; + item; + })]; + break; + } default: { break; } @@ -153,4 +178,32 @@ static void __attribute__((constructor)) tweak(void) { }]; } +- (void)tweakOpenMaps:(NSMenuItem *)sender { + MMMessageCellView *cell = (MMMessageCellView *)sender.target; + + NSURL *url = ({ + NSURL *url = nil; + NSDictionary *location = [NSDictionary dictionaryWithXMLString:cell.messageTableItem.message.msgContent][@"location"]; + id x = location[@"_x"]; + id y = location[@"_y"]; + if (x && y) { + switch (sender.tag) { + case OpenMapMenuTypeGoogleMaps: + url = [NSURL URLWithString:[NSString stringWithFormat:@"https://www.google.com/maps/search/?api=1&query=%@,%@", x, y]]; + break; + case OpenMapMenuTypeAmap: + url = [NSURL URLWithString:[NSString stringWithFormat:@"https://uri.amap.com/marker?position=%@,%@", y, x]]; + break; + default: + break; + } + } + url; + }); + + if (url) { + [NSWorkspace.sharedWorkspace openURL:url]; + } +} + @end diff --git a/WeChatTweak/Supporting Files/WeChatTweakHeaders.h b/WeChatTweak/Supporting Files/WeChatTweakHeaders.h index 59e5c58..1186a58 100644 --- a/WeChatTweak/Supporting Files/WeChatTweakHeaders.h +++ b/WeChatTweak/Supporting Files/WeChatTweakHeaders.h @@ -17,6 +17,7 @@ typedef NS_ENUM(unsigned int, MessageDataType) { MessageDataTypeVoice = 34, MessageDataTypeVideo = 43, MessageDataTypeSticker = 47, + MessageDataTypeLocation = 48, MessageDataTypeAppUrl = 49, MessageDataTypePrompt = 10000 }; diff --git a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings index 7b38778..1f6f638 100644 --- a/WeChatTweak/Supporting Files/en.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/en.lproj/Localizable.strings @@ -22,3 +22,5 @@ "Tweak.MessageMenuItem.IdentifyQRCode" = "Identify QRCode"; "Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "The result of the recognition has been copied to the pasteboard"; "Tweak.MessageMenuItem.ExportSticker" = "Export Sticker"; +"Tweak.MessageMenuItem.OpenInGoogleMaps" = "Open in Google Maps"; +"Tweak.MessageMenuItem.OpenInAmap" = "Open in Amap"; diff --git a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings index eb41e22..4a722b0 100644 --- a/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hans.lproj/Localizable.strings @@ -22,3 +22,5 @@ "Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码"; "Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "识别结果已复制到粘贴板"; "Tweak.MessageMenuItem.ExportSticker" = "导出表情"; +"Tweak.MessageMenuItem.OpenInGoogleMaps" = "使用谷歌地图打开"; +"Tweak.MessageMenuItem.OpenInAmap" = "使用高德地图打开"; diff --git a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings index 53c3586..764105b 100644 --- a/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings +++ b/WeChatTweak/Supporting Files/zh-Hant.lproj/Localizable.strings @@ -22,3 +22,5 @@ "Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode"; "Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "識別結果已復製到粘貼板"; "Tweak.MessageMenuItem.ExportSticker" = "導出貼圖"; +"Tweak.MessageMenuItem.OpenInGoogleMaps" = "使用谷歌地圖打開"; +"Tweak.MessageMenuItem.OpenInAmap" = "使用高德地圖打開";