Commit 7ceb0c54 authored by zhangzhe's avatar zhangzhe

Merge branch 'branch_1.0.1' of gitlab.huolea.com:lmi/shorthandmaster into branch_1.0.1

parents 92f0fb20 5bd78a98
......@@ -232,6 +232,8 @@
A950F5B024F4E080007AB63E /* Mine.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Mine.storyboard; sourceTree = "<group>"; };
A950F5B424F4E64A007AB63E /* UIView+CornerRadii.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+CornerRadii.h"; sourceTree = "<group>"; };
A950F5B524F4E64A007AB63E /* UIView+CornerRadii.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+CornerRadii.m"; sourceTree = "<group>"; };
A954DD9125222C4600C2DDB6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
A954DD9225222C4600C2DDB6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
A95A76832521D70F003B4E1C /* DDSoundWaveView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSoundWaveView.h; sourceTree = "<group>"; };
A95A76842521D70F003B4E1C /* UIView+LayoutMethods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+LayoutMethods.m"; sourceTree = "<group>"; };
A95A76852521D70F003B4E1C /* DDSoundWaveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSoundWaveView.m; sourceTree = "<group>"; };
......@@ -968,6 +970,7 @@
knownRegions = (
en,
Base,
"zh-Hans",
);
mainGroup = A95CDF5B24E0E8B50066DAE6;
productRefGroup = A95CDF6524E0E8B50066DAE6 /* Products */;
......@@ -1219,6 +1222,7 @@
isa = PBXVariantGroup;
children = (
A95CDF6E24E0E8B50066DAE6 /* Base */,
A954DD9125222C4600C2DDB6 /* zh-Hans */,
);
name = Main.storyboard;
sourceTree = "<group>";
......@@ -1227,6 +1231,7 @@
isa = PBXVariantGroup;
children = (
A95CDF7324E0E8B80066DAE6 /* Base */,
A954DD9225222C4600C2DDB6 /* zh-Hans */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
......@@ -1238,6 +1243,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
......@@ -1298,6 +1304,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
......@@ -1354,9 +1361,9 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "ShorthandMaster/速记大师.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 2;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 8F4PP38DC3;
GCC_INPUT_FILETYPE = automatic;
......@@ -1371,10 +1378,10 @@
"$(PROJECT_DIR)/ShorthandMaster/Other/Lame",
"$(PROJECT_DIR)/ShorthandMaster/Other/lame",
);
MARKETING_VERSION = 1.0.0;
MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = com.ShorthandMaster.www;
PRODUCT_NAME = "速记大师";
PROVISIONING_PROFILE_SPECIFIER = ShorthandMasterDevProfile;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/ShorthandMaster/ShorthandMaster-Bridging-Header.h";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "ShorthandMaster-Swift.h";
SWIFT_VERSION = 5.0;
......@@ -1388,9 +1395,9 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "ShorthandMaster/速记大师.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 2;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 8F4PP38DC3;
GCC_INPUT_FILETYPE = automatic;
......@@ -1405,10 +1412,10 @@
"$(PROJECT_DIR)/ShorthandMaster/Other/Lame",
"$(PROJECT_DIR)/ShorthandMaster/Other/lame",
);
MARKETING_VERSION = 1.0.0;
MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = com.ShorthandMaster.www;
PRODUCT_NAME = "速记大师";
PROVISIONING_PROFILE_SPECIFIER = ShorthandMasterDevProfile;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/ShorthandMaster/ShorthandMaster-Bridging-Header.h";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "ShorthandMaster-Swift.h";
SWIFT_VERSION = 5.0;
......
......@@ -27,7 +27,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
MobClick.event("app_start")
SHUserAccountManager.shared.logCollection(with: .appStart)
// IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enable = true
self.window = UIWindow(frame: UIScreen.main.bounds)
......
......@@ -2,10 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
<key>NSCameraUsageDescription</key>
<string></string>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
......@@ -29,6 +25,8 @@
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSCameraUsageDescription</key>
<string></string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>App需要您开启定位权限,命名您的文件名称</string>
<key>NSLocationAlwaysUsageDescription</key>
......@@ -39,6 +37,8 @@
<string>App需要您开启定位权限,命名您的文件名称</string>
<key>NSMicrophoneUsageDescription</key>
<string>App需要访问麦克风,进行录音并保存</string>
<key>NSPhotoLibraryUsageDescription</key>
<string></string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>App需要您允许以使用语音识别进行语音转译</string>
<key>UIBackgroundModes</key>
......
......@@ -73,7 +73,7 @@ class SHMineViewController: SHBaseViewController {
}
func sortType(){
UIAlertController.showActionSheet(withTitle: "", message: "", cancelBtnTitle: "取消", otherBtnTitles: sortTypes) { (index) in
UIAlertController.showActionSheet(withTitle: nil, message: nil, cancelBtnTitle: "取消", otherBtnTitles: sortTypes) { (index) in
if index == 0{
return
}
......@@ -107,7 +107,7 @@ extension SHMineViewController:UITableViewDelegate, UITableViewDataSource{
if indexPath.section == 0 {
cell?.detailTextLabel?.text = currentSortType
cell?.detailTextLabel?.font = UIFont.systemFont(ofSize: 12)
cell?.detailTextLabel?.font = UIFont.systemFont(ofSize: 16)
}
cell?.accessoryType = .disclosureIndicator
......@@ -153,6 +153,7 @@ extension SHMineViewController:UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
switch indexPath.section {
case 0:
sortType()
......@@ -178,7 +179,18 @@ extension SHMineViewController:UITableViewDelegate, UITableViewDataSource{
self.navigationController?.pushViewController(webView, animated: true)
break
case 3:
SHStoreManager.restorePurchases(success: {
SHUserAccountManager.shared.getUserInfo({ (model) in
if model.isMember{
self.getUserInfo()
MBProgressHUD.showSuccess("恢复成功")
}else{
MBProgressHUD.showError("恢复失败,请稍后再试")
}
}, failure: {
MBProgressHUD.showError("恢复失败,请稍后再试")
})
}, toView: self.view)
break
default:
break
......@@ -188,13 +200,5 @@ extension SHMineViewController:UITableViewDelegate, UITableViewDataSource{
default:
break
}
// let webView = SHWebViewController()
// webView.url = SHUserAccountManager.shared.h5_urlDic["user"] as? String
// webView.title = "付费用户协议"
// self.navigationController?.pushViewController(webView, animated: true)
// let delete = UIStoryboard.init(name: "Mine", bundle: nil).instantiateViewController(withIdentifier: "SHDeleteDetailsViewController") as! SHDeleteDetailsViewController
// self.navigationController?.pushViewController(delete, animated: true)
}
}
......@@ -48,7 +48,7 @@
NSString *type;
if (ary.count <= 0) {
[UIAlertController showAlertViewWithTitle:@"提示" Message:@"数据源不能为空" BtnTitles:@[@"确定"] ClickBtn:nil];
// [UIAlertController showAlertViewWithTitle:@"提示" Message:@"数据源不能为空" BtnTitles:@[@"确定"] ClickBtn:nil];
return sortDic;
}
......
......@@ -18,7 +18,7 @@
NSString * type;
if(originalArray.count <= 0){
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"数据源不能为空" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];
[alert show];
// [alert show];
return originalArray;
}
else{
......
......@@ -32,6 +32,7 @@ class SHRecordModel: NSObject{
@objc var selected: Bool = false
@objc var icloud: Bool = false
@objc var processing: Bool = false
override func setValue(_ value: Any?, forUndefinedKey key: String) {
......
......@@ -193,13 +193,13 @@
<rect key="frame" x="0.0" y="100" width="414" height="678"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击右上角添加笔记" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JlT-EC-bWg">
<rect key="frame" x="115.5" y="395" width="183.5" height="24"/>
<fontDescription key="fontDescription" type="system" pointSize="20"/>
<rect key="frame" x="124.5" y="396" width="165.5" height="21.5"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="recordlist_no_data" translatesAutoresizingMaskIntoConstraints="NO" id="1ji-L1-Qj7">
<rect key="frame" x="123.5" y="272" width="167" height="103"/>
<rect key="frame" x="123.5" y="273" width="167" height="103"/>
</imageView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
......@@ -334,13 +334,13 @@
<rect key="frame" x="0.0" y="44" width="414" height="758"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="这个笔记本里还没有笔记" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QYS-Yf-f9g">
<rect key="frame" x="95" y="367" width="224.5" height="24"/>
<fontDescription key="fontDescription" type="system" pointSize="20"/>
<rect key="frame" x="106" y="368.5" width="202" height="21.5"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="recordlist_no_data" translatesAutoresizingMaskIntoConstraints="NO" id="QrU-uf-U0R">
<rect key="frame" x="123.5" y="244" width="167" height="103"/>
<rect key="frame" x="123.5" y="245.5" width="167" height="103"/>
</imageView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
......
......@@ -50,6 +50,9 @@ class SHRecordDetailsVC: SHBaseViewController {
tableView?.rowHeight = UITableView.automaticDimension
tableView?.separatorStyle = .none
self.view.layoutIfNeeded()
self.view.layoutSubviews()
bottomView?.frame = CGRect.init(x: -tableFooterView!.frame.width, y: 0, width: tableFooterView!.frame.width*2, height: tableFooterView!.frame.height)
tableFooterAlertBgView?.addSubview(bottomView!)
......@@ -125,11 +128,12 @@ class SHRecordDetailsVC: SHBaseViewController {
@objc func editClick(_ restore:Bool){
self.markAlertViewShow(false)
self.bottomView?.cancel = true
if restore == false{
if currentModel.dataSources.count == 0 {
return
}
edit = !edit
}else {
edit = false
......@@ -207,7 +211,9 @@ extension SHRecordDetailsVC {
//MARK:icloud上传Models
func icloundUpload(_ index:NSInteger){
let model = currentModel.dataSources[index]
if model.processing == true {
return
}
var contains = false
for folderModel in SHCloudManager.shared.icloudFolderModels {
if currentModel.id == folderModel.id {
......@@ -216,10 +222,12 @@ extension SHRecordDetailsVC {
}
}
model.processing = true
if contains {
SHCloudManager.shared.addNewRecord(model) { (result, models) in
if result {
model.icloud = true
model.processing = false
SHCloudManager.shared.modifyFolder(self.currentModel) { (result, models) in
if result {
self.updateocloudUI()
......@@ -231,6 +239,7 @@ extension SHRecordDetailsVC {
SHCloudManager.shared.addNewRecord(model) { (result, models) in
if result {
model.icloud = true
model.processing = false
SHCloudManager.shared.addNewFolder(self.currentModel) { (result, models) in
if result {
self.updateocloudUI()
......@@ -241,12 +250,13 @@ extension SHRecordDetailsVC {
}
}
//MARK:icloud 移除 Models
func icloundRemove(_ index:NSInteger){
func icloudRemove(_ index:NSInteger){
let model = currentModel.dataSources[index]
SHCloudManager.shared.deleteRecord(model) { (result, models) in
if result {
model.icloud = false
if let _ = SHCloudManager.shared.icloudFolderModels.filter({ $0.id == self.currentModel.id }).first{
SHCloudManager.shared.modifyFolder(self.currentModel) { (result, models) in
if result {
self.updateocloudUI()
......@@ -255,6 +265,7 @@ extension SHRecordDetailsVC {
}
}
}
}
//MARK:删除Models
func deleteFile(){
if selectRecordModels.count == 0 {
......@@ -294,19 +305,19 @@ extension SHRecordDetailsVC {
}
}
}
if let _ = SHCloudManager.shared.icloudFolderModels.filter({ $0.id == self.currentModel.id }).first{
SHCloudManager.shared.modifyFolder(self.currentModel) { (result, models) in
if result {
self.updateocloudUI()
}
}
}
if self.currentModel.dataSources.count == 0 {
self.editClick(true)
self.markAlertViewShow(false)
self.bottomView?.cancel = true
}
self.selectRecordModels = []
// edit = false
DispatchQueue.main.async {
self.tableView?.reloadData()
}
......@@ -388,7 +399,7 @@ extension SHRecordDetailsVC: UITableViewDelegate, UITableViewDataSource{
if model.icloud == false{
self.icloundUpload(indexPath.row)
}else{
self.icloundRemove(indexPath.row)
self.icloudRemove(indexPath.row)
}
}
}
......
......@@ -56,9 +56,6 @@ class SHRecordListViewController: SHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)
print(url as Any)
SHCloudManager.shared.getAllFolderDataSource { (result, models) in
if result{
......@@ -158,75 +155,6 @@ class SHRecordListViewController: SHBaseViewController {
}
}
var list = keyValueStore.object(forKey: "Folderlist") as? [Dictionary<String, Any>]
if list == nil {
list = keyValueStore.object(forKey: "list") as? [Dictionary<String, Any>]
}
list = nil
if let list = list {
var folderModel = SHRecordFolderModel()
if let sub = list.first{
folderModel = getDataDictWith(dict: sub)
if folderModel.id.length == 0 {
folderModel.createDate = nowDate
folderModel.modifyDate = nowDate
folderModel.name = "未知";
folderModel.id = nowDate.milliStamp
for dic in list.reversed(){
var model = SHRecordModel()
model = getDataDictWith(dict: dic)
folderModel.dataSources.append(model)
}
let modifyDateSortDataSources = folderModel.dataSources.sorted { (model0, model1) -> Bool in
return model0.modifyDate.compare(model1.modifyDate) == ComparisonResult.orderedDescending
}
folderModel.modifyDate = modifyDateSortDataSources.first?.modifyDate ?? nowDate
let modelDict = getDictWith(obj: folderModel)
keyValueStore.set([modelDict], forKey: "Folderlist")
keyValueStore.synchronize()
print("synchronize === \(keyValueStore.synchronize())")
}
}
// let modityList = keyValueStore.object(forKey: "Folderlist") as? [Dictionary<String, Any>]
// if let list = modityList {
// for dict in list.reversed(){
// var model = SHRecordFolderModel()
// model = getDataDictWith(dict: dict)
// if model.top == true {
// topDataSources.append(model)
// }else{
// dataSources.append(model)
// }
// }
// }
dataSources = dataSources.filterDuplicates({$0.id})
topDataSources = topDataSources.filterDuplicates({$0.id})
switch CRUserDefaults.sortType {
case 0:
dataSources.sort { (model0, model1) -> Bool in
return model0.createDate.compare(model1.createDate) == ComparisonResult.orderedDescending
}
topDataSources.sort { (model0, model1) -> Bool in
return model0.createDate.compare(model1.createDate) == ComparisonResult.orderedDescending
}
break
default:
dataSources.sort { (model0, model1) -> Bool in
return model0.modifyDate.compare(model1.modifyDate) == ComparisonResult.orderedDescending
}
topDataSources.sort { (model0, model1) -> Bool in
return model0.modifyDate.compare(model1.modifyDate) == ComparisonResult.orderedDescending
}
break
}
}else{
switch CRUserDefaults.sortType {
case 0:
dataSources.sort { (model0, model1) -> Bool in
......@@ -245,7 +173,6 @@ class SHRecordListViewController: SHBaseViewController {
}
break
}
}
dataSources = topDataSources+dataSources
......@@ -260,7 +187,6 @@ class SHRecordListViewController: SHBaseViewController {
self.view.sendSubviewToBack(maskView)
}
markCountLab?.text = "笔记本总数:\(dataSources.count)"
}
@objc func mineCilck(){
......@@ -429,10 +355,11 @@ extension SHRecordListViewController {
@objc func addModel(){
let newFolder = SHRecordRenameAlertView.loadFromNibAndClass(SHRecordRenameAlertView.self)!
newFolder.placeHolder = "这是一个新的笔记本名称"
newFolder.placeHolder = "笔记本名称"
newFolder.title = "新笔记本"
newFolder.frame = UIApplication.shared.keyWindow!.bounds
UIApplication.shared.keyWindow!.addSubview(newFolder)
newFolder.frame = self.view.window?.bounds ?? CGRect.zero
// self.view.addSubview(newFolder)
self.navigationController?.view.addSubview(newFolder)
newFolder.confirmCallBack = { newFolderStr in
......@@ -540,7 +467,7 @@ extension SHRecordListViewController: UITableViewDelegate, UITableViewDataSource
self.removeModel(indexPath)
completionHandler(true)
completionHandler(false)
}
deleteAction.image = UIImage.init(named: "recordlist_delete")
deleteAction.backgroundColor = UIColor.init(hexStr: "E93425")
......@@ -549,7 +476,7 @@ extension SHRecordListViewController: UITableViewDelegate, UITableViewDataSource
self.renameModel(indexPath)
completionHandler(true)
completionHandler(false)
}
renameAction.image = UIImage.init(named: "recordlist_rename")
renameAction.backgroundColor = UIColor.init(hexStr: "BCBCBC")
......
......@@ -103,7 +103,7 @@ class SHRecordMoveFileVC: SHBaseViewController {
//MARK:添加新笔记
@objc func addModel(){
let newFolder = SHRecordRenameAlertView.loadFromNibAndClass(SHRecordRenameAlertView.self)!
newFolder.placeHolder = "这是一个新的笔记本名称"
newFolder.placeHolder = "笔记本名称"
newFolder.title = "新笔记本"
newFolder.frame = UIApplication.shared.keyWindow!.bounds
UIApplication.shared.keyWindow!.addSubview(newFolder)
......@@ -151,7 +151,7 @@ class SHRecordMoveFileVC: SHBaseViewController {
}
}
}
MBProgressHUD.show("正在处理中,请稍后...", view: nil)
MBProgressHUD.show("正在转移中,请稍后...", view: nil)
let list = CRUserDefaults.recordList
if var recordList = list{
//增
......@@ -183,14 +183,15 @@ class SHRecordMoveFileVC: SHBaseViewController {
}
SHCloudManager.shared.modifyFolder(self.currentModel) { (result, models) in
if result {
var contains = false
for folderModel in SHCloudManager.shared.icloudFolderModels {
if targetModel.id == folderModel.id {
let folderRecord = SHCloudManager.shared.icloudFolderModels.filter({ $0.id == targetModel.id
}).first
if folderRecord != nil {
contains = true
break
}
}
if contains {
SHCloudManager.shared.modifyFolder(targetModel) { (result, models) in
if result {
......@@ -202,6 +203,17 @@ class SHRecordMoveFileVC: SHBaseViewController {
}
}
} else {
let folderRecord = targetModel.dataSources.filter({ $0.icloud == true
}).first
if folderRecord == nil {
self.saveSuccessCallBack?(self.currentModel)
DispatchQueue.main.async {
MBProgressHUD.hide()
self.navigationController?.dismiss(animated: true, completion: nil)
}
return
}
SHCloudManager.shared.addNewFolder(targetModel) { (result, models) in
if result {
self.saveSuccessCallBack?(self.currentModel)
......@@ -214,7 +226,6 @@ class SHRecordMoveFileVC: SHBaseViewController {
}
}
}
}
}
//MARK: tableView delegate
......
......@@ -70,8 +70,10 @@ class SHRecordViewController: SHBaseViewController{
}
@objc func backGroundAlive(){
if recorderManager.state == .start{
recorderManager.start()
}
}
override func goback() {
super.goback()
......@@ -123,10 +125,15 @@ class SHRecordViewController: SHBaseViewController{
return
}
// if let model = currentModel {
// self.removeCurrentRecored(model)
// }
self.recorderManager.stop()
self.save = true
self.saveContent()
self.saveSuccessCallBack?(folderModel)
self.timerInvalidate()
let export = SHRecordExportAlertView.loadFromNibAndClass(SHRecordExportAlertView.self)!
export.frame = UIApplication.shared.keyWindow!.bounds
......@@ -158,35 +165,6 @@ class SHRecordViewController: SHBaseViewController{
}
}
@objc func userCilck(){
if currentTxt?.length == 0{
return
}
self.recorderManager.stop()
self.save = true
if let model = currentModel {
self.removeCurrentRecored(model)
}
saveContent()
if save == true {
self.currentTxt = ""
self.recorderBtn.setImage(UIImage.init(named: "record_start"), for: .normal)
self.recordTextView.attributedText = self.textView_text("")
self.configPathFile()
self.recorderBtn.isSelected = false
self.secondsLabel.text = "00:00:00"
self.seconds = 0
self.save = false
self.recorderManager.stop()
}
let mine = UIStoryboard.init(name: "Mine", bundle: nil).instantiateViewController(withIdentifier: "SHMineViewController") as! SHMineViewController
self.navigationController?.pushViewController(mine, animated: true)
}
@objc @IBAction func recordBtnClick(_ sender:UIButton){
if seconds >= non_member_limit_seconds {
......@@ -285,10 +263,6 @@ class SHRecordViewController: SHBaseViewController{
func saveContent(){
if currentTxt?.length == 0 {
return
}
let nowDate = Date()
let model = SHRecordModel()
model.recordingType = 0
......@@ -301,17 +275,17 @@ class SHRecordViewController: SHBaseViewController{
model.pcmPathFile = pcm_file_path
model.during = seconds
image_file_paths = []
image_indexs = []
let images = ["recordlist_no_data_search", "recordlist_no_data"]
for (index, imageStr) in images.enumerated(){
let image = UIImage.init(named: imageStr)
let filePath = DocumentPath+image_file_path+"\(index).jpeg"
let imageData = image!.jpegData(compressionQuality: 1)
try? imageData?.write(to: URL(fileURLWithPath: filePath))
image_file_paths.append(image_file_path+"\(index).jpeg")
image_indexs.append(index)
}
// image_file_paths = []
// image_indexs = []
// let images = ["recordlist_no_data_search", "recordlist_no_data"]
// for (index, imageStr) in images.enumerated(){
// let image = UIImage.init(named: imageStr)
// let filePath = DocumentPath+image_file_path+"\(index).jpeg"
// let imageData = image!.jpegData(compressionQuality: 1)
// try? imageData?.write(to: URL(fileURLWithPath: filePath))
// image_file_paths.append(image_file_path+"\(index).jpeg")
// image_indexs.append(index)
// }
model.imagesPath = []
model.imagesIndex = []
......
......@@ -7,6 +7,7 @@
//
import UIKit
import IQKeyboardManagerSwift
class SHRecordRenameAlertView: UIView {
......@@ -42,9 +43,10 @@ class SHRecordRenameAlertView: UIView {
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.3)
bgView?.layer.cornerRadius = 8
self.textField?.becomeFirstResponder()
self.textField?.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(self.doneButtonClicked(_:)))
}
@objc @IBAction func cleanBtnClick(_ sender:UIButton){
......@@ -62,5 +64,18 @@ class SHRecordRenameAlertView: UIView {
self.removeFromSuperview()
}
}
@objc func doneButtonClicked(_ sender: Any) {
if let text = textField?.text, text.length > 0{
confirmCallBack?(textField?.text ?? "")
self.removeFromSuperview()
}else{
self.textField?.becomeFirstResponder()
}
}
deinit {
// IQKeyboardManager.shared.enable = false
}
}
......@@ -16,7 +16,7 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qte-rS-SOz">
<rect key="frame" x="44" y="359.5" width="326" height="177"/>
<rect key="frame" x="44" y="188.5" width="326" height="176.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="重命名" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Yi-xr-CGL">
<rect key="frame" x="135.5" y="16" width="55.5" height="21.5"/>
......@@ -111,7 +111,7 @@
<constraint firstItem="qte-rS-SOz" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" multiplier="295:375" id="2PD-LC-trJ"/>
<constraint firstItem="qte-rS-SOz" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="CA5-u5-70k"/>
<constraint firstItem="qte-rS-SOz" firstAttribute="width" secondItem="qte-rS-SOz" secondAttribute="height" multiplier="295:160" id="R7v-tq-gOF"/>
<constraint firstItem="qte-rS-SOz" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="nKY-Te-wSH"/>
<constraint firstItem="qte-rS-SOz" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" multiplier="0.618" id="nKY-Te-wSH"/>
</constraints>
<connections>
<outlet property="bgView" destination="qte-rS-SOz" id="DBx-na-7o1"/>
......
......@@ -11,6 +11,7 @@ import AVFoundation
import Speech
enum SHRecordState {
case prepare
case start
case pause
case stop
......@@ -80,7 +81,7 @@ class SHAVAudioManager: NSObject {
var startTime: CFTimeInterval = CACurrentMediaTime()
var recoderResiltCallBack:((String)->Void)?
var decibelsCallBack:((Float)->Void)?
var state = SHRecordState.start
var state = SHRecordState.prepare
private func configRecorder(){
......@@ -176,6 +177,7 @@ class SHAVAudioManager: NSObject {
let lowPassResults = pow(10, (0.05 * (self.monitor?.peakPower(forChannel: 0))!));
decibelsCallBack?(lowPassResults)
// print("lowPassResults == \(lowPassResults)")
// print("decibels == \(decibels)")
if decibels > -44 {
if recognitionTask?.isCancelled == true && self.state == SHRecordState.start{
......@@ -193,9 +195,7 @@ class SHAVAudioManager: NSObject {
}
func start(){
if audioEngine.isRunning {
return
}
self.state = SHRecordState.start
self.configRecorder()
self.configSpeechTask()
......@@ -261,7 +261,7 @@ class SHAVAudioManager: NSObject {
return $0 + " " + $1
}}
)
if recorderResult.hasSuffix("\n") {
if recorderResult.hasSuffix("\n") || recorderResult.length == 0 {
recorderResult = recorderResult + processStr
}else{
recorderResult = recorderResult + " " + processStr
......
......@@ -20,6 +20,7 @@ class SHCloudManager: NSObject {
lazy var container = CKContainer.default()
lazy var dateBase = container.publicCloudDatabase
// lazy var dateBase = container.privateCloudDatabase
lazy var folderResults:[CKRecord] = []
lazy var recordResults:[CKRecord] = []
......@@ -40,6 +41,9 @@ class SHCloudManager: NSObject {
container.accountStatus { (status, statusError) in
if let error = statusError {
DispatchQueue.main.async {
MBProgressHUD.showError("未知错误,终止操作")
}
self.statusHandler?(false)
print("\(error.localizedDescription)")
}else{
......@@ -47,7 +51,16 @@ class SHCloudManager: NSObject {
case .available:
self.statusHandler?(true)
break;
case .noAccount:
DispatchQueue.main.async {
MBProgressHUD.showError("请确认您的iCloid是否开启")
}
self.statusHandler?(false)
break;
default:
DispatchQueue.main.async {
MBProgressHUD.showError("未知错误,终止操作")
}
self.statusHandler?(false)
break;
}
......@@ -59,10 +72,12 @@ class SHCloudManager: NSObject {
completionHandler = handler
self.cheakAccountStatus { result in
if result == true {
let predicate = NSPredicate.init(value: true)
let query = CKQuery.init(recordType: recordFolderName, predicate: predicate)
let query = CKQuery.init(recordType: self.recordFolderName, predicate: predicate)
dateBase.perform(query, inZoneWith: nil) { (records, queryError) in
self.dateBase.perform(query, inZoneWith: nil) { (records, queryError) in
if let error = queryError {
print("\(error.localizedDescription)")
......@@ -70,7 +85,11 @@ class SHCloudManager: NSObject {
}else{
self.folderResults = records ?? []
self.getAllRecordDataSource(handler)
// self.cleanAllFolder()
// self.cleanAllFolder()
}
}
} else {
self.completionHandler?(false, [])
}
}
}
......@@ -79,10 +98,12 @@ class SHCloudManager: NSObject {
completionHandler = handler
self.cheakAccountStatus { result in
if result == true {
let predicate = NSPredicate.init(value: true)
let query = CKQuery.init(recordType: recordName, predicate: predicate)
let query = CKQuery.init(recordType: self.recordName, predicate: predicate)
dateBase.perform(query, inZoneWith: nil) { (records, queryError) in
self.dateBase.perform(query, inZoneWith: nil) { (records, queryError) in
if let error = queryError {
print("\(error.localizedDescription)")
......@@ -91,7 +112,11 @@ class SHCloudManager: NSObject {
self.recordResults = records ?? []
self.mapDataSource()
self.completionHandler?(true, self.icloudFolderModels)
// self.cleanAllRecord()
// self.cleanAllRecord()
}
}
} else {
self.completionHandler?(false, [])
}
}
}
......@@ -196,7 +221,9 @@ class SHCloudManager: NSObject {
folderRecord.setValue(model.top, forKey: "top")
folderRecord.setValue(recordPaths, forKey: "recordPaths")
dateBase.save(folderRecord) { (subscription, saveError) in
self.cheakAccountStatus { result in
if result == true {
self.dateBase.save(folderRecord) { (subscription, saveError) in
if let error = saveError {
print("\(error.localizedDescription)")
self.completionHandler?(false, [])
......@@ -206,6 +233,10 @@ class SHCloudManager: NSObject {
self.completionHandler?(true, self.icloudFolderModels)
}
}
} else {
self.completionHandler?(false, [])
}
}
}
func addNewRecord(_ recordModel: SHRecordModel, handler:@escaping CompletionHandler){
......@@ -216,7 +247,11 @@ class SHCloudManager: NSObject {
return item["pathFile"] == recordModel.pathFile
}).first
if recording == nil {
if recording != nil {
self.completionHandler?(false, [])
return
}
let documentsFile = DocumentPath.appending(recordModel.pathFile)
let url = URL.init(fileURLWithPath: documentsFile)
let asset = CKAsset.init(fileURL: url)
......@@ -244,7 +279,9 @@ class SHCloudManager: NSObject {
}
record.setValue(imageAssets, forKey: "imagesAsset")
dateBase.save(record) { (subscription, saveError) in
self.cheakAccountStatus { result in
if result == true {
self.dateBase.save(record) { (subscription, saveError) in
if let error = saveError {
print("\(error.localizedDescription)")
self.completionHandler?(false, [])
......@@ -255,7 +292,8 @@ class SHCloudManager: NSObject {
}
}
} else {
self.completionHandler?(false, [])
}
}
}
......@@ -275,8 +313,14 @@ class SHCloudManager: NSObject {
return item["id"] == folderModel.id
}).first
dateBase.fetch(withRecordID: folderRecord!.recordID) { (record, fetchError) in
if folderRecord == nil{
self.completionHandler?(false, [])
return
}
self.cheakAccountStatus { result in
if result == true {
self.dateBase.fetch(withRecordID: folderRecord!.recordID) { (record, fetchError) in
if let error = fetchError {
print("\(error.localizedDescription)")
self.completionHandler?(false, [])
......@@ -301,6 +345,10 @@ class SHCloudManager: NSObject {
}
}
}
} else {
self.completionHandler?(false, [])
}
}
}
func modifyRecord(_ recordModel: SHRecordModel, handler:@escaping CompletionHandler){
......@@ -311,8 +359,9 @@ class SHCloudManager: NSObject {
return item["pathFile"] == recordModel.pathFile
}).first
dateBase.fetch(withRecordID: recording!.recordID) { (record, fetchError) in
self.cheakAccountStatus { result in
if result == true {
self.dateBase.fetch(withRecordID: recording!.recordID) { (record, fetchError) in
if let error = fetchError {
print("\(error.localizedDescription)")
self.completionHandler?(false, [])
......@@ -339,6 +388,10 @@ class SHCloudManager: NSObject {
}
}
}
} else {
self.completionHandler?(false, [])
}
}
}
func deleteFolder(_ folderModel: SHRecordFolderModel, handler:@escaping CompletionHandler){
......@@ -354,7 +407,9 @@ class SHCloudManager: NSObject {
return
}
dateBase.delete(withRecordID: folderRecord!.recordID) { (recordID, deleteError) in
self.cheakAccountStatus { result in
if result == true {
self.dateBase.delete(withRecordID: folderRecord!.recordID) { (recordID, deleteError) in
if let error = deleteError {
print("\(error.localizedDescription)")
......@@ -369,6 +424,10 @@ class SHCloudManager: NSObject {
self.completionHandler?(true, self.icloudFolderModels)
}
}
} else {
self.completionHandler?(false, [])
}
}
}
func deleteRecord(_ recordModel: SHRecordModel, handler:@escaping CompletionHandler){
......@@ -383,9 +442,9 @@ class SHCloudManager: NSObject {
self.completionHandler?(false, [])
return
}
dateBase.delete(withRecordID: record!.recordID) { (recordID, deleteError) in
self.cheakAccountStatus { result in
if result == true {
self.dateBase.delete(withRecordID: record!.recordID) { (recordID, deleteError) in
if let error = deleteError {
print("\(error.localizedDescription)")
self.completionHandler?(false, [])
......@@ -399,6 +458,10 @@ class SHCloudManager: NSObject {
self.completionHandler?(true, self.icloudFolderModels)
}
}
} else {
self.completionHandler?(false, [])
}
}
}
func deleteRecord(_ record: CKRecord, handler:@escaping CompletionHandler){
......
/* Class = "UILabel"; text = "速记大师"; ObjectID = "Zf1-FF-KGd"; */
"Zf1-FF-KGd.text" = "速记大师";
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment