|
//
// PhotoItem.swift
// PaiAi
//
// Created by FFIB on 2017/10/9.
// Copyright © 2017年 yb. All rights reserved.
//
import Foundation
import ObjectMapper
import RxDataSources
extension DateTransform {
open func transformFromJSON(_ value: Any?) -> Date? {
if let timeInt = value as? Double {
return Date(timeIntervalSince1970: TimeInterval(timeInt) / 1000)
}
if let timeStr = value as? String {
return Date(timeIntervalSince1970: TimeInterval(atof(timeStr)) / 1000)
}
return nil
}
}
struct PhotoItem {
var avatar = ""
var comment_num = 0
var created_at = ""
var create_at: Date?
var group_avatar = ""
var group_default_avatar = 0
var group_from = 0
var group_id = ""
var group_name = ""
var nickname = ""
var photo_from = 0
var photo_h = 0
var photo_w = 0
var photo_id = ""
var photo_thumbnail2_h = 0
var photo_thumbnail2_url = ""
var photo_thumbnail2_w = 0
var photo_thumbnail_h = 0
var photo_thumbnail_url = ""
var photo_thumbnail_w = 0
var photo_url = ""
var photo_share_url = ""
var thumbup = false
var thumbup_num = 0
var user_id = ""
var murl = ""
var rurl = ""
var porder: [String: String] = [:]
var origin_expired_stamps: Double = 0
var time_stamps: Date?
var isExpire = true
var sizeCache = CGSize(width: 0, height: 0)
var display_payment_btn = 0
init(json: [String: AnyObject]) {
self.init(map: Map(mappingType: .fromJSON, JSON: json))
}
}
extension PhotoItem: Mappable {
init(map: Map) {
mapping(map: map)
}
mutating func mapping(map: Map) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
created_at <- map["created_at"]
create_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter))
avatar <- map["avatar"]
comment_num <- map["comment_num"]
group_avatar <- map["group_avatar"]
group_default_avatar <- map["group_default_avatar"]
group_from <- map["group_from"]
group_id <- map["group_id"]
group_name <- map["group_name"]
nickname <- map["nickname"]
photo_from <- map["photo_from"]
photo_h <- map["photo_h"]
photo_w <- map["photo_w"]
photo_id <- map["photo_id"]
photo_thumbnail2_h <- map["photo_thumbnail2_h"]
photo_thumbnail2_url <- map["photo_thumbnail2_url"]
photo_thumbnail2_w <- map["photo_thumbnail2_w"]
photo_thumbnail_h <- map["photo_thumbnail_h"]
photo_thumbnail_url <- map["photo_thumbnail_url"]
photo_thumbnail_w <- map["photo_thumbnail_w"]
photo_url <- map["photo_url"]
photo_share_url <- map["photo_share_url"]
thumbup <- map["thumbup"]
thumbup_num <- map["thumbup_num"]
user_id <- map["user_id"]
porder <- map["porder"]
display_payment_btn <- map["display_payment_btn"]
rurl = porder["r_photo_url"] ?? ""
murl = porder["m_photo_url"] ?? ""
}
}
extension PhotoItem: IdentifiableType, Equatable {
typealias Identity = String
var identity: String { return photo_id }
static func == (lhs: PhotoItem, rhs: PhotoItem) -> Bool {
return lhs.photo_id == rhs.photo_id
}
}
struct PhotoModel {
typealias modelType = PhotoModel
var avatar = ""
var comment_num = 0
var created_at = ""
var create_at = Date()
var group_avatar = ""
var group_default_avatar = 0
var group_from = 0
var group_id = ""
var group_name = ""
var nickname = ""
var photo_from = 0
var photo_h = 0
var photo_w = 0
var photo_id = ""
var photo_thumbnail2_h = 0
var photo_thumbnail2_url = ""
var photo_thumbnail2_w = 0
var photo_thumbnail_h = 0
var photo_thumbnail_url = ""
var photo_thumbnail_w = 0
var photo_url = ""
var photo_share_url = ""
var thumbup = false
var thumbup_num = 0
var user_id = ""
var murl = ""
var rurl = ""
var porder = [String: String]()
var origin_expired_stamps: Double = 0
var time_stamps: Date?
var isExpire = true
var sizeCache = CGSize(width: 0, height: 0)
var display_payment_btn = 0
init(data: [String: AnyObject]) {
self.init(map: Map(mappingType: .fromJSON, JSON: data))
}
init() { }
}
extension PhotoModel: Mappable {
init(map: Map) {
mapping(map: map)
}
mutating func mapping(map: Map) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
created_at <- map["created_at"]
create_at <- (map["created_at"], DateFormatterTransform(dateFormatter:dateFormatter))
avatar <- map["avatar"]
comment_num <- map["comment_num"]
group_avatar <- map["group_avatar"]
group_default_avatar <- map["group_default_avatar"]
group_from <- map["group_from"]
group_id <- map["group_id"]
group_name <- map["group_name"]
nickname <- map["nickname"]
photo_from <- map["photo_from"]
photo_h <- map["photo_h"]
photo_w <- map["photo_w"]
photo_id <- map["photo_id"]
photo_thumbnail2_h <- map["photo_thumbnail2_h"]
photo_thumbnail2_url <- map["photo_thumbnail2_url"]
photo_thumbnail2_w <- map["photo_thumbnail2_w"]
photo_thumbnail_h <- map["photo_thumbnail_h"]
photo_thumbnail_url <- map["photo_thumbnail_url"]
photo_thumbnail_w <- map["photo_thumbnail_w"]
photo_url <- map["photo_url"]
photo_share_url <- map["photo_share_url"]
thumbup <- map["thumbup"]
thumbup_num <- map["thumbup_num"]
user_id <- map["user_id"]
porder <- map["porder"]
display_payment_btn <- map["display_payment_btn"]
rurl = porder["r_photo_url"] ?? ""
murl = porder["m_photo_url"] ?? ""
let width = (kScreenWidth - 6 * 2 - 5) / 2
let imageTop: CGFloat = 51
let imageBottom: CGFloat = 32
let height = CGFloat(photo_thumbnail_h) / CGFloat(photo_thumbnail_w) * width + imageTop + imageBottom
sizeCache = CGSize(width: round(width), height: ceil(height))
}
}
extension PhotoModel: GroupParsable {
static func parse(datas: [String: AnyObject]) -> [PhotoModel] {
guard let data = datas["data"] as? [String: AnyObject], let photos = data["photos"] as? [[String: AnyObject]] else {
return [PhotoModel]()
}
return photos.compactMap {
return PhotoModel(map: Map(mappingType: .fromJSON, JSON: $0))
}
}
}
|