Steven 1 year ago
parent
commit
883bf5db05
26 changed files with 690 additions and 77 deletions
  1. 38 6
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 23 0
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  3. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/Contents.json
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/group_default_avatal@2x.png
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/group_default_avatal@3x.png
  6. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/UserKeyHeader.h
  7. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIButton+KSDelayAction.h
  8. 55 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIButton+KSDelayAction.m
  9. 23 22
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIControl+ButtonAction.m
  10. 24 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.h
  11. 84 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m
  12. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSGroupConversationController.h
  13. 10 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSGroupConversationController.m
  14. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXBaseChatViewController.h
  15. 158 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXBaseChatViewController.m
  16. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXC2CChatViewController.h
  17. 31 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXC2CChatViewController.m
  18. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXGroupChatViewController.h
  19. 34 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXGroupChatViewController.m
  20. 18 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m
  21. 3 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/FirstSettingViewController.m
  22. 4 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/PasswordLoginController.m
  23. 11 19
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/VefiCodeLoginController.m
  24. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSShareChooseViewController.h
  25. 26 5
      KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSShareChooseViewController.m
  26. 48 0
      KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj

+ 38 - 6
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -403,6 +403,10 @@
 		27FC2F5F27F1930400FCC239 /* KSStarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F5E27F1930400FCC239 /* KSStarView.m */; };
 		27FC2F6627F1BBFE00FCC239 /* MyMusicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6527F1BBFE00FCC239 /* MyMusicViewController.m */; };
 		27FC2F6D27F1BE4800FCC239 /* VideoCourseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6C27F1BE4800FCC239 /* VideoCourseViewController.m */; };
+		BC000D8A2A848468006C5A89 /* KSChatConversationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D882A848467006C5A89 /* KSChatConversationViewController.m */; };
+		BC000D9B2A84E49E006C5A89 /* KSTXBaseChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D9A2A84E49E006C5A89 /* KSTXBaseChatViewController.m */; };
+		BC000D9E2A84E68B006C5A89 /* KSTXGroupChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D9D2A84E68B006C5A89 /* KSTXGroupChatViewController.m */; };
+		BC000DA12A84E6D5006C5A89 /* KSTXC2CChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000DA02A84E6D5006C5A89 /* KSTXC2CChatViewController.m */; };
 		BC0167A627FC06D600AE66A1 /* MyCourseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0167A527FC06D600AE66A1 /* MyCourseViewController.m */; };
 		BC023802286594EA005560CA /* KSTipsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC0237FF286594EA005560CA /* KSTipsAlert.xib */; };
 		BC023803286594EA005560CA /* KSTipsAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = BC023800286594EA005560CA /* KSTipsAlert.m */; };
@@ -519,7 +523,6 @@
 		BC28884A2A80DA200064B773 /* KSLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888492A80DA200064B773 /* KSLoginManager.m */; };
 		BC28884E2A80DA830064B773 /* TXIMLinsenter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC28884D2A80DA830064B773 /* TXIMLinsenter.m */; };
 		BC2888522A80DB990064B773 /* AppDelegate+AppService.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888512A80DB990064B773 /* AppDelegate+AppService.m */; };
-		BC28885F2A8100D40064B773 /* KSChatConversationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC28885E2A8100D40064B773 /* KSChatConversationViewController.m */; };
 		BC2888642A8100EA0064B773 /* KSGroupConversationController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888602A8100E90064B773 /* KSGroupConversationController.m */; };
 		BC2888652A8100EA0064B773 /* KSConversationListController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888632A8100EA0064B773 /* KSConversationListController.m */; };
 		BC28886C2A8101310064B773 /* KSChatSearchBar.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888672A8101300064B773 /* KSChatSearchBar.m */; };
@@ -561,6 +564,7 @@
 		BC41104A2806706800800BD9 /* HomeworkListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4110482806706800800BD9 /* HomeworkListCell.xib */; };
 		BC41104D280678E600800BD9 /* HomeworkSortView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC41104C280678E600800BD9 /* HomeworkSortView.m */; };
 		BC41104F280678ED00800BD9 /* HomeworkSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC41104E280678ED00800BD9 /* HomeworkSortView.xib */; };
+		BC450D352A86024600992740 /* UIButton+KSDelayAction.m in Sources */ = {isa = PBXBuildFile; fileRef = BC450D342A86024600992740 /* UIButton+KSDelayAction.m */; };
 		BC483231282A646A005F534C /* HomeRecentCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC483230282A646A005F534C /* HomeRecentCourseView.m */; };
 		BC483233282A6473005F534C /* HomeRecentCourseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC483232282A6473005F534C /* HomeRecentCourseView.xib */; };
 		BC48C3AE28292FB600EE65C5 /* ReceiveHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC48C3AD28292FB600EE65C5 /* ReceiveHeaderView.m */; };
@@ -1825,6 +1829,14 @@
 		27FC2F6C27F1BE4800FCC239 /* VideoCourseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoCourseViewController.m; sourceTree = "<group>"; };
 		67CFD930D686EE06F99E34F3 /* Pods-KulexiuForTeacher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForTeacher.release.xcconfig"; path = "Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher.release.xcconfig"; sourceTree = "<group>"; };
 		AC7237F12804B8A0533DF9FE /* Pods-KulexiuForTeacher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForTeacher.debug.xcconfig"; path = "Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher.debug.xcconfig"; sourceTree = "<group>"; };
+		BC000D882A848467006C5A89 /* KSChatConversationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSChatConversationViewController.m; sourceTree = "<group>"; };
+		BC000D892A848467006C5A89 /* KSChatConversationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSChatConversationViewController.h; sourceTree = "<group>"; };
+		BC000D992A84E49E006C5A89 /* KSTXBaseChatViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSTXBaseChatViewController.h; sourceTree = "<group>"; };
+		BC000D9A2A84E49E006C5A89 /* KSTXBaseChatViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSTXBaseChatViewController.m; sourceTree = "<group>"; };
+		BC000D9C2A84E68B006C5A89 /* KSTXGroupChatViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSTXGroupChatViewController.h; sourceTree = "<group>"; };
+		BC000D9D2A84E68B006C5A89 /* KSTXGroupChatViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSTXGroupChatViewController.m; sourceTree = "<group>"; };
+		BC000D9F2A84E6D5006C5A89 /* KSTXC2CChatViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSTXC2CChatViewController.h; sourceTree = "<group>"; };
+		BC000DA02A84E6D5006C5A89 /* KSTXC2CChatViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSTXC2CChatViewController.m; sourceTree = "<group>"; };
 		BC0167A427FC06D600AE66A1 /* MyCourseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyCourseViewController.h; sourceTree = "<group>"; };
 		BC0167A527FC06D600AE66A1 /* MyCourseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyCourseViewController.m; sourceTree = "<group>"; };
 		BC0237FF286594EA005560CA /* KSTipsAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KSTipsAlert.xib; sourceTree = "<group>"; };
@@ -2021,8 +2033,6 @@
 		BC28884D2A80DA830064B773 /* TXIMLinsenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXIMLinsenter.m; sourceTree = "<group>"; };
 		BC2888502A80DB990064B773 /* AppDelegate+AppService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppDelegate+AppService.h"; sourceTree = "<group>"; };
 		BC2888512A80DB990064B773 /* AppDelegate+AppService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "AppDelegate+AppService.m"; sourceTree = "<group>"; };
-		BC28885D2A8100D40064B773 /* KSChatConversationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KSChatConversationViewController.h; path = ../../../../../../BrassBand_teacher/GuanYueTeamTeacher/GuanYueTeamTeacher/Modules/Conversation/Controller/KSChatConversationViewController.h; sourceTree = "<group>"; };
-		BC28885E2A8100D40064B773 /* KSChatConversationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KSChatConversationViewController.m; path = ../../../../../../BrassBand_teacher/GuanYueTeamTeacher/GuanYueTeamTeacher/Modules/Conversation/Controller/KSChatConversationViewController.m; sourceTree = "<group>"; };
 		BC2888602A8100E90064B773 /* KSGroupConversationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSGroupConversationController.m; sourceTree = "<group>"; };
 		BC2888612A8100EA0064B773 /* KSGroupConversationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSGroupConversationController.h; sourceTree = "<group>"; };
 		BC2888622A8100EA0064B773 /* KSConversationListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSConversationListController.h; sourceTree = "<group>"; };
@@ -2088,6 +2098,8 @@
 		BC41104B280678E600800BD9 /* HomeworkSortView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeworkSortView.h; sourceTree = "<group>"; };
 		BC41104C280678E600800BD9 /* HomeworkSortView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeworkSortView.m; sourceTree = "<group>"; };
 		BC41104E280678ED00800BD9 /* HomeworkSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeworkSortView.xib; sourceTree = "<group>"; };
+		BC450D332A86024600992740 /* UIButton+KSDelayAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIButton+KSDelayAction.h"; sourceTree = "<group>"; };
+		BC450D342A86024600992740 /* UIButton+KSDelayAction.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIButton+KSDelayAction.m"; sourceTree = "<group>"; };
 		BC48322F282A646A005F534C /* HomeRecentCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeRecentCourseView.h; sourceTree = "<group>"; };
 		BC483230282A646A005F534C /* HomeRecentCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeRecentCourseView.m; sourceTree = "<group>"; };
 		BC483232282A6473005F534C /* HomeRecentCourseView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRecentCourseView.xib; sourceTree = "<group>"; };
@@ -3585,6 +3597,8 @@
 				2779310027E30FBE0010E277 /* UIColor+Extend.m */,
 				2779310B27E30FBE0010E277 /* UIControl+ButtonAction.h */,
 				277930E727E30FBE0010E277 /* UIControl+ButtonAction.m */,
+				BC450D332A86024600992740 /* UIButton+KSDelayAction.h */,
+				BC450D342A86024600992740 /* UIButton+KSDelayAction.m */,
 				2779310A27E30FBE0010E277 /* UIDevice+zhDeviceType.h */,
 				277930E827E30FBE0010E277 /* UIDevice+zhDeviceType.m */,
 				277930F927E30FBE0010E277 /* UIImage+Color.h */,
@@ -4279,14 +4293,13 @@
 		2779360327E32BBF0010E277 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
+				BC000D982A84E36A006C5A89 /* TXCustom */,
 				275B171027EB18F10081FDEF /* ChatAddressViewController.h */,
 				275B16FC27EB083C0081FDEF /* ChatAddressViewController.m */,
 				2779361327E32C0A0010E277 /* ChatViewController.h */,
 				2779361427E32C0A0010E277 /* ChatViewController.m */,
 				275B16F827EB08220081FDEF /* CreateFansGroupViewController.h */,
 				275B16F927EB08230081FDEF /* CreateFansGroupViewController.m */,
-				BC28885D2A8100D40064B773 /* KSChatConversationViewController.h */,
-				BC28885E2A8100D40064B773 /* KSChatConversationViewController.m */,
 				275B170327EB13420081FDEF /* KSChatListViewController.h */,
 				275B170427EB13420081FDEF /* KSChatListViewController.m */,
 				BCC305F628FD4C0800C39762 /* KSChatUserDetailViewController.h */,
@@ -4295,6 +4308,8 @@
 				BC2888632A8100EA0064B773 /* KSConversationListController.m */,
 				BC2888612A8100EA0064B773 /* KSGroupConversationController.h */,
 				BC2888602A8100E90064B773 /* KSGroupConversationController.m */,
+				BC000D892A848467006C5A89 /* KSChatConversationViewController.h */,
+				BC000D882A848467006C5A89 /* KSChatConversationViewController.m */,
 			);
 			path = Controller;
 			sourceTree = "<group>";
@@ -4836,6 +4851,19 @@
 			path = Pods;
 			sourceTree = "<group>";
 		};
+		BC000D982A84E36A006C5A89 /* TXCustom */ = {
+			isa = PBXGroup;
+			children = (
+				BC000D992A84E49E006C5A89 /* KSTXBaseChatViewController.h */,
+				BC000D9A2A84E49E006C5A89 /* KSTXBaseChatViewController.m */,
+				BC000D9C2A84E68B006C5A89 /* KSTXGroupChatViewController.h */,
+				BC000D9D2A84E68B006C5A89 /* KSTXGroupChatViewController.m */,
+				BC000D9F2A84E6D5006C5A89 /* KSTXC2CChatViewController.h */,
+				BC000DA02A84E6D5006C5A89 /* KSTXC2CChatViewController.m */,
+			);
+			path = TXCustom;
+			sourceTree = "<group>";
+		};
 		BC0167A027FC06C300AE66A1 /* MyCourse */ = {
 			isa = PBXGroup;
 			children = (
@@ -7804,6 +7832,7 @@
 				277D432527E9A46A00107DB7 /* ModifyPhoneCheckController.m in Sources */,
 				BC5E4B1B291E5E26001BBCD2 /* Tuner.swift in Sources */,
 				BCC9F43327F69BD200647449 /* KSRemoteUserManager.m in Sources */,
+				BC450D352A86024600992740 /* UIButton+KSDelayAction.m in Sources */,
 				27F9CAF727EC1A16003E0FE4 /* UITableView+SCIndexView.m in Sources */,
 				275E3DC827F460720010EC30 /* KSLiveChatroomKickOut.m in Sources */,
 				2779361B27E32C3A0010E277 /* MineViewController.m in Sources */,
@@ -7851,6 +7880,7 @@
 				BC8831002873D26000C702A0 /* LiveVideoModel.m in Sources */,
 				BC1365C8280D476500EB03E2 /* NotiferMessageCell.m in Sources */,
 				27F9030E27E875DD00C08A19 /* AudioPlayManager.m in Sources */,
+				BC000D9E2A84E68B006C5A89 /* KSTXGroupChatViewController.m in Sources */,
 				BCC9F41127F69BD200647449 /* MessageCell.m in Sources */,
 				277935E227E327F00010E277 /* KSTabBarViewController.m in Sources */,
 				2779322727E30FC30010E277 /* KSInputView.m in Sources */,
@@ -7933,7 +7963,6 @@
 				BC0167A627FC06D600AE66A1 /* MyCourseViewController.m in Sources */,
 				BCA9CE3427FD93C700D558C6 /* AccompanyEvaluateCell.m in Sources */,
 				BCA353D62858B18100377661 /* Records.m in Sources */,
-				BC28885F2A8100D40064B773 /* KSChatConversationViewController.m in Sources */,
 				BC2456F3286BEFDA00D1F7C0 /* MineEmptyVideoCell.m in Sources */,
 				2779320127E30FC30010E277 /* KSStatusView.m in Sources */,
 				2779323027E30FC30010E277 /* ALCalendarPicker.m in Sources */,
@@ -8035,6 +8064,7 @@
 				BC3ACD972890D61400060E97 /* NoRecordViewController.m in Sources */,
 				BC4BCE7A2823AB6500522C8B /* KSAddressPickerView.m in Sources */,
 				BCC9F42727F69BD200647449 /* KSWhiteboardControl.m in Sources */,
+				BC000D8A2A848468006C5A89 /* KSChatConversationViewController.m in Sources */,
 				277935E527E328C00010E277 /* CustomNavViewController.m in Sources */,
 				275E3DE027F467410010EC30 /* KSChatEmojiBoardView.m in Sources */,
 				BC542E4628407B3D00633781 /* UseBodyView.m in Sources */,
@@ -8082,6 +8112,7 @@
 				BCC9F43827F69BD200647449 /* TicketExpiredMessage.m in Sources */,
 				2779336027E31CB40010E277 /* UIView+KSExtension.m in Sources */,
 				BC0A22A7284751F80065C1AB /* AccompanyProgressView.m in Sources */,
+				BC000D9B2A84E49E006C5A89 /* KSTXBaseChatViewController.m in Sources */,
 				2779321C27E30FC30010E277 /* prodectButton.m in Sources */,
 				BC7E770C2900DD8E00EB37AF /* HomeDragButton.m in Sources */,
 				BCE6A08B27F823A300C97704 /* AccompanyCourseCell.m in Sources */,
@@ -8095,6 +8126,7 @@
 				2779323D27E30FC30010E277 /* VoDiskCache.m in Sources */,
 				BC7CFFC52817F29800CAEB21 /* CashRecordViewController.m in Sources */,
 				277931D727E30FC20010E277 /* UIImage+ResizeImage.m in Sources */,
+				BC000DA12A84E6D5006C5A89 /* KSTXC2CChatViewController.m in Sources */,
 				BC7CFFA92817E3BD00CAEB21 /* IncomeCountTopView.m in Sources */,
 				2779329927E30FEB0010E277 /* MSSBrowseActionSheetCell.m in Sources */,
 				BC965AE82925D1D700AB90B0 /* ClassroomCoursewarePlayView.m in Sources */,

+ 23 - 0
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -116,6 +116,10 @@
     [self configJPUSHWithLaunchOptions:launchOptions];
     // 融云相关配置
     [self configIM];
+    
+     // 腾讯群相关
+    [self configTXIM];
+    
     LaunchAnimationViewController *animationVC = [[LaunchAnimationViewController alloc] init];
     MJWeakSelf;
     [animationVC launchAnimationFinish:^{
@@ -356,6 +360,25 @@
     
 }
 
+- (void)configTXIM {
+    TUIConfig *config = [TUIConfig defaultConfig];
+    // 修改默认头像
+    config.defaultAvatarImage = [UIImage imageNamed:USERDEFAULT_LOGO];
+    // 修改默认群组头像
+    config.defaultGroupAvatarImage = [UIImage imageNamed:GROUP_DEFAULT_LOGO];
+    // 禁用群组九宫格头像
+    config.avatarType = TAvatarTypeRadiusCorner;
+    config.enableGroupGridAvatar = NO;
+    config.avatarCornerRadius = 4.0f;
+    // 关闭toaset
+    config.enableToast = NO;
+    
+    TUIChatConfig *chatConfig = [TUIChatConfig defaultConfig];
+    chatConfig.backgroudColor = HexRGB(0xF8F8F8);
+    chatConfig.enableWelcomeCustomMessage = NO;
+    chatConfig.enableTypingStatus = YES;
+}
+
 #pragma mark - private method
 - (void)registerRemoteNotification:(UIApplication *)application {
     /**

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "group_default_avatal@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "group_default_avatal@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/group_default_avatal@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/group_default_avatal.imageset/group_default_avatal@3x.png


+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Common/Define/UserKeyHeader.h

@@ -51,7 +51,7 @@
 #define USERDEFAULT_LOGO (@"user_default_avatal")
 #define USER_LOGO_RECTANGLE (@"user_avatarRectangle")
 
-#define GROUP_DEFAULT_LOGO (@"group_chatList")
+#define GROUP_DEFAULT_LOGO (@"group_default_avatal")
 #define VIP_DEFAULT_LOGO (@"vip_chatList")
 
 

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIButton+KSDelayAction.h

@@ -0,0 +1,19 @@
+//
+//  UIButton+KSDelayAction.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/11.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIButton (KSDelayAction)
+
+/** 延迟响应时间间隔, 默认0.5秒  */
+@property (nonatomic, assign) NSTimeInterval delayAction;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIButton+KSDelayAction.m

@@ -0,0 +1,55 @@
+//
+//  UIButton+KSDelayAction.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/11.
+//
+
+#import "UIButton+KSDelayAction.h"
+#import <objc/runtime.h>
+
+@implementation UIButton (KSDelayAction)
+
++ (void)load {
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        SEL selA =@selector(sendAction:to:forEvent:);
+        SEL selB =@selector(rzdelaySendAction:to:forEvent:);
+        Method methodA = class_getInstanceMethod(self, selA);
+        Method methodB = class_getInstanceMethod(self, selB);
+        BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB));
+        if (isAdd) {
+            class_replaceMethod(self, selB,method_getImplementation(methodA),method_getTypeEncoding(methodA));
+        } else {
+            method_exchangeImplementations(methodA, methodB);
+        }
+    });
+}
+
+- (NSTimeInterval)delayAction {
+    NSNumber *number = objc_getAssociatedObject(self, @"rzdelayAction");
+    if (number == nil) {
+        number = @(0.5); // 默认0.5秒
+    }
+    return (NSTimeInterval)number.doubleValue;
+}
+
+- (void)setDelayAction:(NSTimeInterval)delayAction {
+    objc_setAssociatedObject(self, @"rzdelayAction", @(delayAction), OBJC_ASSOCIATION_ASSIGN);
+}
+
+- (void)rzdelaySendAction:(SEL)action to:(id)target forEvent:(UIEvent*)event {
+    if ([self isKindOfClass:[UIButton class]]) {
+        UITouchPhase phase = event.allTouches.anyObject.phase;
+        if (phase == UITouchPhaseEnded || phase == UITouchPhaseCancelled) {
+            self.userInteractionEnabled = NO;
+            [self performSelector:@selector(setUInteractionEnabled:) withObject:@(YES) afterDelay:self.delayAction];
+        }
+    }
+    [self rzdelaySendAction:action to:target forEvent:event];
+}
+
+- (void)setUInteractionEnabled:(BOOL)enable {
+    self.userInteractionEnabled = YES;
+}
+@end

+ 23 - 22
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Extension/UIControl+ButtonAction.m

@@ -32,28 +32,29 @@
     [self setIsIgnoreEvent:NO];
 }
 
-+ (void)load {
-    
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        SEL selA = @selector(sendAction:to:forEvent:);
-        SEL selB = @selector(mySendAction:to:forEvent:);
-        Method methodA = class_getInstanceMethod(self, selA);
-        Method methodB = class_getInstanceMethod(self, selB);
-        
-        // 将methodB的实现方法添加到系统方法中 也就是说将methodA方法指针添加成方法methodB的返回值表示十分添加成功
-        BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB));
-        
-        // 添加成功了说明本类中不存在methodB所以此方法必须将方法b的实现指针替换成方法A的,否则b方法将没有实现
-        if (isAdd) {
-            class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA));
-        }
-        else {
-            // 添加失败说明本类中有methodB的实现方法,此时只需要将methodA和methodB的IMP互换
-            method_exchangeImplementations(methodA, methodB);
-        }
-    });
-}
+// 会影响按钮等其他事件
+//+ (void)load {
+//    
+//    static dispatch_once_t onceToken;
+//    dispatch_once(&onceToken, ^{
+//        SEL selA = @selector(sendAction:to:forEvent:);
+//        SEL selB = @selector(mySendAction:to:forEvent:);
+//        Method methodA = class_getInstanceMethod(self, selA);
+//        Method methodB = class_getInstanceMethod(self, selB);
+//        
+//        // 将methodB的实现方法添加到系统方法中 也就是说将methodA方法指针添加成方法methodB的返回值表示十分添加成功
+//        BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB));
+//        
+//        // 添加成功了说明本类中不存在methodB所以此方法必须将方法b的实现指针替换成方法A的,否则b方法将没有实现
+//        if (isAdd) {
+//            class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA));
+//        }
+//        else {
+//            // 添加失败说明本类中有methodB的实现方法,此时只需要将methodA和methodB的IMP互换
+//            method_exchangeImplementations(methodA, methodB);
+//        }
+//    });
+//}
 
 - (void)mySendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
     if ([NSStringFromClass(self.class) isEqualToString:@"UIButton"]) {

+ 24 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.h

@@ -0,0 +1,24 @@
+//
+//  KSChatConversationViewController.h
+//  GuanYueTeamManager
+//
+//  Created by 王智 on 2023/8/2.
+//
+
+#import "KSTXC2CChatViewController.h"
+#import "KSBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSChatConversationViewController : KSBaseViewController
+
+@property (nonatomic, strong) TUIChatConversationModel *conversation;
+
+// 搜索用
+@property(nonatomic, copy) NSString *highlightKeyword;
+// 搜索用
+@property(nonatomic, strong) V2TIMMessage *locateMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 84 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m

@@ -0,0 +1,84 @@
+//
+//  KSChatConversationViewController.m
+//  GuanYueTeamManager
+//
+//  Created by 王智 on 2023/8/2.
+//
+
+#import "KSChatConversationViewController.h"
+
+@interface KSChatConversationViewController ()
+
+@property (nonatomic, strong) KSTXC2CChatViewController *vc;
+
+@end
+
+@implementation KSChatConversationViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self configUI];
+    [self clearConversation];
+    [self requestData];
+}
+
+- (void)configUI {
+    self.vc = [[KSTXC2CChatViewController alloc] init];
+    if (![NSString isEmptyString:self.highlightKeyword]) {
+        self.vc.highlightKeyword = self.highlightKeyword;
+        self.vc.locateMessage = self.locateMessage;
+    }
+    self.vc.conversationData = self.conversation;
+    [self addChildViewController:self.vc];
+    [self.view addSubview:self.vc.view];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+
+    //TODO: 页面appear 禁用
+   [[IQKeyboardManager sharedManager] setEnable:NO];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+
+    //TODO: 页面Disappear 启用
+   [[IQKeyboardManager sharedManager] setEnable:YES];
+}
+
+- (void)clearConversation {
+    
+    NSString *conversationID = [NSString stringWithFormat:@"c2c_%@",self.conversation.userID];
+    [[V2TIMManager sharedInstance] cleanConversationUnreadMessageCount:conversationID cleanTimestamp:0 cleanSequence:0 succ:^{
+        
+    } fail:^(int code, NSString *desc) {
+        
+    }];
+}
+
+- (void)requestData {
+    [KSNetworkingManager imUserFriendQueryDetail:KS_POST userId:self.conversation.userID success:^(NSDictionary * _Nonnull dic) {
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSDictionary *userDic = [dic ks_dictionaryValueForKey:@"data"];
+            NSString *userName = [userDic ks_stringValueForKey:@"friendNickname"];
+            [self allocTitle:userName];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+    
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSGroupConversationController.h

@@ -6,7 +6,7 @@
 //
 
 #import "KSBaseViewController.h"
-#import "TUIGroupChatViewController.h"
+#import "KSTXGroupChatViewController.h"
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 10 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSGroupConversationController.m

@@ -9,8 +9,7 @@
 #import "GroupSettingViewController.h"
 
 @interface KSGroupConversationController ()
-
-@property (nonatomic, strong) TUIGroupChatViewController *vc;
+@property (nonatomic, strong) KSTXGroupChatViewController *vc;
 
 @end
 
@@ -50,7 +49,7 @@
 
 - (void)configUI {
     [self rightButton:[UIImage imageNamed:@"mine_setting"]];
-    self.vc = [[TUIGroupChatViewController alloc] init];
+    self.vc = [[KSTXGroupChatViewController alloc] init];
     if (![NSString isEmptyString:self.highlightKeyword]) {
         self.vc.highlightKeyword = self.highlightKeyword;
         self.vc.locateMessage = self.locateMessage;
@@ -60,6 +59,10 @@
     [self.view addSubview:self.vc.view];
 }
 
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+}
+
 - (void)rightBtnClick {
     GroupSettingViewController *ctrl = [[GroupSettingViewController alloc] init];
     ctrl.groupId = self.conversation.groupID;
@@ -86,6 +89,10 @@
             
         }];
 }
+
+#pragma mark ----- delegate
+
+
 /*
 #pragma mark - Navigation
 

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXBaseChatViewController.h

@@ -0,0 +1,22 @@
+//
+//  KSTXBaseChatViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "TUIBaseChatViewController.h"
+#import <UIKit/UIKit.h>
+#import "TUIBaseMessageController.h"
+#import "TUIChatConversationModel.h"
+#import "TUIInputController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSTXBaseChatViewController : TUIBaseChatViewController
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 158 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXBaseChatViewController.m

@@ -0,0 +1,158 @@
+//
+//  KSTXBaseChatViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "KSTXBaseChatViewController.h"
+#import <AVFoundation/AVFoundation.h>
+#import <AssetsLibrary/AssetsLibrary.h>
+#import <MobileCoreServices/MobileCoreServices.h>
+#import <Photos/Photos.h>
+#import <TIMCommon/NSString+TUIEmoji.h>
+#import <TIMCommon/TIMDefine.h>
+#import <TUICore/NSDictionary+TUISafe.h>
+#import <TUICore/TUICore.h>
+#import <TUICore/TUILogin.h>
+#import <TUICore/TUIThemeManager.h>
+#import <TUICore/TUITool.h>
+#import "ReactiveObjC/ReactiveObjC.h"
+#import "TUIAIDenoiseSignatureManager.h"
+#import "TUIBaseMessageController.h"
+#import "TUICameraViewController.h"
+#import "TUIChatConfig.h"
+#import "TUIChatDataProvider.h"
+#import "TUIChatMediaDataProvider.h"
+#import "TUIChatModifyMessageHelper.h"
+#import "TUICloudCustomDataTypeCenter.h"
+#import "TUIFileMessageCellData.h"
+#import "TUIImageMessageCellData.h"
+#import "TUIJoinGroupMessageCell.h"
+#import "TUIMessageController.h"
+#import "TUIMessageDataProvider.h"
+#import "TUIMessageMultiChooseView.h"
+#import "TUIMessageReadViewController.h"
+#import "TUIReplyMessageCellData.h"
+#import "TUITextMessageCellData.h"
+#import "TUIVideoMessageCellData.h"
+#import "TUIVoiceMessageCellData.h"
+
+#import "KSChatUserDetailViewController.h"
+#import "ShareMusicViewController.h"
+#import "MinePageViewController.h"
+#import "KSBaseWKWebViewController.h"
+
+static UIView *gCustomTopView;
+
+@interface KSTXBaseChatViewController ()
+
+@end
+
+@implementation KSTXBaseChatViewController
+
+
+
+#pragma mark - Life Cycle
+
+- (void)messageController:(TUIBaseMessageController *)controller onSelectMessageAvatar:(TUIMessageCell *)cell {
+    NSString *userID = nil;
+    if (cell.messageData.innerMessage.groupID.length > 0) {
+        userID = cell.messageData.innerMessage.sender;
+    } else {
+        if (cell.messageData.isUseMsgReceiverAvatar) {
+            if (cell.messageData.innerMessage.isSelf) {
+                userID = cell.messageData.innerMessage.userID;
+            } else {
+                userID = V2TIMManager.sharedInstance.getLoginUser;
+            }
+        } else {
+            userID = cell.messageData.innerMessage.sender;
+        }
+    }
+    
+    if (userID == nil) {
+        return;
+    }
+    // 跳转到用户详情
+    if ([userID isEqualToString:UserDefault(IM_USERID)]) {
+        [self displayMineInfo];
+    }
+    else { // 显示其他
+        if ([userID containsString:@"STUDENT"]) {
+            [self displayStudent:userID];
+        }
+        else {
+            [self displayTeacherInfo:userID];
+        }
+    }
+}
+
+- (void)displayMineInfo {
+    MinePageViewController *pageCtrl = [[MinePageViewController alloc] init];
+    [self.navigationController pushViewController:pageCtrl animated:YES];
+}
+
+
+- (void)displayTeacherInfo:(NSString *)teacherId {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/teacherHome?teacherId=", teacherId];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (void)displayStudent:(NSString *)stuentId {
+    KSChatUserDetailViewController *ctrl = [[KSChatUserDetailViewController alloc] init];
+    ctrl.rongCloudId = stuentId;
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (void)onShareMusicMoreCellData { // 分享曲谱
+    MJWeakSelf;
+    ShareMusicViewController *ctrl = [[ShareMusicViewController alloc] init];
+    [ctrl shareSongChooseCallback:^(MusicMessageModel * _Nonnull chooseModel) {
+        [weakSelf shareSongAction:chooseModel];
+    }];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+- (void)shareSongAction:(MusicMessageModel *)musicModel {
+
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"TC_CHATSHARE_MUSIC" forKey:BussinessID];
+    [parm setValue:[NSString returnNoNullStringWithString:musicModel.musicSheetName] forKey:@"songName"];
+    [parm setValue:musicModel.chargeType forKey:@"chargeType"];
+
+    [parm setValue:musicModel.composer forKey:@"songAuth"];
+
+    [parm setValue:[musicModel.addUserAvatar getUrlEndcodeString] forKey:@"teacherAvatar"];
+
+    [parm setValue:[NSString returnNoNullStringWithString:musicModel.musicSheetName] forKey:@"songName"];
+    NSString *owner = @"";
+    if ([NSString isEmptyString:musicModel.addName]) {
+        owner = [NSString stringWithFormat:@"游客%.0f",musicModel.userId];
+    }
+    else {
+        owner = musicModel.addName;
+    }
+    [parm setValue:owner forKey:@"teacherName"];
+    [parm setValue:musicModel.subjectNames forKey:@"musicTagNames"];
+    [parm setValue:[NSString stringWithFormat:@"%.0f",musicModel.internalBaseClassIdentifier] forKey:@"songId"];
+    
+    NSData *data = [NSJSONSerialization dataWithJSONObject:parm options:0 error:nil];
+    V2TIMMessage *message = [[V2TIMManager sharedInstance] createCustomMessage:data];
+    [self sendMessage:message];
+}
+
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXC2CChatViewController.h

@@ -0,0 +1,16 @@
+//
+//  KSTXC2CChatViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "KSTXBaseChatViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSTXC2CChatViewController : KSTXBaseChatViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 31 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXC2CChatViewController.m

@@ -0,0 +1,31 @@
+//
+//  KSTXC2CChatViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "KSTXC2CChatViewController.h"
+
+@interface KSTXC2CChatViewController ()
+
+@end
+
+@implementation KSTXC2CChatViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXGroupChatViewController.h

@@ -0,0 +1,16 @@
+//
+//  KSTXGroupChatViewController.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "KSTXBaseChatViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KSTXGroupChatViewController : KSTXBaseChatViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 34 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/TXCustom/KSTXGroupChatViewController.m

@@ -0,0 +1,34 @@
+//
+//  KSTXGroupChatViewController.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2023/8/10.
+//
+
+#import "KSTXGroupChatViewController.h"
+
+@interface KSTXGroupChatViewController ()
+
+@end
+
+@implementation KSTXGroupChatViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end

+ 18 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Live/Controller/LiveRoomViewController.m

@@ -32,6 +32,7 @@
 #import "KSChatLiveMessage.h"
 
 #import "LiveSeatActionView.h"
+//#import <ImSDK_Plus/V2TIMManager.h>
 
 typedef NS_ENUM(NSInteger, LIVEPAGE) {
     LIVEPAGE_PREVIEW,
@@ -295,19 +296,30 @@ typedef NS_ENUM(NSInteger, LIVEPAGE) {
 
 - (void)shareLiveRoomMessage {
     // 选择群组分享
-    KSChatLiveMessage *liveShareMsg = [[KSChatLiveMessage alloc] init];
-    liveShareMsg.roomUID = self.roomId;
+    
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"TC_CHATSHARE_LIVE" forKey:@"businessID"];
+    [parm setValue:@"TXLiveShareCell" forKey:@"TMessageCell_Name"];
+    [parm setValue:@"TXLiveShareMessage" forKey:@"TMessageCell_Name"];
+    
     NSString *teacherName = UserDefaultObjectForKey(NicknameKey);
     if ([NSString isEmptyString:teacherName]) {
         teacherName = [NSString stringWithFormat:@"游客%@",UserDefaultObjectForKey(UIDKey)];
     }
-    liveShareMsg.teacherName = teacherName;
-    liveShareMsg.teacherAvatar = UserDefaultObjectForKey(AvatarUrlKey);
-    liveShareMsg.liveDescMessage = self.liveContent;
+    [parm setValue:self.roomId forKey:@"roomUID"];
+    [parm setValue:teacherName forKey:@"teacherName"];
+    [parm setValue:UserDefaultObjectForKey(AvatarUrlKey) forKey:@"teacherAvatar"];
+    [parm setValue:self.liveContent forKey:@"liveContent"];
+    
+    NSData *data = [NSJSONSerialization dataWithJSONObject:parm options:0 error:nil];
+    
     
     KSShareChooseViewController *chooseCtrl = [[KSShareChooseViewController alloc] init];
-    chooseCtrl.msgContent = liveShareMsg;
+    chooseCtrl.msgData = data;
     [self.navigationController pushViewController:chooseCtrl animated:YES];
+    
+    
+    
 }
 
 - (void)displayBeautyView {

+ 3 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/FirstSettingViewController.m

@@ -108,8 +108,9 @@
             UserDefaultSet(self.phone, PHONEKEY);
             UserDefaultSet(self.access_token, TokenKey);
             UserDefaultSet(pwdCode, PASSWORDKEY);
-            [self KSShowMsg:@"设置成功" promptCompletion:^{
-                [weakSelf toHomeView];
+            
+            [USER_MANAGER queryUserInfoConnectionIMCallback:^(UserInfo * _Nonnull userInfo) {
+                [self toHomeView];
             }];
         }
         else {

+ 4 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/PasswordLoginController.m

@@ -52,12 +52,8 @@
         [weakSelf operationAction:action parm:parm];
     }];
     
-    if (@available(iOS 11.0, *)) {
-        self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-    } else {
-        // Fallback on earlier versions
-        self.automaticallyAdjustsScrollViewInsets = NO;
-    }
+    self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+    
 }
 
 - (void)operationAction:(PWDLOGIN)action parm:(NSDictionary *)parm {
@@ -84,11 +80,8 @@
                 [[NSUserDefaults standardUserDefaults] synchronize];
                 [KSNetworkingManager configRequestHeader];
                 
-                // 获取用户信息并登录融云
-                [USER_MANAGER queryUserInfoSendLoginUMCount];
-                MJWeakSelf;
-                [self KSShowMsg:@"登录成功" promptCompletion:^{
-                    [weakSelf toHomeView];
+                [USER_MANAGER queryUserInfoConnectionIMCallback:^(UserInfo * _Nonnull userInfo) {
+                    [self toHomeView];
                 }];
             }
             else {

+ 11 - 19
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Controller/VefiCodeLoginController.m

@@ -52,13 +52,7 @@
     [_bodyView vefiLoginCallback:^(VEFIACTION action, NSString * _Nonnull code) {
         [weakSelf operationAction:action code:code];
     }];
-    if (@available(iOS 11.0, *)) {
-        self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-    } else {
-        // Fallback on earlier versions
-        self.automaticallyAdjustsScrollViewInsets = NO;
-    }
-    
+    self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
 }
 
 - (void)operationAction:(VEFIACTION)action code:(NSString *)code {
@@ -142,7 +136,7 @@
         if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
             NSDictionary *result = [dic ks_dictionaryValueForKey:@"data"];
             // 保存用户类型
-            UserDefaultSet([result ks_stringValueForKey:@"companyId"], OrganizationIDKey);
+//            UserDefaultSet([result ks_stringValueForKey:@"companyId"], OrganizationIDKey);
             UserDefaultSet(self.phoneNo, PHONEKEY);
             UserDefaultRemoveObjectForKey(PASSWORDKEY);
             NSDictionary *authentication = [result ks_dictionaryValueForKey:@"authentication"];
@@ -152,17 +146,15 @@
             [[NSUserDefaults standardUserDefaults] synchronize];
             [KSNetworkingManager configRequestHeader];
             
-            // 获取用户信息并登录融云
-            [USER_MANAGER queryUserInfoSendLoginUMCount];
-            MJWeakSelf;
-            [self KSShowMsg:@"登录成功" promptCompletion:^{
-                if ([result ks_boolValueForKey:@"password"] == YES) {
-                    [weakSelf toHomeView];
-                }
-                else { // 第一次登录,跳转到设置界面
-                    [weakSelf settingPasswordWithPhone:self.phoneNo code:code];
-                }
-            }];
+            BOOL hasPassword = [result ks_boolValueForKey:@"password"];
+            if (hasPassword) {
+                [USER_MANAGER queryUserInfoConnectionIMCallback:^(UserInfo * _Nonnull userInfo) {
+                    [self toHomeView];
+                }];
+            }
+            else {
+                [self settingPasswordWithPhone:self.phoneNo code:code];
+            }
         }
         else {
             [self MBPShow:MESSAGEKEY];

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSShareChooseViewController.h

@@ -9,7 +9,6 @@
 #import <RongIMKit/RongIMKit.h>
 #import "JXCategoryView.h"
 #import "JXPagerView.h"
-
 // 选择分享到的群组或个人
 
 NS_ASSUME_NONNULL_BEGIN
@@ -18,6 +17,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) RCMessageContent *msgContent;
 
+@property (nonatomic, strong) NSData *msgData;
+
+
 @property (nonatomic, strong) JXPagerView *pagerView;
 @property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;
 @property (nonatomic, strong) NSArray <NSString *> *titles;

+ 26 - 5
KulexiuForTeacher/KulexiuForTeacher/Module/MidiPlayer/ShareInChat/Controller/KSShareChooseViewController.m

@@ -10,6 +10,8 @@
 #import "JXCategoryView.h"
 #import "JXPagerListRefreshView.h"
 #import "ShareChooseMainView.h"
+#import <ImSDK_Plus/V2TIMManager.h>
+#import <TUIChat/TUIMessageDataProvider.h>
 
 @interface KSShareChooseViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
 
@@ -157,18 +159,37 @@
 }
 
 - (void)sendShareMessage:(NSString *)targetId isGroup:(BOOL)isGroup {
-    RCConversationType conversationType = isGroup ? ConversationType_GROUP : ConversationType_PRIVATE;
-    RCMessage *sendMessage = [[RCMessage alloc] initWithType:conversationType targetId:targetId direction:MessageDirection_SEND content:self.msgContent];
-    [[RCIM sharedRCIM] sendMessage:sendMessage pushContent:nil pushData:nil successBlock:^(RCMessage *successMessage) {
+    
+    V2TIMMessage *message = [[V2TIMManager sharedInstance] createCustomMessage:self.msgData];
+
+//    TUIMessageCellData *cellData = [TUIMessageDataProvider getCellData:message];
+    NSString *userId = isGroup ? nil : targetId;
+    NSString *groupId = isGroup ? targetId : targetId;
+    [[V2TIMManager sharedInstance] sendMessage:message receiver:userId groupID:groupId priority:V2TIM_PRIORITY_NORMAL onlineUserOnly:NO offlinePushInfo:nil progress:^(uint32_t progress) {
+        
+    } succ:^{
         dispatch_main_async_safe(^{
             [self MBPShow:@"分享成功"];
         });
-        
-    } errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
+    } fail:^(int code, NSString *desc) {
         dispatch_main_async_safe(^{
             [self MBPShow:@"分享失败"];
         });
     }];
+    
+    
+//    RCConversationType conversationType = isGroup ? ConversationType_GROUP : ConversationType_PRIVATE;
+//    RCMessage *sendMessage = [[RCMessage alloc] initWithType:conversationType targetId:targetId direction:MessageDirection_SEND content:self.msgContent];
+//    [[RCIM sharedRCIM] sendMessage:sendMessage pushContent:nil pushData:nil successBlock:^(RCMessage *successMessage) {
+//        dispatch_main_async_safe(^{
+//            [self MBPShow:@"分享成功"];
+//        });
+//        
+//    } errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
+//        dispatch_main_async_safe(^{
+//            [self MBPShow:@"分享失败"];
+//        });
+//    }];
 }
 
 #pragma mark - JXCategoryViewDelegate

+ 48 - 0
KulexiuForTeacher/Pods/Pods.xcodeproj/project.pbxproj

@@ -1271,6 +1271,18 @@
 		BBEB30CEF493035F2536602CCC874F41 /* JXCategoryIndicatorBallView.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0D31E40EBAA80446D600B52CBDD4DD /* JXCategoryIndicatorBallView.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		BBF4B0E0723F4404348C63FD42AA1F27 /* RACDynamicSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B883637A984026726D78C91D8260E72 /* RACDynamicSequence.h */; settings = {ATTRIBUTES = (Project, ); }; };
 		BBFC886BE411643AB497EFBE521E8051 /* TUISearchDataProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = D627D4CE77E8608AB53F57E288689EB6 /* TUISearchDataProvider.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
+		BC000D7A2A84754C006C5A89 /* TXChatMusicMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D782A84754C006C5A89 /* TXChatMusicMessage.h */; };
+		BC000D7B2A84754C006C5A89 /* TXChatMusicMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D792A84754C006C5A89 /* TXChatMusicMessage.m */; };
+		BC000D7E2A847958006C5A89 /* TXChatMusicShareCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D7C2A847958006C5A89 /* TXChatMusicShareCell.h */; };
+		BC000D7F2A847958006C5A89 /* TXChatMusicShareCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D7D2A847958006C5A89 /* TXChatMusicShareCell.m */; };
+		BC000D822A847A5A006C5A89 /* TXShareMusicCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D802A847A5A006C5A89 /* TXShareMusicCellContentView.h */; };
+		BC000D832A847A5A006C5A89 /* TXShareMusicCellContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D812A847A5A006C5A89 /* TXShareMusicCellContentView.m */; };
+		BC000D8D2A8485AA006C5A89 /* TXLiveShareMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D8B2A8485AA006C5A89 /* TXLiveShareMessage.h */; };
+		BC000D8E2A8485AA006C5A89 /* TXLiveShareMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D8C2A8485AA006C5A89 /* TXLiveShareMessage.m */; };
+		BC000D912A8487A4006C5A89 /* TXLiveShareCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D8F2A8487A4006C5A89 /* TXLiveShareCell.h */; };
+		BC000D922A8487A4006C5A89 /* TXLiveShareCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D902A8487A4006C5A89 /* TXLiveShareCell.m */; };
+		BC000D952A84882F006C5A89 /* TXShareLiveCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC000D932A84882F006C5A89 /* TXShareLiveCellContentView.h */; };
+		BC000D962A84882F006C5A89 /* TXShareLiveCellContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC000D942A84882F006C5A89 /* TXShareLiveCellContentView.m */; };
 		BC0D261DD177DBE4F45A2F3739CB8BE9 /* RACEXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 811F22F18C98CBBA5B60D44FBDC0F05C /* RACEXTRuntimeExtensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		BC1EDD9E04A0BADA5B6044EA69BFF1B2 /* KS3UploadPartRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = C5120B51F59F27997FB137A8E3BFA058 /* KS3UploadPartRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
 		BCC1FA5B68BCA0938ADCA00D436CBC64 /* JXCategoryImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = D86736D4482D129B7E904AB88D97AC5D /* JXCategoryImageView.h */; settings = {ATTRIBUTES = (Project, ); }; };
@@ -3526,6 +3538,18 @@
 		BB742B076B8D4CFAABDEB5A0F649B035 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = "<group>"; };
 		BBA27A104EEE6D5779354E109060D8C0 /* TUIRecordView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TUIRecordView.m; path = TUIChat/UI_Classic/Input/TUIRecordView.m; sourceTree = "<group>"; };
 		BBB568F8B9F4A2E3A4D8864D8FEDEC6F /* KS3SetGrantACLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KS3SetGrantACLRequest.m; path = KS3YunSDK/KS3YunSDK/KSYS3/KSYModel/Bucket/KS3SetGrantACLRequest.m; sourceTree = "<group>"; };
+		BC000D782A84754C006C5A89 /* TXChatMusicMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXChatMusicMessage.h; sourceTree = "<group>"; };
+		BC000D792A84754C006C5A89 /* TXChatMusicMessage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXChatMusicMessage.m; sourceTree = "<group>"; };
+		BC000D7C2A847958006C5A89 /* TXChatMusicShareCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXChatMusicShareCell.h; sourceTree = "<group>"; };
+		BC000D7D2A847958006C5A89 /* TXChatMusicShareCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXChatMusicShareCell.m; sourceTree = "<group>"; };
+		BC000D802A847A5A006C5A89 /* TXShareMusicCellContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXShareMusicCellContentView.h; sourceTree = "<group>"; };
+		BC000D812A847A5A006C5A89 /* TXShareMusicCellContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXShareMusicCellContentView.m; sourceTree = "<group>"; };
+		BC000D8B2A8485AA006C5A89 /* TXLiveShareMessage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXLiveShareMessage.h; sourceTree = "<group>"; };
+		BC000D8C2A8485AA006C5A89 /* TXLiveShareMessage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXLiveShareMessage.m; sourceTree = "<group>"; };
+		BC000D8F2A8487A4006C5A89 /* TXLiveShareCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXLiveShareCell.h; sourceTree = "<group>"; };
+		BC000D902A8487A4006C5A89 /* TXLiveShareCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXLiveShareCell.m; sourceTree = "<group>"; };
+		BC000D932A84882F006C5A89 /* TXShareLiveCellContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TXShareLiveCellContentView.h; sourceTree = "<group>"; };
+		BC000D942A84882F006C5A89 /* TXShareLiveCellContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TXShareLiveCellContentView.m; sourceTree = "<group>"; };
 		BC336E9724418B752ADBCE0D13213453 /* RACSignal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RACSignal.m; path = ReactiveObjC/RACSignal.m; sourceTree = "<group>"; };
 		BC7EBF3D6FFBC79807CE53C19412447E /* NSDictionary+TUISafe.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+TUISafe.m"; path = "TUICore/NSDictionary+TUISafe.m"; sourceTree = "<group>"; };
 		BCB927E8F6B371CBEA8EF5B5E5A4982F /* TUICoreTheme_Minimalist.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = TUICoreTheme_Minimalist.bundle; path = TUICore/Resources/TUICoreTheme_Minimalist.bundle; sourceTree = "<group>"; };
@@ -5151,6 +5175,10 @@
 				D1F7896BFD80EBA2C075D7F4BF7D2A5D /* TUILinkCellData.m */,
 				F3BE80BC78F5B3D13CAAD60DE5F66FE8 /* TUIOrderCellData.h */,
 				FA9F29474EDCE82AD12CA15A59D5E23B /* TUIOrderCellData.m */,
+				BC000D782A84754C006C5A89 /* TXChatMusicMessage.h */,
+				BC000D792A84754C006C5A89 /* TXChatMusicMessage.m */,
+				BC000D8B2A8485AA006C5A89 /* TXLiveShareMessage.h */,
+				BC000D8C2A8485AA006C5A89 /* TXLiveShareMessage.m */,
 			);
 			name = Custom;
 			sourceTree = "<group>";
@@ -6114,6 +6142,14 @@
 				C3105F9AE69ABA1958BAF56D5BEBD2D9 /* TUILinkCell.m */,
 				D0D81C573836FCB706F9FECBC6549596 /* TUIOrderCell.h */,
 				1374C13021B680E8C3226CF4C29BA33C /* TUIOrderCell.m */,
+				BC000D7C2A847958006C5A89 /* TXChatMusicShareCell.h */,
+				BC000D7D2A847958006C5A89 /* TXChatMusicShareCell.m */,
+				BC000D802A847A5A006C5A89 /* TXShareMusicCellContentView.h */,
+				BC000D812A847A5A006C5A89 /* TXShareMusicCellContentView.m */,
+				BC000D8F2A8487A4006C5A89 /* TXLiveShareCell.h */,
+				BC000D902A8487A4006C5A89 /* TXLiveShareCell.m */,
+				BC000D932A84882F006C5A89 /* TXShareLiveCellContentView.h */,
+				BC000D942A84882F006C5A89 /* TXShareLiveCellContentView.m */,
 			);
 			name = Custom;
 			sourceTree = "<group>";
@@ -8561,12 +8597,15 @@
 				96B1BBC9681E6BFB65728DF8CDBE1B7B /* TUIBaseMessageControllerDelegate.h in Headers */,
 				36CEB9F51D286324651A594D07BFA751 /* TUIC2CChatViewController.h in Headers */,
 				0B53CD1F26EDC95E697A45F12E285F58 /* TUICameraMacro.h in Headers */,
+				BC000D7A2A84754C006C5A89 /* TXChatMusicMessage.h in Headers */,
+				BC000D7E2A847958006C5A89 /* TXChatMusicShareCell.h in Headers */,
 				A3A6ED4F1AD3FB8B911C96A98A5FA071 /* TUICameraManager.h in Headers */,
 				C8D475D4A5E9019C29A7C4A2D08D23F2 /* TUICameraView.h in Headers */,
 				0EA03A10C0E8127A6450E6BCF3FB9934 /* TUICameraViewController.h in Headers */,
 				03F354AD3424DE08D608A9180CF8FBD3 /* TUICaptureImagePreviewController.h in Headers */,
 				44254863FECBBD77A93AC5880E9C6E96 /* TUICaptureTimer.h in Headers */,
 				6EDE0463796DB2D872B894459B84CDE6 /* TUICaptureVideoPreviewView.h in Headers */,
+				BC000D952A84882F006C5A89 /* TXShareLiveCellContentView.h in Headers */,
 				FD59DC633DC04CB9736D429FE9077D96 /* TUICaptureVideoPreviewViewController.h in Headers */,
 				0B770C18A1495B78F90AB689CEF48CFC /* TUIChat.h in Headers */,
 				406ADD61A6C416AF8854294931CBC40B /* TUIChatBaseDataProvider.h in Headers */,
@@ -8600,10 +8639,12 @@
 				5526C59B7411EED2262C23ED55A5B0D5 /* TUIFaceView.h in Headers */,
 				33B3BDE21A3D97158936B3CA2470D845 /* TUIFileMessageCell.h in Headers */,
 				DB8E3E4E824F028249CAABC72A45F971 /* TUIFileMessageCellData.h in Headers */,
+				BC000D822A847A5A006C5A89 /* TXShareMusicCellContentView.h in Headers */,
 				295B993E30DE25BCDCE05AC6506538CC /* TUIFileReplyQuoteView.h in Headers */,
 				CA2D2C0F60DAD45B66D3F582BB8113E2 /* TUIFileReplyQuoteViewData.h in Headers */,
 				D9476BD021568CA756F21728046A44CA /* TUIFileViewController.h in Headers */,
 				ACF56BB50C3EF36ABD7CEFBDCA698B5E /* TUIGroupChatViewController.h in Headers */,
+				BC000D912A8487A4006C5A89 /* TXLiveShareCell.h in Headers */,
 				9DA56199A4C224554E3F9691B05F3255 /* TUIGroupCreatedCell.h in Headers */,
 				3796195498A920A011B9E6E68FC13C5C /* TUIGroupCreatedCellData.h in Headers */,
 				757B1AF417B8C164813ADF87F8B79A63 /* TUIGroupPendencyController.h in Headers */,
@@ -8613,6 +8654,7 @@
 				76328BEE903A54489309118D566FDC39 /* TUIImageMessageCellData.h in Headers */,
 				6F73E6A53C6DF25EDEFDA3E50A7ADB15 /* TUIImageReplyQuoteView.h in Headers */,
 				384125CCAEB5EA8050256BA26AC8C5AD /* TUIImageReplyQuoteViewData.h in Headers */,
+				BC000D8D2A8485AA006C5A89 /* TXLiveShareMessage.h in Headers */,
 				6914DB02886E751FB014ED8B52D6A6F3 /* TUIInputBar.h in Headers */,
 				E92DA4237208A8662106CEE487537820 /* TUIInputController.h in Headers */,
 				7D465A673D794C469054BBD91079AE0E /* TUIInputMoreCell.h in Headers */,
@@ -10299,13 +10341,16 @@
 				FBF97B63EF3AAE5AB3E9305D39546A4D /* TUIBaseChatViewController.m in Sources */,
 				8C2C7A3087C698DA6CA9391799770360 /* TUIBaseMessageController.m in Sources */,
 				030ADE86BCA863E7B0D1F7EB335BA151 /* TUIC2CChatViewController.m in Sources */,
+				BC000D832A847A5A006C5A89 /* TXShareMusicCellContentView.m in Sources */,
 				86A60AC7707AE7FCB23CE5B87AC6EEB5 /* TUICameraManager.m in Sources */,
+				BC000D7B2A84754C006C5A89 /* TXChatMusicMessage.m in Sources */,
 				09E26E7F06C7A147E09FCEBFC6436931 /* TUICameraView.m in Sources */,
 				F2CC0A46554A7ED790AC2421E508DCF8 /* TUICameraViewController.m in Sources */,
 				4D0C219B5F0144D3365AD39474D9E588 /* TUICaptureImagePreviewController.m in Sources */,
 				9BAACAB354ED818B4D52F6FD6297126A /* TUICaptureTimer.m in Sources */,
 				CD766FCB7EB160F3EA4C20E5C79D5CF5 /* TUICaptureVideoPreviewView.m in Sources */,
 				C3C8985F54DD6023E356E1D20B598E4C /* TUICaptureVideoPreviewViewController.m in Sources */,
+				BC000D922A8487A4006C5A89 /* TXLiveShareCell.m in Sources */,
 				14B1243AA8EC4E2923B4F6DE3609123A /* TUIChat-dummy.m in Sources */,
 				139E708DD01055CCFE88C359B7E23A63 /* TUIChatBaseDataProvider.m in Sources */,
 				1ACA95766A1FCCC3288EB097249A5890 /* TUIChatCallingDataProvider.m in Sources */,
@@ -10321,6 +10366,7 @@
 				8E151B2C8F189B478B9487F52960B665 /* TUIChatPopActionsView.m in Sources */,
 				31D9E789B5200211E6CCFDAB9304809B /* TUIChatPopContextController.m in Sources */,
 				20F4471B195DF00B49B3DC7C97B2109D /* TUIChatPopContextRecentView.m in Sources */,
+				BC000D962A84882F006C5A89 /* TXShareLiveCellContentView.m in Sources */,
 				A797DAEDB6339E20563B244D96E98A7A /* TUIChatPopEmojiView.m in Sources */,
 				4E4F7BADB9CDC977A4D40B8099FCD704 /* TUIChatPopMenu.m in Sources */,
 				AEAD2F1ED8BCC0B2CD1FD532A3BAEC78 /* TUIChatPopRecentView.m in Sources */,
@@ -10357,6 +10403,7 @@
 				0A4354BDFC70E03C0525816EF7CD5609 /* TUIJoinGroupMessageCell.m in Sources */,
 				8848E0FB2982D3FB25CE93187BC0F2BE /* TUIJoinGroupMessageCellData.m in Sources */,
 				4A3D9CD4DB60050134D3233B7942BBC9 /* TUILinkCell.m in Sources */,
+				BC000D8E2A8485AA006C5A89 /* TXLiveShareMessage.m in Sources */,
 				B50A508D4499705229010EEE37141E28 /* TUILinkCellData.m in Sources */,
 				F55DD7857BBF6EDD14E60073A18B60AF /* TUIMediaCollectionCell.m in Sources */,
 				52ABBF78F6F0EE368C50106E1B3C7CD3 /* TUIMediaView.m in Sources */,
@@ -10406,6 +10453,7 @@
 				884DCC42D3BF4FA35BA5738DA503F622 /* TUIVideoMessageCellData.m in Sources */,
 				4A871DE9C550ECAC36160A4F747DCE16 /* TUIVideoReplyQuoteView.m in Sources */,
 				9738EC79EC924DE929754886FC5DBC1F /* TUIVideoReplyQuoteViewData.m in Sources */,
+				BC000D7F2A847958006C5A89 /* TXChatMusicShareCell.m in Sources */,
 				7A32F032CD2A6642B053618B7AE5F11E /* TUIVoiceMessageCell.m in Sources */,
 				12B8441B75186941B331180177771F43 /* TUIVoiceMessageCellData.m in Sources */,
 				A15C53FCEF3783174A757676A44DDCD3 /* TUIVoiceReplyQuoteView.m in Sources */,