wxr
2021-11-19 0edfc730dafa1407efdeb8a6eed4c88c21aa1963
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
See LICENSE folder for this sample’s licensing information.
 
Abstract:
A data manager that surfaces INVoiceShortcuts managed by INVoiceShortcutCenter.
*/
 
using System;
using Intents;
using System.Linq;
using HDLSceneSiri;
 
namespace Other.Siri
{
    public class VoiceShortcutDataManager 
    {
        INVoiceShortcut[] VoiceShortcuts;
 
        public VoiceShortcutDataManager()
        {
            UpdateVoiceShortcuts(null);
        }
 
        public VoiceShortcutDataManager(Action action)
        {
            UpdateVoiceShortcuts(action);
        }
 
        public INVoiceShortcut VoiceShortcutForOrder(SiriScene ss)
        {
            var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) =>
            {
                var intent = shortcut.Shortcut.Intent as HDLRunSceneIntent;
                if (intent is null) { return false; }
                var orderFromIntent = SiriScene.FromOrderSoupIntent(intent);
                if (orderFromIntent is null) { return false; }
                return ss.IsEqual(orderFromIntent);
            });
            return voiceShortcut;
        }
 
 
        public INVoiceShortcut VoiceShortcutForOrder2(SiriScene ss)
        {
            var voiceShortcut = VoiceShortcuts.FirstOrDefault((shortcut) =>
            {
                var intent = shortcut.Shortcut.Intent as HDLRunSceneIntent;
                if (intent is null) { return false; }
                var orderFromIntent = SiriScene.FromOrderSoupIntent(intent);
                if (orderFromIntent is null) { return false; }
                return ss.IsEqual(orderFromIntent);
            });
            return voiceShortcut;
        }
 
        public INVoiceShortcut FirstTemp ()
        {
            try
            {
                if(VoiceShortcuts == null)
                {
                    UpdateVoiceShortcuts(null);
                }
                return VoiceShortcuts[0];
            }
            catch
            {
                return null;
            }
        }
 
        public void UpdateVoiceShortcuts(Action completion)
        {
            INVoiceShortcutCenter.SharedCenter.GetAllVoiceShortcuts((voiceShortcutsFromCenter, error) =>
            {
                if (voiceShortcutsFromCenter is null)
                {
                    if (!(error is null))
                    {
                        Console.WriteLine($"Failed to fetch voice shortcuts with error {error}");
                    }
                    return;
                }
                VoiceShortcuts = voiceShortcutsFromCenter;
                if (!(completion is null))
                {
                    completion();
                }
            }); 
        }
 
    }
}