mirror of
				https://github.com/yattee/yattee.git
				synced 2025-10-30 20:22:06 +00:00 
			
		
		
		
	Don't autoplay last video at start
This commit is contained in:
		| @@ -50,49 +50,16 @@ final class PlayerModel: ObservableObject { | ||||
|  | ||||
|     private var statusObservation: NSKeyValueObservation? | ||||
|  | ||||
|     var autoPlayItems = false | ||||
|  | ||||
|     init(accounts: AccountsModel? = nil, instances: InstancesModel? = nil) { | ||||
|         self.accounts = accounts ?? AccountsModel() | ||||
|         self.instances = instances ?? InstancesModel() | ||||
|  | ||||
|         addItemDidPlayToEndTimeObserver() | ||||
|         addFrequentTimeObserver() | ||||
|         addInfrequentTimeObserver() | ||||
|         addPlayerTimeControlStatusObserver() | ||||
|     } | ||||
|  | ||||
|     func loadHistoryDetails() { | ||||
|         guard !accounts.current.isNil else { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         queue = Defaults[.queue] | ||||
|         queue.forEach { item in | ||||
|             accounts.api.loadDetails(item) { newItem in | ||||
|                 if let index = self.queue.firstIndex(where: { $0.id == item.id }) { | ||||
|                     self.queue[index] = newItem | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         history = Defaults[.history] | ||||
|         history.forEach { item in | ||||
|             accounts.api.loadDetails(item) { newItem in | ||||
|                 if let index = self.history.firstIndex(where: { $0.id == item.id }) { | ||||
|                     self.history[index] = newItem | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if let item = Defaults[.lastPlayed] { | ||||
|             accounts.api.loadDetails(item) { [weak self] newItem in | ||||
|                 self?.playNow(newItem.video, at: newItem.playbackTime?.seconds) | ||||
|             } | ||||
|         } else { | ||||
|             autoPlayItems = true | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     func presentPlayer() { | ||||
|         presentingPlayer = true | ||||
|     } | ||||
| @@ -193,15 +160,7 @@ final class PlayerModel: ObservableObject { | ||||
|             #endif | ||||
|  | ||||
|             DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in | ||||
|                 guard let self = self else { | ||||
|                     return | ||||
|                 } | ||||
|  | ||||
|                 guard self.autoPlayItems else { | ||||
|                     return | ||||
|                 } | ||||
|  | ||||
|                 self.play() | ||||
|                 self?.play() | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| import AVFoundation | ||||
| import Defaults | ||||
| import Foundation | ||||
| import Siesta | ||||
|  | ||||
| @@ -105,16 +106,7 @@ extension PlayerModel { | ||||
|     } | ||||
|  | ||||
|     func isAutoplaying(_ item: AVPlayerItem) -> Bool { | ||||
|         guard player.currentItem == item else { | ||||
|             return false | ||||
|         } | ||||
|  | ||||
|         if !autoPlayItems { | ||||
|             autoPlayItems = true | ||||
|             return false | ||||
|         } | ||||
|  | ||||
|         return true | ||||
|         player.currentItem == item | ||||
|     } | ||||
|  | ||||
|     @discardableResult func enqueueVideo( | ||||
| @@ -141,14 +133,18 @@ extension PlayerModel { | ||||
|  | ||||
|     func addCurrentItemToHistory() { | ||||
|         if let item = currentItem { | ||||
|             if let index = history.firstIndex(where: { $0.video.videoID == item.video?.videoID }) { | ||||
|                 history.remove(at: index) | ||||
|             } | ||||
|  | ||||
|             history.insert(currentItem, at: 0) | ||||
|             addItemToHistory(item) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     func addItemToHistory(_ item: PlayerQueueItem) { | ||||
|         if let index = history.firstIndex(where: { $0.video.videoID == item.video?.videoID }) { | ||||
|             history.remove(at: index) | ||||
|         } | ||||
|  | ||||
|         history.insert(currentItem, at: 0) | ||||
|     } | ||||
|  | ||||
|     func playHistory(_ item: PlayerQueueItem) { | ||||
|         var time = item.playbackTime | ||||
|  | ||||
| @@ -180,4 +176,30 @@ extension PlayerModel { | ||||
|     func removeHistoryItems() { | ||||
|         history.removeAll() | ||||
|     } | ||||
|  | ||||
|     func loadHistoryDetails() { | ||||
|         guard !accounts.current.isNil else { | ||||
|             return | ||||
|         } | ||||
|  | ||||
|         queue = Defaults[.queue] | ||||
|         queue.forEach { item in | ||||
|             accounts.api.loadDetails(item) { newItem in | ||||
|                 if let index = self.queue.firstIndex(where: { $0.id == item.id }) { | ||||
|                     self.queue[index] = newItem | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         history = [Defaults[.lastPlayed]].compactMap { $0 } + Defaults[.history] | ||||
|         history.forEach { item in | ||||
|             accounts.api.loadDetails(item) { newItem in | ||||
|                 if let index = self.history.firstIndex(where: { $0.id == item.id }) { | ||||
|                     self.history[index] = newItem | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         Defaults[.lastPlayed] = nil | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1078,19 +1078,19 @@ | ||||
| 			children = ( | ||||
| 				3743B86627216A1E00261544 /* Accounts */, | ||||
| 				3743B864272169E200261544 /* Applications */, | ||||
| 				3743B86527216A0600261544 /* Player */, | ||||
| 				37FB283F2721B20800A57617 /* Search */, | ||||
| 				374C0539272436DA009BDDBE /* SponsorBlock */, | ||||
| 				37AAF28F26740715007FC770 /* Channel.swift */, | ||||
| 				37C3A24427235DA70087A57A /* ChannelPlaylist.swift */, | ||||
| 				37FB28402721B22200A57617 /* ContentItem.swift */, | ||||
| 				37141672267A8E10006CA35D /* Country.swift */, | ||||
| 				371F2F19269B43D300E4A7AB /* NavigationModel.swift */, | ||||
| 				3743B86527216A0600261544 /* Player */, | ||||
| 				376578882685471400D4EA09 /* Playlist.swift */, | ||||
| 				37BA794226DBA973002A0235 /* PlaylistsModel.swift */, | ||||
| 				37C194C626F6A9C8005D3B96 /* RecentsModel.swift */, | ||||
| 				37FB283F2721B20800A57617 /* Search */, | ||||
| 				37EAD86E267B9ED100D9E01B /* Segment.swift */, | ||||
| 				37CEE4BC2677B670005A1EFE /* SingleAssetStream.swift */, | ||||
| 				374C0539272436DA009BDDBE /* SponsorBlock */, | ||||
| 				3797758A2689345500DD52A8 /* Store.swift */, | ||||
| 				37CEE4C02677B697005A1EFE /* Stream.swift */, | ||||
| 				37E64DD026D597EB00C71877 /* SubscriptionsModel.swift */, | ||||
|   | ||||
| @@ -144,7 +144,7 @@ struct ContentView: View { | ||||
|  | ||||
|             accounts.api.video(id).load().onSuccess { response in | ||||
|                 if let video: Video = response.typedContent() { | ||||
|                     self.player.autoPlayItems = true | ||||
|                     player.addCurrentItemToHistory() | ||||
|                     self.player.playNow(video, at: parser.time) | ||||
|                     self.player.presentPlayer() | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Arkadiusz Fal
					Arkadiusz Fal