[v1.0.9](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.9) / 2021-09-15
what's new * 好友检测改为通过请求是否可以转账进行判断 * 动态启动图资源改为下载 * 支持8.0.13 * 更新越狱包8.0.13 * 更新已注入助手的8.0.13未签名包 * 更新越狱源安装包
@@ -131,7 +131,7 @@
|
||||
});
|
||||
}else{
|
||||
[DKHelper showAlertWithTitle:@"删除成功"
|
||||
message:[NSString stringWithFormat: @"已成功删除%d名好友",contactList.count]
|
||||
message:[NSString stringWithFormat: @"已成功删除%d名好友",(int)contactList.count]
|
||||
btnTitle:@"确定" handler:^(UIButton *sender) { }];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,16 +38,22 @@
|
||||
}
|
||||
|
||||
- (void)checkFriendsEnd:(NSNotification *)notify{
|
||||
WS(weakSelf)
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
SS(strongSelf)
|
||||
Boolean isSuccess = [notify.userInfo[@"success"] boolValue];
|
||||
NSString *msg = [notify.userInfo[@"msg"] stringValue];
|
||||
if (isSuccess){
|
||||
[strongSelf->m_MMLoadingView stopLoadingAndShowOK:@"检测成功"];
|
||||
[strongSelf reloadTableData];
|
||||
CGPoint bottomOffset = CGPointMake(0, strongSelf->manager.tableView.contentSize.height - strongSelf->manager.tableView.bounds.size.height + strongSelf-> manager.tableView.contentInset.bottom);
|
||||
[strongSelf->manager.tableView setContentOffset:bottomOffset animated:YES];
|
||||
}else{
|
||||
[strongSelf->m_MMLoadingView setText:msg];
|
||||
// [m_MMLoadingView stopLoadingAndShowError:@"检测失败"];
|
||||
}
|
||||
});
|
||||
|
||||
Boolean isSuccess = notify.userInfo[@"success"];
|
||||
if (isSuccess){
|
||||
[m_MMLoadingView stopLoadingAndShowOK:@"检测成功"];
|
||||
[self reloadTableData];
|
||||
CGPoint bottomOffset = CGPointMake(0, manager.tableView.contentSize.height - manager.tableView.bounds.size.height + manager.tableView.contentInset.bottom);
|
||||
[manager.tableView setContentOffset:bottomOffset animated:YES];
|
||||
}else{
|
||||
[m_MMLoadingView stopLoadingAndShowError:@"检测失败"];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
@@ -205,7 +211,7 @@
|
||||
[clearFriendsSection addCell:notFriendCountCell];
|
||||
|
||||
NSString * invalidFriendsCount = [NSString stringWithFormat:@"共%lu人",(unsigned long)DKHelper.shared.invalidFriends.count];
|
||||
WCTableViewNormalCellManager *invalidFriendsCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"账号被封禁" rightValue:invalidFriendsCount accessoryType:1];
|
||||
WCTableViewNormalCellManager *invalidFriendsCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"无法识别" rightValue:invalidFriendsCount accessoryType:1];
|
||||
[invalidFriendsCell addUserInfoValue:@1 forKey:@"type"];
|
||||
[clearFriendsSection addCell:invalidFriendsCell];
|
||||
}
|
||||
@@ -218,7 +224,7 @@
|
||||
NSNumber * type = [sender getUserInfoValueForKey:@"type"];
|
||||
//1:被封账号 , 0:已将你删除
|
||||
NSArray *contactList = [type isEqual:@1] ? DKHelper.shared.invalidFriends : DKHelper.shared.notFriends;
|
||||
NSString *contactDesc = [type isEqual:@1] ? @"账号被封" :@"已将你删除";
|
||||
NSString *contactDesc = [type isEqual:@1] ? @"无法识别" :@"已将你删除";
|
||||
DKCleanFriendsController *vc = [[DKCleanFriendsController alloc] initWithContactList:contactList contactDesc:contactDesc];
|
||||
[self.navigationController pushViewController:vc animated:true ];
|
||||
}
|
||||
@@ -254,9 +260,12 @@
|
||||
}
|
||||
__block UISwitch *s = sender;
|
||||
WS(weakSelf)
|
||||
[DKHelper showAlertWithTitle:@"重要提示" message:@"好友关系检测会新建一个包含您所有好友的群组,检测完成后会帮您自动删除,正常情况下您的好友不会收到任何消息。部分好友可能会收到进群邀请!(会自动帮您撤回该邀请信息)如果你想排除某些好友不做检测,请先将其添加到黑名单,待检测完成再将其从黑名单的移除!" btnTitle:@"开始检测" handler:^(UIButton *sender) {
|
||||
[DKHelper showAlertWithTitle:@"重要提示" message:@"好友关系检测会尝试向好友转账(并不会发生实际转账),可以转账的好友标记为双向好友,非好友会在直接标记,其他原因不能转账的会在无法识别中显示(可能是账户违规被限制转账,或者网络原因无法获取请求结果)" btnTitle:@"开始检测" handler:^(UIButton *sender) {
|
||||
SS(strongSelf)
|
||||
DKHelperConfig.cleanFriendsEnable = true;
|
||||
[weakSelf createCheckGroupe];
|
||||
[DKHelper checkFriends];
|
||||
[strongSelf->m_MMLoadingView setText:@"开始检测..."];
|
||||
[strongSelf->m_MMLoadingView startLoading];
|
||||
} btnTitle:@"取消" handler:^(UIButton *sender) {
|
||||
s.on = false;
|
||||
}];
|
||||
@@ -268,6 +277,16 @@
|
||||
}
|
||||
|
||||
- (void)setLaunch:(UISwitch *)sender{
|
||||
if (![DKHelper vapFileExit] && sender.isOn){
|
||||
WS(weakSelf);
|
||||
[DKHelper showAlertWithTitle:@"资源文件下载提示" message:@"本功能需要下载18M的资源文件是否继续?" btnTitle:@"下载" handler:^(UIButton *sender) {
|
||||
[weakSelf downLoadVapfiles];
|
||||
} btnTitle:@"取消" handler:^(UIButton *sender) {
|
||||
|
||||
}];
|
||||
[sender setOn:NO];
|
||||
return;
|
||||
}
|
||||
DKHelperConfig.dkLaunchEnable = sender.isOn;
|
||||
if(sender.isOn){
|
||||
DKLaunchViewController *launchVC = [[DKLaunchViewController alloc] init];
|
||||
@@ -277,6 +296,16 @@
|
||||
}
|
||||
}
|
||||
- (void)setChatBg:(UISwitch *)sender{
|
||||
if (![DKHelper vapFileExit] && sender.isOn){
|
||||
WS(weakSelf);
|
||||
[DKHelper showAlertWithTitle:@"资源文件下载提示" message:@"本功能需要下载18M的资源文件是否继续?" btnTitle:@"下载" handler:^(UIButton *sender) {
|
||||
[weakSelf downLoadVapfiles];
|
||||
} btnTitle:@"取消" handler:^(UIButton *sender) {
|
||||
|
||||
}];
|
||||
[sender setOn:NO];
|
||||
return;
|
||||
}
|
||||
DKHelperConfig.dkChatBgEnable = sender.isOn;
|
||||
if(sender.isOn){
|
||||
[DKHelper showAlertWithTitle:@"提示" message:@"设置动态背景时,需要确保不使用默认聊天背景才能生效。请在设置->通用->聊天背景 里修改,可修改为任意非默认聊天背景" btnTitle:@"你在教我做事?" handler:^(UIButton *sender) {
|
||||
@@ -288,6 +317,57 @@
|
||||
}
|
||||
}
|
||||
|
||||
-(void)downLoadVapfiles{
|
||||
NSString *filePath = [NSString stringWithFormat: @"%@.zip",vapPath];
|
||||
if ([NSFileManager.defaultManager fileExistsAtPath:filePath]){
|
||||
//已下载,直接解压
|
||||
[m_MMLoadingView setText:@"正在解压文件"];
|
||||
[m_MMLoadingView startLoading];
|
||||
NSError *error;
|
||||
bool unzipSuccess = [objc_getClass("MZipUtil") UnZipFile:filePath toPath:vapPath overwrite:YES password:nil error:&error];
|
||||
NSLog(@"%d:%@",unzipSuccess,error);
|
||||
[m_MMLoadingView stopLoadingAndShowOK:@"解压完成,请重新打开开关"];
|
||||
return;
|
||||
}
|
||||
m_MMLoadingView.text = @"正在下载资源文件";
|
||||
NSURL *url = [NSURL URLWithString:[@"http://srdftp.e-jt.cn/security/dangerDaily_1631608685271.zip" stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]];
|
||||
NSURLRequest *request = [NSURLRequest requestWithURL:url];
|
||||
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
|
||||
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
|
||||
WS(weakSelf);
|
||||
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
||||
SS(strongSelf);
|
||||
if ([NSFileManager.defaultManager fileExistsAtPath:location.path]) {
|
||||
// 下载完成,保存到本地
|
||||
NSString *filePath = [NSString stringWithFormat: @"%@.zip",vapPath];
|
||||
NSString *dirPath = [NSString stringWithFormat:@"%@%@",libPath,@"/dkjone"];
|
||||
if (![NSFileManager.defaultManager fileExistsAtPath:dirPath]) {
|
||||
[[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];
|
||||
}
|
||||
NSError *error;
|
||||
bool saveSuccess = [NSFileManager.defaultManager moveItemAtPath:location.path toPath:filePath error:&error];
|
||||
//[data writeToFile:filePath options:NSDataWritingAtomic error:&error];
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
if(saveSuccess){
|
||||
[strongSelf->m_MMLoadingView setText:@"正在解压文件"];
|
||||
bool unzipSuccess = [objc_getClass("MZipUtil") UnZipFile:filePath toPath:vapPath overwrite:YES password:nil error:nil];
|
||||
}
|
||||
[strongSelf->m_MMLoadingView stopLoadingAndShowOK:@"下载完成,请重新打开开关"];
|
||||
});
|
||||
|
||||
}else{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[strongSelf->m_MMLoadingView stopLoadingAndShowError:@"下载失败"];
|
||||
});
|
||||
|
||||
}
|
||||
}];
|
||||
[task resume];
|
||||
[m_MMLoadingView startLoading];
|
||||
}
|
||||
|
||||
- (void)forwardTimeline:(UISwitch *)sender{
|
||||
DKHelperConfig.timeLineForwardEnable = sender.isOn;
|
||||
}
|
||||
@@ -471,36 +551,4 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)createCheckGroupe{
|
||||
[m_MMLoadingView startLoading];
|
||||
BOOL canCreateGroup = [objc_getClass("CGroupMgr") isSupportOpenIMGroup];
|
||||
if (!canCreateGroup) {
|
||||
[DKHelper showAlertWithTitle:@"检测失败" message:@"您当前无法创建群聊!" btnTitle:@"确定" handler:^(UIButton *sender) {
|
||||
NSLog(@"检测失败 - 无法创建群聊");
|
||||
}];
|
||||
}else{
|
||||
CGroupMgr *groupMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CGroupMgr") class]];
|
||||
DKHelper.shared.checkFriendsEnd = false;
|
||||
NSMutableArray<GroupMember *> * groupMembers = @[].mutableCopy;
|
||||
[DKHelper.allFriends enumerateObjectsUsingBlock:^(CContact *obj, NSUInteger idx, BOOL *stop) {
|
||||
if ([obj.m_nsUsrName containsString:@"@openim"] ){
|
||||
|
||||
}else{
|
||||
GroupMember *gm = [[objc_getClass("GroupMember") alloc] init];
|
||||
gm.m_nsMemberName = obj.m_nsUsrName;
|
||||
[groupMembers addObject:gm];
|
||||
}
|
||||
}];
|
||||
[DKHelper.shared setCheckNotify];
|
||||
[groupMgr CreateGroup:@"DKWechatHelper-friendsCheck" withMemberList:groupMembers];
|
||||
|
||||
// 设置超时时间,超过10秒,不在检测
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW , 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
if (!DKHelper.shared.checkFriendsEnd) {
|
||||
[DKHelper endCheck];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#import "DKLaunchViewController.h"
|
||||
#import "DKHelper.h"
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
@interface DKLaunchViewController ()<HWDMP4PlayDelegate>
|
||||
@interface DKLaunchViewController ()<HWDMP4PlayDelegate,MMImagePickerControllerDelegate>
|
||||
@property (nonatomic,strong)AVAudioPlayer * player;
|
||||
@property (nonatomic,strong)UIView *controlView;
|
||||
@property (nonatomic,strong)UIView *animaView;
|
||||
@@ -34,15 +34,15 @@
|
||||
|
||||
self.animaView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.width *16/9)];
|
||||
self.animaView.center = self.view.center;
|
||||
[self.view addSubview:self.animaView];
|
||||
self.view.backgroundColor = UIColor.blackColor;
|
||||
[self.navigationController.navigationBar setHidden:true];
|
||||
|
||||
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[DKHelperConfig.dkLaunchIndex.intValue][@"name"];
|
||||
UIImageView *imgv = [[UIImageView alloc] initWithFrame:self.animaView.frame];
|
||||
NSString* path = [NSString stringWithFormat:@"%@/%@.jpg",vapPath,animaName];
|
||||
imgv.image = [[UIImage alloc] initWithContentsOfFile:path];
|
||||
[self.view addSubview:imgv];
|
||||
[self.view addSubview:self.animaView];
|
||||
if (self.setType !=0 ){
|
||||
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/launchBgm.mp3"];
|
||||
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
|
||||
path = [NSBundle.mainBundle pathForResource:@"launchBgm" ofType:@"mp3"];
|
||||
}
|
||||
NSString* path = [NSString stringWithFormat:@"%@/launchBgm.mp3",vapPath];
|
||||
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
|
||||
[self.player play];
|
||||
[self.player setNumberOfLoops:100];
|
||||
@@ -71,6 +71,14 @@
|
||||
setDoneBtn.frame = CGRectMake(UIScreen.mainScreen.bounds.size.width - 120, UIScreen.mainScreen.bounds.size.height - 100, 100, 40);
|
||||
[setDoneBtn addTarget:self action:@selector(setLaunch) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self.controlView addSubview:setDoneBtn];
|
||||
|
||||
UIButton *chooseBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[chooseBtn setTitle: @"从相册选择" forState:UIControlStateNormal];
|
||||
chooseBtn.titleLabel.font = [UIFont systemFontOfSize:14];
|
||||
chooseBtn.frame = CGRectMake(15, UIScreen.mainScreen.bounds.size.height - 100, 100, 40);
|
||||
[chooseBtn addTarget:self action:@selector(choosePhoto) forControlEvents:UIControlEventTouchUpInside];
|
||||
// [self.controlView addSubview:chooseBtn];
|
||||
|
||||
UIPanGestureRecognizer *swip = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(nextAnima:)];
|
||||
[self.view addGestureRecognizer:swip];
|
||||
|
||||
@@ -87,7 +95,6 @@
|
||||
[self nextAnima:nil];
|
||||
|
||||
}
|
||||
|
||||
- (void)exitVC{
|
||||
[self.navigationController popViewControllerAnimated:true];
|
||||
[self dismissViewControllerAnimated:true completion:nil];
|
||||
@@ -123,35 +130,28 @@
|
||||
self.animaIndex += (isNext? 1 : -1);
|
||||
self.animaIndex = self.animaIndex > 0 ? self.animaIndex : 0;
|
||||
self.animaIndex = self.animaIndex % 13;
|
||||
NSString *animaName = DKLaunchHelper.animaNames[self.animaIndex][@"name"];
|
||||
NSString *text = DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
|
||||
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"name"];
|
||||
NSString *text = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
|
||||
self.textLabel.text = [NSString stringWithFormat:@"%@\n%@",text,animaName];
|
||||
self.textLabel.textColor = DKLaunchHelper.animaNames[self.animaIndex][@"color"];
|
||||
self.textLabel.textColor = (UIColor *)DKLaunchHelper.animaNames[self.animaIndex][@"color"];
|
||||
|
||||
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/%@",[NSString stringWithFormat:@"%@Vap.mp4", animaName]];
|
||||
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
|
||||
path = [NSBundle.mainBundle pathForResource:[NSString stringWithFormat:@"%@Vap", animaName] ofType:@"mp4"];
|
||||
}
|
||||
NSString* path = [NSString stringWithFormat:@"%@/%@Vap.mp4",vapPath,animaName];
|
||||
[self.animaView playHWDMP4:path repeatCount:0 delegate:self];
|
||||
self.hasNext = true;
|
||||
|
||||
}
|
||||
|
||||
- (void)setLaunch{
|
||||
NSString *text = DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
|
||||
NSString *text = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"desc"];
|
||||
if (self.setType == 2){
|
||||
//设为聊天背景
|
||||
DKHelperConfig.dkChatBGIndex = [NSNumber numberWithInt:self.animaIndex];
|
||||
[DKHelper showAlertWithTitle:@"已设置聊天背景为" message:text btnTitle:@"确定" handler:^(UIButton *sender) {}];
|
||||
return;
|
||||
}
|
||||
NSString *animaName = DKLaunchHelper.animaNames[self.animaIndex][@"name"];
|
||||
NSString *animaName = (NSString *)DKLaunchHelper.animaNames[self.animaIndex][@"name"];
|
||||
UIImageView *imgv = [[UIImageView alloc] initWithFrame:self.animaView.frame];
|
||||
|
||||
NSString* path = [NSString stringWithFormat:@"/Library/Application Support/dkhelper/vapFiles/%@",[NSString stringWithFormat:@"%@.jpg", animaName]];
|
||||
if (![NSFileManager.defaultManager fileExistsAtPath:path]){
|
||||
path = [NSBundle.mainBundle pathForResource:animaName ofType:@"jpg"];
|
||||
}
|
||||
NSString* path = [NSString stringWithFormat:@"%@/%@.jpg",vapPath,animaName];
|
||||
imgv.image = [[UIImage alloc] initWithContentsOfFile:path];
|
||||
UIView *bgView = [[UIView alloc] initWithFrame:self.view.bounds];
|
||||
bgView.backgroundColor = UIColor.blackColor;
|
||||
@@ -163,6 +163,29 @@
|
||||
[DKHelper showAlertWithTitle:@"已设置启动图为" message:text btnTitle:@"确定" handler:^(UIButton *sender) {}];
|
||||
}
|
||||
|
||||
-(void)choosePhoto{
|
||||
// MMImagePickerController *picker = [[objc_getClass("MMImagePickerController") alloc]initForJustReturnMMAsset:0 withAdjustRevertIndex:0 withDirectToFirstAlbum:1 withOnlyShowVideoMessage:0 withNotShowVideoSizeAlertView:0 withPickerVCForceFullScrenn:0];
|
||||
// picker.m_delegate = self;
|
||||
// picker.canSendVideoMessage = 1;
|
||||
// picker.canSendOriginImage = 0;
|
||||
// picker.forceSendOriginImage = 1;
|
||||
// picker.canSendMultiImage = 0;
|
||||
// picker.canSendMultiVideo = 0;
|
||||
// picker.needThumbImage = 0;
|
||||
// picker.showPreviewView = 1;
|
||||
// picker.returnMetaForVideo = 0;
|
||||
// picker.customizesClickAction = 0;
|
||||
// picker.maxImageCount = 9;
|
||||
// picker.canSendGif = 0;
|
||||
// picker.isPresentInSplitVC = 0;
|
||||
// picker.showSkipBtn = 0;
|
||||
// picker.previewEditScene = 4;
|
||||
// picker.compressType = 1;
|
||||
// picker.finishWording = @"确定";
|
||||
// [self presentViewController:picker animated:true completion:nil];
|
||||
|
||||
}
|
||||
|
||||
-(void)viewDidStopPlayMP4:(NSInteger)lastFrameIndex view:(VAPView *)container{
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
@@ -178,10 +201,44 @@
|
||||
}
|
||||
|
||||
-(void)goNextVC{
|
||||
UIWindow *window = UIApplication.sharedApplication.keyWindow;
|
||||
MicroMessengerAppDelegate *delegate = [objc_getClass("MicroMessengerAppDelegate") GlobalInstance];
|
||||
UIWindow *window = delegate.launchWindow ;
|
||||
window.rootViewController = nil;
|
||||
[UIApplication.sharedApplication.keyWindow setHidden:true];
|
||||
[UIApplication.sharedApplication.keyWindow makeKeyAndVisible];
|
||||
|
||||
[window setHidden:true];
|
||||
[delegate.window makeKeyAndVisible];
|
||||
}
|
||||
|
||||
|
||||
|
||||
//MARK: - imagePicker
|
||||
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingImageWithEditImageAttr:(EditImageAttr *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingVideoWithAsset:(MMAsset *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingSightWithInfo:(SightDraft *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingMediaWithInfo:(NSDictionary *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMImagePickerControllerDidSkip:(MMImagePickerController *)arg1{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMImagePickerControllerDidCancel:(MMImagePickerController *)arg1{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMImagePickerManager:(UINavigationController *)arg1 didFinishPickingAssetWithDataItem:(WCFinderDataItem *)arg2 GPSInfoArrayOfAsset:(NSArray *)arg3 dataReportModel:(WCFinderReportPostStateModel *)arg4{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFailToPickAssets:(NSArray *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingMediaWithInfo:(NSArray *)arg2{
|
||||
[arg1 dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -402,30 +402,6 @@
|
||||
}
|
||||
%end
|
||||
|
||||
%hook CGroupMgr
|
||||
|
||||
// 需要验证
|
||||
- (void)addChatMemberNeedVerifyMsg:(id)arg1 ContactList:(id)arg2{
|
||||
%orig(arg1,arg2);
|
||||
if (!DKHelper.shared.checkFriendsEnd){
|
||||
DKHelper.shared.groupContact = arg1;
|
||||
DKHelper.shared.notFriends = [arg2 allValues];
|
||||
dispatch_group_leave(DKHelper.shared.checkFriendGroup);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)addCreateMsg:(id)arg1 ContactList:(id)arg2{
|
||||
%orig(arg1,arg2);
|
||||
if (!DKHelper.shared.checkFriendsEnd){
|
||||
DKHelper.shared.groupContact = arg1;
|
||||
NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy;
|
||||
[validArr addObjectsFromArray:arg2];
|
||||
DKHelper.shared.validFriends = validArr.copy;
|
||||
dispatch_group_leave(DKHelper.shared.checkFriendGroup);
|
||||
}
|
||||
}
|
||||
%end
|
||||
|
||||
%hook WCOperateFloatView
|
||||
|
||||
%new
|
||||
@@ -507,32 +483,46 @@
|
||||
|
||||
annimView.center = self.view.center;
|
||||
NSString *animaName = DKLaunchHelper.animaNames[DKHelperConfig.dkChatBGIndex.intValue][@"name"];
|
||||
NSString* path = [NSBundle.mainBundle pathForResource:[NSString stringWithFormat:@"%@Vap", animaName] ofType:@"mp4"];
|
||||
NSString* path = [NSString stringWithFormat:@"%@/%@Vap.mp4",vapPath,animaName];
|
||||
[annimView playHWDMP4:path repeatCount:-1 delegate:nil];
|
||||
|
||||
}
|
||||
|
||||
%end
|
||||
|
||||
@interface MicroMessengerAppDelegate
|
||||
+ (id)GlobalInstance;
|
||||
@property(retain, nonatomic) UIWindow *window;
|
||||
@property (nonatomic, retain) UIWindow *launchWindow;
|
||||
@end
|
||||
|
||||
%hook MicroMessengerAppDelegate
|
||||
%property (nonatomic, retain) UIWindow *launchWindow;
|
||||
|
||||
- (_Bool)application:(id)arg1 didFinishLaunchingWithOptions:(id)arg2{
|
||||
if (!DKHelperConfig.dkLaunchEnable){return %orig; }
|
||||
BOOL end = %orig;
|
||||
%new
|
||||
-(void)showLaunchVideo{
|
||||
DKLaunchViewController * launchVC = [[DKLaunchViewController alloc] init];
|
||||
UIWindow *launchWindow = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
|
||||
self.launchWindow = launchWindow;
|
||||
launchWindow.windowLevel = UIWindowLevelAlert + 1;
|
||||
self.launchWindow = launchWindow;
|
||||
launchWindow.rootViewController = launchVC;
|
||||
[launchWindow makeKeyAndVisible];
|
||||
return end;
|
||||
|
||||
[self.launchWindow makeKeyAndVisible];
|
||||
[self.launchWindow makeKeyWindow];
|
||||
}
|
||||
%end
|
||||
|
||||
%hook MMMainSceneDelegate
|
||||
static bool isShowLaunchVideo = false;
|
||||
- (void)sceneWillEnterForeground:(id)arg1{
|
||||
if (!DKHelperConfig.dkLaunchEnable || ![DKHelper vapFileExit] || isShowLaunchVideo ){return %orig;}
|
||||
[[%c(MicroMessengerAppDelegate) GlobalInstance] showLaunchVideo];
|
||||
isShowLaunchVideo = true;
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
%hook WCPayLogicMgr
|
||||
|
||||
- (void)insideCallBackGetTransferPrepayResponse:(id)arg1 OnRequest:(id)arg2{
|
||||
%log;
|
||||
if (!DKHelper.shared.checkFriendsEnd){
|
||||
DKHelper.shared.currentCheckResult = arg1;
|
||||
dispatch_semaphore_signal(DKHelper.shared.friendCheckSem);
|
||||
}
|
||||
%orig;
|
||||
}
|
||||
%end
|
||||
|
||||
@@ -25,8 +25,11 @@
|
||||
#define WK(object) autoreleasepool{} __weak typeof(object) weak##object = object
|
||||
#define ST(object) autoreleasepool{} __strong typeof(object) object = weak##object
|
||||
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
|
||||
|
||||
|
||||
#define SS(strongSelf) __strong __typeof(weakSelf)strongSelf = weakSelf;
|
||||
#define isDKForDeb (YES)
|
||||
#define documentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
|
||||
#define libPath [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]
|
||||
#define vapPath [libPath stringByAppendingPathComponent:@"/dkjone/vapFiles"]
|
||||
|
||||
typedef void(^BtnBlock)(UIButton *sender);
|
||||
|
||||
@@ -36,23 +39,20 @@ typedef void(^BtnBlock)(UIButton *sender);
|
||||
/// 好友关系是否检测完毕
|
||||
@property (nonatomic,assign)BOOL checkFriendsEnd;
|
||||
/// 已将你删除的好友
|
||||
@property (nonatomic,copy)NSArray<CContact *> *notFriends;
|
||||
@property (nonatomic,strong)NSMutableArray<CContact *> *notFriends;
|
||||
/// 账号被封的好友
|
||||
@property (nonatomic,copy)NSArray<CContact *> *invalidFriends;
|
||||
@property (nonatomic,strong)NSMutableArray<CContact *> *invalidFriends;
|
||||
/// 相互好友
|
||||
@property (nonatomic,copy)NSArray<CContact *> *validFriends;
|
||||
/// 检测好友状态的群组
|
||||
@property (nonatomic,strong)CContact *groupContact;
|
||||
|
||||
@property (nonatomic,strong)dispatch_group_t checkFriendGroup;
|
||||
@property (nonatomic,strong)NSMutableArray<CContact *> *validFriends;
|
||||
|
||||
@property (nonatomic,copy)NSString* groupURL;
|
||||
|
||||
/// 结束好友检测
|
||||
+ (void)endCheck;
|
||||
@property (nonatomic,copy)NSDictionary *currentCheckResult;
|
||||
|
||||
- (void)setCheckNotify;
|
||||
@property (nonatomic ,strong) dispatch_semaphore_t friendCheckSem;
|
||||
|
||||
+(void)checkFriends;
|
||||
+(BOOL)vapFileExit;
|
||||
+ (instancetype)shared ;
|
||||
/// 所有好友(不包含公众号)
|
||||
+ (NSArray<CContact*> *)allFriends;
|
||||
@@ -128,3 +128,5 @@ typedef void(^BtnBlock)(UIButton *sender);
|
||||
- (BOOL)serialQueueIsEmpty;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@@ -26,64 +26,6 @@
|
||||
return helper;
|
||||
}
|
||||
|
||||
|
||||
- (void)setCheckNotify{
|
||||
self.checkFriendGroup = dispatch_group_create();
|
||||
DKHelper.shared.invalidFriends = @[];
|
||||
DKHelper.shared.validFriends = @[];
|
||||
DKHelper.shared.notFriends = @[];
|
||||
dispatch_group_enter(DKHelper.shared.checkFriendGroup);
|
||||
dispatch_group_enter(DKHelper.shared.checkFriendGroup);
|
||||
|
||||
dispatch_group_notify(self.checkFriendGroup, dispatch_get_main_queue(), ^{
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[DKHelper endCheck];
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
+ (void)endCheck{
|
||||
DKHelper.shared.checkFriendsEnd = true;
|
||||
CContactMgr *contactMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]];
|
||||
if (DKHelper.shared.validFriends.count + DKHelper.shared.notFriends.count > 0) {
|
||||
///检测完成了
|
||||
DKHelper.shared.notFriends = [DKHelper.shared.notFriends _filter:^BOOL(id obj) {
|
||||
return ![[[contactMgr getSelfContact] m_nsUsrName] isEqualToString:((CContact*)obj).m_nsUsrName];
|
||||
}];
|
||||
NSArray<CContact*> *invalidFriends = DKHelper.allFriends.copy;
|
||||
NSMutableArray *addSelf = DKHelper.shared.validFriends.mutableCopy;
|
||||
[addSelf addObject:[contactMgr getSelfContact]];
|
||||
DKHelper.shared.validFriends = addSelf;
|
||||
invalidFriends = [invalidFriends _filter:^BOOL(id obj) {
|
||||
return ![DKHelper.shared.notFriends _contains:^BOOL(id obj2) {
|
||||
return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName];
|
||||
}];
|
||||
}];
|
||||
invalidFriends = [invalidFriends _filter:^BOOL(id obj) {
|
||||
return ![DKHelper.shared.validFriends _contains:^BOOL(id obj2) {
|
||||
return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName];
|
||||
}];
|
||||
}];
|
||||
DKHelper.shared.invalidFriends = invalidFriends;
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@YES}];
|
||||
}else{
|
||||
/// 检测超时结束
|
||||
DKHelper.shared.invalidFriends = @[];
|
||||
DKHelper.shared.validFriends = @[];
|
||||
DKHelper.shared.notFriends = @[];
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@NO}];
|
||||
}
|
||||
// 删除群聊
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
MMNewSessionMgr * sm =[[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("MMNewSessionMgr") class]];
|
||||
unsigned int idx = [sm getSessionIndexOfUser:DKHelper.shared.groupContact.m_nsUsrName];
|
||||
if (idx != (unsigned int)(NSNotFound)){
|
||||
[sm deleteSessionAtIndex:idx forceDelete:false];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+ (UINavigationController *)navigationContrioller{
|
||||
return ((UINavigationController *)([objc_getClass("CAppViewControllerManager") getCurrentNavigationController]));
|
||||
}
|
||||
@@ -250,6 +192,79 @@ ___addComment:
|
||||
CMessageMgr *chatMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("CMessageMgr")];
|
||||
[chatMgr AddMsg:userName MsgWrap:wrap];
|
||||
}
|
||||
|
||||
+(BOOL)vapFileExit{
|
||||
NSString *path = [vapPath stringByAppendingPathComponent:@"launchBgm.mp3"];
|
||||
return [NSFileManager.defaultManager fileExistsAtPath:path];
|
||||
}
|
||||
+(void)checkFriends{
|
||||
DKHelper.shared->allFriends = @[];
|
||||
NSOperationQueue *_serialFriendCheckQueue = [[NSOperationQueue alloc] init];
|
||||
_serialFriendCheckQueue.maxConcurrentOperationCount = 1;
|
||||
DKHelper.shared.friendCheckSem = dispatch_semaphore_create(0);
|
||||
DKHelper.shared.invalidFriends = [NSMutableArray new];
|
||||
DKHelper.shared.validFriends = [NSMutableArray new];
|
||||
DKHelper.shared.notFriends = [NSMutableArray new];
|
||||
DKHelper.shared.checkFriendsEnd = NO;
|
||||
__block int currentCount = 1;
|
||||
int allCount = (int)[DKHelper allFriends].count;
|
||||
for (CContact *payUser in [DKHelper allFriends]) {
|
||||
[_serialFriendCheckQueue addOperationWithBlock:^{
|
||||
//发送检测请求
|
||||
WCPayTransferPrepayRequestStruct *payReq = [[objc_getClass("WCPayTransferPrepayRequestStruct") alloc]init];
|
||||
payReq.m_nsReceiverUserName = payUser.m_nsUsrName ;
|
||||
payReq.m_uiFeeType = 1;
|
||||
payReq.m_uiTotalFee = 1;//转账金额单位:分
|
||||
payReq.m_uiPayScene = 31;
|
||||
payReq.m_transferScene = 2;
|
||||
payReq.m_uiPayChannel = 11;
|
||||
payReq.m_nsProducetDesc = @"DKWechathelper";
|
||||
//时间戳
|
||||
long timeinterval = (long)([[NSDate date] timeIntervalSince1970] * 1000);
|
||||
payReq.placeorderReserves = [NSString stringWithFormat:@"%ld",timeinterval];
|
||||
WCPayLogicMgr *mgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("WCPayLogicMgr") class]];
|
||||
[mgr GetTransferPrepayRequest:payReq];
|
||||
NSLog(@"开始检测---%@(%@)",payUser.m_nsNickName,payUser.m_nsRemark);
|
||||
NSString *msg = [NSString stringWithFormat:@"正在检测:%@(%d/%d)",payUser.m_nsNickName,currentCount,allCount];
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@NO,@"msg":msg}];
|
||||
currentCount += 1;
|
||||
//等待结果
|
||||
long result = dispatch_semaphore_wait(DKHelper.shared.friendCheckSem, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.5 * NSEC_PER_SEC)));
|
||||
if (result != 0) { // 检测超时
|
||||
// 尝试重传一次
|
||||
[mgr GetTransferPrepayRequest:payReq];
|
||||
long repeatResult = dispatch_semaphore_wait(DKHelper.shared.friendCheckSem, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.5 * NSEC_PER_SEC)));
|
||||
if(repeatResult != 0) { // 重传后依然能失败
|
||||
[DKHelper.shared.invalidFriends addObject:payUser];
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSLog(@"检测结果---%@(%@):%@%@",payUser.m_nsNickName,payUser.m_nsRemark,DKHelper.shared.currentCheckResult[@"retmsg"],DKHelper.shared.currentCheckResult[@"wx_error_msg"]);
|
||||
//获取到结果,处理
|
||||
NSDictionary * resultDic = DKHelper.shared.currentCheckResult;
|
||||
// 失败 retmsg = "" retcode = 268502017 wx_error_msg = 你不是收款方好友,对方添加你为好友后才能发起转账
|
||||
// 成功 retmsg = ok retcode = 0 wx_error_msg = ""
|
||||
if ([@"ok" isEqualToString:[resultDic valueForKey:@"retmsg"]]){
|
||||
// 可以转账
|
||||
[DKHelper.shared.validFriends addObject:payUser];
|
||||
}else if([@"268502017" isEqualToString:[resultDic valueForKey:@"retcode"]]){
|
||||
// 不是好友
|
||||
[DKHelper.shared.notFriends addObject:payUser];
|
||||
}else{
|
||||
// 其他原因失败了
|
||||
[DKHelper.shared.invalidFriends addObject:payUser];
|
||||
}
|
||||
|
||||
}];
|
||||
}
|
||||
[_serialFriendCheckQueue addOperationWithBlock:^{
|
||||
// 检测结束操作
|
||||
DKHelper.shared.checkFriendsEnd = YES;
|
||||
DKHelper.shared.currentCheckResult = @{};
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@YES}];
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 175 KiB |
@@ -472,6 +472,13 @@
|
||||
|
||||
@end
|
||||
|
||||
@interface MicroMessengerAppDelegate
|
||||
+ (MicroMessengerAppDelegate *)GlobalInstance;
|
||||
@property(retain, nonatomic) UIWindow *window;
|
||||
@property (nonatomic, retain) UIWindow *launchWindow;
|
||||
-(void)showLaunchVideo;
|
||||
@end
|
||||
|
||||
@interface WCOperateFloatView : UIView{
|
||||
UIImageView *m_lineView;
|
||||
}
|
||||
@@ -494,6 +501,149 @@
|
||||
- (void)forwordTimeLine:(id)arg1;
|
||||
|
||||
@end
|
||||
|
||||
@interface WCPayTransferPrepayRequestStruct : NSObject
|
||||
|
||||
@property(retain, nonatomic) NSString *placeorderReserves;
|
||||
@property(nonatomic) unsigned int m_uiPayChannel;
|
||||
@property(nonatomic) int m_transferScene;
|
||||
@property(retain, nonatomic) NSString *m_nsProducetDesc;
|
||||
@property(nonatomic) unsigned int m_uiPayScene;
|
||||
@property(nonatomic) unsigned long long m_uiTotalFee;
|
||||
@property(nonatomic) unsigned int m_uiFeeType;
|
||||
@property(retain, nonatomic) NSString *m_nsReceiverUserName;
|
||||
@end
|
||||
|
||||
@interface WCPayLogicMgr:NSObject
|
||||
- (void)GetTransferPrepayRequest:(id)arg1;
|
||||
@end
|
||||
|
||||
//MARK: - imagePicker
|
||||
@class EditImageAttr, MMAsset, MMImagePickerController, NSArray, NSDictionary, SightDraft, UINavigationController, WCFinderDataItem, WCFinderReportPostStateModel;
|
||||
@protocol MMImagePickerControllerDelegate <NSObject>
|
||||
@optional
|
||||
- (void)onImagePickerControllerClickPostFinderLongVideoWithPostStateModel:(WCFinderReportPostStateModel *)arg1;
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingImageWithEditImageAttr:(EditImageAttr *)arg2;
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingVideoWithAsset:(MMAsset *)arg2;
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingSightWithInfo:(SightDraft *)arg2;
|
||||
- (void)MMVideoPickerController:(UINavigationController *)arg1 didFinishPickingMediaWithInfo:(NSDictionary *)arg2;
|
||||
- (void)MMImagePickerControllerDidSkip:(MMImagePickerController *)arg1;
|
||||
- (void)MMImagePickerControllerDidCancel:(MMImagePickerController *)arg1;
|
||||
- (void)MMImagePickerManager:(UINavigationController *)arg1 didFinishPickingAssetWithDataItem:(WCFinderDataItem *)arg2 GPSInfoArrayOfAsset:(NSArray *)arg3 dataReportModel:(WCFinderReportPostStateModel *)arg4;
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFailToPickAssets:(NSArray *)arg2;
|
||||
- (void)MMImagePickerController:(MMImagePickerController *)arg1 didFinishPickingMediaWithInfo:(NSArray *)arg2;
|
||||
@end
|
||||
|
||||
@class EditImageLogicController, EditVideoLogicController, MMAssetPickerController, MMImagePickerControllerPreviewReportObject, MMNearbyAssetPickerViewController, NSArray, NSString, WCFinderEditOptionModel;
|
||||
@protocol MMImagePickerControllerDelegate;
|
||||
|
||||
@interface MMImagePickerController : MMUINavigationController
|
||||
|
||||
@property(nonatomic) unsigned long long enterTime; // @synthesize enterTime=_enterTime;
|
||||
@property(nonatomic) __weak MMNearbyAssetPickerViewController *nearbyAssetPicker; // @synthesize nearbyAssetPicker=_nearbyAssetPicker;
|
||||
@property(nonatomic) _Bool showSkipBtn; // @synthesize showSkipBtn=_showSkipBtn;
|
||||
@property(retain, nonatomic) WCFinderEditOptionModel *finderOptionModel; // @synthesize finderOptionModel=_finderOptionModel;
|
||||
@property(nonatomic) _Bool buttonEnableAfterSend; // @synthesize buttonEnableAfterSend=_buttonEnableAfterSend;
|
||||
@property(nonatomic) _Bool videoDirectToEdit; // @synthesize videoDirectToEdit=_videoDirectToEdit;
|
||||
@property(nonatomic) unsigned long long maxGifDataSize; // @synthesize maxGifDataSize=_maxGifDataSize;
|
||||
@property(retain, nonatomic) EditVideoLogicController *editVideoLogicController; // @synthesize editVideoLogicController=_editVideoLogicController;
|
||||
@property(retain, nonatomic) EditImageLogicController *editImageLogicController; // @synthesize editImageLogicController=_editImageLogicController;
|
||||
@property(retain, nonatomic) MMImagePickerControllerPreviewReportObject *m_previewReportObject; // @synthesize m_previewReportObject;
|
||||
@property(nonatomic) _Bool isAllowCache; // @synthesize isAllowCache=_isAllowCache;
|
||||
@property(nonatomic) _Bool isPresentInSplitVC; // @synthesize isPresentInSplitVC=_isPresentInSplitVC;
|
||||
@property(nonatomic) int previewEditScene; // @synthesize previewEditScene=_previewEditScene;
|
||||
@property(nonatomic) _Bool isEditMode; // @synthesize isEditMode=_isEditMode;
|
||||
@property(nonatomic) _Bool isOriginalImage; // @synthesize isOriginalImage=_isOriginalImage;
|
||||
@property(retain, nonatomic) NSArray *selectedImageAssets; // @synthesize selectedImageAssets=_selectedImageAssets;
|
||||
@property(retain, nonatomic) NSArray *selectedImageURLs; // @synthesize selectedImageURLs=_selectedImageURLs;
|
||||
@property(retain, nonatomic) NSString *currentAlbum; // @synthesize currentAlbum=_currentAlbum;
|
||||
@property(retain, nonatomic) NSString *finishWording; // @synthesize finishWording=_finishWording;
|
||||
@property(nonatomic) int compressType; // @synthesize compressType=_compressType;
|
||||
@property(nonatomic) int maxImageCount; // @synthesize maxImageCount=_maxImageCount;
|
||||
@property(nonatomic) _Bool canHybridSendAsset; // @synthesize canHybridSendAsset=_canHybridSendAsset;
|
||||
@property(nonatomic) _Bool canSendGif; // @synthesize canSendGif=_canSendGif;
|
||||
@property(nonatomic) _Bool returnMetaForVideo; // @synthesize returnMetaForVideo=_returnMetaForVideo;
|
||||
@property(nonatomic) _Bool customizesClickAction; // @synthesize customizesClickAction=_customizesClickAction;
|
||||
@property(nonatomic) _Bool showPreviewView; // @synthesize showPreviewView=_showPreviewView;
|
||||
@property(nonatomic) _Bool needThumbImage; // @synthesize needThumbImage=_needThumbImage;
|
||||
@property(nonatomic) _Bool canSendMultiVideo; // @synthesize canSendMultiVideo=_canSendMultiVideo;
|
||||
@property(nonatomic) _Bool canSendMultiImage; // @synthesize canSendMultiImage=_canSendMultiImage;
|
||||
@property(nonatomic) _Bool isNotShowVideoSizeAlertView; // @synthesize isNotShowVideoSizeAlertView=_isNotShowVideoSizeAlertView;
|
||||
@property(nonatomic) _Bool isOnlyShowVideoMessage; // @synthesize isOnlyShowVideoMessage=_isOnlyShowVideoMessage;
|
||||
@property(nonatomic) _Bool canSendVideoMessage; // @synthesize canSendVideoMessage=_canSendVideoMessage;
|
||||
@property(nonatomic) _Bool forceSendOriginImage; // @synthesize forceSendOriginImage=_forceSendOriginImage;
|
||||
@property(nonatomic) _Bool canSendOriginImage; // @synthesize canSendOriginImage=_canSendOriginImage;
|
||||
@property(nonatomic) __weak MMAssetPickerController *photoPicker; // @synthesize photoPicker=_photoPicker;
|
||||
@property(nonatomic) __weak id <MMImagePickerControllerDelegate> m_delegate; // @synthesize m_delegate;
|
||||
- (void)onAssetPickerControlCenterClickPostFinderLongVideoWithPostStateModel:(id)arg1;
|
||||
- (void)didReceiveMemoryWarning;
|
||||
- (int)getPickerScene;
|
||||
- (void)logImagePickerFinishLoad:(_Bool)arg1;
|
||||
- (void)logStartImagePicker;
|
||||
- (void)reportPickerActionInfo;
|
||||
- (void)reportPicerReportInfo;
|
||||
- (id)pickerReportInfo;
|
||||
- (void)reportPreviewCount;
|
||||
- (void)increasePreviewCount;
|
||||
- (void)selectedDataItem:(id)arg1 GPSInfoArrayOfAsset:(id)arg2 dataReportModel:(id)arg3;
|
||||
- (void)failToFetchAssets:(id)arg1;
|
||||
- (void)selectAsset:(id)arg1;
|
||||
- (void)selectedEditImageAttr:(id)arg1;
|
||||
- (void)selectedSight:(id)arg1;
|
||||
- (void)selectedVideo:(id)arg1;
|
||||
- (void)didClickSkipBtn;
|
||||
- (void)selectedAssets:(id)arg1;
|
||||
- (void)selectedClickNextAction;
|
||||
- (void)cancelImagePicker;
|
||||
- (void)removeImageDatas;
|
||||
- (id)getReportExtInfoDismissState:(_Bool)arg1 eventCode:(long long)arg2;
|
||||
- (_Bool)isFinderScene;
|
||||
|
||||
- (id)initWithPoiInfo:(id)arg1 withOnlyShowVideoMessage:(_Bool)arg2 withNotShowVideoSizeAlertView:(_Bool)arg3 withMaxDuration:(unsigned long long)arg4 withShouldIncludeVideo:(_Bool)arg5;
|
||||
- (id)initForJustReturnMMAsset:(_Bool)arg1 withAdjustRevertIndex:(unsigned long long)arg2 withDirectToFirstAlbum:(_Bool)arg3 withOnlyShowVideoMessage:(_Bool)arg4 withNotShowVideoSizeAlertView:(_Bool)arg5 withPickerVCForceFullScrenn:(_Bool)arg6;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@interface ZipArchive : NSObject
|
||||
|
||||
|
||||
|
||||
@property(nonatomic) id delegate; // @synthesize delegate=_delegate;
|
||||
- (id)Date1980;
|
||||
- (_Bool)OverWrite:(id)arg1;
|
||||
- (void)OutputErrorMessage:(id)arg1;
|
||||
- (_Bool)UnzipCloseFile;
|
||||
- (_Bool)UnzipCurrentFileWithPosition:(unsigned int)arg1 length:(unsigned int)arg2 retData:(id *)arg3;
|
||||
- (_Bool)UnzipGetCurrentFileName:(id *)arg1 retIsDirectory:(_Bool *)arg2 retFileLength:(unsigned long long *)arg3;
|
||||
- (_Bool)UnzipGoToFirstFile;
|
||||
- (_Bool)UnzipGoToNextFile;
|
||||
- (_Bool)UnzipLocateFile:(id)arg1;
|
||||
- (_Bool)UnzipHasRelativeDir:(_Bool *)arg1;
|
||||
- (_Bool)UnzipFileTo:(id)arg1 overWrite:(_Bool)arg2;
|
||||
- (_Bool)UnzipOpenFile:(id)arg1 Password:(id)arg2;
|
||||
- (_Bool)UnzipOpenFile:(id)arg1;
|
||||
- (_Bool)CloseZipFile2;
|
||||
- (_Bool)addFileToZip:(id)arg1 newname:(id)arg2;
|
||||
- (_Bool)addSingleFileToZip:(id)arg1 fileNameInZip:(id)arg2;
|
||||
- (_Bool)CreateZipFile2:(id)arg1 Password:(id)arg2;
|
||||
- (_Bool)CreateZipFile2:(id)arg1;
|
||||
- (void)dealloc;
|
||||
- (id)init;
|
||||
|
||||
@end
|
||||
|
||||
@interface MZipUtil : NSObject
|
||||
|
||||
+ (BOOL)UnZipFile:(NSString *)path toPath:(NSString *)destination;
|
||||
+ (BOOL)UnZipFile:(NSString *)path toPath:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#endif /* WechatHeaders_h */
|
||||
|
||||
|
||||
|
||||