-
-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
v7.4.0-Beta1 (合入主线) #932
v7.4.0-Beta1 (合入主线) #932
Conversation
# Conflicts: # PACKAGING.md
Caution Review failedThe pull request is closed. 概述工作流程概述此次拉取请求(PR)主要包含多个方面的更改,涉及 GitHub Actions 工作流程、项目依赖、本地化、GUI 界面、主题、WebUI 和实用工具等多个领域。主要变更包括:
变更
序列图sequenceDiagram
participant User
participant MainWindow
participant WebUITab
participant JCEFAppFactory
participant TaskbarControl
User->>MainWindow: 启动应用
MainWindow->>WebUITab: 初始化 WebUI
WebUITab->>JCEFAppFactory: 创建 CEF 应用构建器
JCEFAppFactory-->>WebUITab: 返回配置的构建器
MainWindow->>TaskbarControl: 更新任务栏进度
TaskbarControl-->>MainWindow: 进度更新完成
可能相关的 PR
建议的审阅者
详细解析主要变更点
技术亮点
潜在影响
建议
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (6)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 14
🧹 Nitpick comments (47)
src/main/java/com/ghostchu/peerbanhelper/module/impl/rule/PTRBlacklist.java (1)
107-107
: DNS 查询添加超时机制,提高系统稳定性将原来的阻塞式
join()
调用改为带超时的get()
,可以避免 DNS 查询无响应时造成的系统挂起。建议考虑以下几点:
- 超时时间是否需要配置化,而不是硬编码为 3 秒
- 超时异常的处理机制是否需要更详细的日志记录
- 建议添加监控指标,追踪 DNS 查询的性能和超时情况
建议将超时时间改为可配置项:
- ptr = dnsLookup.ptr(reverseDnsLookupString).get(3, TimeUnit.SECONDS); + long timeout = getConfig().getLong("ptr-lookup-timeout", 3); + ptr = dnsLookup.ptr(reverseDnsLookupString).get(timeout, TimeUnit.SECONDS);src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/PBHFlatLafTheme.java (1)
3-7
: 建议为接口添加文档注释建议为接口和方法添加 JavaDoc 文档注释,以便更好地说明:
- 接口的用途和职责
- 每个方法的具体功能
- 实现类需要注意的事项
示例改进:
+/** + * 定义主题切换的核心功能接口 + * 实现类负责在深色和浅色主题之间进行切换 + */ public interface PBHFlatLafTheme { + /** + * 应用深色主题 + */ void applyDark(); + /** + * 应用浅色主题 + */ void applyLight(); }src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/StandardLafTheme.java (1)
7-17
: 建议添加错误处理和日志记录当前实现中直接调用
setup()
方法,建议:
- 添加异常处理
- 添加日志记录以便追踪主题切换
建议改进如下:
+import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class StandardLafTheme implements PBHFlatLafTheme { + private static final Logger logger = LoggerFactory.getLogger(StandardLafTheme.class); + @Override public void applyDark() { + try { FlatDarculaLaf.setup(); + logger.info("已应用深色主题:FlatDarculaLaf"); + } catch (Exception e) { + logger.error("应用深色主题失败", e); + } } @Override public void applyLight() { + try { FlatIntelliJLaf.setup(); + logger.info("已应用浅色主题:FlatIntelliJLaf"); + } catch (Exception e) { + logger.error("应用浅色主题失败", e); + } } }src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/PBHPlusTheme.java (1)
7-7
: 建议添加类文档注释为了提高代码可维护性,建议添加类级别的文档注释,说明此主题的用途和特点。
+/** + * PBH Plus 主题实现类 + * 使用 FlatLaf Arc Orange 主题,提供亮色和暗色两种模式 + */ public class PBHPlusTheme implements PBHFlatLafTheme {src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingGuiImpl.java (3)
Line range hint
75-92
: updateGuiStuff方法此方法更新窗口标题并根据是否暂停来变化任务栏状态。逻辑合理。但请确认在循环执行时是否会产生性能问题,或是否需要增加状态判断减少重复调用。
121-122
: onPBHFullyStarted中的计划任务通过scheduleWithFixedDelay每秒调用updateGuiStuff,可能造成频繁更新。若考虑性能或GUI刷新频率,可以适度调大间隔。
130-181
: updateTheme方法在此方法中,根据开关和系统信息来选择不同主题,并在最后使用FlatAnimatedLafChange进行平滑动画。这段逻辑涵盖多种主题场景,同时处理了外部自定义与Mac、Snapshot等风格。建议进一步拆分逻辑,以便维护和测试。
src/main/java/com/ghostchu/peerbanhelper/gui/ProgressDialog.java (1)
10-22
: 建议添加参数的空值注解接口设计清晰,但建议在以下方法的参数上添加
@Nullable
或@NotNull
注解以增强类型安全性:
setTitle(String title)
setDescription(String description)
setButtonText(String buttonText)
setButtonEvent(Runnable buttonEvent)
setComment(String comment)
这样可以:
- 提供更好的 IDE 支持
- 在编译时捕获潜在的空值问题
- 使接口契约更加明确
install4j/lang/zh-CN.utf8 (1)
11-11
: 建议优化 JCEF 描述文本的长度当前描述文本较长,建议拆分为多个独立的配置项以提升可读性:
-components.jcef.description=可选的 JCEF (Java 嵌入式 Chromium 框架),用以支持 PeerBanHelper GUI 模式下的 WebUI 控制台标签页功能,禁用后将隐藏 WebUI 控制台标签页,用户将需要通过系统浏览器访问 WebUI。(勾选后将在 PeerBanHelper 启动时下载) +components.jcef.description=可选的 JCEF (Java 嵌入式 Chromium 框架) +components.jcef.feature=支持 PeerBanHelper GUI 模式下的 WebUI 控制台标签页功能 +components.jcef.disable_note=禁用后将隐藏 WebUI 控制台标签页,用户需要通过系统浏览器访问 WebUI +components.jcef.download_note=勾选后将在 PeerBanHelper 启动时下载src/main/java/com/ghostchu/peerbanhelper/gui/impl/GuiImpl.java (1)
24-27
: 新增的界面方法增强了用户体验这两个新方法很好地扩展了GUI功能:
createProgressDialog
提供了进度对话框支持,可用于显示长时间运行任务的进度taskbarControl
提供了任务栏集成功能建议:
- 考虑为这些方法添加 JavaDoc 文档,说明参数的用途和返回值的含义
- 建议在接口中添加一些常量来定义常用的按钮文本和标题
install4j/lang/custom.utf8 (1)
11-13
: 本地化文本清晰完整新增的JCEF组件描述:
- 清楚说明了组件的可选性质
- 详细解释了功能影响和下载时机
- 描述语言通俗易懂
建议:
- 考虑添加一个简短的性能影响说明
- 可以补充一下系统要求信息
src/main/java/com/ghostchu/peerbanhelper/exchange/ExchangeMap.java (1)
13-14
: 新增状态标志位设计合理关于新增的两个volatile布尔标志:
PBH_PLUS_ACTIVATED
用于追踪Plus功能的激活状态UNSUPPORTED_PLATFORM
用于标记不支持的平台建议:
- 考虑添加 JavaDoc 说明这些标志的具体用途
- 建议将这些标志封装在getter/setter方法中,以便于后续添加额外的状态检查逻辑
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/JCEFSwingDevTools.java (2)
10-12
: 补充类级别的文档注释当前的文档注释过于简单。建议添加更详细的说明,包括类的用途、使用场景以及重要的注意事项。
/** - * 开发者工具弹窗类 + * 开发者工具弹窗类,用于展示 JCEF 浏览器的开发者工具。 + * + * 此类提供了一个模态对话框,用于显示特定 CefBrowser 实例的开发者工具。 + * 当对话框关闭时,会自动释放相关资源。 + * + * @see CefBrowser#getDevTools(Point) */
20-34
: 代码实现清晰,建议小幅优化构造函数的实现逻辑清晰。建议考虑以下优化:
- 添加窗口大小的默认设置
- 添加窗口位置的默认设置
public JCEFSwingDevTools(JFrame owner, String title, CefBrowser browser, Point inspectAt) { super(owner, title, false); + // 设置默认窗口大小 + setSize(800, 600); + // 相对于父窗口居中 + setLocationRelativeTo(owner); setLayout(new BorderLayout());webui/src/views/oobe/locale/zh-CN.ts (1)
15-17
: 文案表述建议优化当前的警告文案略显强硬,建议调整措辞以保持专业性同时不失警示作用。
'page.oobe.steps.welcome.docTips': - '请在开始前阅读{privacy}并打开{doc}放在旁边以作备用,99% 的用户因为不阅读它们导致遇到了问题无法解决。', + '请在开始前仔细阅读{privacy}并将{doc}作为参考。根据用户反馈,大多数使用问题都可以通过查阅文档得到解决。',src/main/java/com/ghostchu/peerbanhelper/gui/impl/console/ConsoleProgressDialog.java (2)
21-23
: 简化空值检查逻辑当前的空值检查可以使用更简洁的方式。
建议修改为:
- if (comment != null && !comment.isBlank()) { + if (comment != null && !comment.isEmpty()) { log.info("({})", comment); }
28-36
: 建议添加空方法实现的说明文档这些空方法实现需要添加注释说明为什么是空实现,以便其他开发者理解设计意图。
建议在每个空方法上添加类似以下的文档:
/** * 控制台模式下此方法无需实现 * 因为进度更新通过日志输出方式展示 */ @Override public void show() { }Also applies to: 48-66
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingTaskbarControl.java (1)
8-14
: 建议添加类级别的文档注释这个类的功能很重要,建议添加详细的类文档。
建议添加如下文档:
/** * Swing任务栏控制实现类 * 用于管理Windows任务栏的进度显示和用户注意力请求 * 支持全局和窗口级别的任务栏操作 */ public class SwingTaskbarControl implements TaskbarControl {webui/src/views/oobe/locale/en-US.ts (1)
15-17
: 建议改进文档提示的语气当前的文档提示语气过于强硬("99% of users encounter problems..."),可能会给用户带来负面体验。建议采用更专业和积极的表述方式。
建议修改为:
- 'Please read our {privacy} and open {doc} put it aside for backup, 99% of users encounter problems that cannot be solved because they do not read them.', + 'We strongly recommend reviewing our {privacy} and keeping the {doc} handy for reference. The documentation contains essential information to help you get the most out of PeerBanHelper and troubleshoot common issues.',src/main/java/com/ghostchu/peerbanhelper/util/MIDIPlayer.java (1)
13-15
: 建议添加线程安全保护currentIndex 变量在多线程环境下可能存在竞争条件,建议添加适当的同步机制。
建议添加 volatile 关键字或使用 AtomicInteger:
- private int currentIndex = -1; + private final AtomicInteger currentIndex = new AtomicInteger(-1);相应地修改 nextSequence() 方法中的使用:
- currentIndex++; - if (currentIndex < sequence.length) { + int index = currentIndex.incrementAndGet(); + if (index < sequence.length) {src/main/java/com/ghostchu/peerbanhelper/util/jcef/JCEFAppFactory.java (2)
14-19
: 建议优化目录创建逻辑建议将目录创建逻辑封装成一个独立的辅助方法,并添加适当的错误处理。
+ private static void createDirectoryIfNotExists(File dir) throws IOException { + if (!dir.exists() && !dir.mkdirs()) { + throw new IOException("无法创建目录: " + dir.getAbsolutePath()); + } + }
46-50
: 建议增加镜像可用性检查机制当前的镜像配置是静态的,建议:
- 添加镜像可用性检测
- 实现镜像自动切换机制
- 考虑添加更多的国际镜像
webui/src/views/settings/components/info/locale/zh-CN.ts (1)
51-51
: 文案表述建议优化当前文案可以更清晰地指导用户。建议修改为:
- 'page.settings.tab.info.btn.status.fail.tips': '获取配置失败,这可能是配置存在问题,点击查看文档', + 'page.settings.tab.info.btn.status.fail.tips': '获取配置失败。可能原因:配置文件格式错误或权限不足。点击此处查看故障排除文档',webui/src/views/settings/components/info/locale/en-US.ts (1)
51-52
: 建议保持中英文提示一致性为保持与中文版本的一致性,建议同步更新英文提示:
- 'Failed to obtain configuration, this may be a configuration problem, click to view the document', + 'Failed to obtain configuration. Possible causes: invalid configuration format or insufficient permissions. Click here to view troubleshooting documentation',src/main/java/com/ghostchu/peerbanhelper/util/MiscUtil.java (1)
122-137
: 建议优化64位JVM检测逻辑当前实现有以下几点可以改进:
- 建议添加日志记录检测过程
- 考虑缓存检测结果
- 添加单元测试覆盖不同场景
+ private static Boolean is64BitCache = null; public static boolean is64BitJVM() { + if (is64BitCache != null) { + return is64BitCache; + } // 优先检查 sun.arch.data.model(直接指明位数) String dataModel = System.getProperty("sun.arch.data.model"); if (dataModel != null) { - return "64".equals(dataModel); + is64BitCache = "64".equals(dataModel); + return is64BitCache; } // 检查已知的 64 位架构名称 String arch = System.getProperty("os.arch"); List<String> arch64 = Arrays.asList("x86_64", "amd64", "aarch64", "ppc64", "ppc64le", "s390x", "sparcv9", "ia64"); if (arch64.contains(arch)) { - return true; + is64BitCache = true; + return is64BitCache; } // 后备检查:虚拟机名称是否包含 "64" String vmName = System.getProperty("java.vm.name", "").toLowerCase(); - return vmName.contains("64"); + is64BitCache = vmName.contains("64"); + return is64BitCache; }src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingProgressDialog.java (2)
22-22
: 建议:使用动态窗口尺寸固定的窗口尺寸(400x200)可能在不同DPI设置下显示不正确,建议使用相对尺寸或根据内容自动调整。
- frame.setSize(400, 200); + frame.setPreferredSize(new Dimension( + (int) (400 * frame.getGraphicsConfiguration().getDefaultTransform().getScaleX()), + (int) (200 * frame.getGraphicsConfiguration().getDefaultTransform().getScaleY()) + ));
19-19
: 建议:将中文注释改为英文为了保持代码的国际化,建议将中文注释 "创建主窗口" 改为英文。
- // 创建主窗口 + // Create main windowsrc/main/java/com/ghostchu/peerbanhelper/module/impl/webapi/PBHPeerController.java (1)
145-145
: 建议:优化PTR查询超时处理PTR查询的超时时间(3秒)应该配置化,并且建议使用自定义线程池来避免可能的线程池耗尽问题。
+ private static final int PTR_LOOKUP_TIMEOUT_SECONDS = 3; + private final ExecutorService ptrLookupExecutor = Executors.newFixedThreadPool(10); + // In the code: - ptrLookup = CompletableFuture.supplyAsync(() -> ipAddress.toInetAddress().getCanonicalHostName()).get(3, TimeUnit.SECONDS); + ptrLookup = CompletableFuture.supplyAsync( + () -> ipAddress.toInetAddress().getCanonicalHostName(), + ptrLookupExecutor + ).get(PTR_LOOKUP_TIMEOUT_SECONDS, TimeUnit.SECONDS);src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/AboutWindow.java (6)
42-44
: 建议使用 try-with-resources 管理 MIDI 资源MIDI 播放器的资源管理可以更加严格。建议使用 try-with-resources 语句来确保资源的正确释放。
- private MIDIPlayer midiPlayer = new MIDIPlayer( - Main.class.getResourceAsStream("/assets/midi/ABOUT-MiSide-MusicMenu.mid"), - Main.class.getResourceAsStream("/assets/midi/ABOUT-MiSide-MusicMenu-Update.mid")); + private MIDIPlayer initMidiPlayer() { + try (InputStream menuStream = Main.class.getResourceAsStream("/assets/midi/ABOUT-MiSide-MusicMenu.mid"); + InputStream updateStream = Main.class.getResourceAsStream("/assets/midi/ABOUT-MiSide-MusicMenu-Update.mid")) { + return new MIDIPlayer(menuStream, updateStream); + } catch (IOException e) { + log.error("Failed to initialize MIDI player", e); + return null; + } + }
62-64
: 改进异常处理逻辑当前的异常处理仅打印堆栈跟踪,建议添加更多的错误信息以便调试。
- } catch (Exception ignored) { - ignored.printStackTrace(); + } catch (Exception e) { + log.error("Failed to play MIDI: {}", e.getMessage(), e);
120-122
: 完善异常处理异常处理应该使用日志系统而不是直接打印到标准错误流。
- } catch (Exception e) { - e.printStackTrace(); + } catch (Exception e) { + log.error("Failed to load content: {}", e.getMessage(), e);
159-161
: 改进异常处理和日志记录使用日志系统替代直接的异常打印。
- } catch (BadLocationException ex) { - ex.printStackTrace(); + } catch (BadLocationException ex) { + log.error("Error updating cursor: {}", ex.getMessage(), ex);
219-221
: 统一异常处理方式保持异常处理的一致性,使用日志系统记录错误。
- } catch (BadLocationException ex) { - ex.printStackTrace(); + } catch (BadLocationException ex) { + log.error("Error processing string: {}", ex.getMessage(), ex);
243-245
: 改进命令处理中的异常处理命令处理中的异常处理需要更详细的错误信息。
- } catch (Exception ex) { - ex.printStackTrace(); + } catch (Exception ex) { + log.error("Error processing command {}: {}", item.getClass().getSimpleName(), ex.getMessage(), ex);src/main/java/com/ghostchu/peerbanhelper/text/TextManager.java (2)
67-67
: 建议增加区域设置的验证直接使用 toLowerCase 可能不足以处理所有的区域设置情况。建议添加更严格的验证。
- locale = locale.toLowerCase(Locale.ROOT); + if (locale == null || locale.isEmpty()) { + log.warn("Empty locale provided, falling back to default locale"); + locale = DEF_LOCALE; + } + locale = locale.toLowerCase(Locale.ROOT); + if (!isValidLocale(locale)) { + log.warn("Invalid locale format: {}, falling back to default locale", locale); + locale = DEF_LOCALE; + } + private boolean isValidLocale(String locale) { + return locale.matches("^[a-z]{2}(_[a-z]{2})?$"); + }
235-235
: 建议优化区域设置的存储建议使用规范化的格式存储区域设置,并添加验证。
- availableLang.put(langName.toLowerCase(Locale.ROOT), configuration); + String normalizedLangName = normalizeLangName(langName); + if (normalizedLangName != null) { + availableLang.put(normalizedLangName, configuration); + } else { + log.warn("Skipping invalid language name: {}", langName); + } + private String normalizeLangName(String langName) { + if (langName == null || langName.isEmpty()) { + return null; + } + String normalized = langName.toLowerCase(Locale.ROOT); + return isValidLocale(normalized) ? normalized : null; + }src/main/java/com/ghostchu/peerbanhelper/text/Lang.java (1)
507-509
: 建议改进枚举常量的组织方式当前的枚举常量组织方式不够清晰,建议按功能模块分组并添加注释。
+ // WebUI 相关 GUI_TABBED_WEBUI, + + // JCEF 浏览器相关 JCEF_BROWSER_UNSUPPORTED_PLATFORM, JCEF_BROWSER_UNSUPPORTED_EXCEPTION, + JCEF_DOWNLOAD_TITLE, + JCEF_DOWNLOAD_DESCRIPTION, + JCEF_DOWNLOAD_UNZIP_DESCRIPTION, + + // 通用 GUI 元素 + GUI_COMMON_CANCEL, + + // IPDB 相关 + IPDB_DOWNLOAD_TITLE, + IPDB_DOWNLOAD_DESCRIPTION,src/main/java/com/ghostchu/peerbanhelper/ipdb/IPDB.java (1)
324-341
: 下载进度跟踪实现良好!进度跟踪的实现非常完整,包括了:
- 合理的更新阈值配置
- 确定和不确定状态的处理
- 用户界面反馈
建议考虑添加下载速度显示,以提供更好的用户体验。
var bodyHandler = tracker.tracking(HttpResponse.BodyHandlers.ofFile(path), item -> { if (!(progressDialog instanceof ConsoleProgressDialog)) { HTTPUtil.onProgress(item); } progressDialog.setProgressDisplayIndeterminate(!item.determinate()); if (item.determinate()) { progressDialog.updateProgress((float) item.totalBytesTransferred() / item.contentLength()); + // 添加下载速度显示 + double speed = item.transferRateInBytes(); + progressDialog.setComment(String.format("%s - %.2f MB/s", mirror.getIPDBUrl(), speed / (1024 * 1024))); } else { progressDialog.updateProgress(0); } });webui/src/views/settings/components/info/index.vue (1)
416-442
: 按钮状态显示优化得当!状态显示的改进很好:
- 使用 a-space 组件优化了布局
- 配置失败时提供帮助链接
- 清晰的视觉反馈
建议考虑添加错误代码显示,以便更容易进行故障排除。
<a-typography-text :type="btnStatus?.data.configSuccess ? 'success' : 'warning'"> {{ btnStatus?.data.configSuccess ? t('page.settings.tab.info.btn.status.success') - : t('page.settings.tab.info.btn.status.fail') + : t('page.settings.tab.info.btn.status.fail') + + (btnStatus?.data.errorCode ? ` (${btnStatus.data.errorCode})` : '') }} </a-typography-text>src/main/java/com/ghostchu/peerbanhelper/PeerBanHelperServer.java (2)
204-213
: 系统兼容性检查实现完善!位数检查的实现很好:
- 正确检测 32 位 JVM
- 适当的警告消息
- 支持强制检查失败的测试选项
建议添加系统要求到日志输出。
private void postCompatibilityCheck() { if (!Util.is64BitJVM() || ExternalSwitch.parseBoolean("pbh.forceBitnessCheckFail")) { + log.info("系统要求:64位 JVM"); + log.info("当前系统:{}位 JVM", Util.is64BitJVM() ? "64" : "32"); ExchangeMap.UNSUPPORTED_PLATFORM = true; ExchangeMap.GUI_DISPLAY_FLAGS.add(new ExchangeMap.DisplayFlag("unsupported-platform", 10, tlUI(Lang.TITLE_INCOMPATIBLE_PLATFORM))); log.warn(tlUI(Lang.INCOMPATIBLE_BITNESS_LOG));
847-862
: NAT 配置检查逻辑完善!对 peer flags 的检查实现很好:
- 全面的条件检查
- 清晰的错误提示
- 避免重复警告
建议添加更详细的调试日志。
if (peer.getFlags() == null || peer.getFlags().isFromIncoming() || !peer.getFlags().isOutgoingConnection() || peer.getFlags().isFromTracker() || peer.getFlags().isFromDHT() || peer.getFlags().isFromPEX()) { + log.debug("检测到可能的 NAT 配置问题:peer={}, flags={}", + peer.getPeerAddress(), + peer.getFlags() != null ? peer.getFlags().toString() : "null"); if (!alertManager.identifierAlertExistsIncludeRead("downloader-nat-setup-error@" + downloader.getName())) {PACKAGING.md (2)
7-9
: 建议:明确说明 Java 版本兼容性问题关于 Java 运行环境的说明可以更加具体:
- 建议添加具体的 Java 21 问题编号或链接
- 明确说明 Java 23 存在的具体问题
- 提供临时解决方案
153-155
: 建议:简化过长的配置项名称
pbh.please-disable-safe-network-environment-check-i-know-this-is-very-dangerous...
这个配置项名称过长:
- 可能导致命令行使用困难
- 不便于配置文件维护
建议:
- 使用更简短的配置项名称
- 通过警告消息或文档说明安全风险
src/main/resources/assets/credit.txt (3)
4-4
: 使用标准的回环地址
127.127.127.127
不是标准的回环地址。建议使用127.0.0.1
作为回环地址。-Host 'peerbanhelper.about.console' resolved to 127.127.127.127. +Host 'peerbanhelper.about.console' resolved to 127.0.0.1.
337-337
: 修正 ChatGPT 版本号"ChatGPT 4o" 中的 "o" 应该是 "0"。
- OpenAI ChatGPT 4o - 帮助编写了大量代码 + OpenAI ChatGPT 40 - 帮助编写了大量代码🧰 Tools
🪛 LanguageTool
[formatting] ~337-~337: It looks like you are using the letter ‘O’ instead of the number ‘0’. Did you mean “40”?
Context: ...tant: (以下排名不分先后) OpenAI ChatGPT 4o - 帮助编写了大量代码 Github Copilot - 帮助编写了大...(ZERO_O)
387-389
: 优化段落格式建议在这段重要的致谢文字前后添加分隔符,以提高可读性。
+-------------------------------------------- 感谢在爱发电上捐赠支持我们的朋友们 以及在世界各个角落用实际行动传承互联网精神的 BTer +--------------------------------------------src/main/resources/lang/en-us/messages.yml (1)
588-593
: Docker网络模式错误描述详尽,建议优化格式错误描述非常完整:
- 清楚解释了问题和影响
- 指出了原因(Docker bridge网络模式)
- 提供了解决方案(切换到host网络模式)
- 包含了重要警告和社区支持信息
建议在描述中添加分段标题,使内容更有层次:
Critical error detected: The Peer inbound connection IP address configuration of the downloader {} is incorrect ({}). PeerBanHelper requires the real IP address of the Peer to function correctly, otherwise, it will incorrectly ban all inbound connections. Therefore, PeerBanHelper is ignoring these abnormal addresses. Bans will not take effect. -This is usually caused by the downloader running in a Docker environment and using the `bridge` network mode. You must switch to the `host` network mode to avoid user-space forwarding rewriting the IP address information. +原因: +This is usually caused by the downloader running in a Docker environment and using the `bridge` network mode. + +解决方案: +You must switch to the `host` network mode to avoid user-space forwarding rewriting the IP address information. +重要提示: Note: You should correctly fix the IP issue. Simply removing internal network IP addresses from the ignore list will cause PeerBanHelper to incorrectly ban all inbound connections. For assistance, please join the PeerBanHelper community. **This prompt will only appear once per downloader.**
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
src/main/resources/assets/icon/common/uac_shield.svg
is excluded by!**/*.svg
webui/pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (59)
.github/workflows/build_fe.yml
(1 hunks).github/workflows/webui.yml
(2 hunks)PACKAGING.md
(1 hunks)install4j/enable-jcef.txt
(1 hunks)install4j/lang/custom.utf8
(1 hunks)install4j/lang/en-US.utf8
(1 hunks)install4j/lang/zh-CN.utf8
(1 hunks)install4j/project.install4j
(5 hunks)pom.xml
(4 hunks)src/main/java/com/ghostchu/peerbanhelper/BuildMeta.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/Main.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/PeerBanHelperServer.java
(6 hunks)src/main/java/com/ghostchu/peerbanhelper/event/PBHLookAndFeelNeedReloadEvent.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/exchange/ExchangeMap.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/GuiManager.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/PBHGuiManager.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/ProgressDialog.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/TaskbarControl.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/GuiImpl.java
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/console/ConsoleGuiImpl.java
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/console/ConsoleProgressDialog.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/AboutWindow.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/JCEFSwingDevTools.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/MainWindow.form
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/MainWindow.java
(6 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingGuiImpl.java
(6 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingProgressDialog.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingTaskbarControl.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/PBHFlatLafTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/MacOSLafTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/PBHPlusTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/SnapshotTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/StandardLafTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/UnsupportedPlatformTheme.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/ipdb/IPDB.java
(3 hunks)src/main/java/com/ghostchu/peerbanhelper/lab/Experiments.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/module/impl/rule/PTRBlacklist.java
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/module/impl/webapi/PBHPeerController.java
(4 hunks)src/main/java/com/ghostchu/peerbanhelper/pbhplus/ActivationManager.java
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/text/Lang.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/text/TextManager.java
(3 hunks)src/main/java/com/ghostchu/peerbanhelper/util/MIDIPlayer.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/util/MiscUtil.java
(2 hunks)src/main/java/com/ghostchu/peerbanhelper/util/jcef/JCEFAppFactory.java
(1 hunks)src/main/java/com/ghostchu/peerbanhelper/web/JavalinWebContainer.java
(1 hunks)src/main/resources/assets/credit.txt
(1 hunks)src/main/resources/lang/en-us/messages.yml
(2 hunks)src/main/resources/lang/messages_fallback.yml
(2 hunks)src/main/resources/lang/zh-cn/messages.yml
(2 hunks)webui/src/components/asyncMethod.vue
(1 hunks)webui/src/utils/string.ts
(2 hunks)webui/src/views/dashboard/components/peerListModal.vue
(2 hunks)webui/src/views/data-view/banlog/components/banlogTable.vue
(2 hunks)webui/src/views/data-view/torrentList/components/banHistoryModal.vue
(2 hunks)webui/src/views/oobe/locale/en-US.ts
(1 hunks)webui/src/views/oobe/locale/zh-CN.ts
(1 hunks)webui/src/views/settings/components/info/index.vue
(1 hunks)webui/src/views/settings/components/info/locale/en-US.ts
(1 hunks)webui/src/views/settings/components/info/locale/zh-CN.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (3)
- install4j/enable-jcef.txt
- src/main/java/com/ghostchu/peerbanhelper/lab/Experiments.java
- src/main/java/com/ghostchu/peerbanhelper/event/PBHLookAndFeelNeedReloadEvent.java
🧰 Additional context used
🪛 LanguageTool
src/main/resources/assets/credit.txt
[formatting] ~337-~337: It looks like you are using the letter ‘O’ instead of the number ‘0’. Did you mean “40”?
Context: ...tant: (以下排名不分先后) OpenAI ChatGPT 4o - 帮助编写了大量代码 Github Copilot - 帮助编写了大...
(ZERO_O)
[typographical] ~367-~367: Two consecutive dots
Context: ... .%#X M#####+;#H :M#M. .. .+/;%#########X###- -/%H%+;-,...
(DOUBLE_PUNCTUATION)
[formatting] ~373-~373: These punctuation marks differ from each other. Use only one if you are ending a sentence.
Context: ...####X. =%M####################H;. /@###############+;;/%%;, ...
(DOUBLE_PUNCTUATION_PREMIUM)
[uncategorized] ~376-~376: Loose punctuation mark.
Context: ... -%###################$. ;H######################M= ,%#####MH$...
(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~379-~379: Loose punctuation mark.
Context: ... -####X.,H# -+M##@- . ,###; ; =$##+ .#H...
(UNLIKELY_OPENING_PUNCTUATION)
⏰ Context from checks skipped due to timeout of 300000ms (1)
- GitHub Check: Build_Installers / install4jc
🔇 Additional comments (99)
src/main/java/com/ghostchu/peerbanhelper/module/impl/rule/PTRBlacklist.java (1)
35-35
: 导入 TimeUnit 用于超时控制新增的导入声明清晰明确,用于支持 DNS 查询的超时功能。
.github/workflows/webui.yml (2)
5-5
: 分支配置更新符合最佳实践将工作流触发器扩展到包含
dev
分支是一个好的改进:
- 支持开发分支的持续集成
- 保持了只在 master 分支部署的安全限制
- 有助于在合并到主分支前发现问题
Also applies to: 9-9
33-33
: PNPM 版本保持一致性与
build_fe.yml
保持相同的 PNPM 版本 (10.0.0) 是正确的做法,确保了构建环境的一致性。src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/PBHPlusTheme.java (1)
9-12
: 暗色主题初始化模式不一致暗色主题模式调用了
installLafInfo()
和setup()
,而亮色主题模式只调用了setup()
。这种不一致可能会导致主题初始化问题。建议统一初始化模式:
@Override public void applyDark() { - FlatArcDarkOrangeIJTheme.installLafInfo(); FlatArcDarkOrangeIJTheme.setup(); }
或者在亮色主题中也添加
installLafInfo()
:@Override public void applyLight() { + FlatArcOrangeIJTheme.installLafInfo(); FlatArcOrangeIJTheme.setup(); }
✅ Verification successful
确认:暗色主题初始化模式确实存在不一致
代码库中的其他主题实现(如 StandardLafTheme、SnapshotTheme、UnsupportedPlatformTheme)都只调用
setup()
。建议采用第一个修复方案,移除多余的installLafInfo()
调用,保持与其他主题实现一致的初始化模式:@Override public void applyDark() { - FlatArcDarkOrangeIJTheme.installLafInfo(); FlatArcDarkOrangeIJTheme.setup(); }
🏁 Scripts executed
The following scripts were executed for the analysis:
Error: No shell scripts found
Script:
#!/bin/bash # Search for FlatLaf theme related files and implementations fd -e java | xargs rg -l "FlatLaf|Theme" # Search for theme initialization patterns rg "installLafInfo|setup" -A 2 -B 2 # Look for documentation about theme initialization fd "README|CONTRIBUTING" | xargs catLength of output: 69073
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingGuiImpl.java (19)
3-4
: Import 导入库检查这些导入在本次提交中看上去是合理的,无需进一步调整。
8-8
: 事件总线的依赖导入此代码便于监听外部事件刷新主题,暂无问题。
10-11
: 导入ProgressDialog和TaskbarControl看起来是在GUI中加入进度条对话框和任务栏控制功能的接口引用,符合本次PR目标,无需调整。
14-15
: 引入自定义主题引用这里引入了PBHFlatLafTheme和其他主题实现类。保持一致性即可。
20-20
: Guava EventBus的使用新增订阅事件的功能,符合对统一事件处理的需求。
26-27
: Swing字体资源导入说明这里显示导入了FontUIResource和StyleContext,用于动态调整Swing字体,目测正常。
32-33
: Enumeration与Locale的导入这些导入用于在setUIFont与主题切换中处理UI资源以及国际化区域设置,保持不变即可。
47-50
: 新增字段pbhFlatLafTheme与swingTaskbarControl这些字段用于跟踪主题和任务栏控制对象,符合本次PR的功能增强需求。
58-62
: 在Linux平台开启窗口装饰通过判断os.name包含"Linux",启用JFrame/JDialog的装饰,逻辑简单明了,无需改动。
65-73
: setUIFont方法遍历UIManager的Key,将字体替换为自定义FontUIResource。实现逻辑清晰,暂时无改进意见。
124-126
: 主题重载事件needReloadThemes事件被订阅,以更新UI主题。这是一个常见用法,暂无问题。
184-208
: getFont方法该方法在判断可显示字符后动态生成新的字体对象,对于跨平台字体兼容性非常实用。当前实现没有明显问题。
207-207
: 初始化 SwingTaskbarControl在创建主窗口时,赋值给 swingTaskbarControl,扩展了对任务栏的控制。没有发现问题。
211-214
: createProgressDialog为 GUI 提供进度对话框对象的创建逻辑,符合需求。
216-222
: taskbarControl 方法若 swingTaskbarControl 不为 null,则直接使用,否则返回父类的默认实现,符合本次功能扩展的设计。
316-318
: 请求窗口用户注意力通过 Taskbar.requestWindowUserAttention 提供原生的窗口闪烁或标记功能,用于提示用户,逻辑正常。
319-320
: 在createDialog方法中,使用SwingUtilities.invokeLater确保 UI 函数在 EDT 执行,不会在多线程环境导致冲突。实现方式正确。
Line range hint
325-345
: createNotification方法在检测到 SystemTray 上的TrayIcon后,通过 displayMessage 来显示信息,并在Windows平台上使用调度器定时刷新Tray图标。目前实现看上去合理,无需特别修改。
346-346
: refreshTrayIcon方法使用 remove(icon) 再 add(icon) 的方式刷新图标,修复 issue #515,做法可行。
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/MainWindow.java (34)
5-5
: 额外 ExternalSwitch 导入允许在Swing界面中读取外部开关。看起来与主题或功能切换相关。无问题。
8-8
: PBHServerStartedEvent导入将事件与主窗口联系起来,用于执行JCEF初始化等操作,符合项目需求。
10-10
: JCEFAppFactory导入用于构建JCEF实例,实现内置浏览器功能。新增特性符合PR目标。
12-12
: 引入Subscribe注解通过Guava EventBus来订阅事件。在本类中关键性为启动WebUI时机。
16-19
: Cef相关对象导入包含CefApp、CefClient、Browser等,均与嵌入式浏览器相关。功能逻辑清晰。
47-56
: 新增SwingGuiImpl、LogsTab、WindowMenuBar、TrayMenu、WebUITab等字段在窗口类中添加了对应的Getter字段,用于管理各功能模块。可提高MainWindow的可读性与扩展性。
70-70
: 设置窗口标题初始化时显示“加载中”状态,符合用户友好体验。
76-78
: 初始化WindowMenuBar和TrayMenu在构造函数中创建菜单栏和托盘菜单,提升应用可用性。
83-83
: 替换关闭逻辑为minimizeToTray用户点击关闭窗口时,改为最小化到系统托盘。符合用户需求的交互逻辑。
89-90
: 初始化logsTab和webuiTab为应用日志和Web UI提供独立模块,有助于功能的清晰度。
118-118
: openWebUI方法改为127.0.0.1与localhost等效,一些网络环境下127.0.0.1可能更稳定,变更合理。
129-129
: 在dispose方法中关闭webuiTab确保JCEF资源得到释放,避免内存泄漏。
154-155
: 启用loggerScrollPane并设置字体这样可以确保日志区域可用及外观一致,无明显问题。
160-161
: 动态获取TextArea.font并应用保证日志列表文字与系统UI主题一致,可读性更好。
190-208
: getFont方法(在MainWindow中)与SwingGuiImpl类似,按可显示性与平台判断来选择字体,减少乱码风险,逻辑可用。
215-222
: WebUITab内部类的声明为WebUI提供独立容器,通过实现AutoCloseable简化资源管理。初始字段定义没问题。
223-226
: WebUITab构造函数注册EventBus以监听PBHServerStartedEvent,便于在服务器启动后初始化JCEF。
228-230
: onPeerBanHelperStarted事件处理开启虚拟线程执行JCEF初始化,减少阻塞UI线程。做法明智。
234-238
: initJCEFEngine中的开关逻辑判断pbh.nojcef或enable-jcef.txt是否存在来决定是否加载JCEF。使得JCEF可选性好。
241-263
: JCEF构建流程与进度对话框使用JCEFAppFactory创建并设置下载与解压的进度回调,通过progressDialog显示给用户,用户体验良好。
263-275
: 在窗口激活或未激活时,动态决定是否启用或停用Browser通过添加WindowListener并调用checkIfBrowserShouldActive,减少后台渲染的资源消耗。实现很巧妙。
286-295
: checkIfBrowserShouldActive方法在EDT中判断窗口可见性并调用activeBrowser或deActiveBrowser,可有效节省资源。
297-324
: activeBrowser方法若browser尚未初始化,则createClient并创建浏览器对象。还增加了keyboard handler以便F12打开DevTools。功能完善。
326-336
: deActiveBrowser方法移除浏览器UI组件并释放CefClient与CefBrowser,避免资源占用。逻辑正确。
340-358
: devToolsShow方法单独开窗口显示开发者工具,可在调试时提供便利且不干扰主页面,细节实现完善。
361-365
: close方法在关闭时调用deActiveBrowser并释放app对象,彻底销毁Cef资源,避免内存泄漏。实现到位。
368-374
: TrayMenu类与其字段定义新的托盘功能类,使用SwingTray封装系统托盘图标和菜单,结构清晰。
375-390
: 构造函数与setupSystemTray方法在系统支持的情况下创建TrayIcon并添加到系统托盘。创建swingTrayDialog并更新菜单。符合常规实现。
396-404
: minimizeToTray方法将主窗口隐藏并在首次执行时弹出通知,提示用户窗口已最小化到托盘。贴合用户预期。
407-425
: 更新托盘菜单动态构建JMenuItem列表,包括显示主窗口、打开WebUI、退出等选项,方便用户操作。逻辑清晰。
427-446
: menuDownloaderStats与menuBanStats方法获取下载器数与被Ban的对等节点统计信息并显示到菜单项中,功能有用且实现简洁。
448-451
: menuDisplayItem方法设置特定菜单项不可用,用于在托盘菜单中显示静态信息。实现无问题。
455-606
: WindowMenuBar与内部菜单项新建菜单栏,包括程序、WebUI、调试等选项。通过向导操作简化用户流程,整体实现良好。
607-620
: LogsTab内部类初始化日志列表并设置自定义渲染器,便于分类显示error、warn等日志。功能逻辑正确。
src/main/java/com/ghostchu/peerbanhelper/gui/TaskbarControl.java (1)
1-9
: 新增TaskbarControl接口定义updateProgress与requestUserAttention,用于在不同平台上提供任务栏状态更新与提示功能。接口设计简单明了,建议保留。
webui/src/utils/string.ts (1)
15-16
: 实现完善且符合网络地址格式规范!新增的
formatIPAddressPort
函数能够正确处理 IPv4 和 IPv6 地址的格式化,遵循了 RFC 标准规范。对于 IPv6 地址,使用方括号包裹地址并添加端口号,这是很好的实践。src/main/java/com/ghostchu/peerbanhelper/gui/GuiManager.java (1)
24-26
: 请确认 TaskbarControl 接口的可见性新增的方法符合接口的职责,但需要验证:
TaskbarControl
接口是否已在项目中定义- 是否需要添加相关的导入语句
✅ Verification successful
已验证 TaskbarControl 接口定义正确
TaskbarControl 接口已在同一包(com.ghostchu.peerbanhelper.gui)中定义,无需添加额外的导入语句。接口可见性符合要求。
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 搜索 TaskbarControl 接口的定义 rg -t java "interface TaskbarControl"Length of output: 138
webui/src/components/asyncMethod.vue (1)
12-16
: 类型安全性得到显著提升代码改进:
- 将
any
类型替换为unknown[]
提高了类型安全性- 异步函数的参数和返回值类型定义更加严格
- 插槽的类型定义更加准确
Also applies to: 21-21, 24-24
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/JCEFSwingDevTools.java (1)
36-40
: 资源释放处理得当
dispose()
方法的实现正确,确保了 devTools 资源的proper清理。install4j/lang/en-US.utf8 (1)
11-13
: 本地化文案清晰完整新增的 JCEF 组件描述文案清晰,充分说明了该组件的可选性质和功能影响。
src/main/java/com/ghostchu/peerbanhelper/BuildMeta.java (1)
25-25
: 错误处理改进合理通过添加默认值 "Unknown",改进了配置缺失时的错误处理,与类中其他字段的处理方式保持一致。
src/main/java/com/ghostchu/peerbanhelper/gui/PBHGuiManager.java (2)
58-60
: 委托模式实现得当!
createProgressDialog
方法通过委托模式优雅地实现了进度对话框的创建功能。
63-65
: 任务栏控制实现简洁明了!
taskbarControl
方法采用相同的委托模式,保持了代码的一致性。src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/MainWindow.form (1)
25-26
: 界面组件配置优化合理!以下改进提升了用户体验:
- 启用了滚动面板,确保日志内容可以正常滚动
- 使用系统文本区域字体,提供了更好的跨平台一致性
Also applies to: 35-37
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingTaskbarControl.java (2)
16-34
: 任务栏进度更新实现完善!代码具有以下优点:
- 正确处理了线程安全(使用EventQueue)
- 完善的特性支持检查
- 合理的降级策略
36-51
: 用户注意力请求功能实现稳健!实现考虑周到:
- 空值处理得当
- 支持关键和非关键注意力请求
- 提供了合适的降级方案
webui/src/views/data-view/banlog/components/banlogTable.vue (1)
35-35
: 代码改进:统一了IP地址格式化方式使用新的
formatIPAddressPort
工具函数统一了IP地址和端口的显示格式,提高了代码的一致性和可维护性。Also applies to: 82-82
webui/src/views/dashboard/components/peerListModal.vue (1)
25-25
: 代码改进:保持了IP地址显示的一致性采用与其他组件相同的
formatIPAddressPort
函数来格式化IP地址和端口,确保了整个应用程序中IP地址显示格式的一致性。Also applies to: 87-87
src/main/java/com/ghostchu/peerbanhelper/module/impl/webapi/PBHPeerController.java (1)
82-83
: 代码改进:使用了更安全的IP地址处理使用
IPAddressUtil
处理IP地址是一个很好的改进,它提供了更安全和标准化的IP地址处理方式。src/main/java/com/ghostchu/peerbanhelper/ipdb/IPDB.java (1)
387-387
: 资源清理处理得当!在 whenComplete 中关闭进度对话框确保了资源的正确释放,防止内存泄漏和界面残留。
src/main/java/com/ghostchu/peerbanhelper/Main.java (2)
115-118
: 区域设置处理改进!从 ExternalSwitch 获取用户区域设置的实现更加灵活,允许通过外部配置覆盖默认值。
122-122
: 任务栏进度状态更新得当!在 GUI 初始化过程中更新任务栏状态为不确定状态,为用户提供了良好的视觉反馈。
install4j/project.install4j (1)
1626-1631
: 注意:新增的不受支持平台安装程序可能存在兼容性风险为 x86 (32位) 和 arm32-vfp-hflt 平台添加安装程序存在以下问题:
- 这些平台已被 Java 21+ 弃用
- 文件名前缀
_____UNSUPPORTED_
可能会引起用户混淆建议:
- 考虑添加明确的版本兼容性警告
- 在安装过程中显示明确的不受支持提示
webui/src/views/data-view/torrentList/components/banHistoryModal.vue (1)
48-48
: 代码改进:使用统一的 IP 地址格式化方法使用
formatIPAddressPort
函数替代直接字符串拼接是一个很好的改进:
- 提高了代码的一致性
- 集中处理 IP 地址格式化逻辑
- 便于后续维护和修改
pom.xml (4)
9-9
: 版本号更新至 7.4.0-Beta1版本更新符合语义化版本规范,Beta 标识清晰表明这是一个测试版本。
324-328
: 新增 FlatLaf IntelliJ 主题依赖新增的
flatlaf-intellij-themes
依赖:
- 版本号与
flatlafVersion
属性定义的版本一致- 扩展了 UI 主题选项
518-522
: 新增 JCEF 依赖新增的
jcefmaven
依赖用于支持 WebUI 控制台功能:
- 使用了特定版本 127.3.1
- 需要确保跨平台兼容性
建议:
- 验证在所有支持的平台上的兼容性
- 添加相关的单元测试
442-447
: 注释掉 bcpg-jdk18on 依赖注释掉
bcpg-jdk18on
依赖:
- 需要确认是否会影响现有功能
- 建议添加注释说明移除原因
✅ Verification successful
可以安全移除 bcpg-jdk18on 依赖
经过验证:
- 代码库中没有使用任何 PGP 相关功能
- 现有的 BouncyCastle 导入都来自 bcprov-jdk18on 模块
- 移除 bcpg-jdk18on 依赖不会影响现有功能
建议在注释中添加移除原因,例如:"移除未使用的 PGP 加密依赖"
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 检查代码中是否还有使用 bcpg-jdk18on 的地方 rg -l "org\.bouncycastle\.bcpg"Length of output: 33
Script:
#!/bin/bash # Search for PGP related terms and common BouncyCastle PGP classes rg -i "pgp|gnupg|openpgp" rg -i "PGPPublicKey|PGPPrivateKey|PGPSignature|PGPEncrypted|BCPGInputStream|BCPGOutputStream" # Search for any remaining BouncyCastle imports rg "import.*bouncycastle"Length of output: 671
Script:
#!/bin/bash # Check for other BouncyCastle dependencies in pom.xml rg "bouncycastle" pom.xmlLength of output: 333
src/main/resources/lang/zh-cn/messages.yml (4)
195-196
: 简化的标题格式更加清晰!移除了版本号占位符,使标题更加简洁易读。
570-573
: JCEF 相关的本地化字符串翻译准确!新增的 JCEF 相关提示信息翻译准确,用户体验良好。
Line range hint
586-593
: Docker 网络模式错误提示信息清晰明确!错误提示信息准确描述了问题原因和解决方案,对用户很有帮助。特别是说明了:
- 问题的具体原因(Docker bridge 网络模式)
- 可能造成的影响(错误封禁)
- 解决方案(切换到 host 网络模式)
Line range hint
594-599
: 平台兼容性警告信息翻译到位!新增的平台兼容性警告信息翻译准确,清晰地传达了:
- 不受支持平台的风险提示
- 32位系统的特殊警告
- 未来可能移除兼容性支持的说明
src/main/resources/lang/messages_fallback.yml (7)
194-195
: 简化了 GUI 标题显示!移除了版本号占位符,使界面更加简洁。
572-573
: 实验性功能描述清晰!准确描述了功能的用途和局限性,并明确标注了这是一个实验性算法。
573-576
: WebUI 和 JCEF 相关提示信息完整!为 WebUI 控制台和 JCEF 初始化提供了清晰的反馈信息。
577-579
: JCEF 下载提示信息详尽!清晰说明了下载过程,并提供了使用 nojcef 参数禁用此功能的选项。
580-584
: 通用 UI 文本合理!为取消按钮、JCEF 解压和 IPDB 下载等操作提供了清晰的反馈信息。
585-593
: Docker 网络模式错误提示完整!详细说明了 Docker 网络模式导致的问题、原因和解决方案,并提供了切换到 host 网络模式的具体指导。
594-599
: 平台兼容性警告信息清晰!明确说明了不支持的平台和 32 位系统的限制,并提醒用户不要报告相关兼容性问题。
src/main/resources/lang/en-us/messages.yml (7)
194-195
: 简化了GUI标题格式移除了版本号占位符,使标题更加简洁。
573-575
: JCEF错误消息清晰明确新增的JCEF初始化失败消息能够清楚地说明失败原因(平台不支持或初始化异常)。
576-579
: JCEF下载提示信息完整且实用下载提示信息包含了:
- 清晰的进度说明
- 禁用JCEF功能的具体方法
这对用户非常友好。
580-581
: GeoIP数据库下载提示信息清晰提示信息明确说明了下载目的(提供IP地理位置信息)。
582-582
: JCEF解压提示信息简洁明了清楚地提示用户解压过程可能需要一些时间。
583-585
: GUI通用消息设计合理
- 包含了必要的取消按钮文本
- 使用emoji表情(❤和🔧)增加了界面的友好性
586-587
: Docker网络模式错误提示标题准确标题清晰地表明了:
- 这是一个严重错误(Critical Error)
- 可能导致PeerBanHelper无法正常工作
@@ -20,7 +20,7 @@ jobs: | |||
- uses: pnpm/action-setup@v3 | |||
name: Install pnpm | |||
with: | |||
version: 9.1.1 | |||
version: 10.0.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
需要更新 package.json 配置以适配 PNPM 10.0.0
由于项目使用了补丁依赖(vue-request),需要在 package.json 中添加以下配置以确保正常工作:
{
"pnpm": {
"onlyBuiltDependencies": ["vue-request"]
}
}
建议升级步骤:
- 添加上述配置
- 删除 node_modules 和 .pnpm-store
- 重新执行
pnpm install
原因:PNPM 10.0.0 默认禁用了依赖包的生命周期脚本,且存储格式发生了变化。
🔗 Analysis chain
需要验证 PNPM 10.0.0 的兼容性
将 PNPM 从 9.1.1 升级到 10.0.0 是一个主版本升级,可能会带来重大变化。建议:
- 确保已经查看了 PNPM 10.0.0 的更新日志
- 验证所有依赖包与新版本兼容
- 在开发环境中完整测试构建流程
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# 检查 PNPM 10.0.0 的兼容性要求和重大变更
# 获取 PNPM 10.0.0 的发布说明
curl -s https://api.github.com/repos/pnpm/pnpm/releases/tags/v10.0.0 | jq -r '.body'
# 检查项目的 package.json 中的依赖版本
cd webui && cat package.json | jq '.dependencies, .devDependencies'
Length of output: 13486
Script:
#!/bin/bash
# Find and analyze package.json files
echo "Looking for package.json files:"
fd package.json
echo -e "\nAnalyzing found package.json files:"
for f in $(fd package.json); do
echo -e "\n=== $f ==="
cat "$f" | jq '{
dependencies,
devDependencies,
pnpm,
scripts: .scripts | select( . != null )
}'
done
Length of output: 2784
...main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/UnsupportedPlatformTheme.java
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/MacOSLafTheme.java
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/theme/impl/SnapshotTheme.java
Outdated
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/gui/impl/console/ConsoleGuiImpl.java
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/SwingProgressDialog.java
Outdated
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/module/impl/webapi/PBHPeerController.java
Show resolved
Hide resolved
src/main/java/com/ghostchu/peerbanhelper/gui/impl/swing/AboutWindow.java
Outdated
Show resolved
Hide resolved
…rogressDialog.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…impl/SnapshotTheme.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…indow.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
错别字(
应为
|
新增功能
电子垃圾临终关怀
Warning
根据 JEP-449 所述,Java 已从 21 版本开始废弃 32 位平台支持。本次更新中添加的 32 位兼容性不但完全未经测试,而且也不会提供任何支持。根据提案内容,32-bit 支持将在未来被完全删除,你应该考虑升级到 64 位操作系统/硬件。
新增对不受支持的平台
Linux x86 (32-bit)
和Linux arm32-vfp-hflt
的 install4j 打包安装程序。由于这些平台很快将被 Java 废弃且在未来可能不再有兼容的 OpenJDK 构建,因此我们不会提供在这些平台上的任何兼容性相关的技术支持,且现有支持可能随时间推移而逐渐完全移除。
由于上游 OpenJDK 提供商已不再提供 Windows x86 的构建,32 位 Windows 不再本次更新的范围内。
在不受支持的平台上运行时,窗口标题将显示
⚠不受支持的平台
,且在首次运行时会收到一次性的警报信息和通知中心信息。此决定的初衷是减少报废边缘的电子垃圾,并不代表我们对 32 位硬软件的兼容态度的转变,更不会尝试兼容 Java 8。
开关参数
引入全新开关参数系统,可以通过启动参数、参数文件和环境变量控制 PeerBanHelper 的内部开关。这些开关可能对打包发布者产生重要意义。具体改动请参见
PACKAGING.md
描述文件。JCEF 支持
JCEF 支持随 install4j 安装程序引入,且可在安装阶段禁用。启用 JCEF 支持后,PeerBanHelper 会根据平台动态下载安装 CEF 框架。一旦 JCEF 可用,PeerBanHelper 会在 GUI 窗口内新增一个 “WebUI 控制台” 选项卡,以供用户在不打开浏览器的情况下访问 WebUI 更改设置。
在开发、快照、测试版本的 PeerBanHelper 上会额外启用 DevTools,可通过在 WebUI 控制台页面内按 F12 打开。
可通过传入参数、开关参数和标志文件禁用。
改进的 GUI 界面
新增主题:
新增 “关于->开发人员与社区贡献者...” 菜单,以表彰对 PeerBanHelper 做出重要贡献的人们。
新增
---DEBUG---
菜单,仅在开发、快照、测试版本的 PeerBanHelper 上显示以供测试小组的测试用户对部分功能进行调试。部分功能需要管理员权限。进行下载操作时,现在有一个新的对话框显示下载进度。
用户体验改进
错误修复
Summary by CodeRabbit
基于提供的变更摘要,以下是更新后的发布说明:
新功能
改进
修复
性能
安全性
这个版本主要关注用户体验和功能扩展,为用户提供更加灵活和直观的界面。