Files
markbase/MarkBaseFS/MarkBaseFSApp/Sources/SettingsWindow.swift
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

98 lines
3.4 KiB
Swift

import Cocoa
import UniformTypeIdentifiers
class SettingsWindow: NSWindowController {
private var databasePathField: NSTextField?
private var mountPointField: NSTextField?
convenience init() {
let window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 400, height: 200),
styleMask: [.titled, .closable, .miniaturizable],
backing: .buffered,
defer: false
)
window.title = "MarkBaseFS Settings"
window.center()
self.init(window: window)
setupUI()
}
private func setupUI() {
guard let window = window else { return }
let contentView = NSView(frame: window.contentRect(forFrameRect: window.frame))
let databaseLabel = NSTextField(frame: NSRect(x: 20, y: 150, width: 100, height: 24))
databaseLabel.stringValue = "Database Path:"
databaseLabel.isEditable = false
databaseLabel.isBezeled = false
databaseLabel.drawsBackground = false
contentView.addSubview(databaseLabel)
databasePathField = NSTextField(frame: NSRect(x: 120, y: 150, width: 200, height: 24))
databasePathField?.stringValue = DatabaseConfig().getCurrentDatabasePath()
contentView.addSubview(databasePathField!)
let browseButton = NSButton(frame: NSRect(x: 330, y: 150, width: 50, height: 24))
browseButton.title = "Browse"
browseButton.bezelStyle = .rounded
browseButton.target = self
browseButton.action = #selector(browseDatabase)
contentView.addSubview(browseButton)
let mountLabel = NSTextField(frame: NSRect(x: 20, y: 100, width: 100, height: 24))
mountLabel.stringValue = "Mount Point:"
mountLabel.isEditable = false
mountLabel.isBezeled = false
mountLabel.drawsBackground = false
contentView.addSubview(mountLabel)
mountPointField = NSTextField(frame: NSRect(x: 120, y: 100, width: 260, height: 24))
mountPointField?.stringValue = "/Volumes/MarkBase_warren"
contentView.addSubview(mountPointField!)
let applyButton = NSButton(frame: NSRect(x: 200, y: 20, width: 80, height: 24))
applyButton.title = "Apply"
applyButton.bezelStyle = .rounded
applyButton.target = self
applyButton.action = #selector(applySettings)
contentView.addSubview(applyButton)
let cancelButton = NSButton(frame: NSRect(x: 300, y: 20, width: 80, height: 24))
cancelButton.title = "Cancel"
cancelButton.bezelStyle = .rounded
cancelButton.target = self
cancelButton.action = #selector(cancelSettings)
contentView.addSubview(cancelButton)
window.contentView = contentView
}
@objc func browseDatabase() {
let openPanel = NSOpenPanel()
if let sqliteType = UTType(filenameExtension: "sqlite") {
openPanel.allowedContentTypes = [sqliteType]
}
openPanel.allowsMultipleSelection = false
if openPanel.runModal() == .OK {
if let url = openPanel.url {
databasePathField?.stringValue = url.path
}
}
}
@objc func applySettings() {
print("Settings applied")
close()
}
@objc func cancelSettings() {
print("Settings cancelled")
close()
}
}