mirror of
https://github.com/yattee/yattee.git
synced 2025-08-05 02:04:07 +00:00
UI improvements, player state refactor
This commit is contained in:
36
Fixtures/Thumbnail+Fixtures.swift
Normal file
36
Fixtures/Thumbnail+Fixtures.swift
Normal file
@@ -0,0 +1,36 @@
|
||||
import Foundation
|
||||
|
||||
extension Thumbnail {
|
||||
static func fixture(videoId: String, quality: Thumbnail.Quality = .maxres) -> Thumbnail {
|
||||
Thumbnail(url: fixtureUrl(videoId: videoId, quality: quality), quality: quality)
|
||||
}
|
||||
|
||||
static func fixturesForAllQualities(videoId: String) -> [Thumbnail] {
|
||||
Thumbnail.Quality.allCases.map { fixture(videoId: videoId, quality: $0) }
|
||||
}
|
||||
|
||||
private static var fixturesHost: String {
|
||||
"https://invidious.home.arekf.net"
|
||||
}
|
||||
|
||||
private static func fixtureUrl(videoId: String, quality: Thumbnail.Quality) -> URL {
|
||||
URL(string: "\(fixturesHost)/vi/\(videoId)/\(filenameForQuality(quality)).jpg")!
|
||||
}
|
||||
|
||||
private static func filenameForQuality(_ quality: Thumbnail.Quality) -> String {
|
||||
switch quality {
|
||||
case .high:
|
||||
return "hqdefault"
|
||||
case .medium:
|
||||
return "mqdefault"
|
||||
case .start:
|
||||
return "1"
|
||||
case .middle:
|
||||
return "2"
|
||||
case .end:
|
||||
return "3"
|
||||
default:
|
||||
return quality.rawValue
|
||||
}
|
||||
}
|
||||
}
|
40
Fixtures/Video+Fixtures.swift
Normal file
40
Fixtures/Video+Fixtures.swift
Normal file
@@ -0,0 +1,40 @@
|
||||
extension Video {
|
||||
static var fixture: Video {
|
||||
let id = "D2sxamzaHkM"
|
||||
|
||||
return Video(
|
||||
id: id,
|
||||
title: "Relaxing Piano Music",
|
||||
author: "Fancy Videotuber",
|
||||
length: 582,
|
||||
published: "7 years ago",
|
||||
views: 1024,
|
||||
channelID: "AbCdEFgHI",
|
||||
description: "Some relaxing live piano music",
|
||||
genre: "Music",
|
||||
thumbnails: Thumbnail.fixturesForAllQualities(videoId: id),
|
||||
live: false,
|
||||
upcoming: false
|
||||
)
|
||||
}
|
||||
|
||||
static var fixtureLiveWithoutPublishedOrViews: Video {
|
||||
var video = fixture
|
||||
|
||||
video.title = "\(video.title) \(video.title) \(video.title) \(video.title) \(video.title)"
|
||||
video.published = "0 seconds ago"
|
||||
video.views = 0
|
||||
video.live = true
|
||||
|
||||
return video
|
||||
}
|
||||
|
||||
static var fixtureUpcomingWithoutPublishedOrViews: Video {
|
||||
var video = fixtureLiveWithoutPublishedOrViews
|
||||
|
||||
video.live = false
|
||||
video.upcoming = true
|
||||
|
||||
return video
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user