From 76f152db8eb6b4497bccc21ef31582885b5555d1 Mon Sep 17 00:00:00 2001 From: Noam Tamim Date: Sun, 12 Feb 2017 23:17:09 +0200 Subject: [PATCH 1/4] SimpleOVPMediaProvider: simplify common OVP use cases. And a minor fix to OVPSessionManager's init. --- .../OVP/Session/OVPSessionManager.swift | 13 ++-- .../OVP/SimpleOVPMediaProvider.swift | 73 +++++++++++++++++++ 2 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 Classes/Providers/OVP/SimpleOVPMediaProvider.swift diff --git a/Classes/Providers/OVP/Session/OVPSessionManager.swift b/Classes/Providers/OVP/Session/OVPSessionManager.swift index d8c38ae6..8650c94f 100644 --- a/Classes/Providers/OVP/Session/OVPSessionManager.swift +++ b/Classes/Providers/OVP/Session/OVPSessionManager.swift @@ -41,12 +41,10 @@ public class OVPSessionManager: SessionProvider { private let defaultSessionExpiry = TimeInterval(24*60*60) - - public init(serverURL: String, version:String, partnerId: Int64, executor: RequestExecutor?) { - + public init(serverURL: String, partnerId: Int64, executor: RequestExecutor? = nil) { self.serverURL = serverURL self.partnerId = partnerId - self.version = version + self.version = "api_v3" self.fullServerPath = self.serverURL.appending("/\(self.version)") if let exe = executor { @@ -55,6 +53,11 @@ public class OVPSessionManager: SessionProvider { self.executor = USRExecutor.shared } } + + @available(*, deprecated, message: "Use init(serverURL:partnerId:executor:)") + public convenience init(serverURL: String, version:String, partnerId: Int64, executor: RequestExecutor?) { + self.init(serverURL: serverURL, partnerId: partnerId, executor: executor) + } public func loadKS(completion: @escaping (_ result :Result) -> Void){ if let ks = self.ks, self.tokenExpiration?.compare(Date()) == ComparisonResult.orderedDescending { @@ -96,7 +99,7 @@ public class OVPSessionManager: SessionProvider { - + // FIXME: Anonymous, no e public func startAnonymouseSession(completion:@escaping (_ error:Error?)->Void) -> Void { let loginRequestBuilder = OVPSessionService.startWidgetSession(baseURL: self.fullServerPath, diff --git a/Classes/Providers/OVP/SimpleOVPMediaProvider.swift b/Classes/Providers/OVP/SimpleOVPMediaProvider.swift new file mode 100644 index 00000000..a7f40b4d --- /dev/null +++ b/Classes/Providers/OVP/SimpleOVPMediaProvider.swift @@ -0,0 +1,73 @@ +// +// SimpleOVPMediaProvider.swift +// Pods +// +// Created by Noam Tamim on 09/02/2017. +// +// + +import UIKit + +public class SimpleOVPMediaProvider: MediaEntryProvider { + + public let serverURL: String + public let partnerId: Int64 + public var ks: String? + public var entryId: String? + + private var currentProvider: MediaEntryProvider? + + public init(serverURL: String, partnerId: Int64, ks: String?) { + self.serverURL = serverURL + self.partnerId = partnerId + self.ks = ks + } + + @discardableResult + public func setEntryId(_ entryId: String) -> Self { + self.entryId = entryId + return self + } + + public func loadMedia(callback: @escaping (Result) -> Void) { + self.cancel() + + if let ks = self.ks { + self.loadMedia(sessionProvider: SimpleSessionProvider(serverURL: serverURL, partnerId: partnerId, ks: ks), callback: callback) + } else { + let sessionProvider = OVPSessionManager(serverURL: serverURL, partnerId: partnerId) + sessionProvider.startAnonymouseSession(completion: { (error: Error?) in + self.loadMedia(sessionProvider: sessionProvider, callback: callback) + }) + } + } + + public func cancel() { + currentProvider?.cancel() + } + + private class SimpleSessionProvider: SessionProvider { + let serverURL: String + let partnerId: Int64 + let ks: String + init(serverURL: String, partnerId: Int64, ks: String) { + self.serverURL = serverURL + self.partnerId = partnerId + self.ks = ks + } + + func loadKS(completion: @escaping (Result) -> Void) { + completion(Result(data: ks)) + } + } + + private func loadMedia(sessionProvider: SessionProvider, callback: @escaping (Result) -> Void) { + let mediaProvider = OVPMediaProvider() + .set(entryId: self.entryId) + .set(sessionProvider: sessionProvider) + mediaProvider.loadMedia(callback: callback) + + self.currentProvider = mediaProvider + } + +} From a167530b4259fbe6d5ea1934375524de4954bec7 Mon Sep 17 00:00:00 2001 From: Noam Tamim Date: Sun, 12 Feb 2017 23:17:38 +0200 Subject: [PATCH 2/4] Minor warning fixes. --- Classes/Network/Request.swift | 2 +- Classes/Network/Result.swift | 2 +- Classes/Player/AssetLoaderDelegate.swift | 2 +- Classes/Player/PlayerLoader.swift | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Classes/Network/Request.swift b/Classes/Network/Request.swift index a0ec8ed7..77c7a6d3 100644 --- a/Classes/Network/Request.swift +++ b/Classes/Network/Request.swift @@ -128,7 +128,7 @@ public class RequestBuilder: NSObject { public func setParam(key: String, value:String) -> Self { if var params = self.urlParams { - self.urlParams![key] = value + params[key] = value }else{ self.urlParams = [key:value] } diff --git a/Classes/Network/Result.swift b/Classes/Network/Result.swift index c0259d8b..512c70b2 100644 --- a/Classes/Network/Result.swift +++ b/Classes/Network/Result.swift @@ -9,7 +9,7 @@ import UIKit -public class Result { +public class Result: NSObject { public var data: T? = nil public var error: Error? = nil diff --git a/Classes/Player/AssetLoaderDelegate.swift b/Classes/Player/AssetLoaderDelegate.swift index 24dd0b18..968039dd 100644 --- a/Classes/Player/AssetLoaderDelegate.swift +++ b/Classes/Player/AssetLoaderDelegate.swift @@ -122,7 +122,7 @@ class AssetLoaderDelegate: NSObject { PKLog.debug("Got response in \(endTime-startTime) sec") let ckc = try self.parseServerResponse(data: data, error: error) callback(Result(data: ckc)) - } catch let e as Error { + } catch let e { callback(Result(error: e)) } }) diff --git a/Classes/Player/PlayerLoader.swift b/Classes/Player/PlayerLoader.swift index ec377848..a9b2f45e 100644 --- a/Classes/Player/PlayerLoader.swift +++ b/Classes/Player/PlayerLoader.swift @@ -59,6 +59,7 @@ class PlayerLoader: PlayerDecoratorBase { override func prepare(_ config: MediaConfig) { // update all loaded plugins with media config for (pluginName, loadedPlugin) in loadedPlugins { + PKLog.trace("Preparing plugin", pluginName) loadedPlugin.plugin.onLoad(mediaConfig: config) } super.prepare(config) From eb4912933b41c16d5e603ad818268b46317335a6 Mon Sep 17 00:00:00 2001 From: Noam Tamim Date: Sat, 18 Feb 2017 21:55:44 +0200 Subject: [PATCH 3/4] Replaced Simple MediaEntryProvider with a Simple SessionProvider. This approach is more versatile, and allows other components to use the simple session provider. --- Classes/Providers/OVP/OVPMediaProvider.swift | 5 ++ .../OVP/SimpleOVPMediaProvider.swift | 73 ------------------- .../OVP/SimpleOVPSessionProvider.swift | 43 +++++++++++ 3 files changed, 48 insertions(+), 73 deletions(-) delete mode 100644 Classes/Providers/OVP/SimpleOVPMediaProvider.swift create mode 100644 Classes/Providers/OVP/SimpleOVPSessionProvider.swift diff --git a/Classes/Providers/OVP/OVPMediaProvider.swift b/Classes/Providers/OVP/OVPMediaProvider.swift index 6f5cf651..e1babad9 100644 --- a/Classes/Providers/OVP/OVPMediaProvider.swift +++ b/Classes/Providers/OVP/OVPMediaProvider.swift @@ -38,6 +38,11 @@ public class OVPMediaProvider: MediaEntryProvider { public init(){} + + public init(_ sessionProvider: SessionProvider) { + self.set(sessionProvider: sessionProvider) + } + /** session provider - which resposible for the ks, prtner id, and base server url */ diff --git a/Classes/Providers/OVP/SimpleOVPMediaProvider.swift b/Classes/Providers/OVP/SimpleOVPMediaProvider.swift deleted file mode 100644 index a7f40b4d..00000000 --- a/Classes/Providers/OVP/SimpleOVPMediaProvider.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// SimpleOVPMediaProvider.swift -// Pods -// -// Created by Noam Tamim on 09/02/2017. -// -// - -import UIKit - -public class SimpleOVPMediaProvider: MediaEntryProvider { - - public let serverURL: String - public let partnerId: Int64 - public var ks: String? - public var entryId: String? - - private var currentProvider: MediaEntryProvider? - - public init(serverURL: String, partnerId: Int64, ks: String?) { - self.serverURL = serverURL - self.partnerId = partnerId - self.ks = ks - } - - @discardableResult - public func setEntryId(_ entryId: String) -> Self { - self.entryId = entryId - return self - } - - public func loadMedia(callback: @escaping (Result) -> Void) { - self.cancel() - - if let ks = self.ks { - self.loadMedia(sessionProvider: SimpleSessionProvider(serverURL: serverURL, partnerId: partnerId, ks: ks), callback: callback) - } else { - let sessionProvider = OVPSessionManager(serverURL: serverURL, partnerId: partnerId) - sessionProvider.startAnonymouseSession(completion: { (error: Error?) in - self.loadMedia(sessionProvider: sessionProvider, callback: callback) - }) - } - } - - public func cancel() { - currentProvider?.cancel() - } - - private class SimpleSessionProvider: SessionProvider { - let serverURL: String - let partnerId: Int64 - let ks: String - init(serverURL: String, partnerId: Int64, ks: String) { - self.serverURL = serverURL - self.partnerId = partnerId - self.ks = ks - } - - func loadKS(completion: @escaping (Result) -> Void) { - completion(Result(data: ks)) - } - } - - private func loadMedia(sessionProvider: SessionProvider, callback: @escaping (Result) -> Void) { - let mediaProvider = OVPMediaProvider() - .set(entryId: self.entryId) - .set(sessionProvider: sessionProvider) - mediaProvider.loadMedia(callback: callback) - - self.currentProvider = mediaProvider - } - -} diff --git a/Classes/Providers/OVP/SimpleOVPSessionProvider.swift b/Classes/Providers/OVP/SimpleOVPSessionProvider.swift new file mode 100644 index 00000000..f36d2c56 --- /dev/null +++ b/Classes/Providers/OVP/SimpleOVPSessionProvider.swift @@ -0,0 +1,43 @@ +// +// Created by Noam Tamim on 09/02/2017. +// +// + +import UIKit + +/** + A SessionProvider that just reflects its input parameters -- baseUrl, partnerId, ks. + Unlike the full OVPSessionManager, this class does not attempt to manage (create, renew, validate, clear) a session. + The application is expected to provide a valid KS, which it can update as required via the `ks` property. For some + use cases, the KS can be null (anonymous media playback, if allowed by access-control). Basic usage with a OVPMediaProvider: + + let mediaProvider = OVPMediaProvider(SimpleOVPSessionProvider(serverURL: "https://cdnapisec.kaltura.com", + partnerId: 1851571, + ks: applicationKS)) + mediaProvider.set(entryId: "0_pl5lbfo0").loadMedia { (entry) in + print("entry:", entry.data ?? "") + } + + */ +public class SimpleOVPSessionProvider: SessionProvider { + public let serverURL: String + public let partnerId: Int64 + public var ks: String? + + /** + Build an OVP SessionProvider with the specified parameters. + - Parameters: + - serverURL: Kaltura Server URL, such as `"https://cdnapisec.kaltura.com"`. + - partnerId: Kaltura partner id. + - ks: Kaltura Session token. + */ + public init(serverURL: String, partnerId: Int64, ks: String?) { + self.serverURL = serverURL + self.partnerId = partnerId + self.ks = ks + } + + public func loadKS(completion: @escaping (Result) -> Void) { + completion(Result(data: ks, error: nil)) + } +} From bc5e198b5d51fe3d7c0a64abe02cfc5a0186e294 Mon Sep 17 00:00:00 2001 From: Noam Tamim Date: Sat, 18 Feb 2017 21:58:36 +0200 Subject: [PATCH 4/4] Fixed typo (startAnonymouseSession ==> startAnonymousSession). --- Classes/Network/SessionProvider.swift | 3 --- Classes/Providers/OTT/Session/OTTSessionManager.swift | 2 +- Classes/Providers/OVP/Session/OVPSessionManager.swift | 7 ++----- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Classes/Network/SessionProvider.swift b/Classes/Network/SessionProvider.swift index 448f4589..6533e652 100644 --- a/Classes/Network/SessionProvider.swift +++ b/Classes/Network/SessionProvider.swift @@ -14,9 +14,6 @@ public protocol SessionProvider { var partnerId: Int64 { get } func loadKS(completion: @escaping (_ result :Result) -> Void) - - - } diff --git a/Classes/Providers/OTT/Session/OTTSessionManager.swift b/Classes/Providers/OTT/Session/OTTSessionManager.swift index 607595c2..9b2801b1 100644 --- a/Classes/Providers/OTT/Session/OTTSessionManager.swift +++ b/Classes/Providers/OTT/Session/OTTSessionManager.swift @@ -99,7 +99,7 @@ public class OTTSessionManager: SessionProvider { } } - public func startAnonymouseSession(completion:@escaping (_ error:Error?)->Void) { + public func startAnonymousSession(completion:@escaping (_ error:Error?)->Void) { let loginRequestBuilder = OTTUserService.anonymousLogin(baseURL: self.serverURL, partnerId: self.partnerId) diff --git a/Classes/Providers/OVP/Session/OVPSessionManager.swift b/Classes/Providers/OVP/Session/OVPSessionManager.swift index 8650c94f..72794a5c 100644 --- a/Classes/Providers/OVP/Session/OVPSessionManager.swift +++ b/Classes/Providers/OVP/Session/OVPSessionManager.swift @@ -75,7 +75,7 @@ public class OVPSessionManager: SessionProvider { } else{ - self.startAnonymouseSession(completion: { (e:Error?) in + self.startAnonymousSession(completion: { (e:Error?) in self.ensureKSAfterRefresh(e: e, completion: completion) }) } @@ -97,10 +97,7 @@ public class OVPSessionManager: SessionProvider { } - - - // FIXME: Anonymous, no e - public func startAnonymouseSession(completion:@escaping (_ error:Error?)->Void) -> Void { + public func startAnonymousSession(completion:@escaping (_ error:Error?)->Void) -> Void { let loginRequestBuilder = OVPSessionService.startWidgetSession(baseURL: self.fullServerPath, partnerId: self.partnerId)?