备注:rootMap时间 之前时间不可查 以commit时间为准 但是可能与开发时间相差较大
version: v0.0.0 updateTime: 2023-05-01 (星期四) remark: 初始化项目 选中代码可以弹出弹出框
version: v0.0.1 updateTime: 2023-05-04 (星期二) remark: 记笔记时 向sqllite 数据库插入一条记录
version: v0.0.2 updateTime: 2023-05-07 (星期日) remark:
- 实现笔记面板列表
- 右侧增加笔记详情面板
- 点击面板中的 文件地址和行号 可以跳转到文件位置和指定行号
version: v0.0.3 updateTime: 2023-05-08 (星期一) remark: 重构代码 实现按钮的点击事件
version: v0.0.4 updateTime: 2023-05-09 (星期二) remark: 实现了在编辑器内渲染已经做过的笔记
- 当同一个多个笔记时 显示信息可能错乱
- 基于当前的监听器 可能出现打开文件时没有命中监听器 导致不渲染笔记内容
version: v0.0.4 updateTime: 2025-01-17 (星期五) remark: 增加兼容版本,提交本地草稿代码,增加about.html的功能
- 当同一个多个笔记时 显示信息可能错乱
- 基于当前的监听器 可能出现打开文件时没有命中监听器 导致不渲染笔记内容
参考 https://shields.io/badges/jet-brains-plugins https://simpleicons.org/?q=idea 更新reademe
将笔记UI从swing 更换为基于JCEF嵌入浏览器+H5实现的UI
参考
In cases when a plugin feature implements a web-based UI, the plugin may provide HTML, CSS, and JavaScript files in its distribution or build them on the fly depending on some configuration. The browser cannot easily access such resources. They can be made accessible by implementing proper request handlers, which make them available to the browser at predefined URLs.
This approach requires implementing CefRequestHandler, and CefResourceRequestHandler, which map resource paths to resource providers.
Serving such resources is implemented by the Image Viewer component responsible for displaying SVG files in IntelliJ Platform-based IDEs. See JCefImageViewer and related classes for the implementation details.
REF: https://github.com/copilot/c/8086f966-16ce-413b-87f9-4f3a62e5419e
ImagePreview CefLocalRequestHandler.kt
embedded-browser-jcef#Loading Resources From Plugin Distribution
2025年3月10日18:42:08
加载jsplumb.min.js遇到报错
Uncaught SyntaxError: Unexpected end of input
查看得加载的js只有部分内容,且文件为23.0KB,远小于文件真实大小210KB
主要问题在于 JBCefStreamResourceHandler 类中的 readResponse 方法实现有问题:
isFirstRequest 标志位的使用导致只读取了第一次的数据块,之后就不再读取了
没有正确实现分块传输的逻辑,大文件需要多次读取才能完整传输 @Override
public boolean readResponse(byte[] data_out, int bytes_to_read, IntRef bytes_read, CefCallback callback) {
if (isFirstRequest) {
try {
int read = myInputStream.read(data_out, 0, bytes_to_read);
if (read <= 0) {
bytes_read.set(0);
return false;
} else {
bytes_read.set(read);
isFirstRequest = false;
return true;
}
} catch (IOException e) {
e.printStackTrace();
bytes_read.set(0);
return false;
}
} else {
bytes_read.set(0);
return false;
}
}更改后
@Override
public boolean readResponse(byte[] data_out, int bytes_to_read, IntRef bytes_read, CefCallback callback) {
try {
int read = myInputStream.read(data_out, 0, bytes_to_read);
if (read <= 0) {
bytes_read.set(0);
try {
myInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return false;
} else {
bytes_read.set(read);
return true;
}
} catch (IOException e) {
e.printStackTrace();
bytes_read.set(0);
return false;
}
}主要修改说明:
移除了 isFirstRequest 标志位的判断,因为我们需要持续读取数据直到文件结束
每次调用都尝试读取请求的字节数(bytes_to_read)
当读取到数据时(read > 0),设置实际读取的字节数并返回 true,表示还有更多数据需要读取
当没有更多数据时(read <= 0),关闭输入流并返回 false,表示传输结束
添加了输入流的关闭操作,确保资源被正确释放
这样修改后,大文件应该可以完整传输了。修复后的处理流程是:
浏览器发起请求
readResponse 方法会被多次调用,每次读取一块数据
持续读取直到整个文件被完整传输
文件读取完成后自动关闭流
fix js调用java返回undefined
2025年3月10日19:25:05
不使用Promise时,可以打印出返回值结果,但是js获得的返回值为undefined
改用Promise后正常
window.searchNotes Success: [{"path":"D:/coderepo/com.demo/demo2023/redis-demo/src/main/java/com/darksheep/po/ProdTestPo.java","id":"14","title":"测试语法高亮"},{"path":"D:/coderepo/com.demo/demo2023/redis-demo/src/main/java/com/darksheep/RedisDemoApplication.java","id":"8","title":"测试"}]
