-
Notifications
You must be signed in to change notification settings - Fork 277
/
RenderTemplate.swift
56 lines (48 loc) · 2.06 KB
/
RenderTemplate.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//
// RenderTemplate.swift
// SiriIntents
//
// Created by Robert Trencheny on 2/19/19.
// Copyright © 2019 Robbie Trencheny. All rights reserved.
//
import Foundation
import UIKit
import Shared
import Intents
class RenderTemplateIntentHandler: NSObject, RenderTemplateIntentHandling {
func resolveTemplate(for intent: RenderTemplateIntent,
with completion: @escaping (INStringResolutionResult) -> Void) {
if let templateStr = intent.template, templateStr.isEmpty == false {
Current.Log.info("using provided '\(templateStr)'")
completion(.success(with: templateStr))
} else {
Current.Log.info("requesting a value")
completion(.needsValue())
}
}
func handle(intent: RenderTemplateIntent, completion: @escaping (RenderTemplateIntentResponse) -> Void) {
guard let api = HomeAssistantAPI.authenticatedAPI() else {
completion(RenderTemplateIntentResponse(code: .failureConnectivity, userActivity: nil))
return
}
guard let templateStr = intent.template else {
Current.Log.error("Unable to unwrap intent.template")
let resp = RenderTemplateIntentResponse(code: .failure, userActivity: nil)
resp.error = "Unable to unwrap intent.template"
completion(resp)
return
}
Current.Log.verbose("Rendering template \(templateStr)")
api.RenderTemplate(templateStr: templateStr).done { rendered in
Current.Log.verbose("Successfully renderedTemplate")
let resp = RenderTemplateIntentResponse(code: .success, userActivity: nil)
resp.renderedTemplate = String(describing: rendered)
completion(resp)
}.catch { error in
Current.Log.error("Error when rendering template in shortcut \(error)")
let resp = RenderTemplateIntentResponse(code: .failure, userActivity: nil)
resp.error = "Error during api.RenderTemplate: \(error.localizedDescription)"
completion(resp)
}
}
}