TUIChatExtensionObserver.m 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //
  2. // TUIChatExtensionObserver.m
  3. // TUIChat
  4. //
  5. // Created by cologne on 2023/3/30.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. #import "TUIChatExtensionObserver.h"
  9. #import <TIMCommon/TIMCommonModel.h>
  10. #import <TUICore/TUICore.h>
  11. #import "TUIC2CChatViewController.h"
  12. @interface TUIChatExtensionObserver () <TUIExtensionProtocol>
  13. @end
  14. @implementation TUIChatExtensionObserver
  15. + (void)load {
  16. [self registerFriendProfileActionMenuExtension];
  17. }
  18. + (instancetype)shareInstance {
  19. static dispatch_once_t onceToken;
  20. static id instance = nil;
  21. dispatch_once(&onceToken, ^{
  22. instance = [[self alloc] init];
  23. });
  24. return instance;
  25. }
  26. + (void)registerFriendProfileActionMenuExtension {
  27. [TUICore registerExtension:TUICore_TUIContactExtension_FriendProfileActionMenu_ClassicExtensionID object:TUIChatExtensionObserver.shareInstance];
  28. }
  29. #pragma mark - TUIExtensionProtocol
  30. - (NSArray<TUIExtensionInfo *> *)onGetExtension:(NSString *)extensionID param:(NSDictionary *)param {
  31. if (![extensionID isKindOfClass:NSString.class]) {
  32. return nil;
  33. }
  34. if ([extensionID isEqualToString:TUICore_TUIContactExtension_FriendProfileActionMenu_ClassicExtensionID]) {
  35. return [self getFriendProfileActionMenuExtensionForClassicContact:param];
  36. } else {
  37. return nil;
  38. }
  39. }
  40. - (NSArray<TUIExtensionInfo *> *)getFriendProfileActionMenuExtensionForClassicContact:(NSDictionary *)param {
  41. TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
  42. info.weight = 300;
  43. info.text = TIMCommonLocalizableString(ProfileSendMessages);
  44. info.onClicked = ^(NSDictionary *_Nonnull actionParam) {
  45. NSString *userID = [actionParam tui_objectForKey:TUICore_TUIContactExtension_FriendProfileActionMenu_UserID asClass:NSString.class];
  46. UINavigationController *pushVC = [actionParam tui_objectForKey:TUICore_TUIContactExtension_FriendProfileActionMenu_PushVC
  47. asClass:UINavigationController.class];
  48. if (userID.length > 0 && pushVC) {
  49. TUIChatConversationModel *conversationModel = [[TUIChatConversationModel alloc] init];
  50. conversationModel.userID = userID;
  51. conversationModel.conversationID = [NSString stringWithFormat:@"c2c_%@", userID];
  52. TUIBaseChatViewController *chatVC = [[TUIC2CChatViewController alloc] init];
  53. chatVC.conversationData = conversationModel;
  54. chatVC.title = conversationModel.title;
  55. for (UIViewController *vc in pushVC.childViewControllers) {
  56. if ([vc isKindOfClass:chatVC.class]) {
  57. [pushVC popToViewController:vc animated:YES];
  58. return;
  59. }
  60. }
  61. [pushVC pushViewController:chatVC animated:YES];
  62. }
  63. };
  64. return @[ info ];
  65. }
  66. @end