Files
peko-ios/YuMi/Modules/YMTabbar/View/TabbarViewController.m

1166 lines
50 KiB
Mathematica
Raw Normal View History

2023-07-14 18:50:55 +08:00
//
// ViewController.m
// YUMI
//
// Created by admin on 2023/3/9.
//
#import <UIKit/UIKit.h>
///Third
#import <ReactiveObjC/ReactiveObjC.h>
#import <NIMSDK/NIMSDK.h>
#import <Masonry/Masonry.h>
#import <AudioToolbox/AudioToolbox.h>
#import <AFNetworkReachabilityManager.h>
#import <POP.h>
2023-07-18 18:26:10 +08:00
#import <AFNetworking.h>
2023-07-14 18:50:55 +08:00
///Tool
#import "YUMIMacroUitls.h"
#import "DJDKMIMOMColor.h"
#import "UIImage+Utils.h"
#import "NSObject+MJExtension.h"
#import "XNDJTDDLoadingTool.h"
#import "AccountInfoStorage.h"
#import "TTPopup.h"
#import "YUMIConstant.h"
#import "XPRoomMiniManager.h"
#import "ClientConfig.h"
#import "RtcManager.h"
#import "XCCurrentVCStackManager.h"
#import "Api+Home.h"
#import "YUMIConstant.h"
#import "StatisticsServiceHelper.h"
2024-07-17 17:49:33 +08:00
#import "Api+Moments.h"
2023-07-14 18:50:55 +08:00
#import "XPAdImageTool.h"
#import "YYUtility.h"
#import "XPWeakTimer.h"
#import "PLTimeUtil.h"
2024-05-31 19:56:25 +08:00
#import "Api+MSRoomGameApi.h"
2023-07-14 18:50:55 +08:00
///Model
2024-05-31 19:56:25 +08:00
#import "MSRoomGameModel.h"
2023-07-14 18:50:55 +08:00
#import "AccountModel.h"
#import "RoomInfoModel.h"
#import "AttachmentModel.h"
#import "XPMineVisitorUnReadModel.h"
#import "InviteUserInfoModel.h"
#import "NewUserGreetModel.h"
#import "FindNewGreetMessageModel.h"
#import "XPTabAnchorCardModel.h"
#import "FirstRechargeModel.h"
#import "MonentsUnReadModel.h"
2023-10-26 15:20:20 +08:00
#import "XPRedPacketModel.h"
2023-07-14 18:50:55 +08:00
#import "GiftReceiveInfoModel.h"
#import "XPVersionUpdateModel.h"
2024-05-31 19:56:25 +08:00
#import "MSRoomGameQuitGameView.h"
2023-07-14 18:50:55 +08:00
///VC
#import "TabbarViewController.h"
#import "XPBlankViewController.h"
#import "XPLoginViewController.h"
#import "BaseNavigationController.h"
#import "LoginBindPhoneViewController.h"
#import "LoginFullInfoViewController.h"
#import "XPMineViewController.h"
2023-09-22 12:20:43 +08:00
#import "XPSessionMainViewController.h"
2023-07-14 18:50:55 +08:00
#import "XPMiniRoomView.h"
#import "XPRoomViewController.h"
#import "XPSessionFindNewAlertView.h"
#import "XPAnchorCardView.h"
#import "XPTaskCompleteTipView.h"
#import "XPWebViewController.h"
#import "XPMineUserInfoViewController.h"
2024-05-28 18:05:42 +08:00
#import "MSTabbarRoomGameVC.h"
2024-05-31 19:56:25 +08:00
#import "MSRoomGameVC.h"
2024-07-17 17:49:33 +08:00
#import "XPMomentsRecommendViewController.h"
2024-06-17 17:20:08 +08:00
#import "XPMomentsViewController.h"
2023-07-14 18:50:55 +08:00
#import "XPReceiveRedPacketView.h"
#import "XPRoomYearActivityView.h"
#import "XPUpgradeView.h"
2023-08-14 14:39:41 +08:00
#import "XPLoginAuthCodeVC.h"
2023-07-14 18:50:55 +08:00
///Present
#import "MainPresenter.h"
#import "MainProtocol.h"
#import "RoomHostDelegate.h"
#import "XPSkillCardPlayerManager.h"
#import "PIFullScreenBannerAnimation.h"
#import <SVGA.h>
2023-07-18 18:26:10 +08:00
#import "Api+Gift.h"
2024-03-26 14:56:55 +08:00
#import "UploadFile.h"
2024-05-31 19:56:25 +08:00
#import "XPTabBar.h"
2023-10-24 10:48:57 +08:00
2024-06-17 17:20:08 +08:00
#import "XPHomePagingViewController.h"
2023-10-24 10:48:57 +08:00
2024-09-27 11:17:04 +08:00
#import "IAPManager.h"
2024-10-10 20:16:23 +08:00
#import "RoomBoomManager.h"
#import "RoomBoomBannerAnimation.h"
2024-09-27 11:17:04 +08:00
2023-07-14 18:50:55 +08:00
NSString * const kUserFirstLoginKey = @"kUserFirstLoginKey";
NSString * const kHadLaunchApp = @"kHadLaunchApp";
NSString * const kLastShowAnchorCardTime = @"kLastShowAnchorCardTime";
NSString * const kNetworkReachabilityKey = @"kNetworkReachabilityKey";
UIKIT_EXTERN NSString * kNewUserRechargeKey;
UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
2024-05-31 19:56:25 +08:00
@interface TabbarViewController () <BaseMvpProtocol, MainProtocol, NIMLoginManagerDelegate, NIMSystemNotificationManagerDelegate, NIMChatManagerDelegate,XPLoginAuthCodeVCDelegate, XPAnchorCardViewDelegate, NIMBroadcastManagerDelegate, XPRoomYearActivityViewDelegate,MSRoomGameQuitGameViewDelegate>
2023-07-14 18:50:55 +08:00
{
2024-05-15 17:35:51 +08:00
NSTimer * timer;
2023-07-14 18:50:55 +08:00
}
2023-10-07 16:21:47 +08:00
///
2023-10-07 18:42:30 +08:00
@property (nonatomic,strong) UserInfoModel *userInfo;
2023-07-14 18:50:55 +08:00
@property (nonatomic, strong) MainPresenter *presenter;
///
@property (nonatomic,strong) XPMiniRoomView *roomMineView;
///
@property (nonatomic, assign) BOOL needShowNewUserRecharge;
///(
@property (nonatomic, assign) BOOL needShowAnchorCard;
///
@property (nonatomic, assign) BOOL delayShowAnchorCard;
///
@property (nonatomic, strong) XPAnchorCardView *anchorCardView;
///
@property (nonatomic, strong) XPTaskCompleteTipView *taskTipView;
///广
@property (nonatomic,strong) NSMutableArray<GiftReceiveInfoModel *> *giftBroadcastQueue;
///
@property (nonatomic,assign) BOOL isFirstReachability;
///
@property (nonatomic,assign) BOOL isReload;
2023-09-27 12:35:29 +08:00
///
@property (nonatomic,assign) BOOL isInitReload;
2023-11-20 14:25:47 +08:00
@property(nonatomic,assign) BOOL isReloadTicket;
2023-07-14 18:50:55 +08:00
///
@property(nonatomic,strong) PIFullScreenBannerAnimation *roomAnimation;
2023-07-21 14:07:04 +08:00
2023-07-14 18:50:55 +08:00
@end
@implementation TabbarViewController
2023-10-07 16:21:47 +08:00
- (void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self];
[[NIMSDK sharedSDK].loginManager removeDelegate:self];
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
[[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self];
[[NIMSDK sharedSDK].broadcastManager removeDelegate:self];
}
2023-07-14 18:50:55 +08:00
- (void)viewDidLoad {
2023-07-18 18:26:10 +08:00
[super viewDidLoad];
2024-06-03 10:51:16 +08:00
self.tabBarController.tabBar.translucent = NO;
2023-10-10 15:45:37 +08:00
[self.presenter autoLogin];
2023-07-14 18:50:55 +08:00
[self initTabs:NO];
2024-06-17 17:20:08 +08:00
[[ClientConfig shareConfig] clientInit];
2023-07-14 18:50:55 +08:00
[[NIMSDK sharedSDK].loginManager addDelegate:self];
2023-07-18 18:26:10 +08:00
[[NIMSDK sharedSDK].chatManager addDelegate:self];
[[NIMSDK sharedSDK].systemNotificationManager addDelegate:self];
[[NIMSDK sharedSDK].broadcastManager addDelegate:self];
2024-10-10 20:16:23 +08:00
2023-07-18 18:26:10 +08:00
[self networkReachability];
[self.view addSubview:self.roomMineView];
2024-06-17 17:20:08 +08:00
2023-10-07 18:42:30 +08:00
@kWeakify(self);
2023-07-18 18:26:10 +08:00
[[NSNotificationCenter defaultCenter] addObserverForName:kRoomMiniNotificationKey object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
2023-10-07 18:42:30 +08:00
@kStrongify(self);
2023-07-18 18:26:10 +08:00
[self configRoomMiniNView:note.userInfo];
}];
2024-06-17 17:20:08 +08:00
[[NSNotificationCenter defaultCenter] addObserverForName:@"reloadAfterLoadConfig"
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
2023-10-07 18:42:30 +08:00
@kStrongify(self);
2023-09-27 12:35:29 +08:00
if (self.isInitReload == NO) {
2023-07-18 18:26:10 +08:00
[self initTabs:YES];
self.isReload = YES;
}
}];
2023-07-14 18:50:55 +08:00
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNewUserRecharge) name:kNewUserRechargeKey object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showAnchorCardKey:) name:kTabShowAnchorCardKey object:nil];
2024-04-08 18:55:15 +08:00
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(switchLanguage:) name:@"kSwitchLanguage" object:nil];
2024-10-10 20:16:23 +08:00
[[ClientConfig shareConfig] setUpdateNormalTabImage:^(UIImage * _Nonnull normalImage, NSInteger index) {
@kStrongify(self);
BaseNavigationController *vc = [self.viewControllers xpSafeObjectAtIndex:index];
vc.tabBarItem.image = [normalImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}];
[[ClientConfig shareConfig] setUpdateSelectedTabImage:^(UIImage * _Nonnull selectImage, NSInteger index) {
@kStrongify(self);
BaseNavigationController *vc = [self.viewControllers xpSafeObjectAtIndex:index];
vc.tabBarItem.selectedImage = [selectImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}];
[[ClientConfig shareConfig] setUpdateTabbarBG:^(UIImage * _Nonnull image) {
@kStrongify(self);
[self configTheme:image];
}];
2024-11-06 17:57:32 +08:00
[self configTheme:[[ClientConfig shareConfig] tabbarBGImage]];
[[ClientConfig shareConfig] loadTabImages];
2024-10-10 20:16:23 +08:00
[[RoomBoomManager sharedManager] registerBoomBanner:^(id _Nonnull sth) {
dispatch_async(dispatch_get_main_queue(), ^{
[RoomBoomBannerAnimation display:kWindow
with:sth
tapToRoom:YES
complete:^{}];
2024-10-10 20:16:23 +08:00
});
} target:self];
2023-07-14 18:50:55 +08:00
}
2024-07-05 17:15:16 +08:00
2024-04-08 18:55:15 +08:00
-(void)switchLanguage:(NSNotification *)not{
[self initTabs:YES];
2024-06-03 11:45:47 +08:00
self.selectedIndex = 4;
2024-04-08 18:55:15 +08:00
}
2024-07-05 17:15:16 +08:00
2023-07-14 18:50:55 +08:00
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
2023-11-20 14:25:47 +08:00
self.isReloadTicket = YES;
2023-07-18 18:26:10 +08:00
if ([XPRoomMiniManager shareManager].getRoomInfo == nil) {
[self.roomMineView hiddenRoomMiniView];
}
2023-07-14 18:50:55 +08:00
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.delayShowAnchorCard = NO;
[self.anchorCardView removeFromSuperview];
self.anchorCardView = nil;
}
- (MainPresenter *)presenter {
if (_presenter == nil) {
_presenter = [[MainPresenter alloc] init];
[_presenter attatchView:self];
}
return _presenter;
}
/** tokenticket
2023-07-18 18:26:10 +08:00
1.
2.
3. VP
2023-07-14 18:50:55 +08:00
*/
- (void)autoLoginSuccess {
[self.presenter loginNIM];
[self.presenter getUserInfo];
2024-03-26 14:56:55 +08:00
[[UploadFile share]initQCloud];
2024-09-27 11:17:04 +08:00
2023-07-18 18:26:10 +08:00
///
[self.presenter getVersionUpdate];
if (self.inviteCode && self.inviteCode.length > 0) {
///
[self.presenter checkInviteUserInfo:self.inviteCode];
2023-07-18 18:26:10 +08:00
}
[self requestGiftList];
XPAdImageTool.shareImageTool.isImLogin = YES;
if ([self hadLaunchApp] && [self canShowAnchorCard]) {
@kWeakify(self);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@kStrongify(self);
if (self.view.window && self.isViewLoaded) {
[self.presenter getAnchorCardInfo];
}
});
}
if (self.needShowAnchorCard && !self.delayShowAnchorCard) {
[self.presenter getAnchorCardInfo];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:kHadLaunchApp];///
[[NSUserDefaults standardUserDefaults] synchronize];
2023-07-18 18:26:10 +08:00
}
2024-09-27 11:17:04 +08:00
[[IAPManager sharedManager] handleLogin];
[[IAPManager sharedManager] retryCheckAllReceipt];
2023-07-14 18:50:55 +08:00
}
2024-05-31 19:56:25 +08:00
-(void)getRoomGameInfo{
2024-06-03 18:59:43 +08:00
[Api getRoomGameDetailsForHoem:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
2024-05-31 19:56:25 +08:00
if(code == 200){
MSRoomGameModel *model = [MSRoomGameModel modelWithJSON:data.data];
if(model.data.matchStatus == 1 && model.data.roundStatus == 0){
MSTabbarRoomGameItemModel *chooseGameModel = [MSTabbarRoomGameItemModel new];
chooseGameModel.scores = model.data.scores;
chooseGameModel.roomId = model.roomId;
MSRoomGameQuitGameView *quitGameView = [[MSRoomGameQuitGameView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
quitGameView.chooseGameModel = chooseGameModel;
quitGameView.delegate = self;
[TTPopup popupView:quitGameView style:TTPopupStyleAlert];
}
}
2024-06-03 18:59:43 +08:00
}];
2024-05-31 19:56:25 +08:00
}
#pragma mark -MSRoomGameQuitGameViewDelegate
///退
- (void)closeGameActionWithModel:(MSTabbarRoomGameItemModel *)model{
[Api closeRoomGame:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} roomId:model.roomId];
}
2023-07-14 18:50:55 +08:00
2024-05-31 19:56:25 +08:00
///app,
-(void)replayTheGameWithModel:(MSTabbarRoomGameItemModel *)model{
MSRoomGameVC *gameVC = [MSRoomGameVC new];
gameVC.chooseGameModel = model;
gameVC.userinfo = self.userInfo;
BaseNavigationController *nav = [[BaseNavigationController alloc]initWithRootViewController:gameVC];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:nav animated:YES completion:nil];
}
2023-07-14 18:50:55 +08:00
/// 12
/// ticket
/// BaseMvpPresenter1415
- (void)getUserInfoSuccess:(UserInfoModel *)userInfo {
if (!userInfo.isBindPhone && [ClientConfig shareConfig].iOSPhoneBind) {
2023-07-14 18:50:55 +08:00
LoginBindPhoneViewController * bindPhoneVC = [[LoginBindPhoneViewController alloc] init];
BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:bindPhoneVC];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[self.navigationController presentViewController:nav animated:YES completion:nil];
return;
}
2023-10-07 16:21:47 +08:00
self.userInfo = userInfo;
2024-10-12 19:30:41 +08:00
[[RoomBoomManager sharedManager] saveUserInfo:userInfo];
2024-05-31 19:56:25 +08:00
[self getRoomGameInfo];
2023-11-23 10:56:01 +08:00
[AccountInfoStorage instance].name = self.userInfo.nick;
2023-10-07 16:21:47 +08:00
if ((userInfo.nick == nil || userInfo.avatar == nil) && self.isFormLogin == NO) {
2023-11-20 19:29:01 +08:00
[self completeUserInfo];
2023-07-14 18:50:55 +08:00
return;
}
if(self.isReload == NO){
2023-09-27 12:35:29 +08:00
[self initTabs:YES];
self.isInitReload = YES;
2023-09-27 12:35:29 +08:00
}
2023-10-08 16:46:12 +08:00
if (self.inviteCode.length <= 0) {
[self initQuickEnterRoom];
2023-07-18 18:26:10 +08:00
}
2024-05-15 17:35:51 +08:00
if (self.inviteCode) {
self.inviteCode = nil;
}
2024-05-15 17:35:51 +08:00
[self monentsUnReadCount];
2023-10-07 16:21:47 +08:00
}
-(void)loginIng{
if ((self.userInfo.nick == nil || self.userInfo.avatar == nil) && self.isFormLogin == NO) {
[self completeUserInfo];
return;
}
2023-10-07 18:42:30 +08:00
if(self.isReload == NO){
[self initTabs:YES];
self.isInitReload = YES;
2023-10-07 16:21:47 +08:00
}
if (self.inviteCode.length <= 0) {
[self initQuickEnterRoom];
}
if (self.inviteCode) {
self.inviteCode = nil;
2023-07-14 18:50:55 +08:00
}
[self monentsUnReadCount];
2023-07-14 18:50:55 +08:00
}
2023-08-14 14:39:41 +08:00
- (void)getAuthorizationCodeInfoWithPhonefail{
[self completeUserInfo];
}
-(void)getAuthorizationCodeInfoWithPhoneSuccess:(BOOL)flag {
2023-08-14 14:39:41 +08:00
if(flag == NO){
XPLoginAuthCodeVC *vc = [[XPLoginAuthCodeVC alloc]init];
vc.delegate = self;
vc.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:vc animated:YES completion:nil];
return;
}
[self completeUserInfo];
}
2023-08-14 14:39:41 +08:00
#pragma mark - XPLoginAuthCodeVCDelegate
- (void)bindCodeSuccess{
[self completeUserInfo];
}
2024-05-17 11:27:36 +08:00
///
2023-07-18 18:26:10 +08:00
-(void)requestGiftList{
2024-05-23 17:21:40 +08:00
[self removeOldVersionCacheFromOldMethod];
2024-05-17 11:27:36 +08:00
@kWeakify(self);
2024-05-23 17:21:40 +08:00
AFNetworkReachabilityManager *networkManager = [AFNetworkReachabilityManager sharedManager];
[networkManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
2024-05-17 11:27:36 +08:00
@kStrongify(self);
2024-05-23 17:21:40 +08:00
if (status == AFNetworkReachabilityStatusReachableViaWiFi) {
if(self.isFirstReachability == NO){
[Api requestCacheGiftDynamicEffectList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if(code == 200){
self.isFirstReachability = YES;
NSArray *allResourceList = data.data;
NSSet *allResourceSet = [[NSSet alloc] initWithArray:allResourceList];
NSMutableArray *allResourceURLs = @[].mutableCopy;
2024-05-23 17:21:40 +08:00
for (NSString *url in allResourceSet) {
NSString *encodingUrl = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet];
[allResourceURLs addObject:encodingUrl];
2024-05-17 11:27:36 +08:00
}
2024-05-23 17:21:40 +08:00
[[UploadFile share] startBatchDownloadWithURLs:allResourceURLs];
}
}];
} else {
[[UploadFile share] resumeBatchDownload];
2023-07-18 18:26:10 +08:00
}
2024-05-23 17:21:40 +08:00
} else {
[[UploadFile share] pauseBatchDownload];
2023-07-18 18:26:10 +08:00
}
2023-07-21 14:07:04 +08:00
}];
2024-05-23 17:21:40 +08:00
[networkManager startMonitoring];
2024-05-15 17:35:51 +08:00
}
2024-05-21 16:19:10 +08:00
2024-05-23 17:21:40 +08:00
-(void)removeOldVersionCacheFromOldMethod{
//MARK: 2
2024-05-16 14:30:21 +08:00
NSString *svgaFileName = @"/GiftSvga";
NSString *svgaFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:svgaFileName];
if ([[NSFileManager defaultManager] fileExistsAtPath:svgaFilePath]) {
BOOL isSuccess = [[NSFileManager defaultManager]removeItemAtPath:svgaFilePath error:nil];
if(isSuccess == YES){
NSLog(@"删除成功");
}
}
NSString *mp4FileName = @"/GiftMp4";
NSString *mp4FilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:mp4FileName];
if ([[NSFileManager defaultManager] fileExistsAtPath:mp4FilePath]) {
BOOL isSuccess = [[NSFileManager defaultManager]removeItemAtPath:mp4FilePath error:nil];
2024-05-15 17:35:51 +08:00
if(isSuccess == YES){
NSLog(@"删除成功");
2023-07-18 18:26:10 +08:00
}
2024-05-15 17:35:51 +08:00
}
2023-07-18 18:26:10 +08:00
}
2023-07-14 18:50:55 +08:00
- (void)checkInviteUserInfoSuccess:(InviteUserInfoModel *)inviteInfo {
2024-05-15 17:35:51 +08:00
if (inviteInfo && inviteInfo.isInRoom) {
[XPRoomViewController openRoom:inviteInfo.roomUid fromNick:inviteInfo.inviteNick fromType:inviteInfo.fromType fromUid:inviteInfo.inviteUid viewController:self];
} else { //
[self.presenter getShortCutRecommendRoom];
}
2023-07-14 18:50:55 +08:00
}
- (void)getShortCutRecommendRoomSuccces:(NSString *)roomUid {
2024-05-15 17:35:51 +08:00
if (roomUid.length > 0) {
[XPRoomViewController openRoom:roomUid viewController:self];
}
2023-07-14 18:50:55 +08:00
}
#pragma mark - app
- (void)clientStartApp {
2024-05-15 17:35:51 +08:00
// [self.presenter clientStartApp];
2023-07-14 18:50:55 +08:00
}
#pragma mark -
- (void)networkReachability{}
2023-07-14 18:50:55 +08:00
#pragma mark - BaseMvpProtocol
- (void)tokenInvalid {
XPLoginViewController *lvc = [[XPLoginViewController alloc] init];
BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:lvc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
2023-10-07 16:21:47 +08:00
kWindow.rootViewController = nav;
2024-05-15 17:35:51 +08:00
XPAdImageTool.shareImageTool.isImLogin = NO;
2023-07-14 18:50:55 +08:00
}
- (void)completeUserInfo {
LoginFullInfoViewController * bindPhoneVC = [[LoginFullInfoViewController alloc] init];
BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:bindPhoneVC];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
2023-10-07 18:42:30 +08:00
kWindow.rootViewController = nav;
2023-07-14 18:50:55 +08:00
}
///
- (void)getAnchorCardInfoSuccess:(XPTabAnchorCardModel *)cardInfo {
2023-10-07 16:21:47 +08:00
2023-07-14 18:50:55 +08:00
if (!self.anchorCardView.superview && cardInfo && self.isViewLoaded && self.view.window) {
self.anchorCardView.frame = CGRectMake(0, -90-kStatusBarHeight, KScreenWidth, 90);
[UIView animateWithDuration:0.5 animations:^{
self.anchorCardView.frame = CGRectMake(0, kStatusBarHeight, KScreenWidth, 90);
} completion:nil];
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//
long time = (long)([[NSDate date] timeIntervalSince1970]*1000);
[[NSUserDefaults standardUserDefaults] setObject:@(time) forKey:kLastShowAnchorCardTime];
[[NSUserDefaults standardUserDefaults] synchronize];
self.anchorCardView.cardInfo = cardInfo;
[self.view addSubview:self.anchorCardView];
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleAnchorCardSwipeFrom:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
[self.anchorCardView addGestureRecognizer:recognizer];
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventPersonalshowTopCardShow];
}
}
///
- (void)getVersionUpdate:(XPVersionUpdateModel *)versionModel {
2024-05-15 17:35:51 +08:00
XPUpgradeView *view = [[XPUpgradeView alloc] init];
view.versionModel = versionModel;
TTPopupService * service = [[TTPopupService alloc] init];
service.contentView = view;
service.shouldDismissOnBackgroundTouch = NO;
[TTPopup popupWithConfig:service];
2023-07-14 18:50:55 +08:00
}
#pragma mark - NIMLoginManagerDelegate
- (void)onAutoLoginFailed:(NSError *)error {
// autoLogin 417
if (error.code == 417) {
@weakify(self);
AccountModel* accountModel = [AccountInfoStorage instance].getCurrentAccountInfo;
[[NIMSDK sharedSDK].loginManager login:accountModel.uid token:accountModel.netEaseToken completion:^(NSError * _Nullable error) {
if (error) {
@strongify(self);
[self.presenter logout];
}
}];
return;
}
[self.presenter logout];
}
- (void)onKickout:(NIMLoginKickoutResult *)result {
2024-05-15 17:35:51 +08:00
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"TabbarViewController0")];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
if ([rootViewController presentedViewController]) { //present dismiss
[[rootViewController presentedViewController] dismissViewControllerAnimated:YES completion:^{
if ([[XCCurrentVCStackManager shareManager] getCurrentVC].navigationController.viewControllers.count > 1) {
[[[XCCurrentVCStackManager shareManager] getCurrentVC].navigationController popToRootViewControllerAnimated:YES];
}
if ([[UIApplication sharedApplication].delegate.window.rootViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabVC = (UITabBarController *)[UIApplication sharedApplication].delegate.window.rootViewController;
if (tabVC.selectedViewController.navigationController) {
[tabVC.selectedViewController.navigationController popToRootViewControllerAnimated:YES];
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[tabVC setSelectedIndex:0];
});
}
}];
}else { //present rootvcpush navvc pop
if ([[XCCurrentVCStackManager shareManager] getCurrentVC].navigationController.viewControllers.count > 1) {
[[[XCCurrentVCStackManager shareManager] getCurrentVC].navigationController popToRootViewControllerAnimated:YES];
}
if ([[UIApplication sharedApplication].delegate.window.rootViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabVC = (UITabBarController *)[UIApplication sharedApplication].delegate.window.rootViewController;
if (tabVC.selectedViewController) {
if ([tabVC.selectedViewController isKindOfClass:[UINavigationController class]]) {
[tabVC.selectedViewController popToRootViewControllerAnimated:YES];
} else {
[tabVC.selectedViewController.navigationController popToRootViewControllerAnimated:YES];
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[tabVC setSelectedIndex:0];
});
}
}
}
if ([XPRoomMiniManager shareManager].getRoomInfo) {
[[RtcManager instance] exitRoom];
[[NIMSDK sharedSDK].chatroomManager exitChatroom:[NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId] completion:nil];
[self.roomMineView hiddenRoomMiniView];
}
2023-07-14 18:50:55 +08:00
[self.presenter logout];
}
#pragma mark - NIMChatManagerDelegate
- (void)onRecvMessages:(NSArray<NIMMessage *> *)messages {
if ([AccountInfoStorage instance].getTicket.length == 0) {
2023-07-14 18:50:55 +08:00
return;
}
2024-05-15 17:35:51 +08:00
for (NIMMessage * message in messages) {
if (message.session.sessionType == NIMSessionTypeP2P) {
if(message.messageType == NIMMessageTypeCustom) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
AttachmentModel * attachment = (AttachmentModel *)obj.attachment;
if (attachment.first == CustomMessageType_FindNew && attachment.second == Custom_Message_Find_New_Greet_New_User) {
FindNewGreetMessageModel * greetInfo = [FindNewGreetMessageModel modelWithDictionary:attachment.data];
if (greetInfo.uid.integerValue != [AccountInfoStorage instance].getUid.integerValue) {
[TTPopup dismiss];
XPSessionFindNewAlertView * alertView = [[XPSessionFindNewAlertView alloc] init];
alertView.userInfo = greetInfo;
TTPopupService *service = [[TTPopupService alloc] init];
service.contentView = alertView;
service.shouldDismissOnBackgroundTouch = NO;
service.style = TTPopupStyleAlert;
[TTPopup popupWithConfig:service];
}
2023-07-14 18:50:55 +08:00
}
2024-05-15 17:35:51 +08:00
}
}
2023-07-14 18:50:55 +08:00
}
2024-05-15 17:35:51 +08:00
}
2023-07-14 18:50:55 +08:00
}
- (void)onReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage {
if ([AccountInfoStorage instance].getUid.length == 0) {
2024-05-15 17:35:51 +08:00
return;
}
if (broadcastMessage.content) {
NSDictionary *msgDictionary = [broadcastMessage.content toJSONObject];
AttachmentModel *attachment = [AttachmentModel modelWithJSON:msgDictionary[@"body"]];
2024-04-24 20:08:24 +08:00
NSString *partitionId = [NSString stringWithFormat:@"%@",attachment.data[@"partitionId"]];
if(![partitionId isEqualToString:self.userInfo.partitionId]){
return;
}
2024-10-10 20:16:23 +08:00
NSLog(@" --- Broadcast Message Raw Attach Content: %@", msgDictionary);
// MARK: if else
2024-05-15 17:35:51 +08:00
if (attachment.first == CustomMessageType_RedPacket) {
2023-10-25 19:26:20 +08:00
[self receiveRedPacketDealWithData:attachment];
2024-05-15 17:35:51 +08:00
} else if (attachment.first == CustomMessageType_Gift && attachment.second == Custom_Message_Sub_Gift_ChannelNotify){///广
// MARK:
// [self receiveBroadcastGift:attachment];
2024-05-15 17:35:51 +08:00
}else if(attachment.first == CustomMessageType_Version_Update && attachment.second == Custom_Message_Version_Update_Value){
NSString *osValue = attachment.data[@"updateOs"];
if([osValue isEqualToString:@"ios"] && [AccountInfoStorage instance].getUid.length > 0){
XPVersionUpdateModel *updateModel = [XPVersionUpdateModel modelWithDictionary:attachment.data];
[self getVersionUpdate:updateModel];
}
2023-07-14 18:50:55 +08:00
}else if(attachment.first == CustomMessageType_LuckyBag && attachment.second == Custom_Message_Sub_Room_Gift_LuckBag_FullScree){
2023-07-21 18:53:10 +08:00
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
2023-07-14 18:50:55 +08:00
[self.roomAnimation receiveLuckyGiftBigPrize:attachment];
}else if(attachment.first == CustomMessageType_Graffiti_Star_Kitchen && attachment.second == Custom_Message_Sub_Star_Kitchen_FullScreen){
2023-07-21 18:53:10 +08:00
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
2023-07-14 18:50:55 +08:00
[self.roomAnimation receiveRoomGraffitiStarKitchen:attachment];
}else if(attachment.first == CustomMessageType_Look_Love && attachment.second == Custom_Message_Sub_Look_Love_InRoom_NeedAllMicSend){
2023-07-21 18:53:10 +08:00
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveCandyTreeGiftHighLevel:attachment];
2023-08-16 14:21:58 +08:00
}else if (attachment.first == CustomMessageType_Treasure_Fairy && (attachment.second == Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L4 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L5 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L1 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L2 || attachment.second == Custom_Message_Sub_Treasure_Fairy_Convert_L3)) { //
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveTreasureFairyGiftHighLevel:attachment];
2023-09-14 11:16:47 +08:00
}else if (attachment.first == CustomMessageType_Tarot && (attachment.second == Custom_Message_Sub_Tarot_Advanced || attachment.second == Custom_Message_Sub_Tarot_Intermediate)){
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveTarotBanner:attachment];
}else if(attachment.first == CustomMessageType_Common_H5 && (attachment.second == Custom_Message_Sub_Common_H5_Novice || attachment.second == Custom_Message_Sub_Common_H5_Advanced)){
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveCommonH5Banner:attachment];
2023-09-25 16:02:57 +08:00
}else if (attachment.first == CustomMessageType_Anchor_Hour_Rank && attachment.second == Custom_Message_Sub_Anchor_Hour_Rank) {///
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveAnchorHourRank:attachment];
} else if (attachment.first == CustomMessageType_License_Hour_Rank && attachment.second == Custom_Message_Sub_License_Hour_Rank) {///
2023-09-25 16:02:57 +08:00
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
[self.roomAnimation receiveAnchorHourRank:attachment];
2024-04-11 15:47:44 +08:00
}else if (attachment.first == CustomMessageType_Noble_VIP && attachment.second == Custom_Message_Sub_Room_Noble_LevelUp_Suspend) {///VIP
2024-10-12 19:30:41 +08:00
// if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
// [self.roomAnimation receiveNobleLevelUp:attachment];
2024-03-20 19:55:26 +08:00
}else if (attachment.first == CustomMessageType_General_Floating_Screen && attachment.second == Custom_Message_Sub_General_Floating_Screen_All_Room){
2024-10-15 20:56:25 +08:00
return;
// if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES) {
// return;
// }
//
// [self.roomAnimation receiveRoomGeneralFloatingScreen:attachment];
2023-07-14 18:50:55 +08:00
}
2024-05-15 17:35:51 +08:00
}
2023-07-14 18:50:55 +08:00
}
2023-10-25 19:26:20 +08:00
///
-(void)receiveRedPacketDealWithData:(AttachmentModel *)attachment{
2023-10-26 15:20:20 +08:00
if(attachment.second != Custom_Message_Sub_AllDiamandRedPacket)return;
XPRedPacketModel *data = [XPRedPacketModel modelWithDictionary:attachment.data];
data.validityType = 0;
data.kind = 1;
2023-10-27 16:17:05 +08:00
data.redEnvelopeId = attachment.data[@"redEnvelopeId"];
2023-10-25 19:26:20 +08:00
//
__block BOOL isInRoom;
2023-10-25 19:26:20 +08:00
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[XPRoomViewController class]]) {
2023-10-27 16:17:05 +08:00
*stop = YES;
2023-10-27 17:21:23 +08:00
isInRoom = YES;
2023-10-25 19:26:20 +08:00
}
}];
if (!isInRoom) {
UIViewController *currentVc = [[XCCurrentVCStackManager shareManager] getCurrentVC];
XPReceiveRedPacketView *view = [[XPReceiveRedPacketView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
view.inAllPacketRoom = NO;
2023-10-26 15:20:20 +08:00
view.receiveModel = data;
2023-10-25 19:26:20 +08:00
[currentVc.view addSubview:view];
[currentVc.view bringSubviewToFront:view];
}
}
2023-07-14 18:50:55 +08:00
///
-(BOOL)isInRoomWithData{
//
__block BOOL isInRoom;
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController.viewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[XPRoomViewController class]]) {
*stop = YES;
isInRoom = YES;
}
}];
return isInRoom;
}
/**
*
*
* @param notification
* @discusssion
*/
- (void)onRecvRevokeMessageNotification:(NIMRevokeMessageNotification *)notification {
2024-05-15 17:35:51 +08:00
NIMMessage * message = notification.message;
if (message) {
NIMMessage * revokeMessage = [[NIMMessage alloc] init];
[revokeMessage setValue:message.session forKey:@"session"];
[revokeMessage setValue:@(NIMMessageTypeTip) forKey:@"messageType"];
revokeMessage.timestamp = [PLTimeUtil getNowTimeTimestampMillisecond].longLongValue;
revokeMessage.text = YMLocalizedString(@"TabbarViewController1");
[[NIMSDK sharedSDK].conversationManager saveMessage:revokeMessage forSession:message.session completion:nil];
}
2023-07-14 18:50:55 +08:00
}
- (void)configTheme:(UIImage *)image {
if (image == nil) {
image = kImage(@"tab_bar_bg");
}
[self.tabBar setBackgroundImage:image];
[self.tabBar setShadowImage:[[UIImage alloc]init]];
2023-07-14 18:50:55 +08:00
if (@available(iOS 10.0, *)) {
[self.tabBar setUnselectedItemTintColor:[DJDKMIMOMColor tabbarNormalColor]];
2023-07-14 18:50:55 +08:00
}
if (@available(iOS 13, *)) {
UITabBarAppearance *tabBarAppearance = [UITabBarAppearance new];
tabBarAppearance.backgroundImage = image;
[self.tabBar setStandardAppearance:tabBarAppearance];
if (@available(iOS 15, *)) {
[self.tabBar setScrollEdgeAppearance:tabBarAppearance];
}
}
// UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.tabBar.bounds];
// backgroundImageView.image = image;
// backgroundImageView.contentMode = UIViewContentModeScaleAspectFill;
// backgroundImageView.clipsToBounds = YES;
//
// // UIImageView UITabBar
// [self.tabBar insertSubview:backgroundImageView atIndex:0];
2023-07-14 18:50:55 +08:00
}
2024-06-17 17:20:08 +08:00
- (void)initTabs:(BOOL)isLogin {
2024-05-15 17:35:51 +08:00
self.viewControllers = nil;
2024-06-17 17:20:08 +08:00
//
NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithCapacity:5];
for (NSInteger i = 0; i < 5; i++) {
2024-06-17 17:20:08 +08:00
UIViewController *viewController;
if (isLogin) {
switch (i) {
case 0:
viewController = [[XPHomePagingViewController alloc] init];
break;
2024-08-07 15:35:30 +08:00
case 1: {
@kWeakify(self);
MSTabbarRoomGameVC *vc = [[MSTabbarRoomGameVC alloc] init];
vc.needForceExitRoom = ^{
@kStrongify(self);
if ([XPRoomMiniManager shareManager].getRoomInfo) {
[[RtcManager instance] exitRoom];
[[NIMSDK sharedSDK].chatroomManager exitChatroom:[NSString stringWithFormat:@"%ld", [XPRoomMiniManager shareManager].getRoomInfo.roomId]
completion:nil];
[self.roomMineView hiddenRoomMiniView];
}
};
viewController = vc;
}
2024-06-17 17:20:08 +08:00
break;
case 2:
viewController = [[XPMomentsViewController alloc] init];
break;
case 3:
viewController = [[XPSessionMainViewController alloc] init];
break;
case 4:
viewController = [[XPMineViewController alloc] init];
break;
default:
viewController = [[XPBlankViewController alloc] init]; //
break;
}
} else {
viewController = [[XPBlankViewController alloc] init];
}
//
[viewControllers addObject:[self createTabBarItem:viewController
title:[[ClientConfig shareConfig] tabName:i]
image:[[ClientConfig shareConfig] tabNormalImage:i]
selectedImage:[[ClientConfig shareConfig] tabSelectedImage:i]
index:i]];
2024-06-17 17:20:08 +08:00
}
//
self.viewControllers = [viewControllers copy];
2023-07-14 18:50:55 +08:00
self.selectedIndex = 0;
2024-11-06 17:57:32 +08:00
[[ClientConfig shareConfig] loadTabImages];
2023-07-14 18:50:55 +08:00
}
2024-06-17 17:20:08 +08:00
- (BaseNavigationController *)createTabBarItem:(UIViewController *)itemVc
title:(NSString *)title
image:(NSString *)imageURL
selectedImage:(NSString *)selectedImageURL
index:(NSInteger)index {
itemVc.title = @"";
[itemVc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0x1F1B4F)}
2024-06-17 17:20:08 +08:00
forState:UIControlStateSelected];
[itemVc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0xB8B7C7)}
2024-06-17 17:20:08 +08:00
forState:UIControlStateNormal];
if ([itemVc isKindOfClass:[XPBlankViewController class]]) {
itemVc.tabBarItem.image = [[UIImage imageNamed:imageURL] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
itemVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImageURL] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
2024-11-06 17:57:32 +08:00
if ([imageURL hasPrefix:@"http"]) {
UIImage *downloadedImage = [[ClientConfig shareConfig] tabNormalImageImage:index];
if (downloadedImage) {
itemVc.tabBarItem.image = [downloadedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} else {
itemVc.tabBarItem.image = [[UIImage imageNamed:imageURL] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
downloadedImage = [[ClientConfig shareConfig] tabSelectedImageImage:index];
if (downloadedImage) {
itemVc.tabBarItem.selectedImage = [downloadedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} else {
itemVc.tabBarItem.selectedImage = [[UIImage imageNamed:imageURL] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
}
2024-11-06 17:57:32 +08:00
2023-07-14 18:50:55 +08:00
BaseNavigationController *nav = [[BaseNavigationController alloc] initWithRootViewController:itemVc];
return nav;
}
- (void)showSuccessToast:(NSString *)msg {
[XNDJTDDLoadingTool showSuccessWithMessage:msg];
}
- (void)showErrorToast:(NSString *)msg {
[XNDJTDDLoadingTool showErrorWithMessage:msg];
}
- (void)showLoading {
[XNDJTDDLoadingTool showLoading];
}
- (void)hideHUD {
[XNDJTDDLoadingTool hideHUD];
}
#pragma mark -
- (void)monentsUnReadCount {
2024-07-17 17:49:33 +08:00
[Api momentsUnReadCount:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
2024-05-15 17:35:51 +08:00
if (code == 200) {
MonentsUnReadModel * model = [MonentsUnReadModel modelWithDictionary:data.data];
NSString *badge = model.total > 0 ? @(model.total).stringValue : nil;
if (model.total > 99) {
badge = @"99+";
}
2024-05-31 19:56:25 +08:00
NSUInteger index = 2;
2024-05-15 17:35:51 +08:00
UITabBarItem *item = self.tabBar.items.count > index ? self.tabBar.items[index] : nil;
[item setBadgeValue:badge];
}
} uid:[AccountInfoStorage instance].getUid];
2023-10-07 18:42:30 +08:00
NSArray *recentList = [[NIMSDK sharedSDK].conversationManager.allRecentSessions mutableCopy];
__block NSInteger unreadCount = 0;
NSMutableArray<NSString *> * uids = [[NSMutableArray alloc] init];
[recentList enumerateObjectsUsingBlock:^(NIMRecentSession * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[uids addObject:obj.session.sessionId];
unreadCount += obj.unreadCount;
}];
2024-05-15 17:35:51 +08:00
if(unreadCount > 0){
2024-05-31 19:56:25 +08:00
NSUInteger index = 3;
2024-05-15 17:35:51 +08:00
UITabBarItem *item = self.tabBar.items.count > index ? self.tabBar.items[index] : nil;
[item setBadgeValue:[NSString stringWithFormat:@"%ld",unreadCount]];
}
2023-07-14 18:50:55 +08:00
}
#pragma mark -
- (void)configRoomMiniNView:(NSDictionary *)dic {
2024-05-15 17:35:51 +08:00
UserInfoModel * userInfo = [UserInfoModel modelWithDictionary:dic[@"userInfo"]];
2024-06-21 01:37:38 +08:00
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic[@"roomInfo"]];
2024-05-15 17:35:51 +08:00
NSMutableDictionary * microQueue = dic[@"microQueue"];
[self.roomMineView configRoomMiniView:roomInfo userInfo:userInfo micQueue:microQueue];
2023-07-14 18:50:55 +08:00
}
#pragma mark -
- (void)initQuickEnterRoom {
// MARK: API
// NSString * key = [NSString stringWithFormat:@"%@_%@", kUserFirstLoginKey, [AccountInfoStorage instance].getUid];
// BOOL isNotFirstLogin = [[NSUserDefaults standardUserDefaults] boolForKey:key];
// if (!isNotFirstLogin) {
2024-05-15 17:35:51 +08:00
///
// [self.presenter getNewUserGreetInfo];
// }
2023-07-14 18:50:55 +08:00
}
/// linkedMe
- (void)completeUserInfoFinish:(NSString *)inviteCode {
2024-05-15 17:35:51 +08:00
self.inviteCode = inviteCode;
2023-07-14 18:50:55 +08:00
}
#pragma mark -NIMSystemNotificationManagerDelegate
- (void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification *)notification {
2023-10-07 16:21:47 +08:00
2023-07-14 18:50:55 +08:00
if (notification.receiverType == NIMSessionTypeP2P) {
if (notification.content != nil) {
NSData *jsonData = [notification.content dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
if(err) {
NSLog(@"json解析失败%@",err);
return;
}
if ([dic[@"first"] integerValue] == CustomMessageType_First_VisitorRecord){//访
AttachmentModel *attachment = [AttachmentModel modelWithJSON:notification.content];
XPMineVisitorUnReadModel *model = [XPMineVisitorUnReadModel modelWithJSON:attachment.data];
if ([model isKindOfClass:XPMineVisitorUnReadModel.class]) {
[[NSNotificationCenter defaultCenter] postNotificationName:kVisitorUnReadCountNotificationKey object:model];
}
} else if ([dic[@"first"] intValue] == CustomMessageType_Task_Complete && [dic[@"second"] intValue] == Custom_Message_Sub_TaskComplete) {///
if ([dic isKindOfClass:[NSDictionary class]]) {
NSDictionary *dict = dic[@"data"];
[self handleActivityTaskTip:dict[@"taskCompleteMsg"] url:dic[@"taskUrl"]];
}
}
}
}
}
#pragma mark -
//
- (void)showNewUserRecharge {
self.needShowNewUserRecharge = YES;
}
///
- (void)showAnchorCardKey:(NSNotification *)noti {
NSDictionary * dic = noti.object;
self.delayShowAnchorCard = [[dic objectForKey:@"delayShow"] boolValue];
self.needShowAnchorCard = YES;
}
///
- (BOOL)hadLaunchApp {
return [[NSUserDefaults standardUserDefaults] valueForKey:kHadLaunchApp];
}
2023-10-07 16:21:47 +08:00
2023-07-14 18:50:55 +08:00
- (BOOL)canShowAnchorCard {
if ([[XPRoomMiniManager shareManager] getRoomInfo]) {//
return NO;
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber *lastTime = [defaults objectForKey:kLastShowAnchorCardTime];
if ([lastTime longValue] < 1) {
return NO;
}
NSDate *datenow = [NSDate date];//
long time2 = (long)([datenow timeIntervalSince1970]*1000);
long aTime = (time2 - [lastTime longValue]) / 1000;
if (aTime > 15*60) {
return YES;
} else {
return NO;
}
}
#pragma mark -
- (void)handleActivityTaskTip:(NSString *)msg url:(NSString *)url {
if (!self.taskTipView.superview && url.length) {
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventtask_toast_show];
[self.view addSubview:self.taskTipView];
self.taskTipView.desc = msg;
self.taskTipView.url = url;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(jumpToTask:)];
[self.taskTipView addGestureRecognizer:tap];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (self.taskTipView.superview) {
[self.taskTipView removeFromSuperview];
}
self.taskTipView = nil;
});
}
}
- (void)jumpToTask:(UITapGestureRecognizer *)ges {
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventtask_toast_click];
XPWebViewController * webVC =[[XPWebViewController alloc] initWithRoomUID:nil];
2023-07-14 18:50:55 +08:00
webVC.url = self.taskTipView.url;
[self.selectedViewController.navigationController pushViewController:webVC animated:YES];
if (self.taskTipView.superview) {
[self.taskTipView removeFromSuperview];
}
self.taskTipView = nil;
}
#pragma mark - XPAnchorCardViewDelegate
- (void)xPAnchorCardViewEnterRoom:(NSString *)roomUid {
if (roomUid.length) {
[self.anchorCardView removeFromSuperview];
self.anchorCardView = nil;
self.needShowAnchorCard = NO;
[XPRoomViewController openRoom:roomUid viewController:self];
} else {
[UIView animateWithDuration:0.5 animations:^{
self.anchorCardView.frame = CGRectMake(0, -90-kStatusBarHeight, KScreenWidth, 90);
} completion:^(BOOL finished) {
[self.anchorCardView removeFromSuperview];
self.anchorCardView = nil;
self.needShowAnchorCard = NO;
}];
}
}
- (void)xPAnchorCardViewClickAvatar:(NSString *)uid {
if (uid.length) {
XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init];
userInfoVC.uid = uid.integerValue;
[self.selectedViewController.navigationController pushViewController:userInfoVC animated:YES];
2023-07-14 18:50:55 +08:00
}
[self.anchorCardView removeFromSuperview];
self.anchorCardView = nil;
self.needShowAnchorCard = NO;
2023-07-14 18:50:55 +08:00
}
- (void)handleAnchorCardSwipeFrom:(UISwipeGestureRecognizer *)recognizer{
2024-05-15 17:35:51 +08:00
if(recognizer.direction == UISwipeGestureRecognizerDirectionUp) {
[UIView animateWithDuration:0.5 animations:^{
self.anchorCardView.frame = CGRectMake(0, -90-kStatusBarHeight, KScreenWidth, 90);
} completion:^(BOOL finished) {
[self.anchorCardView removeFromSuperview];
self.anchorCardView = nil;
self.needShowAnchorCard = NO;
}];
}
2023-07-14 18:50:55 +08:00
}
#pragma mark -
- (void)receiveBroadcastGift:(AttachmentModel *)attachment {
GiftReceiveInfoModel *giftNotifyInfo = [GiftReceiveInfoModel modelWithJSON:attachment.data];
2024-05-15 17:35:51 +08:00
if (!giftNotifyInfo.ceremonyGift && giftNotifyInfo.isHomeShow == YES) {
if([XPSkillCardPlayerManager shareInstance].isInRoomVC == YES)return;
2023-07-14 18:50:55 +08:00
[self.roomAnimation receiveGift:giftNotifyInfo];
2024-05-15 17:35:51 +08:00
return;
}
2023-07-14 18:50:55 +08:00
if(giftNotifyInfo.isHomeShow == NO)return;
2024-05-15 17:35:51 +08:00
if (self.giftBroadcastQueue.count == 0) {
[self createGiftBroadcastViewAnimation:giftNotifyInfo];
}
[self.giftBroadcastQueue addObject:giftNotifyInfo];
2023-07-14 18:50:55 +08:00
}
- (void)createGiftBroadcastViewAnimation:(GiftReceiveInfoModel *)giftModel {
2024-05-15 17:35:51 +08:00
XPRoomYearActivityView * view = [[XPRoomYearActivityView alloc] init];
view.delegate = self;
view.frame = CGRectMake(KScreenWidth, 35 + statusbarHeight, KScreenWidth, 150);
view.model = giftModel;
[[XCCurrentVCStackManager shareManager].getCurrentVC.view addSubview:view];
[self beginGiftBraodcastViewAnimation:view notifyStaySecond:giftModel.notifyStaySecond];
2023-07-14 18:50:55 +08:00
}
- (void)beginGiftBraodcastViewAnimation:(XPRoomYearActivityView *)view notifyStaySecond:(int)notifyStaySecond{
2024-05-15 17:35:51 +08:00
CGFloat startTime = notifyStaySecond > 0 ? notifyStaySecond : 3.0;
POPSpringAnimation *springAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter];
springAnimation.springSpeed = 12;
springAnimation.springBounciness = 10.f;
springAnimation.fromValue = [NSValue valueWithCGPoint:view.center];
springAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(0 + view.frame.size.width / 2, view.center.y)];
[springAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
if (finished) {
[self removeGiftBroadcastOutAnimation:view stayTime:startTime];
}
}];
[view pop_addAnimation:springAnimation forKey:@"spingOutAnimation"];
2023-07-14 18:50:55 +08:00
}
- (void)removeGiftBroadcastOutAnimation:(XPRoomYearActivityView *)view stayTime:(CGFloat)stayTime{
2024-05-15 17:35:51 +08:00
POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter];
moveAnimation.fromValue = [NSValue valueWithCGPoint:view.center];
moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth/2, view.center.y)];
moveAnimation.beginTime = CACurrentMediaTime() + stayTime;
moveAnimation.duration = 0.5;
moveAnimation.repeatCount = 1;
moveAnimation.removedOnCompletion = YES;
@kWeakify(self);
[moveAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
@kStrongify(self);
if (finished) {
[view removeFromSuperview];
if (self.giftBroadcastQueue.count > 0) {
[self.giftBroadcastQueue removeObjectAtIndex:0];
}
if (self.giftBroadcastQueue.count > 0) {
[self createGiftBroadcastViewAnimation:self.giftBroadcastQueue.firstObject];
}
}
}];
[view pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"];
2023-07-14 18:50:55 +08:00
}
#pragma mark - XPRoomGiftBroadcastViewDelegate
- (void)xPRoomYearActivityViewEnterRoom:(NSString *)roomUid{
2024-05-15 17:35:51 +08:00
if (roomUid.length > 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.7 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[XPRoomViewController openRoom:roomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC];
});
}
2023-07-14 18:50:55 +08:00
}
#pragma mark - Getters And Setters
- (XPMiniRoomView *)roomMineView {
2024-05-15 17:35:51 +08:00
if (!_roomMineView) {
_roomMineView = [[XPMiniRoomView alloc] init];
_roomMineView.controller = self;
_roomMineView.hidden = YES;
}
return _roomMineView;
2023-07-14 18:50:55 +08:00
}
- (XPAnchorCardView *)anchorCardView {
if (!_anchorCardView) {
_anchorCardView = [[XPAnchorCardView alloc] init];
_anchorCardView.delegate = self;
}
return _anchorCardView;
}
- (XPTaskCompleteTipView *)taskTipView {
if (!_taskTipView) {
_taskTipView = [[XPTaskCompleteTipView alloc] initWithFrame:CGRectMake(0, KScreenHeight - kSafeAreaBottomHeight-60-20, KScreenWidth, 20)];
}
return _taskTipView;
}
- (NSMutableArray<GiftReceiveInfoModel *> *)giftBroadcastQueue {
2024-05-15 17:35:51 +08:00
if (!_giftBroadcastQueue) {
_giftBroadcastQueue = [NSMutableArray array];
}
return _giftBroadcastQueue;
2023-07-14 18:50:55 +08:00
}
- (PIFullScreenBannerAnimation *)roomAnimation{
if(!_roomAnimation){
_roomAnimation = [[PIFullScreenBannerAnimation alloc]init];
}
return _roomAnimation;
}
2023-08-14 19:03:26 +08:00
2023-07-14 18:50:55 +08:00
@end