Initial commit: SimVision tvOS streaming app

Features:
- VOD library with movie grouping and version detection
- TV show library with season/episode organization
- TMDB integration for trending shows and recently aired episodes
- Recent releases section with TMDB release date sorting
- Watch history tracking with continue watching
- Playlist caching (12-hour TTL) for offline support
- M3U playlist parsing with XStream API support
- Authentication with credential storage

Technical:
- SwiftUI for tvOS
- Actor-based services for thread safety
- Persistent caching for playlists, TMDB data, and watch history
- KSPlayer integration for video playback

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-21 22:12:08 -06:00
commit 872354b834
283 changed files with 338296 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
//
// AudioPlayerView.swift
// VoiceNote
//
// Created by kintan on 2018/8/16.
//
#if canImport(UIKit)
import UIKit
#else
import AppKit
#endif
open class AudioPlayerView: PlayerView {
override public init(frame: CGRect) {
super.init(frame: frame)
toolBar.timeType = .min
toolBar.spacing = 5
toolBar.addArrangedSubview(toolBar.playButton)
toolBar.addArrangedSubview(toolBar.currentTimeLabel)
toolBar.addArrangedSubview(toolBar.timeSlider)
toolBar.addArrangedSubview(toolBar.totalTimeLabel)
toolBar.playButton.tintColor = UIColor(rgb: 0x2166FF)
toolBar.timeSlider.setThumbImage(UIColor(rgb: 0x2980FF).createImage(size: CGSize(width: 2, height: 15)), for: .normal)
toolBar.timeSlider.minimumTrackTintColor = UIColor(rgb: 0xC8C7CC)
toolBar.timeSlider.maximumTrackTintColor = UIColor(rgb: 0xEDEDED)
toolBar.timeSlider.trackHeigt = 7
addSubview(toolBar)
toolBar.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
toolBar.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 7),
toolBar.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -12),
toolBar.topAnchor.constraint(equalTo: topAnchor),
toolBar.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}
}