Skip to content

Commit

Permalink
Merge pull request #424 from TortugaPower/develop
Browse files Browse the repository at this point in the history
Release 3.6.2
  • Loading branch information
GianniCarlo committed Feb 11, 2020
2 parents c2fc9de + 6257fe9 commit 6fea218
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 24 deletions.
24 changes: 12 additions & 12 deletions BookPlayer.xcodeproj/project.pbxproj
Expand Up @@ -1778,7 +1778,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BookPlayerWatch_Extension; IBSC_MODULE = BookPlayerWatch_Extension;
INFOPLIST_FILE = BookPlayerWatch/Info.plist; INFOPLIST_FILE = BookPlayerWatch/Info.plist;
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp;
Expand Down Expand Up @@ -1810,7 +1810,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BookPlayerWatch_Extension; IBSC_MODULE = BookPlayerWatch_Extension;
INFOPLIST_FILE = BookPlayerWatch/Info.plist; INFOPLIST_FILE = BookPlayerWatch/Info.plist;
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -1840,7 +1840,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BookPlayerWatch_Extension; IBSC_MODULE = BookPlayerWatch_Extension;
INFOPLIST_FILE = BookPlayerWatch/Info.plist; INFOPLIST_FILE = BookPlayerWatch/Info.plist;
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -1868,7 +1868,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist"; INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension;
Expand Down Expand Up @@ -1898,7 +1898,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist"; INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}"; PRODUCT_NAME = "${TARGET_NAME}";
Expand Down Expand Up @@ -1926,7 +1926,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist"; INFOPLIST_FILE = "BookPlayerWatch Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.watchkitapp.watchkitextension;
PRODUCT_NAME = "${TARGET_NAME}"; PRODUCT_NAME = "${TARGET_NAME}";
Expand Down Expand Up @@ -2171,7 +2171,7 @@
INFOPLIST_FILE = BookPlayer/Info.plist; INFOPLIST_FILE = BookPlayer/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3; IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer;
PRODUCT_NAME = BookPlayer; PRODUCT_NAME = BookPlayer;
PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay"; PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay";
Expand Down Expand Up @@ -2201,7 +2201,7 @@
INFOPLIST_FILE = BookPlayer/Info.plist; INFOPLIST_FILE = BookPlayer/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3; IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer;
PRODUCT_NAME = BookPlayer; PRODUCT_NAME = BookPlayer;
PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay"; PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay";
Expand Down Expand Up @@ -2370,7 +2370,7 @@
INFOPLIST_FILE = BookPlayerWidget/Info.plist; INFOPLIST_FILE = BookPlayerWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.2; IPHONEOS_DEPLOYMENT_TARGET = 12.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget;
Expand Down Expand Up @@ -2399,7 +2399,7 @@
INFOPLIST_FILE = BookPlayerWidget/Info.plist; INFOPLIST_FILE = BookPlayerWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.2; IPHONEOS_DEPLOYMENT_TARGET = 12.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -2426,7 +2426,7 @@
INFOPLIST_FILE = BookPlayerWidget/Info.plist; INFOPLIST_FILE = BookPlayerWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.2; IPHONEOS_DEPLOYMENT_TARGET = 12.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer.BookPlayerWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -2507,7 +2507,7 @@
INFOPLIST_FILE = BookPlayer/Info.plist; INFOPLIST_FILE = BookPlayer/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3; IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.6.1; MARKETING_VERSION = 3.6.2;
PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer; PRODUCT_BUNDLE_IDENTIFIER = com.tortugapower.audiobookplayer;
PRODUCT_NAME = BookPlayer; PRODUCT_NAME = BookPlayer;
PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay"; PROVISIONING_PROFILE_SPECIFIER = "BookPlayer 3 with CarPlay";
Expand Down
7 changes: 4 additions & 3 deletions BookPlayer/Library/ItemListViewController.swift
Expand Up @@ -195,11 +195,12 @@ class ItemListViewController: UIViewController, ItemList, ItemListAlerts, ItemLi
} }
} }


func setupPlayer(book: Book) { func setupPlayer(book: Book, _ override: Bool = false) {
// Make sure player is for a different book // Make sure player is for a different book
guard guard
let currentBook = PlayerManager.shared.currentBook, let currentBook = PlayerManager.shared.currentBook,
currentBook == book currentBook == book,
!override
else { else {
// Handle loading new player // Handle loading new player
self.loadPlayer(book: book) self.loadPlayer(book: book)
Expand Down Expand Up @@ -492,7 +493,7 @@ extension ItemListViewController: UITableViewDataSource {


guard let book = self?.getNextBook(item) else { return } guard let book = self?.getNextBook(item) else { return }


self?.setupPlayer(book: book) self?.setupPlayer(book: book, true)
} }


if let book = item as? Book { if let book = item as? Book {
Expand Down
1 change: 0 additions & 1 deletion BookPlayer/Library/RootViewController.swift
Expand Up @@ -65,7 +65,6 @@ class RootViewController: UIViewController, UIGestureRecognizerDelegate {
NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPlay), name: .bookPlayed, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPlay), name: .bookPlayed, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPause), name: .bookPaused, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPause), name: .bookPaused, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPause), name: .bookEnd, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.onBookPause), name: .bookEnd, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.dismissMiniPlayer), name: .bookStopped, object: nil)


// Gestures // Gestures
self.pan = UIPanGestureRecognizer(target: self, action: #selector(self.panAction)) self.pan = UIPanGestureRecognizer(target: self, action: #selector(self.panAction))
Expand Down
29 changes: 23 additions & 6 deletions BookPlayer/Player/PlayerManager.swift
Expand Up @@ -16,12 +16,24 @@ import MediaPlayer
class PlayerManager: NSObject { class PlayerManager: NSObject {
static let shared = PlayerManager() static let shared = PlayerManager()


static let speedOptions: [Float] = [2.5, 2, 1.75, 1.5, 1.25, 1, 0.75] static let speedOptions: [Float] = [3, 2.5, 2, 1.75, 1.5, 1.25, 1, 0.9, 0.75, 0.5]


private var audioPlayer = AVPlayer() private var audioPlayer = AVPlayer()


private var playerItem: AVPlayerItem? private var playerItem: AVPlayerItem?


private var observeStatus: Bool = false {
didSet {
guard oldValue != observeStatus else { return }

if self.observeStatus {
self.playerItem?.addObserver(self, forKeyPath: "status", options: .new, context: nil)
} else {
self.playerItem?.removeObserver(self, forKeyPath: "status")
}
}
}

var currentBook: Book? { var currentBook: Book? {
didSet { didSet {
guard let book = currentBook, guard let book = currentBook,
Expand Down Expand Up @@ -106,7 +118,9 @@ class PlayerManager: NSObject {
MPNowPlayingInfoCenter.default().nowPlayingInfo = self.nowPlayingInfo MPNowPlayingInfoCenter.default().nowPlayingInfo = self.nowPlayingInfo


if book.currentTime > 0.0 { if book.currentTime > 0.0 {
self.jumpTo(book.currentTime) // if book is truly finished, start book again to avoid autoplaying next one
let time = book.currentTime == book.duration ? 0 : book.currentTime
self.jumpTo(time)
} }


NotificationCenter.default.post(name: .bookReady, object: nil, userInfo: ["book": book]) NotificationCenter.default.post(name: .bookReady, object: nil, userInfo: ["book": book])
Expand Down Expand Up @@ -338,7 +352,7 @@ extension PlayerManager {
guard let item = self.playerItem, guard let item = self.playerItem,
item.status == .readyToPlay else { item.status == .readyToPlay else {
//queue playback //queue playback
self.playerItem?.addObserver(self, forKeyPath: "status", options: .new, context: nil) self.observeStatus = true
return return
} }


Expand Down Expand Up @@ -416,7 +430,8 @@ extension PlayerManager {
return return
} }


self.playerItem?.removeObserver(self, forKeyPath: "status") self.observeStatus = false

self.play() self.play()
} }


Expand All @@ -425,6 +440,8 @@ extension PlayerManager {
return return
} }


self.observeStatus = false

UserActivityManager.shared.stopPlaybackActivity() UserActivityManager.shared.stopPlaybackActivity()


if let library = currentBook.library ?? currentBook.playlist?.library { if let library = currentBook.library ?? currentBook.playlist?.library {
Expand Down Expand Up @@ -457,6 +474,8 @@ extension PlayerManager {
} }


func stop() { func stop() {
self.observeStatus = false

self.audioPlayer.pause() self.audioPlayer.pause()


UserActivityManager.shared.stopPlaybackActivity() UserActivityManager.shared.stopPlaybackActivity()
Expand Down Expand Up @@ -516,8 +535,6 @@ extension PlayerManager {
NotificationCenter.default.post(name: .bookChange, NotificationCenter.default.post(name: .bookChange,
object: nil, object: nil,
userInfo: userInfo) userInfo: userInfo)

self.play()
}) })
} }
} }
1 change: 0 additions & 1 deletion BookPlayer/Services/CarPlayManager.swift
Expand Up @@ -90,7 +90,6 @@ class CarPlayManager: NSObject, MPPlayableContentDataSource, MPPlayableContentDe


guard let playlist = items[indexPath[IndexGuide.library.content]] as? Playlist, guard let playlist = items[indexPath[IndexGuide.library.content]] as? Playlist,
let count = playlist.books?.count else { let count = playlist.books?.count else {
print(items[indexPath[IndexGuide.library.content]])
return 0 return 0
} }


Expand Down
2 changes: 1 addition & 1 deletion Shared/Models/Playlist+CoreDataClass.swift
Expand Up @@ -100,7 +100,7 @@ public class Playlist: LibraryItem {


public func updateCompletionState() { public func updateCompletionState() {
guard let books = self.books?.array as? [Book] else { return } guard let books = self.books?.array as? [Book] else { return }
print(!books.contains(where: { !$0.isFinished }))
self.isFinished = !books.contains(where: { !$0.isFinished }) self.isFinished = !books.contains(where: { !$0.isFinished })
} }


Expand Down

0 comments on commit 6fea218

Please sign in to comment.