MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

核心功能:
-  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)
This commit is contained in:
Warren
2026-06-12 12:59:54 +08:00
parent 4cb7e80568
commit 1300a4e223
4559 changed files with 195840 additions and 4244 deletions

View File

@@ -0,0 +1,209 @@
# FSKit API Quick Reference ⭐⭐⭐⭐⭐
## 修正后的 API基于 FSKitSample
### 1. Entry Point
```swift
struct MyFSExtension: FSKitExtension {
func filesystem() -> FSFileSystem {
return MyFS()
}
}
```
### 2. Filesystem
```swift
class MyFS: FSFileSystem {
func probeResource(
resource: FSResource,
replyHandler: @escaping (FSProbeResult?) -> Void
) {
// Check if resource is usable
let result = FSProbeResult.usable(
resource: resource,
identifier: FSResourceIdentifier(uuid: UUID()),
userInfo: nil
)
replyHandler(result)
}
func loadResource(
resource: FSResource,
options: FSTaskOptions,
replyHandler: @escaping (Error?) -> Void
) {
// Load resource (block device, etc)
replyHandler(nil)
}
func unloadResource(
resource: FSResource,
options: FSTaskOptions,
replyHandler: @escaping (Error?) -> Void
) {
// Unload resource
replyHandler(nil)
}
}
```
### 3. Volume
```swift
class MyFSVolume: FSVolume {
init(resource: FSResource) {
super.init(resource: resource)
}
}
// Required protocols (13+):
extension MyFSVolume: FSVolume.PathConfOperations { }
extension MyFSVolume: FSVolume.OpenCloseOperations { }
extension MyFSVolume: FSVolume.IOOperations { }
extension MyFSVolume: FSVolume.DirectoryOperations { }
extension MyFSVolume: FSVolume.AttributeOperations { }
extension MyFSVolume: FSVolume.XattrOperations { }
```
### 4. File Item
```swift
class MyFSItem: FSItem {
var name: FSFileName
var id: UInt64
var attributes: FSItem.Attributes
var xattrs: [String: Data]
var children: [MyFSItem]
var content: Data?
init(name: FSFileName) {
self.name = name
self.id = UInt64.random()
self.attributes = FSItem.Attributes()
super.init()
}
}
```
### 5. Key Protocol Methods
**PathConfOperations**
```swift
func pathconf(_ item: FSItem, conf: FSPathConf) throws -> Int32
```
**OpenCloseOperations**
```swift
func open(_ item: FSItem, options: FSTaskOptions) throws -> FSFileHandle
func close(_ handle: FSFileHandle) throws
```
**IOOperations**
```swift
func read(_ handle: FSFileHandle, buffer: UnsafeMutableRawBufferPointer, options: FSTaskOptions) throws -> Int
func write(_ handle: FSFileHandle, buffer: UnsafeRawBufferPointer, options: FSTaskOptions) throws -> Int
```
**DirectoryOperations**
```swift
func enumerateDirectory(_ item: FSItem, verifier: inout FSItemVerifier, options: FSTaskOptions) throws -> FSItemEnumerator
```
**AttributeOperations**
```swift
func attributes(_ item: FSItem) throws -> FSItem.Attributes
func attributes(_ item: FSItem, named: FSFileName) throws -> FSItem.Attributes
func setAttributes(_ item: FSItem, attributes: FSItem.Attributes, options: FSTaskOptions) throws
```
**XattrOperations**
```swift
func getXattr(_ item: FSItem, name: String) throws -> Data
func setXattr(_ item: FSItem, name: String, value: Data, options: FSTaskOptions) throws
func listXattrs(_ item: FSItem) throws -> [String]
func removeXattr(_ item: FSItem, name: String, options: FSTaskOptions) throws
```
---
## Info.plist Template
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FSExtension</key>
<dict>
<key>FSExtensionPersonality</key>
<string>HelloFS</string>
<key>FSShortName</key>
<string>HelloFS</string>
<key>FSObjectsAreCaseSensitive</key>
<false/>
<key>FSSupportsBlockDevices</key>
<true/>
<key>FSPrimaryClass</key>
<string>HelloFS</string>
</dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.fskit</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).HelloFSExtension</string>
</dict>
</dict>
</plist>
```
---
## Entitlements Template
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
</plist>
```
---
## Testing Commands
**Create block device**
```bash
mkfile -n 100m dummy
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount dummy
# Output: disk18 (or diskN)
```
**Mount**
```bash
mkdir /tmp/TestVol
mount -t HelloFS disk18 /tmp/TestVol
```
**Unmount**
```bash
umount /tmp/TestVol
```
---