mirror of
https://github.com/yattee/yattee.git
synced 2025-12-14 12:08:15 +00:00
Compare commits
40 Commits
v1.4-alpha
...
v1.4-alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84a283ff1d | ||
|
|
13688adb6e | ||
|
|
f5b6c97003 | ||
|
|
915cae2f5a | ||
|
|
586fb2cee1 | ||
|
|
da0b25b14d | ||
|
|
d31aeea52a | ||
|
|
812e2aef87 | ||
|
|
382cb30f2a | ||
|
|
91bc909b37 | ||
|
|
725dadf7c5 | ||
|
|
4d72844975 | ||
|
|
dc18e189aa | ||
|
|
02349723a1 | ||
|
|
4094abb8ba | ||
|
|
0b213e54ad | ||
|
|
622dd5ba8a | ||
|
|
a77d72e2b6 | ||
|
|
755497eda5 | ||
|
|
48487f9707 | ||
|
|
5ef47fc2a9 | ||
|
|
a26d02271d | ||
|
|
10e5975b37 | ||
|
|
4178275e66 | ||
|
|
207ba49977 | ||
|
|
4193972669 | ||
|
|
2f395f19ad | ||
|
|
fc3ab0d8ae | ||
|
|
931107b8d5 | ||
|
|
a2d84a905c | ||
|
|
3327ee3fbd | ||
|
|
4227bb304e | ||
|
|
8d3e5b2a2d | ||
|
|
ac1218a612 | ||
|
|
7a6820dde2 | ||
|
|
836057578f | ||
|
|
e39f4373bb | ||
|
|
1490437537 | ||
|
|
4f1b52826d | ||
|
|
15e62468bb |
@@ -3,6 +3,6 @@ import AppKit
|
|||||||
extension NSTextField {
|
extension NSTextField {
|
||||||
override open var focusRingType: NSFocusRingType {
|
override open var focusRingType: NSFocusRingType {
|
||||||
get { .none }
|
get { .none }
|
||||||
set {} // swiftlint:disable:this unused_setter_value
|
set {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,15 +92,18 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
configureTransformer(pathPattern("search"), requestMethods: [.get]) { (content: Entity<JSON>) -> SearchPage in
|
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
|
let type = json.dictionaryValue["type"]?.stringValue
|
||||||
|
|
||||||
if type == "channel" {
|
if type == "channel" {
|
||||||
return ContentItem(channel: self.extractChannel(from: json))
|
return ContentItem(channel: self.extractChannel(from: json))
|
||||||
} else if type == "playlist" {
|
} else if type == "playlist" {
|
||||||
return ContentItem(playlist: self.extractChannelPlaylist(from: json))
|
return ContentItem(playlist: self.extractChannelPlaylist(from: json))
|
||||||
|
} else if type == "video" {
|
||||||
|
return ContentItem(video: self.extractVideo(from: json))
|
||||||
}
|
}
|
||||||
return ContentItem(video: self.extractVideo(from: json))
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return SearchPage(results: results, last: results.isEmpty)
|
return SearchPage(results: results, last: results.isEmpty)
|
||||||
|
|||||||
@@ -152,7 +152,11 @@ final class PipedAPI: Service, ObservableObject, VideosAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var signedIn: Bool {
|
var signedIn: Bool {
|
||||||
!account.anonymous && !(account.token?.isEmpty ?? true)
|
guard let account = account else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return !account.anonymous && !(account.token?.isEmpty ?? true)
|
||||||
}
|
}
|
||||||
|
|
||||||
var subscriptions: Resource? {
|
var subscriptions: Resource? {
|
||||||
|
|||||||
@@ -62,13 +62,11 @@ final class AVPlayerBackend: PlayerBackend {
|
|||||||
|
|
||||||
func bestPlayable(_ streams: [Stream], maxResolution _: ResolutionSetting) -> Stream? {
|
func bestPlayable(_ streams: [Stream], maxResolution _: ResolutionSetting) -> Stream? {
|
||||||
streams.first { $0.kind == .hls } ??
|
streams.first { $0.kind == .hls } ??
|
||||||
streams.filter { $0.kind == .adaptive }.max { $0.resolution < $1.resolution } ??
|
streams.max { $0.resolution < $1.resolution }
|
||||||
streams.first
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func canPlay(_ stream: Stream) -> Bool {
|
func canPlay(_ stream: Stream) -> Bool {
|
||||||
stream.kind == .hls || stream.kind == .stream || stream.videoFormat == "MPEG_4" ||
|
stream.kind == .hls || (stream.kind == .stream && stream.resolution.height <= 720)
|
||||||
(stream.videoFormat.starts(with: "video/mp4") && stream.encoding == "h264")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func playStream(
|
func playStream(
|
||||||
|
|||||||
@@ -17,7 +17,17 @@ final class MPVBackend: PlayerBackend {
|
|||||||
var loadedVideo = false
|
var loadedVideo = false
|
||||||
var isLoadingVideo = true { didSet {
|
var isLoadingVideo = true { didSet {
|
||||||
DispatchQueue.main.async { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
self?.controls.isLoadingVideo = self?.isLoadingVideo ?? true
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
@@ -29,6 +39,10 @@ final class MPVBackend: PlayerBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateControlsIsPlaying()
|
updateControlsIsPlaying()
|
||||||
|
|
||||||
|
#if !os(macOS)
|
||||||
|
UIApplication.shared.isIdleTimerDisabled = model.presentingPlayer && isPlaying
|
||||||
|
#endif
|
||||||
}}
|
}}
|
||||||
var playerItemDuration: CMTime?
|
var playerItemDuration: CMTime?
|
||||||
|
|
||||||
@@ -39,6 +53,7 @@ final class MPVBackend: PlayerBackend {
|
|||||||
|
|
||||||
private var clientTimer: RepeatingTimer!
|
private var clientTimer: RepeatingTimer!
|
||||||
|
|
||||||
|
private var handleEOF = false
|
||||||
private var onFileLoaded: (() -> Void)?
|
private var onFileLoaded: (() -> Void)?
|
||||||
|
|
||||||
private var controlsUpdates = false
|
private var controlsUpdates = false
|
||||||
@@ -65,6 +80,13 @@ final class MPVBackend: PlayerBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func playStream(_ stream: Stream, of video: Video, preservingTime: Bool, upgrading _: Bool) {
|
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 = {
|
let updateCurrentStream = {
|
||||||
DispatchQueue.main.async { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
self?.stream = stream
|
self?.stream = stream
|
||||||
@@ -255,7 +277,7 @@ final class MPVBackend: PlayerBackend {
|
|||||||
|
|
||||||
private func updateControlsIsPlaying() {
|
private func updateControlsIsPlaying() {
|
||||||
DispatchQueue.main.async { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
self?.controls.isPlaying = self?.isPlaying ?? false
|
self?.controls?.isPlaying = self?.isPlaying ?? false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +321,7 @@ final class MPVBackend: PlayerBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func handleEndOfFile(_: UnsafePointer<mpv_event>!) {
|
func handleEndOfFile(_: UnsafePointer<mpv_event>!) {
|
||||||
guard !isLoadingVideo else {
|
guard handleEOF, !isLoadingVideo else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,26 +88,6 @@ 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() {
|
func reset() {
|
||||||
currentTime = .zero
|
currentTime = .zero
|
||||||
duration = .zero
|
duration = .zero
|
||||||
|
|||||||
@@ -301,6 +301,10 @@ final class PlayerModel: ObservableObject {
|
|||||||
backend.setNeedsDrawing(presentingPlayer)
|
backend.setNeedsDrawing(presentingPlayer)
|
||||||
controls.hide()
|
controls.hide()
|
||||||
|
|
||||||
|
#if !os(macOS)
|
||||||
|
UIApplication.shared.isIdleTimerDisabled = presentingPlayer
|
||||||
|
#endif
|
||||||
|
|
||||||
if presentingPlayer, closePiPOnOpeningPlayer, playingInPictureInPicture {
|
if presentingPlayer, closePiPOnOpeningPlayer, playingInPictureInPicture {
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
|
||||||
self?.closePiP()
|
self?.closePiP()
|
||||||
@@ -414,8 +418,8 @@ final class PlayerModel: ObservableObject {
|
|||||||
return "\(formatter.string(from: NSNumber(value: rate))!)×"
|
return "\(formatter.string(from: NSNumber(value: rate))!)×"
|
||||||
}
|
}
|
||||||
|
|
||||||
func closeCurrentItem() {
|
func closeCurrentItem(finished: Bool = false) {
|
||||||
prepareCurrentItemForHistory()
|
prepareCurrentItemForHistory(finished: finished)
|
||||||
currentItem = nil
|
currentItem = nil
|
||||||
|
|
||||||
backend.closeItem()
|
backend.closeItem()
|
||||||
@@ -530,4 +534,25 @@ final class PlayerModel: ObservableObject {
|
|||||||
|
|
||||||
currentArtwork = MPMediaItemArtwork(boundsSize: image!.size) { _ in image! }
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ final class SearchModel: ObservableObject {
|
|||||||
|
|
||||||
resource?.removeObservers(ownedBy: store)
|
resource?.removeObservers(ownedBy: store)
|
||||||
|
|
||||||
resource = accounts.api.search(query, page: page?.nextPage)
|
resource = accounts.api.search(query, page: pageToLoad.nextPage)
|
||||||
resource.addObserver(store)
|
resource.addObserver(store)
|
||||||
|
|
||||||
resource
|
resource
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
* Fullscreen playback, Picture in Picture and AirPlay support
|
* Fullscreen playback, Picture in Picture and AirPlay support
|
||||||
* Stream quality selection
|
* Stream quality selection
|
||||||
|
|
||||||
### Features in alpha testing for iOS and macOS
|
### Features in alpha testing
|
||||||
* New player component with custom controls, gestures and support for 4K playback
|
* 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/75).
|
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!
|
||||||
|
|
||||||
### Availability
|
### Availability
|
||||||
|| Invidious | Piped |
|
|| Invidious | Piped |
|
||||||
@@ -53,6 +53,7 @@ You can browse and use accounts from one app and play videos with another (for e
|
|||||||
## Contributing
|
## 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.
|
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
|
## License and Liability
|
||||||
|
|
||||||
Yattee and its components is shared on [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html) license.
|
Yattee and its components is shared on [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html) license.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ struct AppSidebarNavigation: View {
|
|||||||
@EnvironmentObject<InstancesModel> private var instances
|
@EnvironmentObject<InstancesModel> private var instances
|
||||||
@EnvironmentObject<NavigationModel> private var navigation
|
@EnvironmentObject<NavigationModel> private var navigation
|
||||||
@EnvironmentObject<PlayerModel> private var player
|
@EnvironmentObject<PlayerModel> private var player
|
||||||
|
@EnvironmentObject<PlayerControlsModel> private var playerControls
|
||||||
@EnvironmentObject<PlaylistsModel> private var playlists
|
@EnvironmentObject<PlaylistsModel> private var playlists
|
||||||
@EnvironmentObject<RecentsModel> private var recents
|
@EnvironmentObject<RecentsModel> private var recents
|
||||||
@EnvironmentObject<SearchModel> private var search
|
@EnvironmentObject<SearchModel> private var search
|
||||||
@@ -52,7 +53,7 @@ struct AppSidebarNavigation: View {
|
|||||||
BrowserPlayerControls {
|
BrowserPlayerControls {
|
||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
Spacer()
|
Spacer()
|
||||||
Image(systemName: "play.tv")
|
Image(systemName: "4k.tv")
|
||||||
.renderingMode(.original)
|
.renderingMode(.original)
|
||||||
.font(.system(size: 60))
|
.font(.system(size: 60))
|
||||||
.foregroundColor(.accentColor)
|
.foregroundColor(.accentColor)
|
||||||
@@ -71,6 +72,7 @@ struct AppSidebarNavigation: View {
|
|||||||
.environmentObject(instances)
|
.environmentObject(instances)
|
||||||
.environmentObject(navigation)
|
.environmentObject(navigation)
|
||||||
.environmentObject(player)
|
.environmentObject(player)
|
||||||
|
.environmentObject(playerControls)
|
||||||
.environmentObject(playlists)
|
.environmentObject(playlists)
|
||||||
.environmentObject(recents)
|
.environmentObject(recents)
|
||||||
.environmentObject(subscriptions)
|
.environmentObject(subscriptions)
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ struct PlayerControls: View {
|
|||||||
"Fullscreen",
|
"Fullscreen",
|
||||||
systemImage: fullScreenLayout ? "arrow.down.right.and.arrow.up.left" : "arrow.up.left.and.arrow.down.right"
|
systemImage: fullScreenLayout ? "arrow.down.right.and.arrow.up.left" : "arrow.up.left.and.arrow.down.right"
|
||||||
) {
|
) {
|
||||||
model.toggleFullscreen(fullScreenLayout)
|
player.toggleFullscreen(fullScreenLayout)
|
||||||
}
|
}
|
||||||
#if !os(tvOS)
|
#if !os(tvOS)
|
||||||
.keyboardShortcut(fullScreenLayout ? .cancelAction : .defaultAction)
|
.keyboardShortcut(fullScreenLayout ? .cancelAction : .defaultAction)
|
||||||
@@ -204,8 +204,8 @@ struct PlayerControls: View {
|
|||||||
#if os(tvOS)
|
#if os(tvOS)
|
||||||
.focused($focusedField, equals: .backward)
|
.focused($focusedField, equals: .backward)
|
||||||
#else
|
#else
|
||||||
.keyboardShortcut("k")
|
.keyboardShortcut("k", modifiers: [])
|
||||||
.keyboardShortcut(.leftArrow)
|
.keyboardShortcut(KeyEquivalent.leftArrow, modifiers: [])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -237,8 +237,8 @@ struct PlayerControls: View {
|
|||||||
#if os(tvOS)
|
#if os(tvOS)
|
||||||
.focused($focusedField, equals: .forward)
|
.focused($focusedField, equals: .forward)
|
||||||
#else
|
#else
|
||||||
.keyboardShortcut("l")
|
.keyboardShortcut("l", modifiers: [])
|
||||||
.keyboardShortcut(.rightArrow)
|
.keyboardShortcut(KeyEquivalent.rightArrow, modifiers: [])
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
0
Shared/Player/PlaybackBar.swift
Normal file
0
Shared/Player/PlaybackBar.swift
Normal file
@@ -234,6 +234,19 @@ struct VideoPlayerView: View {
|
|||||||
|
|
||||||
PlayerControls(player: player)
|
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 {
|
var fullScreenLayout: Bool {
|
||||||
|
|||||||
@@ -92,6 +92,16 @@ struct YatteeApp: App {
|
|||||||
.background(
|
.background(
|
||||||
HostingWindowFinder { window in
|
HostingWindowFinder { window in
|
||||||
Windows.playerWindow = window
|
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 }
|
.onAppear { player.presentingPlayer = true }
|
||||||
|
|||||||
@@ -1961,6 +1961,34 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
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 */
|
/* End PBXHeadersBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@@ -1968,6 +1996,7 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 37A3B17427255E7F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (macOS)" */;
|
buildConfigurationList = 37A3B17427255E7F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (macOS)" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
37FF8BFF27F9A7BC0038199F /* Headers */,
|
||||||
37A3B15327255E7F000FB5EE /* Sources */,
|
37A3B15327255E7F000FB5EE /* Sources */,
|
||||||
37A3B15427255E7F000FB5EE /* Frameworks */,
|
37A3B15427255E7F000FB5EE /* Frameworks */,
|
||||||
37A3B15527255E7F000FB5EE /* Resources */,
|
37A3B15527255E7F000FB5EE /* Resources */,
|
||||||
@@ -1985,6 +2014,7 @@
|
|||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 37A3B1902725735F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (iOS)" */;
|
buildConfigurationList = 37A3B1902725735F000FB5EE /* Build configuration list for PBXNativeTarget "Open in Yattee (iOS)" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
37FF8BFE27F9A7BA0038199F /* Headers */,
|
||||||
37A3B1752725735F000FB5EE /* Sources */,
|
37A3B1752725735F000FB5EE /* Sources */,
|
||||||
37A3B1762725735F000FB5EE /* Frameworks */,
|
37A3B1762725735F000FB5EE /* Frameworks */,
|
||||||
37A3B1772725735F000FB5EE /* Resources */,
|
37A3B1772725735F000FB5EE /* Resources */,
|
||||||
@@ -2034,6 +2064,7 @@
|
|||||||
buildConfigurationList = 37D4B0EF2671614900C925CA /* Build configuration list for PBXNativeTarget "Yattee (macOS)" */;
|
buildConfigurationList = 37D4B0EF2671614900C925CA /* Build configuration list for PBXNativeTarget "Yattee (macOS)" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
37CC3F4A270CE8D000608308 /* ShellScript */,
|
37CC3F4A270CE8D000608308 /* ShellScript */,
|
||||||
|
37FF8BFC27F9A7AD0038199F /* Headers */,
|
||||||
37D4B0CB2671614900C925CA /* Sources */,
|
37D4B0CB2671614900C925CA /* Sources */,
|
||||||
37D4B0CC2671614900C925CA /* Frameworks */,
|
37D4B0CC2671614900C925CA /* Frameworks */,
|
||||||
37D4B0CD2671614900C925CA /* Resources */,
|
37D4B0CD2671614900C925CA /* Resources */,
|
||||||
@@ -2108,6 +2139,7 @@
|
|||||||
buildConfigurationList = 37D4B177267164B000C925CA /* Build configuration list for PBXNativeTarget "Yattee (tvOS)" */;
|
buildConfigurationList = 37D4B177267164B000C925CA /* Build configuration list for PBXNativeTarget "Yattee (tvOS)" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
37CC3F49270CE8CA00608308 /* ShellScript */,
|
37CC3F49270CE8CA00608308 /* ShellScript */,
|
||||||
|
37FF8BFD27F9A7B20038199F /* Headers */,
|
||||||
37D4B154267164AE00C925CA /* Sources */,
|
37D4B154267164AE00C925CA /* Sources */,
|
||||||
37D4B155267164AE00C925CA /* Frameworks */,
|
37D4B155267164AE00C925CA /* Frameworks */,
|
||||||
37D4B156267164AE00C925CA /* Resources */,
|
37D4B156267164AE00C925CA /* Resources */,
|
||||||
@@ -3057,7 +3089,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -3070,7 +3102,7 @@
|
|||||||
"@executable_path/../../../../Frameworks",
|
"@executable_path/../../../../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 1.4.alpha.1;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-framework",
|
"-framework",
|
||||||
SafariServices,
|
SafariServices,
|
||||||
@@ -3091,7 +3123,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -3104,7 +3136,7 @@
|
|||||||
"@executable_path/../../../../Frameworks",
|
"@executable_path/../../../../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 1.4.alpha.1;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-framework",
|
"-framework",
|
||||||
SafariServices,
|
SafariServices,
|
||||||
@@ -3123,7 +3155,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||||
@@ -3135,7 +3167,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.1;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-framework",
|
"-framework",
|
||||||
SafariServices,
|
SafariServices,
|
||||||
@@ -3155,7 +3187,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||||
@@ -3167,7 +3199,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.1;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = (
|
OTHER_LDFLAGS = (
|
||||||
"-framework",
|
"-framework",
|
||||||
SafariServices,
|
SafariServices,
|
||||||
@@ -3319,7 +3351,7 @@
|
|||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
@@ -3343,7 +3375,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
|
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = "-lstdc++";
|
OTHER_LDFLAGS = "-lstdc++";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
@@ -3361,7 +3393,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
|
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
|
||||||
@@ -3381,7 +3413,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
|
"$(PROJECT_DIR)/Vendor/mpv/iOS/lib",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
OTHER_LDFLAGS = "-lstdc++";
|
OTHER_LDFLAGS = "-lstdc++";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
@@ -3403,7 +3435,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@@ -3422,7 +3454,7 @@
|
|||||||
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
|
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
@@ -3441,7 +3473,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@@ -3460,7 +3492,7 @@
|
|||||||
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
|
"$(PROJECT_DIR)/Vendor/mpv/macOS/lib",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
@@ -3577,7 +3609,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -3597,7 +3629,7 @@
|
|||||||
"$(PROJECT_DIR)/Vendor/mpv",
|
"$(PROJECT_DIR)/Vendor/mpv",
|
||||||
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
|
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
@@ -3615,7 +3647,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 32;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -3635,7 +3667,7 @@
|
|||||||
"$(PROJECT_DIR)/Vendor/mpv",
|
"$(PROJECT_DIR)/Vendor/mpv",
|
||||||
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
|
"$(PROJECT_DIR)/Vendor/mpv/tvOS",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.4.alpha.2;
|
MARKETING_VERSION = 1.4.alpha.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
PRODUCT_BUNDLE_IDENTIFIER = stream.yattee.app.alpha;
|
||||||
PRODUCT_NAME = Yattee;
|
PRODUCT_NAME = Yattee;
|
||||||
SDKROOT = appletvos;
|
SDKROOT = appletvos;
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
|
}
|
||||||
@@ -42,6 +42,10 @@ enum Windows: String, CaseIterable {
|
|||||||
Self.main.focus()
|
Self.main.focus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toggleFullScreen() {
|
||||||
|
window?.toggleFullScreen(nil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HostingWindowFinder: NSViewRepresentable {
|
struct HostingWindowFinder: NSViewRepresentable {
|
||||||
|
|||||||
Reference in New Issue
Block a user