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 }