Swift Media Player
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

110 lines
3.0 KiB

//
// Created by Marco Schmickler on 25.05.15.
// Copyright (c) 2015 Marco Schmickler. All rights reserved.
//
import Foundation
import UIKit
import Combine
var defaultImage = UIImage(named: "Kirschkeks-256x256.png")
var blackImage = UIImage(systemName: "0.circle")
class ItemCell: UICollectionViewCell {
var item: MediaItem?
private var cancellable: AnyCancellable?
var image: UIImageView!
var fav: UIImageView!
var loop: UIImageView!
var progress: UIProgressView!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
image = UIImageView(frame: frame)
image.contentMode = UIView.ContentMode.scaleAspectFit
let fi = UIImage(systemName: "heart")
fav = UIImageView(image: fi)
// fav.contentMode = UIView.ContentMode.scaleAspectFill
image.addSubview(fav)
fav.isHidden = true
let ci = UIImage(systemName: "repeat.circle")
loop = UIImageView(image: ci)
// fav.contentMode = UIView.ContentMode.scaleAspectFill
image.addSubview(loop)
loop.isHidden = true
progress = UIProgressView(progressViewStyle: .default)
progress.progressTintColor = .red
progress.trackTintColor = .lightGray
progress.progress = 0.0
autolayout(["imag": image, "prog" : progress],
constraints:
"H:|[imag]|",
"H:|[prog]|",
"V:|[imag][prog]|")
}
func setItem(_ item: MediaItem) {
self.item = item
if item.type == ItemType.DOWNLOAD {
progress.progress = Float(item.length)
return
}
var f = false
if item.type == ItemType.SNAPSHOT {
f = item.parent!.favorite
}
fav.isHidden = !f
loop.isHidden = item.length == 0.0
if NetworkManager.sharedInstance.isBlack(item) {
image.image = blackImage
return
}
if let _ = item.thumbUrl, let nsurl = URL(string: item.thumbUrlAbsolute) {
image.image = defaultImage
cancellable = ImageLoader.shared.loadImage(from: nsurl).sink { [weak self] img in
self?.image.image = img ?? defaultImage
}
} else {
if let i = item.image {
image.image = i.scaleToSize(15 * 16, height: 15 * 9)
} else if item.children.count > 0 {
if let _ = item.children[0].thumbUrl, let nsurl = URL(string: item.children[0].thumbUrlAbsolute) {
image.image = defaultImage
cancellable = ImageLoader.shared.loadImage(from: nsurl).sink { [weak self] img in
self?.image.image = img ?? defaultImage
}
}
}
else
{
image.image = defaultImage
}
}
}
override func prepareForReuse() {
cancellable?.cancel()
cancellable = nil
image.image = nil
}
}