No Description

PhotoLocalStorage.swift 2.8KB

    // // PhotoLocalStorage.swift // PaiAi // // Created by LISA on 2017/4/19. // Copyright © 2017年 yb. All rights reserved. // import UIKit //import ObjectMapper import SQLite struct PhotoLocalStorage { let photoId = Expression<String>("photoId") let photoInfo = Expression<Data>("photoInfo") let creatAt = Expression<TimeInterval>("creatAt") static let instance = PhotoLocalStorage() var db: Connection? init() { db = try? Connection(path) } private let path: String = { let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? "" let finalPath = path.appending("/group_photo.db") printLog(finalPath) return finalPath }() func query(group_id: String) -> [PhotoModel]? { let table = Table(group_id.digestString(algorithm: .md5)) do { guard let photos = try db?.prepare(table) else { return nil } return photos.compactMap({ (photo) -> PhotoModel? in let data = photo[photoInfo] guard let dict = NSKeyedUnarchiver.unarchiveObject(with: data) as? [String: AnyObject] else { return nil } return PhotoModel(data: dict) }) } catch { return nil } } func saveDataToLocal(models: [PhotoModel], group_id: String) { let table = Table(group_id.digestString(algorithm: .md5)) do { try db?.transaction { try db?.run(table.create(ifNotExists: true, block: { (table) in table.column(photoId, unique: true) table.column(photoInfo) table.column(creatAt) })) for model in models { let data = NSKeyedArchiver.archivedData(withRootObject: model.toJSON()) let insert = table.insert(or: .replace, photoInfo <- data, creatAt <- (model.create_at.timeIntervalSince1970) , photoId <- model.photo_id) _ = try db?.run(insert) } } } catch { } } func updateLocalData(photoModel: PhotoModel) { let table = Table(photoModel.group_id.digestString(algorithm: .md5)).filter(photoId == photoModel.photo_id) let photoData = NSKeyedArchiver.archivedData(withRootObject: photoModel.toJSON()) do { try db?.run(table.update(photoInfo <- photoData)) } catch { } } func removeLocalData(group_id: String) { // removeGroupInfoRecent(groupId: group_id) let table = Table(group_id.digestString(algorithm: .md5)) _ = table.drop(ifExists: true) } }