mirror of
https://github.com/yattee/yattee.git
synced 2025-12-12 19:18:16 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16b25df3bc | ||
|
|
a66e59a282 | ||
|
|
aeeedf3d63 | ||
|
|
3d35a60c7a | ||
|
|
8ffdd4d51f | ||
|
|
f871c7aaf5 | ||
|
|
32af2b385b | ||
|
|
f78545baf9 | ||
|
|
d95bcc4065 | ||
|
|
1efd9e2b90 |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,4 +1,11 @@
|
||||
## Build 153
|
||||
## Build 155
|
||||
* Fixed reported crashes
|
||||
* Minor performance improvements
|
||||
|
||||
## Previous Builds
|
||||
* Fixed issue where AVPlayer would pause playing on exiting fullscreen
|
||||
* Fixed issue with empty button appearing on subscriptions list on tvOS
|
||||
|
||||
* Fixed issue with AVPlayer not always using full width
|
||||
* Fixed issue with layout when switching backend while in fullscreen
|
||||
* Fixed issue with updating watched time on closing video
|
||||
@@ -8,9 +15,7 @@
|
||||
* Reverted change to placeholders as were causing issues to properly display loading status, will be revisited in future
|
||||
* Fixed performance issue with swiping back to subscribed channels list
|
||||
* Fixed reported crashes
|
||||
* Other minor fixes and improvements
|
||||
|
||||
## Previous Builds
|
||||
* Tapping second time on search tab button focuses the input field and selects entered query text (iOS)
|
||||
* Added Browsing setting "Keep channels with unwatched videos on top of subscriptions list"
|
||||
* Improved buttons and layout on tvOS
|
||||
|
||||
@@ -68,13 +68,12 @@ final class SubscribedChannelsModel: ObservableObject, CacheModel {
|
||||
return
|
||||
}
|
||||
|
||||
let request = force ? resource?.load() : resource?.loadIfNeeded()
|
||||
guard request != nil else { return }
|
||||
|
||||
loadCachedChannels(account)
|
||||
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self else { return }
|
||||
let request = force ? self.resource?.load() : self.resource?.loadIfNeeded()
|
||||
guard request != nil else { return }
|
||||
|
||||
self.loadCachedChannels(account)
|
||||
|
||||
self.isLoading = true
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
return
|
||||
}
|
||||
|
||||
avPlayer.playImmediately(atRate: Float(model.currentRate))
|
||||
avPlayer.play()
|
||||
model.objectWillChange.send()
|
||||
}
|
||||
|
||||
@@ -643,7 +643,12 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
if player.timeControlStatus == .playing {
|
||||
self.model.objectWillChange.send()
|
||||
|
||||
if player.rate != Float(self.model.currentRate) {
|
||||
if let rate = self.model.rateToRestore, player.rate != rate {
|
||||
player.rate = rate
|
||||
self.model.rateToRestore = nil
|
||||
}
|
||||
|
||||
if player.rate > 0, player.rate != Float(self.model.currentRate) {
|
||||
if self.model.avPlayerUsesSystemControls {
|
||||
self.model.currentRate = Double(player.rate)
|
||||
} else {
|
||||
@@ -719,10 +724,10 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
ControlOverlaysModel.shared.hide()
|
||||
model.navigation.presentingPlaybackSettings = false
|
||||
|
||||
if model.playingFullScreen {
|
||||
ControlOverlaysModel.shared.hide()
|
||||
model.navigation.presentingPlaybackSettings = false
|
||||
|
||||
model.onPlayStream.append { _ in
|
||||
self.controller.enterFullScreen(animated: true)
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@ final class PlayerModel: ObservableObject {
|
||||
|
||||
var onPresentPlayer = [() -> Void]()
|
||||
var onPlayStream = [(Stream) -> Void]()
|
||||
var rateToRestore: Float?
|
||||
private var remoteCommandCenterConfigured = false
|
||||
|
||||
init() {
|
||||
@@ -542,6 +543,9 @@ final class PlayerModel: ObservableObject {
|
||||
if !self.backend.canPlayAtRate(currentRate) {
|
||||
currentRate = self.backend.suggestedPlaybackRates.last { $0 < currentRate } ?? 1.0
|
||||
}
|
||||
|
||||
self.rateToRestore = Float(currentRate)
|
||||
|
||||
self.backend.didChangeTo()
|
||||
|
||||
if wasPlaying {
|
||||
|
||||
@@ -28,13 +28,7 @@ struct PlaybackSettings: View {
|
||||
#endif
|
||||
|
||||
var body: some View {
|
||||
#if DEBUG
|
||||
// TODO: remove
|
||||
if #available(iOS 15.0, macOS 12.0, *) {
|
||||
Self._printChanges()
|
||||
}
|
||||
#endif
|
||||
return ScrollView {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
HStack {
|
||||
Button {
|
||||
|
||||
@@ -90,13 +90,7 @@ struct VideoPlayerView: View {
|
||||
}
|
||||
|
||||
var videoPlayer: some View {
|
||||
#if DEBUG
|
||||
// TODO: remove
|
||||
if #available(iOS 15.0, macOS 12.0, *) {
|
||||
Self._printChanges()
|
||||
}
|
||||
#endif
|
||||
return GeometryReader { geometry in
|
||||
GeometryReader { geometry in
|
||||
HStack(spacing: 0) {
|
||||
content
|
||||
.onAppear {
|
||||
|
||||
@@ -77,9 +77,11 @@ struct ChannelsView: View {
|
||||
.listRowSeparator(false)
|
||||
}
|
||||
}
|
||||
#if !os(tvOS)
|
||||
.background(
|
||||
NavigationLink(destination: ChannelVideosView(channel: channelForLink ?? Video.fixture.channel), isActive: $channelLinkActive, label: EmptyView.init)
|
||||
)
|
||||
#endif
|
||||
.onAppear {
|
||||
subscriptions.load()
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ struct VideoContextMenuView: View {
|
||||
|
||||
@FetchRequest private var watchRequest: FetchedResults<Watch>
|
||||
|
||||
@Default(.saveHistory) private var saveHistory
|
||||
@Default(.showPlayNowInBackendContextMenu) private var showPlayNowInBackendContextMenu
|
||||
|
||||
private var backgroundContext = PersistenceController.shared.container.newBackgroundContext()
|
||||
@@ -44,7 +43,7 @@ struct VideoContextMenuView: View {
|
||||
removeAllFromQueueButton()
|
||||
}
|
||||
if !video.localStreamIsDirectory {
|
||||
if saveHistory {
|
||||
if Defaults[.saveHistory] {
|
||||
Section {
|
||||
if let watchedAtString {
|
||||
Text(watchedAtString)
|
||||
@@ -72,7 +71,7 @@ struct VideoContextMenuView: View {
|
||||
#endif
|
||||
}
|
||||
|
||||
if showPlayNowInBackendContextMenu {
|
||||
if Defaults[.showPlayNowInBackendContextMenu] {
|
||||
Section {
|
||||
ForEach(PlayerBackendType.allCases, id: \.self) { backend in
|
||||
playNowInBackendButton(backend)
|
||||
|
||||
@@ -4053,7 +4053,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
|
||||
@@ -4084,7 +4084,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||
@@ -4115,7 +4115,7 @@
|
||||
buildSettings = {
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
@@ -4135,7 +4135,7 @@
|
||||
buildSettings = {
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
@@ -4295,7 +4295,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
@@ -4348,7 +4348,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
|
||||
@@ -4400,7 +4400,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
@@ -4442,7 +4442,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
@@ -4480,7 +4480,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4504,7 +4504,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4530,7 +4530,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4555,7 +4555,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4581,7 +4581,7 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -4621,7 +4621,7 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -4662,7 +4662,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -4686,7 +4686,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 153;
|
||||
CURRENT_PROJECT_VERSION = 155;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
||||
Reference in New Issue
Block a user