Compare commits

..

21 Commits

Author SHA1 Message Date
Arkadiusz Fal
7be19d1192 Bump build and version number 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
d0c0b459f4 Controls fixes 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
9f29b6be5c tvOS fixes 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
a09fc36ad3 Close fullscreen and restore portrait on closing player 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
0e78b1dc23 Improve streams quality settings 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
7c8db2f1c3 Add tvOS mpv libraries 2022-03-27 22:02:31 +02:00
Arkadiusz Fal
dce5e1ea3b Fix player window on Mac 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
bd0fbb308e Minor improvements 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
c5070725aa Bump version number 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
9d7ebb3bd9 Add toggle for dislikes 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
7d740931b7 Bump version number 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
77ee73db73 Minor fixes 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
048f846e32 Add ReturnYoutubeDislike API 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
8e0a710a53 Fixes for MPV in macOS 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
12a7d8cfd6 Fix EOF handler 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
5c89ae9c66 Minor improvements 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
525a01eaed Add hide player button cancel action 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
be2d0f3670 Prevent multiple seeks 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
5f43e3b586 Add Now Playing info center updates 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
d6d5def4e7 Hello, mpv! 🎉 2022-03-27 22:02:30 +02:00
Arkadiusz Fal
e9157d1193 Reorganize toolbars placement 2022-03-27 22:02:29 +02:00
17 changed files with 62 additions and 287 deletions

View File

@@ -3,6 +3,6 @@ import AppKit
extension NSTextField {
override open var focusRingType: NSFocusRingType {
get { .none }
set {}
set {} // swiftlint:disable:this unused_setter_value
}
}

View File

@@ -92,18 +92,15 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
}
configureTransformer(pathPattern("search"), requestMethods: [.get]) { (content: Entity<JSON>) -> SearchPage in
let results = content.json.arrayValue.compactMap { json -> ContentItem? in
let results = content.json.arrayValue.compactMap { json -> ContentItem in
let type = json.dictionaryValue["type"]?.stringValue
if type == "channel" {
return ContentItem(channel: self.extractChannel(from: json))
} else if type == "playlist" {
return ContentItem(playlist: self.extractChannelPlaylist(from: json))
} else if type == "video" {
return ContentItem(video: self.extractVideo(from: json))
}
return nil
return ContentItem(video: self.extractVideo(from: json))
}
return SearchPage(results: results, last: results.isEmpty)

View File

@@ -152,11 +152,7 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
}
var signedIn: Bool {
guard let account = account else {
return false
}
return !account.anonymous && !(account.token?.isEmpty ?? true)
!account.anonymous && !(account.token?.isEmpty ?? true)
}
var subscriptions: Resource? {

View File

@@ -62,11 +62,13 @@ final class AVPlayerBackend: PlayerBackend {
func bestPlayable(_ streams: [Stream], maxResolution _: ResolutionSetting) -> Stream? {
streams.first { $0.kind == .hls } ??
streams.max { $0.resolution < $1.resolution }
streams.filter { $0.kind == .adaptive }.max { $0.resolution < $1.resolution } ??
streams.first
}
func canPlay(_ stream: Stream) -> Bool {
stream.kind == .hls || (stream.kind == .stream && stream.resolution.height <= 720)
stream.kind == .hls || stream.kind == .stream || stream.videoFormat == "MPEG_4" ||
(stream.videoFormat.starts(with: "video/mp4") && stream.encoding == "h264")
}
func playStream(

View File

@@ -17,17 +17,7 @@ final class MPVBackend: PlayerBackend {
var loadedVideo = false
var isLoadingVideo = true { didSet {
DispatchQueue.main.async { [weak self] in
guard let self = self else {
return
}
self.controls.isLoadingVideo = self.isLoadingVideo
if !self.isLoadingVideo {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
self?.handleEOF = true
}
}
self?.controls.isLoadingVideo = self?.isLoadingVideo ?? true
}
}}
@@ -39,10 +29,6 @@ final class MPVBackend: PlayerBackend {
}
updateControlsIsPlaying()
#if !os(macOS)
UIApplication.shared.isIdleTimerDisabled = model.presentingPlayer && isPlaying
#endif
}}
var playerItemDuration: CMTime?
@@ -53,7 +39,6 @@ final class MPVBackend: PlayerBackend {
private var clientTimer: RepeatingTimer!
private var handleEOF = false
private var onFileLoaded: (() -> Void)?
private var controlsUpdates = false
@@ -80,13 +65,6 @@ final class MPVBackend: PlayerBackend {
}
func playStream(_ stream: Stream, of video: Video, preservingTime: Bool, upgrading _: Bool) {
handleEOF = false
#if !os(macOS)
if model.presentingPlayer {
UIApplication.shared.isIdleTimerDisabled = true
}
#endif
let updateCurrentStream = {
DispatchQueue.main.async { [weak self] in
self?.stream = stream
@@ -277,7 +255,7 @@ final class MPVBackend: PlayerBackend {
private func updateControlsIsPlaying() {
DispatchQueue.main.async { [weak self] in
self?.controls?.isPlaying = self?.isPlaying ?? false
self?.controls.isPlaying = self?.isPlaying ?? false
}
}
@@ -321,7 +299,7 @@ final class MPVBackend: PlayerBackend {
}
func handleEndOfFile(_: UnsafePointer<mpv_event>!) {
guard handleEOF, !isLoadingVideo else {
guard !isLoadingVideo else {
return
}

View File

@@ -88,6 +88,26 @@ final class PlayerControlsModel: ObservableObject {
}
}
func toggleFullscreen(_ value: Bool) {
withAnimation(Animation.easeOut) {
resetTimer()
withAnimation(PlayerControls.animation) {
playingFullscreen = !value
}
#if os(iOS)
if playingFullscreen {
guard !(UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? true) else {
return
}
Orientation.lockOrientation(.landscape, andRotateTo: .landscapeRight)
} else {
Orientation.lockOrientation(.allButUpsideDown, andRotateTo: .portrait)
}
#endif
}
}
func reset() {
currentTime = .zero
duration = .zero

View File

@@ -301,10 +301,6 @@ final class PlayerModel: ObservableObject {
backend.setNeedsDrawing(presentingPlayer)
controls.hide()
#if !os(macOS)
UIApplication.shared.isIdleTimerDisabled = presentingPlayer
#endif
if presentingPlayer, closePiPOnOpeningPlayer, playingInPictureInPicture {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
self?.closePiP()
@@ -418,8 +414,8 @@ final class PlayerModel: ObservableObject {
return "\(formatter.string(from: NSNumber(value: rate))!)×"
}
func closeCurrentItem(finished: Bool = false) {
prepareCurrentItemForHistory(finished: finished)
func closeCurrentItem() {
prepareCurrentItemForHistory()
currentItem = nil
backend.closeItem()
@@ -534,25 +530,4 @@ final class PlayerModel: ObservableObject {
currentArtwork = MPMediaItemArtwork(boundsSize: image!.size) { _ in image! }
}
func toggleFullscreen(_ isFullScreen: Bool) {
controls.resetTimer()
#if os(macOS)
Windows.player.toggleFullScreen()
#endif
controls.playingFullscreen = !isFullScreen
#if os(iOS)
if controls.playingFullscreen {
guard !(UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? true) else {
return
}
Orientation.lockOrientation(.landscape, andRotateTo: .landscapeRight)
} else {
Orientation.lockOrientation(.allButUpsideDown, andRotateTo: .portrait)
}
#endif
}
}

View File

@@ -115,7 +115,7 @@ final class SearchModel: ObservableObject {
resource?.removeObservers(ownedBy: store)
resource = accounts.api.search(query, page: pageToLoad.nextPage)
resource = accounts.api.search(query, page: page?.nextPage)
resource.addObserver(store)
resource

View File

@@ -19,10 +19,10 @@
* Fullscreen playback, Picture in Picture and AirPlay support
* Stream quality selection
### Features in alpha testing
### Features in alpha testing for iOS and macOS
* New player component with custom controls, gestures and support for 4K playback
You can leave your feedback in [discussion on v1.4 release](https://github.com/yattee/yattee/discussions/93) or join [Matrix Channel](https://matrix.to/#/#yattee:matrix.org) for a chat. Thanks!
You can leave your feedback in [discussion on v1.4 release](https://github.com/yattee/yattee/discussions/75).
### Availability
|| Invidious | Piped |
@@ -53,7 +53,6 @@ You can browse and use accounts from one app and play videos with another (for e
## Contributing
If you're interestred in contributing, you can browse the [issues](https://github.com/yattee/yattee/issues) list or create a new one to discuss your feature idea. Every contribution is very welcome.
Join [Matrix Channel](https://matrix.to/#/#yattee:matrix.org) for a chat if you need an advice or want to discuss the project.
## License and Liability
Yattee and its components is shared on [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html) license.

View File

@@ -14,7 +14,6 @@ struct AppSidebarNavigation: View {
@EnvironmentObject<InstancesModel> private var instances
@EnvironmentObject<NavigationModel> private var navigation
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<PlayerControlsModel> private var playerControls
@EnvironmentObject<PlaylistsModel> private var playlists
@EnvironmentObject<RecentsModel> private var recents
@EnvironmentObject<SearchModel> private var search
@@ -53,7 +52,7 @@ struct AppSidebarNavigation: View {
BrowserPlayerControls {
HStack(alignment: .center) {
Spacer()
Image(systemName: "4k.tv")
Image(systemName: "play.tv")
.renderingMode(.original)
.font(.system(size: 60))
.foregroundColor(.accentColor)
@@ -72,7 +71,6 @@ struct AppSidebarNavigation: View {
.environmentObject(instances)
.environmentObject(navigation)
.environmentObject(player)
.environmentObject(playerControls)
.environmentObject(playlists)
.environmentObject(recents)
.environmentObject(subscriptions)

View File

@@ -187,7 +187,7 @@ struct PlayerControls: View {
"Fullscreen",
systemImage: fullScreenLayout ? "arrow.down.right.and.arrow.up.left" : "arrow.up.left.and.arrow.down.right"
) {
player.toggleFullscreen(fullScreenLayout)
model.toggleFullscreen(fullScreenLayout)
}
#if !os(tvOS)
.keyboardShortcut(fullScreenLayout ? .cancelAction : .defaultAction)
@@ -204,8 +204,8 @@ struct PlayerControls: View {
#if os(tvOS)
.focused($focusedField, equals: .backward)
#else
.keyboardShortcut("k", modifiers: [])
.keyboardShortcut(KeyEquivalent.leftArrow, modifiers: [])
.keyboardShortcut("k")
.keyboardShortcut(.leftArrow)
#endif
#endif
@@ -237,8 +237,8 @@ struct PlayerControls: View {
#if os(tvOS)
.focused($focusedField, equals: .forward)
#else
.keyboardShortcut("l", modifiers: [])
.keyboardShortcut(KeyEquivalent.rightArrow, modifiers: [])
.keyboardShortcut("l")
.keyboardShortcut(.rightArrow)
#endif
#endif
}

View File

@@ -234,19 +234,6 @@ struct VideoPlayerView: View {
PlayerControls(player: player)
}
#if os(iOS)
.onAppear {
// ugly patch for #78
guard player.activeBackend == .mpv else {
return
}
player.activeBackend = .appleAVPlayer
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
player.activeBackend = .mpv
}
}
#endif
}
var fullScreenLayout: Bool {

View File

@@ -92,16 +92,6 @@ struct YatteeApp: App {
.background(
HostingWindowFinder { window in
Windows.playerWindow = window
NotificationCenter.default.addObserver(
forName: NSWindow.willExitFullScreenNotification,
object: window,
queue: OperationQueue.main
) { _ in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.player.controls.playingFullscreen = false
}
}
}
)
.onAppear { player.presentingPlayer = true }

View File

@@ -1961,34 +1961,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
37FF8BFC27F9A7AD0038199F /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
37FF8BFD27F9A7B20038199F /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
37FF8BFE27F9A7BA0038199F /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
37FF8BFF27F9A7BC0038199F /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
@@ -1996,7 +1968,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 37A3B17427255E7F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (macOS)" */;
buildPhases = (
37FF8BFF27F9A7BC0038199F /* Headers */,
37A3B15327255E7F000FB5EE /* Sources */,
37A3B15427255E7F000FB5EE /* Frameworks */,
37A3B15527255E7F000FB5EE /* Resources */,
@@ -2014,7 +1985,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 37A3B1902725735F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (iOS)" */;
buildPhases = (
37FF8BFE27F9A7BA0038199F /* Headers */,
37A3B1752725735F000FB5EE /* Sources */,
37A3B1762725735F000FB5EE /* Frameworks */,
37A3B1772725735F000FB5EE /* Resources */,
@@ -2064,7 +2034,6 @@
buildConfigurationList = 37D4B0EF2671614900C925CA /* Build configuration list for PBXNativeTarget "Yattee (macOS)" */;
buildPhases = (
37CC3F4A270CE8D000608308 /* ShellScript */,
37FF8BFC27F9A7AD0038199F /* Headers */,
37D4B0CB2671614900C925CA /* Sources */,
37D4B0CC2671614900C925CA /* Frameworks */,
37D4B0CD2671614900C925CA /* Resources */,
@@ -2139,7 +2108,6 @@
buildConfigurationList = 37D4B177267164B000C925CA /* Build configuration list for PBXNativeTarget "Yattee (tvOS)" */;
buildPhases = (
37CC3F49270CE8CA00608308 /* ShellScript */,
37FF8BFD27F9A7B20038199F /* Headers */,
37D4B154267164AE00C925CA /* Sources */,
37D4B155267164AE00C925CA /* Frameworks */,
37D4B156267164AE00C925CA /* Resources */,
@@ -3089,7 +3057,7 @@
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -3102,7 +3070,7 @@
"@executable_path/../../../../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.1;
OTHER_LDFLAGS = (
"-framework",
SafariServices,
@@ -3123,7 +3091,7 @@
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -3136,7 +3104,7 @@
"@executable_path/../../../../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.1;
OTHER_LDFLAGS = (
"-framework",
SafariServices,
@@ -3155,7 +3123,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -3167,7 +3135,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.1;
OTHER_LDFLAGS = (
"-framework",
SafariServices,
@@ -3187,7 +3155,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -3199,7 +3167,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.1;
OTHER_LDFLAGS = (
"-framework",
SafariServices,
@@ -3351,7 +3319,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -3375,7 +3343,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
OTHER_LDFLAGS = "-lstdc++";
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
PRODUCT_NAME = Yattee;
@@ -3393,7 +3361,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
@@ -3413,7 +3381,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
OTHER_LDFLAGS = "-lstdc++";
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
PRODUCT_NAME = Yattee;
@@ -3435,7 +3403,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES;
@@ -3454,7 +3422,7 @@
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
);
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
PRODUCT_NAME = Yattee;
SDKROOT = macosx;
@@ -3473,7 +3441,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_TEAM = "";
ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES;
@@ -3492,7 +3460,7 @@
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
);
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
PRODUCT_NAME = Yattee;
SDKROOT = macosx;
@@ -3609,7 +3577,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
@@ -3629,7 +3597,7 @@
"$(PROJECT_DIR)/Vendor/mpv",
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
PRODUCT_NAME = Yattee;
SDKROOT = appletvos;
@@ -3647,7 +3615,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 32;
CURRENT_PROJECT_VERSION = 31;
DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
@@ -3667,7 +3635,7 @@
"$(PROJECT_DIR)/Vendor/mpv",
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
);
MARKETING_VERSION = 1.4.alpha.3;
MARKETING_VERSION = 1.4.alpha.2;
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
PRODUCT_NAME = Yattee;
SDKROOT = appletvos;

View File

@@ -1,131 +0,0 @@
{
"pins" : [
{
"identity" : "alamofire",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Alamofire/Alamofire.git",
"state" : {
"revision" : "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
"version" : "5.5.0"
}
},
{
"identity" : "defaults",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sindresorhus/Defaults",
"state" : {
"revision" : "119f654d44f7b90f00dc11f7dd1c94a36f12576b",
"version" : "6.2.1"
}
},
{
"identity" : "libwebp-xcode",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/libwebp-Xcode.git",
"state" : {
"revision" : "2b3b43faaef54d1b897482428428357b7f7cd08b",
"version" : "1.2.1"
}
},
{
"identity" : "pincache",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pinterest/PINCache",
"state" : {
"branch" : "master",
"revision" : "9ca06045b5aff12ee8c0ef5880aa8469c4896144"
}
},
{
"identity" : "pinoperation",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pinterest/PINOperation.git",
"state" : {
"revision" : "44d8ca154a4e75a028a5548c31ff3a53b90cef15",
"version" : "1.2.1"
}
},
{
"identity" : "sdwebimage",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/SDWebImage.git",
"state" : {
"revision" : "2e63d0061da449ad0ed130768d05dceb1496de44",
"version" : "5.12.5"
}
},
{
"identity" : "sdwebimagepinplugin",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/SDWebImagePINPlugin.git",
"state" : {
"revision" : "bd73a4fb30352ec311303d811559c9c46df4caa4",
"version" : "0.3.0"
}
},
{
"identity" : "sdwebimageswiftui",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/SDWebImageSwiftUI.git",
"state" : {
"revision" : "cd8625b7cf11a97698e180d28bb7d5d357196678",
"version" : "2.0.2"
}
},
{
"identity" : "sdwebimagewebpcoder",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/SDWebImageWebPCoder.git",
"state" : {
"revision" : "95a6838df13bc08d8064cf7e048b787b6e52348d",
"version" : "0.8.4"
}
},
{
"identity" : "siesta",
"kind" : "remoteSourceControl",
"location" : "https://github.com/bustoutsolutions/siesta",
"state" : {
"revision" : "43f34046ebb5beb6802200353c473af303bbc31e",
"version" : "1.5.2"
}
},
{
"identity" : "sparkle",
"kind" : "remoteSourceControl",
"location" : "https://github.com/sparkle-project/Sparkle",
"state" : {
"branch" : "2.x",
"revision" : "f250bead4b943ef9711c61274a1f52e380afa0e8"
}
},
{
"identity" : "swift-log",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-log.git",
"state" : {
"revision" : "5d66f7ba25daf4f94100e7022febf3c75e37a6c7",
"version" : "1.4.2"
}
},
{
"identity" : "swiftui-introspect",
"kind" : "remoteSourceControl",
"location" : "https://github.com/siteline/SwiftUI-Introspect.git",
"state" : {
"revision" : "f2616860a41f9d9932da412a8978fec79c06fe24",
"version" : "0.1.4"
}
},
{
"identity" : "swiftyjson",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SwiftyJSON/SwiftyJSON.git",
"state" : {
"revision" : "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
"version" : "5.0.1"
}
}
],
"version" : 2
}

View File

@@ -42,10 +42,6 @@ enum Windows: String, CaseIterable {
Self.main.focus()
}
}
func toggleFullScreen() {
window?.toggleFullScreen(nil)
}
}
struct HostingWindowFinder: NSViewRepresentable {