@@ -1179,9 +1179,9 @@ |
||
1179 | 1179 |
A69FFAA31E7004700006FEE0 /* PhotoDetailViewController.swift */, |
1180 | 1180 |
A69FFA9E1E7004700006FEE0 /* PhotoDetailCommentCell.swift */, |
1181 | 1181 |
05594C022240E94E002D4910 /* PhotoDetailImageCell.swift */, |
1182 |
- A69FFAA61E7004700006FEE0 /* ImageCell.swift */, |
|
1183 | 1182 |
A69FFAA81E7004700006FEE0 /* ShareController.swift */, |
1184 | 1183 |
A69FFAA91E7004700006FEE0 /* PhotoPreviewViewController.swift */, |
1184 |
+ A69FFAA61E7004700006FEE0 /* ImageCell.swift */, |
|
1185 | 1185 |
A69FFB881E7018CC0006FEE0 /* PhotoDetail.storyboard */, |
1186 | 1186 |
); |
1187 | 1187 |
path = PhotoDetail; |
@@ -88,7 +88,7 @@ extension PhotoItem: Mappable { |
||
88 | 88 |
} |
89 | 89 |
mutating public func mapping(map: Map) { |
90 | 90 |
let dateFormatter = DateFormatter() |
91 |
- dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" |
|
91 |
+ dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" |
|
92 | 92 |
created_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter)) |
93 | 93 |
avatar <- map["avatar"] |
94 | 94 |
comment_num <- map["comment_num"] |
@@ -14,9 +14,9 @@ struct FileModel { |
||
14 | 14 |
let fileData: Data |
15 | 15 |
let mimeType: String |
16 | 16 |
|
17 |
- init(name: String, fileName: String? = nil, fileData: Data, mimeType: String = "image/jpeg") { |
|
17 |
+ init(name: String = "photo", fileName: String, fileData: Data, mimeType: String = "image/jpeg") { |
|
18 | 18 |
self.name = name |
19 |
- self.fileName = fileName ?? name |
|
19 |
+ self.fileName = fileName |
|
20 | 20 |
self.fileData = fileData |
21 | 21 |
self.mimeType = mimeType |
22 | 22 |
} |
@@ -33,8 +33,9 @@ struct GroupPhotoRemoteAPI { |
||
33 | 33 |
} |
34 | 34 |
|
35 | 35 |
func uploadPhoto(data: Data) -> Single<[PhotoItem]> { |
36 |
-// let name = groupId + "" + "\(Date.timeIntervalSinceReferenceDate)" |
|
37 |
- let file = FileModel(name: "photo", fileData: data) |
|
36 |
+ let name = ShareUserId + "\(Date.timeIntervalSinceReferenceDate)" |
|
37 |
+ print(name) |
|
38 |
+ let file = FileModel(fileName: name, fileData: data) |
|
38 | 39 |
let uploadResource = UploadResource<[PhotoItem]>(path: .photoUpload, |
39 | 40 |
parameter: ["user_id": ShareUserId, |
40 | 41 |
"group_id": groupId, |
@@ -143,11 +143,18 @@ class NetworkApi { |
||
143 | 143 |
switch res.result { |
144 | 144 |
case .success(let json): |
145 | 145 |
guard let json = json as? [String: AnyObject], |
146 |
+ let status = json["status"] as? Int, |
|
146 | 147 |
let data = resource.parse(json) else { |
148 |
+ Toast.show(message: "解析失败") |
|
147 | 149 |
observer(.error(ParseError())) |
148 | 150 |
return |
149 | 151 |
} |
150 |
- observer(.success(data)) |
|
152 |
+ if status == 200 { |
|
153 |
+ observer(.success(data)) |
|
154 |
+ } else { |
|
155 |
+ Toast.show(message: (json["description"] as? String) ?? "") |
|
156 |
+ observer(.error(BusinessError(id: status))) |
|
157 |
+ } |
|
151 | 158 |
case .failure(let error): |
152 | 159 |
observer(.error(error)) |
153 | 160 |
} |
@@ -77,7 +77,6 @@ public class GroupViewModel { |
||
77 | 77 |
} |
78 | 78 |
|
79 | 79 |
public func submit(data: Data) { |
80 |
- Toast.showActivity(message: "正在上传照片") |
|
81 | 80 |
repository.upload(data: data).subscribe(onSuccess: { [weak self] result in |
82 | 81 |
guard let `self` = self else { return } |
83 | 82 |
self.items.accept(result) |
@@ -33,9 +33,9 @@ public final class PhotoDetailViewModel { |
||
33 | 33 |
}) |
34 | 34 |
} |
35 | 35 |
|
36 |
- public var groupAvatar: Observable<String> { |
|
36 |
+ public var groupAvatar: Observable<Int> { |
|
37 | 37 |
return item.map({ v in |
38 |
- return v.group_avatar |
|
38 |
+ return v.group_default_avatar |
|
39 | 39 |
}) |
40 | 40 |
} |
41 | 41 |
|
@@ -53,7 +53,7 @@ public final class PhotoDetailViewModel { |
||
53 | 53 |
|
54 | 54 |
public var photoTime: Observable<String> { |
55 | 55 |
return item.map({ v in |
56 |
- return v.create_at |
|
56 |
+ return v.create_at_time_interval |
|
57 | 57 |
}) |
58 | 58 |
} |
59 | 59 |
|
@@ -29,8 +29,7 @@ extension Date { |
||
29 | 29 |
|
30 | 30 |
public func getTimeInfoFromDate() -> String { |
31 | 31 |
let dateNow = Date() |
32 |
- let time = dateNow.timeIntervalSince(self) |
|
33 |
- |
|
32 |
+ let time = dateNow.timeIntervalSince(self) - 28800 |
|
34 | 33 |
var retTime: TimeInterval = 1.0 |
35 | 34 |
if time < 3600 { |
36 | 35 |
retTime = time / 60 |
@@ -19,9 +19,11 @@ public extension UIImage { |
||
19 | 19 |
func scaledImage(length: CGFloat, with quality: CGFloat) -> Data? { |
20 | 20 |
let edge = size.width > size.height ? size.height : size.width |
21 | 21 |
let outputSize = size * (length / edge) |
22 |
- |
|
23 | 22 |
let renderer = UIGraphicsImageRenderer(size: outputSize) |
24 |
- return renderer.image(actions: {_ in }).jpegData(compressionQuality: quality) |
|
23 |
+ return renderer.jpegData(withCompressionQuality: quality) { _ in |
|
24 |
+ let content = UIGraphicsGetCurrentContext() |
|
25 |
+ content?.draw(cgImage!, in: CGRect.init(origin: CGPoint.zero, size: outputSize)) |
|
26 |
+ } |
|
25 | 27 |
} |
26 | 28 |
} |
27 | 29 |
|
@@ -252,11 +252,13 @@ extension GroupViewController: UIImagePickerControllerDelegate, UINavigationCont |
||
252 | 252 |
} |
253 | 253 |
|
254 | 254 |
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { |
255 |
- dismiss(animated: true, completion: nil) |
|
256 |
- guard let image = info[.originalImage] as? UIImage, |
|
257 |
- let data = image.scaledImage(length: 1280, with: 0.4) else { return } |
|
255 |
+ Toast.showActivity(message: "正在上传照片") |
|
256 |
+ dismiss(animated: true) { |
|
257 |
+ guard let image = info[.originalImage] as? UIImage, |
|
258 |
+ let data = image.scaledImage(length: 1280, with: 0.4) else { return } |
|
259 |
+ self.viewModel.submit(data: data) |
|
260 |
+ } |
|
258 | 261 |
|
259 |
- viewModel.submit(data: data) |
|
260 | 262 |
} |
261 | 263 |
|
262 | 264 |
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { |
@@ -151,6 +151,7 @@ extension PhotoDetailViewController { |
||
151 | 151 |
|
152 | 152 |
bindViewModelToUserName() |
153 | 153 |
bindgingViewModelToUserAvatar() |
154 |
+ bindViewModelToPhotoTime() |
|
154 | 155 |
|
155 | 156 |
bindViewModelToThumbupCount() |
156 | 157 |
bindViewModelToThumbupView() |
@@ -183,10 +184,9 @@ extension PhotoDetailViewController { |
||
183 | 184 |
|
184 | 185 |
func bindViewModelToGroupAvatar() { |
185 | 186 |
viewModel.groupAvatar |
186 |
- .subscribe(onNext: {[weak self] (avatar) in |
|
187 |
- guard let `self` = self else { return } |
|
188 |
- self.groupAvatar.setImage(avatar) |
|
189 |
- }).disposed(by: disposeBag) |
|
187 |
+ .map { UIImage(named: #"Group\#($0)"#)} |
|
188 |
+ .bind(to: groupAvatar.rx.image) |
|
189 |
+ .disposed(by: disposeBag) |
|
190 | 190 |
} |
191 | 191 |
|
192 | 192 |
func bindgingViewModelToUserAvatar() { |
@@ -198,7 +198,7 @@ extension PhotoDetailViewController { |
||
198 | 198 |
} |
199 | 199 |
|
200 | 200 |
func bindViewModelToUserName() { |
201 |
- viewModel.groupName.bind(to: userName.rx.text).disposed(by: disposeBag) |
|
201 |
+ viewModel.userName.bind(to: userName.rx.text).disposed(by: disposeBag) |
|
202 | 202 |
} |
203 | 203 |
|
204 | 204 |
func bindViewModelToPhotoTime() { |
@@ -94,7 +94,7 @@ extension PhotoPreviewViewController { |
||
94 | 94 |
/// storyboard button action |
95 | 95 |
extension PhotoPreviewViewController { |
96 | 96 |
@IBAction func back() { |
97 |
- navigationController?.popViewController(animated: true) |
|
97 |
+ dismissController() |
|
98 | 98 |
} |
99 | 99 |
|
100 | 100 |
@IBAction func rotateTheImage(_ sender: UIButton) { |