@@ -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) {
|