adding play audio action. current implementation.
This commit is contained in:
parent
6b61063811
commit
4fea0eb473
@ -50,5 +50,4 @@ extension MoleculeTreeTraversalProtocol {
|
|||||||
return accumulator
|
return accumulator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,9 +8,11 @@
|
|||||||
|
|
||||||
|
|
||||||
public protocol PagePlayAudioBehaviorConsumerProtocol {
|
public protocol PagePlayAudioBehaviorConsumerProtocol {
|
||||||
func playPause()
|
func togglePlayPause()
|
||||||
|
func play()
|
||||||
|
func pause()
|
||||||
func stop()
|
func stop()
|
||||||
func isPlaying()
|
var isPlaying: Bool { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PagePlayAudioBehaviorModel: PageBehaviorModelProtocol {
|
public class PagePlayAudioBehaviorModel: PageBehaviorModelProtocol {
|
||||||
@ -21,6 +23,12 @@ public class PagePlayAudioBehaviorModel: PageBehaviorModelProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class PagePlayAudioBehavior: PageCustomActionHandlerBehavior {
|
public class PagePlayAudioBehavior: PageCustomActionHandlerBehavior {
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Active Model
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
public static var activeAudioPlayer: PagePlayAudioBehaviorConsumerProtocol?
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Delegate
|
// MARK: - Delegate
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -39,20 +47,33 @@ public class PagePlayAudioBehavior: PageCustomActionHandlerBehavior {
|
|||||||
// MARK: - Custom Action
|
// MARK: - Custom Action
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
// Either play or pause
|
||||||
public func handleAction(type actionType: String?, information: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) -> Bool {
|
public func handleAction(type actionType: String?, information: [AnyHashable: Any]?, additionalData: [AnyHashable: Any]?) -> Bool {
|
||||||
|
|
||||||
let templateModel = (delegate?.moleculeDelegate as? PageProtocol)?.pageModel as? TemplateModelProtocol
|
// TODO: Has to grab the specific model that is active (expanded). Identify model holder of this action.
|
||||||
|
|
||||||
let consumers: [PagePlayAudioBehaviorConsumerProtocol] = templateModel!.allMoleculesOfType()
|
// TODO: Update the model. play -> pause OR pause -> play
|
||||||
for consumer in consumers {
|
|
||||||
consumer.playPause()
|
// TODO: Download binary
|
||||||
}
|
|
||||||
|
// TODO: Store audio file in cache using some key (messageID???) to store it.
|
||||||
|
|
||||||
|
// TODO: Actually pause/play
|
||||||
|
|
||||||
|
// TODO: Tell Template to update this cell (needs to be built). Currently it updates all cells.
|
||||||
|
|
||||||
|
// let templateModel = (delegate?.moleculeDelegate as? PageProtocol)?.pageModel as? TemplateModelProtocol
|
||||||
|
Self.activeAudioPlayer?.play()
|
||||||
|
// let consumers: [PagePlayAudioBehaviorConsumerProtocol] = templateModel!.allMoleculesOfType()
|
||||||
|
// for consumer in consumers {
|
||||||
|
// consumer.playPause()
|
||||||
|
// }
|
||||||
|
|
||||||
// Tell template to update.
|
// Tell template to update.
|
||||||
MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in
|
// MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in
|
||||||
// TODO: move to protocol function instead
|
// TODO: move to protocol function instead
|
||||||
(self?.delegate?.moleculeDelegate as? ViewController)?.handleNewData()
|
// (self?.delegate?.moleculeDelegate as? ViewController)?.handleNewData()
|
||||||
})
|
// })
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -60,4 +81,112 @@ public class PagePlayAudioBehavior: PageCustomActionHandlerBehavior {
|
|||||||
public func onPageHidden(_ delegateObject: MVMCoreUIDelegateObject?) {
|
public func onPageHidden(_ delegateObject: MVMCoreUIDelegateObject?) {
|
||||||
// TODO: Stop player
|
// TODO: Stop player
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
// MARK: - Download Audio File
|
||||||
|
//--------------------------------------------------
|
||||||
|
/*
|
||||||
|
// https://oneconfluence.verizon.com/pages/viewpage.action?spaceKey=EIM&title=FDV+API
|
||||||
|
|
||||||
|
/// The directory to store all downloaded voicemails.
|
||||||
|
func voicemailDirectory() -> URL? {
|
||||||
|
|
||||||
|
guard let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return nil }
|
||||||
|
return documentsURL.appendingPathComponent("fios_vm")
|
||||||
|
}
|
||||||
|
|
||||||
|
func voicemailListQuery(accountId: String, sourceIP: String, mdn: String, mailBoxNo: String, timeZone: String) {
|
||||||
|
|
||||||
|
let url = URL(string: "")!
|
||||||
|
var request = URLRequest(url: url)
|
||||||
|
request.httpMethod = "POST"
|
||||||
|
|
||||||
|
let task = URLSession.shared.dataTask(with: request) { data, response, error in
|
||||||
|
// do something with the result
|
||||||
|
// print(data)
|
||||||
|
// if let data = data {
|
||||||
|
// TODO: Receive List of MDNs
|
||||||
|
// if let data = data, let dataString = String(data: data, encoding: .utf8) {
|
||||||
|
// print("Response data string:\n \(dataString)")
|
||||||
|
// }
|
||||||
|
// print(String(data: data, encoding: .utf8))
|
||||||
|
// } else {
|
||||||
|
// print("no data")
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
task.resume()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func fetchVoicemail(accountId: String, sourceIP: String, mdn: String, mailBoxNo: String) {
|
||||||
|
|
||||||
|
// guard let messageID = messageID else { return }
|
||||||
|
|
||||||
|
let url = URL(string: "")!
|
||||||
|
var request = URLRequest(url: url)
|
||||||
|
request.httpMethod = "POST"
|
||||||
|
|
||||||
|
let task = URLSession.shared.dataTask(with: request) { data, response, error in
|
||||||
|
// do something with the result
|
||||||
|
// print(data)
|
||||||
|
// if let data = data {
|
||||||
|
//body/VoiceMailMessages/Stream/TN/VMID/Audio/bin
|
||||||
|
// TODO: Receive List of MDNs
|
||||||
|
// if let data = data, let dataString = String(data: data, encoding: .utf8) {
|
||||||
|
// print("Response data string:\n \(dataString)")
|
||||||
|
// }
|
||||||
|
// print(String(data: data, encoding: .utf8))
|
||||||
|
// } else {
|
||||||
|
// print("no data")
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
task.resume()
|
||||||
|
|
||||||
|
// TODO: Fetch Audio file.
|
||||||
|
}
|
||||||
|
|
||||||
|
func downloadVoicemail(url: URL?) {
|
||||||
|
|
||||||
|
let downloadTask = URLSession.shared.downloadTask(with: url!) { [weak self] url, response, error in
|
||||||
|
guard error == nil,
|
||||||
|
let fileURL = url
|
||||||
|
else { return }
|
||||||
|
|
||||||
|
do {
|
||||||
|
// "data/user/0/com.verizon.myfios/files/VM_INBOX-8711.wav"
|
||||||
|
let documentsURL = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
|
||||||
|
let savedURL = documentsURL.appendingPathComponent(fileURL.lastPathComponent)
|
||||||
|
try FileManager.default.moveItem(at: fileURL, to: savedURL)
|
||||||
|
self?.audioFilePath = savedURL
|
||||||
|
} catch let error as NSError {
|
||||||
|
MVMCoreLoggingHandler.logDebugMessage(withDelegate: error.debugDescription)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
downloadTask.resume()
|
||||||
|
}
|
||||||
|
|
||||||
|
func fetchAudioFilePath() {
|
||||||
|
|
||||||
|
guard let messageID = messageID, // "INBOX-8711"
|
||||||
|
let cleanMDN = cleanMDN, // "4124712342"
|
||||||
|
let destinationURL = voicemailDirectory()
|
||||||
|
else { return }
|
||||||
|
|
||||||
|
let uri = "com.verizon.fios.voice2/downloadvm?VM_DOWNLOAD_URI_DATA_MESSAGE_ID=\(messageID)&VM_DOWNLOAD_URI_DATA_TN=\(cleanMDN)"
|
||||||
|
let url = URL(string: uri)
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: First check to see if the file is stored on disk, if not, then downloaded.
|
||||||
|
createDirectoryIfNeeded(url: destinationURL)
|
||||||
|
|
||||||
|
if FileManager.default.fileExists(atPath: destinationURL.path) {
|
||||||
|
audioFilePath = destinationURL
|
||||||
|
|
||||||
|
} else {
|
||||||
|
downloadVoicemail(url: url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user