95 lines
3.8 KiB
Swift
95 lines
3.8 KiB
Swift
/*
|
|
* Copyright @ 2018-present 8x8, Inc.
|
|
* Copyright @ 2017-2018 Atlassian Pty Ltd
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import WatchKit
|
|
import WatchConnectivity
|
|
import Foundation
|
|
|
|
|
|
class InterfaceController: WKInterfaceController {
|
|
|
|
@IBOutlet var infoLabel: WKInterfaceLabel!
|
|
@IBOutlet var table: WKInterfaceTable!
|
|
|
|
override func didAppear(){
|
|
self.updateUI(ExtensionDelegate.currentJitsiMeetContext)
|
|
}
|
|
|
|
func updateUI(_ newContext:JitsiMeetContext) {
|
|
if (newContext.recentURLs == nil || newContext.recentURLs!.count == 0) {
|
|
infoLabel.setText("There are no recent meetings. Please use the app on the phone to start a new call.")
|
|
|
|
table.setHidden(true)
|
|
infoLabel.setHidden(false)
|
|
} else {
|
|
updateRecents(withRecents: newContext.recentURLs!, currentContext: newContext)
|
|
|
|
table.setHidden(false)
|
|
infoLabel.setHidden(true)
|
|
}
|
|
}
|
|
|
|
private func updateRecents(withRecents recents: NSArray, currentContext: JitsiMeetContext) {
|
|
// Updating the # of rows only if it actually changed prevents from blinking the UI
|
|
if (table.numberOfRows != recents.count) {
|
|
table.setNumberOfRows(recents.count, withRowType: "MeetingRowType")
|
|
}
|
|
|
|
for (index, entry) in recents.enumerated() {
|
|
let entryDict = entry as! NSDictionary
|
|
let roomURL = entryDict["conference"] as! NSString
|
|
let timestamp = entryDict["date"] as! NSNumber
|
|
|
|
// Prepare values
|
|
let room = roomURL.components(separatedBy: "/").last
|
|
let date = Date(timeIntervalSince1970: timestamp.doubleValue / 1000) // timestamp is taken with Date.now() in JS, which uses milliseconds
|
|
let dateFormatter = DateFormatter()
|
|
dateFormatter.timeZone = TimeZone.current
|
|
dateFormatter.locale = NSLocale.current
|
|
dateFormatter.dateFormat = "HH:mm yyyy-MM-dd"
|
|
let strDate = dateFormatter.string(from: date)
|
|
|
|
// Update row controller
|
|
let controller = table.rowController(at: index) as! MeetingRowController
|
|
controller.room = room
|
|
controller.roomUrl = roomURL as String
|
|
controller.roomLabel.setText(room)
|
|
controller.timeLabel.setText(strDate)
|
|
|
|
// Change the background for the active meeting
|
|
if (controller.roomUrl == currentContext.conferenceURL) {
|
|
controller.rowGroup.setBackgroundColor(UIColor(red: 0.125, green: 0.58, blue: 0.98, alpha: 1))
|
|
} else {
|
|
controller.rowGroup.setBackgroundColor(UIColor(red: 0.949, green: 0.956, blue: 1, alpha: 0.14))
|
|
}
|
|
}
|
|
}
|
|
|
|
override func contextForSegue(withIdentifier segueIdentifier: String, in table: WKInterfaceTable, rowIndex: Int) -> Any? {
|
|
let controller = table.rowController(at: rowIndex) as! MeetingRowController
|
|
let currentContext = ExtensionDelegate.currentJitsiMeetContext
|
|
|
|
// Copy the current context and add the joinConferenceURL to trigger the command when the in-call screen is displayed
|
|
let actionContext = JitsiMeetContext(jmContext: currentContext)
|
|
actionContext.joinConferenceURL = controller.roomUrl
|
|
|
|
print("WATCH contextForSegue: \(actionContext.description)");
|
|
|
|
return actionContext;
|
|
}
|
|
}
|