1/* Title: Tools/VSCode/src/preview_panel.scala 2 Author: Makarius 3 4HTML document preview. 5*/ 6 7package isabelle.vscode 8 9 10import isabelle._ 11 12import java.io.{File => JFile} 13 14 15class Preview_Panel(resources: VSCode_Resources) 16{ 17 private val pending = Synchronized(Map.empty[JFile, Int]) 18 19 def request(file: JFile, column: Int): Unit = 20 pending.change(map => map + (file -> column)) 21 22 def flush(channel: Channel): Boolean = 23 { 24 pending.change_result(map => 25 { 26 val map1 = 27 (map /: map.iterator)({ case (m, (file, column)) => 28 resources.get_model(file) match { 29 case Some(model) => 30 val snapshot = model.snapshot() 31 if (snapshot.is_outdated) m 32 else { 33 val preview = Present.preview(snapshot) 34 channel.write( 35 Protocol.Preview_Response(file, column, preview.title, preview.content)) 36 m - file 37 } 38 case None => m - file 39 } 40 }) 41 (map1.nonEmpty, map1) 42 }) 43 } 44} 45