Files
Martin Púčik bff35fda61 Added Swiftlint and Swiftformat plugins (#1729)
* build: Swiftlint plugin

* build: Swiftformat plugin

* build: Swiftformat plugin

* build: Swiftformat bash command

* style: Swiftformat rules

* style: Swiftformat applied to codebase

* style: Ignore Tests for Swiftlint

* Update bundler

* Update changelog and migration guide

* style: Ignore Example for Swiftlint

* chore: Changelog

* Update Xcode version for ci_pr_tests.yml

* Update ci_pr_framework.yml

* Update ci_pr_example.yml

* chore: Changelog

Co-authored-by: Jakub Kaspar <kaspikk@gmail.com>
2022-07-25 08:46:14 +00:00

178 lines
5.2 KiB
Swift

// MIT License
//
// Copyright (c) 2017-2019 MessageKit
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import AVFoundation
import CoreLocation
import Foundation
import MessageKit
import UIKit
// MARK: - CoordinateItem
private struct CoordinateItem: LocationItem {
var location: CLLocation
var size: CGSize
init(location: CLLocation) {
self.location = location
size = CGSize(width: 240, height: 240)
}
}
// MARK: - ImageMediaItem
private struct ImageMediaItem: MediaItem {
var url: URL?
var image: UIImage?
var placeholderImage: UIImage
var size: CGSize
init(image: UIImage) {
self.image = image
size = CGSize(width: 240, height: 240)
placeholderImage = UIImage()
}
init(imageURL: URL) {
url = imageURL
size = CGSize(width: 240, height: 240)
placeholderImage = UIImage(imageLiteralResourceName: "image_message_placeholder")
}
}
// MARK: - MockAudioItem
private struct MockAudioItem: AudioItem {
var url: URL
var size: CGSize
var duration: Float
init(url: URL) {
self.url = url
size = CGSize(width: 160, height: 35)
// compute duration
let audioAsset = AVURLAsset(url: url)
duration = Float(CMTimeGetSeconds(audioAsset.duration))
}
}
// MARK: - MockContactItem
struct MockContactItem: ContactItem {
var displayName: String
var initials: String
var phoneNumbers: [String]
var emails: [String]
init(name: String, initials: String, phoneNumbers: [String] = [], emails: [String] = []) {
displayName = name
self.initials = initials
self.phoneNumbers = phoneNumbers
self.emails = emails
}
}
// MARK: - MockLinkItem
struct MockLinkItem: LinkItem {
let text: String?
let attributedText: NSAttributedString?
let url: URL
let title: String?
let teaser: String
let thumbnailImage: UIImage
}
// MARK: - MockMessage
internal struct MockMessage: MessageType {
// MARK: Lifecycle
private init(kind: MessageKind, user: MockUser, messageId: String, date: Date) {
self.kind = kind
self.user = user
self.messageId = messageId
sentDate = date
}
init(custom: Any?, user: MockUser, messageId: String, date: Date) {
self.init(kind: .custom(custom), user: user, messageId: messageId, date: date)
}
init(text: String, user: MockUser, messageId: String, date: Date) {
self.init(kind: .text(text), user: user, messageId: messageId, date: date)
}
init(attributedText: NSAttributedString, user: MockUser, messageId: String, date: Date) {
self.init(kind: .attributedText(attributedText), user: user, messageId: messageId, date: date)
}
init(image: UIImage, user: MockUser, messageId: String, date: Date) {
let mediaItem = ImageMediaItem(image: image)
self.init(kind: .photo(mediaItem), user: user, messageId: messageId, date: date)
}
init(imageURL: URL, user: MockUser, messageId: String, date: Date) {
let mediaItem = ImageMediaItem(imageURL: imageURL)
self.init(kind: .photo(mediaItem), user: user, messageId: messageId, date: date)
}
init(thumbnail: UIImage, user: MockUser, messageId: String, date: Date) {
let mediaItem = ImageMediaItem(image: thumbnail)
self.init(kind: .video(mediaItem), user: user, messageId: messageId, date: date)
}
init(location: CLLocation, user: MockUser, messageId: String, date: Date) {
let locationItem = CoordinateItem(location: location)
self.init(kind: .location(locationItem), user: user, messageId: messageId, date: date)
}
init(emoji: String, user: MockUser, messageId: String, date: Date) {
self.init(kind: .emoji(emoji), user: user, messageId: messageId, date: date)
}
init(audioURL: URL, user: MockUser, messageId: String, date: Date) {
let audioItem = MockAudioItem(url: audioURL)
self.init(kind: .audio(audioItem), user: user, messageId: messageId, date: date)
}
init(contact: MockContactItem, user: MockUser, messageId: String, date: Date) {
self.init(kind: .contact(contact), user: user, messageId: messageId, date: date)
}
init(linkItem: LinkItem, user: MockUser, messageId: String, date: Date) {
self.init(kind: .linkPreview(linkItem), user: user, messageId: messageId, date: date)
}
// MARK: Internal
var messageId: String
var sentDate: Date
var kind: MessageKind
var user: MockUser
var sender: SenderType {
user
}
}