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

@@ -15,19 +15,19 @@ fn temp_db() -> (Connection, String) {
#[test]
fn test_api_logic_create_folder() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let folder = FileTree::new_folder("API_Test_Folder", None);
tree.insert_node(&conn, &folder).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes.len(), 1);
}
#[test]
fn test_api_logic_create_file() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let (file_node, register_sql) = FileTree::new_file_node(
"test_api.mp4",
@@ -46,7 +46,7 @@ fn test_api_logic_create_file() {
tree.insert_node(&conn, &file_node).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes.len(), 1);
assert_eq!(loaded.nodes[0].node_type, NodeType::File);
}
@@ -54,7 +54,7 @@ fn test_api_logic_create_file() {
#[test]
fn test_api_logic_get_tree_with_mode() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let folder = FileTree::new_folder("Root", None);
tree.insert_node(&conn, &folder).unwrap();
@@ -76,7 +76,7 @@ fn test_api_logic_get_tree_with_mode() {
#[test]
fn test_api_logic_update_node() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let mut folder = FileTree::new_folder("Original", None);
tree.insert_node(&conn, &folder).unwrap();
@@ -85,7 +85,7 @@ fn test_api_logic_update_node() {
folder.icon = Some("🎬".to_string());
tree.update_node(&conn, &folder.node_id, &folder).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes[0].label, "Updated_via_API");
assert_eq!(loaded.nodes[0].icon, Some("🎬".to_string()));
}
@@ -93,7 +93,7 @@ fn test_api_logic_update_node() {
#[test]
fn test_api_logic_delete_node() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let folder = FileTree::new_folder("ToDelete", None);
let node_id = folder.node_id.clone();
@@ -103,21 +103,21 @@ fn test_api_logic_delete_node() {
tree.delete_node(&conn, &node_id).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes.len(), 0);
}
#[test]
fn test_api_logic_delete_all_nodes() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
for i in 1..=5 {
let folder = FileTree::new_folder(&format!("Folder{}", i), None);
tree.insert_node(&conn, &folder).unwrap();
}
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes.len(), 5);
//模擬delete_all_nodes API邏輯
@@ -129,14 +129,14 @@ fn test_api_logic_delete_all_nodes() {
.unwrap();
}
let after_delete = FileTree::load(&conn, &user_id).unwrap();
let after_delete = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(after_delete.nodes.len(), 0);
}
#[test]
fn test_api_logic_move_node() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let parent = FileTree::new_folder("Parent", None);
let child = FileTree::new_folder("Child", Some(parent.node_id.clone()));
@@ -147,7 +147,7 @@ fn test_api_logic_move_node() {
//移動到根目錄
tree.move_node(&conn, &child.node_id, None).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let moved_node = loaded
.nodes
.iter()
@@ -159,7 +159,7 @@ fn test_api_logic_move_node() {
#[test]
fn test_api_logic_update_alias() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let folder = FileTree::new_folder("Videos", None);
tree.insert_node(&conn, &folder).unwrap();
@@ -169,7 +169,7 @@ fn test_api_logic_update_alias() {
tree.update_node_alias(&conn, &folder.node_id, "en_us", "Videos")
.unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(
loaded.nodes[0].aliases.get("zh_tw").map(|s| s.as_str()),
Some("影片")
@@ -183,7 +183,7 @@ fn test_api_logic_update_alias() {
#[test]
fn test_api_logic_nested_structure() {
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
let root = FileTree::new_folder("Root", None);
let level1 = FileTree::new_folder("Level1", Some(root.node_id.clone()));
@@ -193,7 +193,7 @@ fn test_api_logic_nested_structure() {
tree.insert_node(&conn, &level1).unwrap();
tree.insert_node(&conn, &level2).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert_eq!(loaded.nodes.len(), 3);
}
@@ -232,7 +232,7 @@ fn test_api_logic_file_info() {
fn test_api_logic_restore_scenario() {
//模擬restore_tree API邏輯
let (conn, user_id) = temp_db();
let mut tree = FileTree::load(&conn, &user_id).unwrap();
let mut tree = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
//建立基本結構
let home = FileTree::new_folder("Home", None);
@@ -241,7 +241,7 @@ fn test_api_logic_restore_scenario() {
tree.insert_node(&conn, &home).unwrap();
tree.insert_node(&conn, &movies).unwrap();
let loaded = FileTree::load(&conn, &user_id).unwrap();
let loaded = FileTree::load(&conn, &user_id, "untitled folder").unwrap();
assert!(loaded.nodes.iter().any(|n| n.label == "Home"));
assert!(loaded.nodes.iter().any(|n| n.label == "Movies"));
}