1 module dls.protocol.messages.window;
2 
3 import dls.protocol.interfaces;
4 
5 void showMessageRequest(string id, MessageActionItem item)
6 {
7     import logger = std.experimental.logger;
8     import dls.tools.tools : Tools;
9     import dls.util.uri : Uri;
10     import std.concurrency : locate, receiveOnly, send;
11     import std.path : dirName;
12 
13     while (!(id in Util.messageRequestTypes))
14     {
15         auto data = receiveOnly!(Util.ThreadMessageData)();
16         Util.addMessageRequestType(data[0], data[1], data[2]);
17     }
18 
19     final switch (Util.messageRequestTypes[id][0])
20     {
21     case Util.ShowMessageRequestType.upgradeSelections:
22         if (item.title == "Yes")
23         {
24             auto uri = new Uri(Util.messageRequestTypes[id][1]);
25             Tools.codeCompleter.upgradeSelections(uri);
26         }
27 
28         break;
29 
30     case Util.ShowMessageRequestType.upgradeDls:
31         send(locate(Util.messageRequestTypes[id][1]), item.title.length > 0);
32         break;
33     }
34 
35     Util.messageRequestTypes.remove(id);
36 }
37 
38 abstract class Util
39 {
40     import std.json : JSONValue;
41     import std.typecons : Tuple, tuple;
42 
43     enum ShowMessageRequestType
44     {
45         upgradeSelections,
46         upgradeDls
47     }
48 
49     shared alias ThreadMessageData = Tuple!(string, ShowMessageRequestType, string);
50 
51     private static Tuple!(ShowMessageRequestType, string)[string] messageRequestTypes;
52 
53     static void addMessageRequestType(string id, ShowMessageRequestType type, string data = null)
54     {
55         messageRequestTypes[id] = tuple(type, data);
56     }
57 }