package org.intellij.plugins.markdown.ui.preview.javafx;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.StringBuilderSpinAllocator;
import org.jetbrains.annotations.NotNull;
class ImageRefreshFix {
private ImageRefreshFix() {
}
@NotNull
static String setStamps(@NotNull String html) {
final VirtualFileManager virtualFileManager = VirtualFileManager.getInstance();
final String pattern = "<img src=\"file:";
StringBuilder sb = StringBuilderSpinAllocator.alloc();
try {
int processedOffset = 0;
while (true) {
final int nextI = html.indexOf(pattern, processedOffset);
if (nextI == -1) {
break;
}
final int nextJ = html.indexOf('"', nextI + pattern.length());
if (nextJ == -1) {
return html;
}
sb.append(html, processedOffset, nextI + pattern.length());
final String url = html.substring(nextI + pattern.length(), nextJ);
sb.append(processUrl(virtualFileManager, url));
sb.append('"');
processedOffset = nextJ + 1;
}
if (processedOffset < html.length()) {
sb.append(html, processedOffset, html.length());
}
return sb.toString();
}
finally {
StringBuilderSpinAllocator.dispose(sb);
}
}
@NotNull
private static String processUrl(@NotNull VirtualFileManager virtualFileManager, @NotNull String url) {
final VirtualFile virtualFile = virtualFileManager.findFileByUrl("file://" + url);
if (virtualFile == null) {
return url;
}
return url + "?stamp=" + virtualFile.getModificationStamp();
}
}