Add location type message menu tweaks

Add open in Google Maps and Amap menu item
This commit is contained in:
Sunny Young 2024-03-22 17:47:48 +08:00
parent e2300d8edb
commit 8b3dcc24a0
5 changed files with 60 additions and 0 deletions

View File

@ -11,6 +11,11 @@
#import <CoreImage/CoreImage.h>
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

View File

@ -17,6 +17,7 @@ typedef NS_ENUM(unsigned int, MessageDataType) {
MessageDataTypeVoice = 34,
MessageDataTypeVideo = 43,
MessageDataTypeSticker = 47,
MessageDataTypeLocation = 48,
MessageDataTypeAppUrl = 49,
MessageDataTypePrompt = 10000
};

View File

@ -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";

View File

@ -22,3 +22,5 @@
"Tweak.MessageMenuItem.IdentifyQRCode" = "识别二维码";
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "识别结果已复制到粘贴板";
"Tweak.MessageMenuItem.ExportSticker" = "导出表情";
"Tweak.MessageMenuItem.OpenInGoogleMaps" = "使用谷歌地图打开";
"Tweak.MessageMenuItem.OpenInAmap" = "使用高德地图打开";

View File

@ -22,3 +22,5 @@
"Tweak.MessageMenuItem.IdentifyQRCode" = "識別QRCode";
"Tweak.MessageMenuItem.IdentifyQRCodeNotification" = "識別結果已復製到粘貼板";
"Tweak.MessageMenuItem.ExportSticker" = "導出貼圖";
"Tweak.MessageMenuItem.OpenInGoogleMaps" = "使用谷歌地圖打開";
"Tweak.MessageMenuItem.OpenInAmap" = "使用高德地圖打開";