浏览代码

카메라 관련 버그 수정

서용하 6 年之前
父节点
当前提交
0cd0e5ffbd

+ 18 - 16
MCPlus/Adapter/PhotoCollectionViewAdapter.swift

@@ -10,7 +10,7 @@ import Foundation
 import UIKit
 
 class PhotoCollectionViewAdapter: NSObject {
-    var list:[String:[Photo]]?
+    var list:[(String,[Photo])]?
     //체크 확인용
     var selectedArr = Set<IndexPath>()
     
@@ -26,17 +26,16 @@ extension PhotoCollectionViewAdapter:UICollectionViewDataSource, UICollectionVie
     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
         //리스트에서 키값을 얻어온다
         guard let list = list else{ return 0 }
-        let key = Array(list.keys)[section]
-        
-        //해당 키값의 데이터 수를 카운트
-        return list[key]?.count ?? 0
+        return list[section].1.count
     }
     
     func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
         //타이틀 뷰의 생성
         let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "PhotoCollectionViewReusableView", for: indexPath) as! PhotoCollectionViewReusableView
         guard let list = list else{ return view }
-        let key = Array(list.keys)[indexPath.section]
+        
+        let key = list[indexPath.first ?? 0].0
+        
         //키값을 새탕
         view.title.text = key
 
@@ -47,13 +46,12 @@ extension PhotoCollectionViewAdapter:UICollectionViewDataSource, UICollectionVie
         //앨범 이미지 셀을 생성
         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! PhotoCollectionViewCell
         guard let list = list else{ return cell }
-        let key = Array(list.keys)[indexPath.section]
         
         //해당 키값의 파일정보를 얻어 이미지를 불러온다
-        guard let path = list[key]?[indexPath.row].file, let image = getImage(path: path) else{
+        guard let path = list[indexPath.first ?? 0].1[indexPath.row].file, let image = getImage(path: path) else{
             return cell
         }
-        if list[key]?[indexPath.row].isSended == true{
+        if list[indexPath.first ?? 0].1[indexPath.row].isSended == true{
             cell.album.borderWidth = 3.0
         }else{
             cell.album.borderWidth = 0
@@ -69,21 +67,23 @@ extension PhotoCollectionViewAdapter:UICollectionViewDataSource, UICollectionVie
 
         //길게 누를 경우 이벤트
         cell.addLongPressGestureRecognizer { [weak self] in
-            
+            guard let `self` = self else{ return }
             let app = UIApplication.shared.delegate as! AppDelegate
-            let nav = app.visibleViewController?.navigationController as! UINavigationController
+            guard let nav = app.visibleViewController?.navigationController as? UINavigationController else{ return }
             
             let alert = UIAlertController(title: "선택", message: "", preferredStyle: .actionSheet)
             
             //개별 앨범 이미지를 삭제한다
             alert.addAction(UIAlertAction(title: "삭제", style: .destructive){ [weak collectionView](action) in
-                if let photo = list[key]?[indexPath.row]{
-                    self?.list?[key]?.remove(at: indexPath.row)
+                do {
+                    let photos = list[indexPath.first ?? 0].1
+                    let photo = photos[indexPath.row]
                     if let file = photo.file{
-                        self?.fileDelete(file: file)
+                        self.fileDelete(file: file)
                     }
                     let _ = photo.delete()
-                    collectionView?.reloadData()
+                    self.selectedArr = self.selectedArr.filter({$0 != indexPath})
+                    CustomCameraViewController.photoProcessCommit.value = nil
                 }
                 
             })
@@ -93,7 +93,9 @@ extension PhotoCollectionViewAdapter:UICollectionViewDataSource, UICollectionVie
                 let storyBoard = UIStoryboard(name: "Main", bundle: nil)
                 let VC = storyBoard.instantiateViewController(withIdentifier: "PhotoDetailViewController") as! PhotoDetailViewController
                 VC.image = image
-                if let photo = list[key]?[indexPath.row]{
+                do {
+                    let photos = list[indexPath.first ?? 0].1
+                    let photo = photos[indexPath.row]
                     VC.photo = photo
                     VC.callBack = { [weak collectionView] in
                         collectionView?.reloadData()

+ 17 - 15
MCPlus/Model/Photo.swift

@@ -167,10 +167,10 @@ extension Photo{
         return false
     }
 
-    static func list(user:User) -> [String:[Photo]]{
-        var returnDic:[String:[Photo]]
+    static func list(user:User) -> [(String,[Photo])]{
+        var returnDic:[(String,[Photo])]
         let contactDB = SqlClient.shared.DB
-        returnDic = [String:[Photo]]()
+        returnDic = [(String,[Photo])]()
 
         guard let id = user.patientId else{
             return returnDic
@@ -194,11 +194,14 @@ extension Photo{
                     }
                 }
             }
-            let keys = photos.map({$0.key}).compactMap({$0}).reversed()
-            for key in keys{
-                returnDic[key] = photos.filter({$0.key == key})
-            }
+            let keys = photos.map({$0.key})
+                .compactMap({$0})
+            let _keys = Set(keys).sorted().reversed()
             
+            for key in _keys{
+                print(key)
+                returnDic.append((key, photos.filter({$0.key == key})))
+            }
             contactDB.close()
         } else {
             print("Error \(contactDB.lastErrorMessage())")
@@ -206,10 +209,10 @@ extension Photo{
         return returnDic
     }
     
-    static func allList(user:User) -> [String:[Photo]]{
-        var returnDic:[String:[Photo]]
+    static func allList(user:User) -> [(String,[Photo])]{
+        var returnDic:[(String,[Photo])]
         let contactDB = SqlClient.shared.DB
-        returnDic = [String:[Photo]]()
+        returnDic = [(String,[Photo])]()
         
         if contactDB.open() {
             let querySQL = "SELECT userId, fileName, fileKey FROM Photo ORDER BY fileDate ASC"
@@ -233,9 +236,10 @@ extension Photo{
                     }
                 }
             }
-            let keys = photos.map({$0.key}).compactMap({$0}).reversed()
-            for key in keys{
-                returnDic[key] = photos.filter({$0.key == key})
+            let keys = photos.map({$0.key}).compactMap({$0})
+            let _keys = Set(keys).sorted().reversed()
+            for key in _keys{
+                returnDic.append((key, photos.filter({$0.key == key})))
             }
             contactDB.close()
         } else {
@@ -245,8 +249,6 @@ extension Photo{
     }
     
     static func filter(_ photo:Photo, _ user:User) -> Bool {
-        print(photo)
-        print(user)
         if photo.user?.userId != user.userId{
             return false
         }

+ 4 - 0
MCPlus/SwiftExtension/ExtensionData.swift

@@ -23,6 +23,10 @@ extension Data {
     var hexDescription: String {
         return reduce("") {$0 + String(format: "%02x", $1)}
     }
+    
+    var binaryDescription: String {
+        return reduce("") {$0 + String(format: "%0b", $1)}
+    }
 }
 
 extension Data {

+ 1 - 0
MCPlus/SwiftExtension/ExtensionString.swift

@@ -133,3 +133,4 @@ extension String {
         return index(startIndex, offsetBy: offset)
     }
 }
+

+ 4 - 1
MCPlus/ViewControllers/PhotoDetailViewController.swift

@@ -145,15 +145,18 @@ extension PhotoDetailViewController:UIScrollViewDelegate{
             //원본 이미지 찾기
             let origin = dir.appendingPathComponent("kunkuk/\(photo.file ?? "")")
             if let data = try? Data(contentsOf: origin){
-                param["image"] = data.base64EncodedString()
+                
+                param["image"] = String(data: data, encoding: .utf8)
             }
         }
         
+        
         let url = "\(MCarePlusConstants.DOMAIN_NAME)/\(photo.user?.serviceUrl ?? "")"
         APIClient(url)
             .param(reqParam: param)
             .enType(.json)
             .connect { [weak self](result:[String:Any]) in
+                
                 guard let `result` = result["result"] as? [[String:Any]] else{ return }
                 let returnCd = result.first?["returnCd"] as? String
                 //성공일시

+ 18 - 6
MCPlus/ViewControllers/PhotoViewController.swift

@@ -130,7 +130,7 @@ class PhotoViewController: UIViewController{
     
     let adapter = PhotoCollectionViewAdapter()
     
-    var list = MutableProperty<[String:[Photo]]?>(nil)
+    var list = MutableProperty<[(String,[Photo])]?>(nil)
 
     var successCount = 0
     var failCount = 0
@@ -178,18 +178,20 @@ extension PhotoViewController{
         //비동기화 통신코드 동기화 구현 필요
         for indexPath in self.adapter.selectedArr{
             guard let list = self.list.value else{ return }
-            let key = Array(list.keys)[indexPath.section]
             
+            let photos = list[indexPath.first ?? 0].1
+            let photo = photos[indexPath.row]
             //선택된 사진이 이미 보낸적이 있다면 업데이트하지 않는다
-            if let photo = list[key]?[indexPath.row], photo.isSended == false{
+            if photo.isSended == false{
                 self.uploadItem(photo)
             }
+            self.adapter.selectedArr = self.adapter.selectedArr.filter({$0 != indexPath})
         }
         
         if let parent = self.parent as? PictureViewController{
             parent.callBack?(["success":"\(successCount)", "fail":"\(failCount)"])
         }
-        self.reloadTable()
+        self.showAlert("서버에 업로드 되었습니다.", "", "확인")
     }
     
     func uploadItem(_ photo:Photo){
@@ -207,7 +209,13 @@ extension PhotoViewController{
         if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
             //원본 이미지 찾기
             let origin = dir.appendingPathComponent("kunkuk/\(photo.file ?? "")")
+            
             if let data = try? Data(contentsOf: origin){
+//                let binaryString = data.reduce("") { (acc, byte) -> String in
+//                    print(String(byte, radix: 2))
+//                    return acc + String(byte, radix: 2)
+//                }
+//                param["image"] = binaryString
                 param["image"] = data.base64EncodedString()
             }
         }
@@ -218,6 +226,7 @@ extension PhotoViewController{
             .param(reqParam: param)
             .enType(.json)
             .connect { [weak self](result:[String:Any]) in
+                print(result)
                 guard let `result` = result["result"] as? [[String:Any]] else{ return }
                 let returnCd = result.first?["returnCd"] as? String
                 //성공일시
@@ -225,6 +234,7 @@ extension PhotoViewController{
                     self?.successCount += 1
                     photo.isSended = true
                     photo.update()
+                    self?.reloadTable()
                 }else{
                     self?.failCount += 1
                 }
@@ -239,15 +249,17 @@ extension PhotoViewController{
     func deleteAction(){
         for indexPath in self.adapter.selectedArr{
             guard let list = self.list.value else{ return }
-            let key = Array(list.keys)[indexPath.section]
             
-            if let photo = list[key]?[indexPath.row]{
+            let photos = list[indexPath.first ?? 0].1
+            let photo = photos[indexPath.row]
+            do {
                 if let file = photo.file{
                     self.fileDelete(file: file)
                 }
                 
                 let _ = photo.delete()
             }
+            self.adapter.selectedArr = self.adapter.selectedArr.filter({$0 != indexPath})
         }
         
         self.reloadTable()