Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
389e868
Activate github/workflow
zephyranthes03 Sep 5, 2025
7be0539
Update fmt update
zephyranthes03 Sep 8, 2025
53a7e93
Fix import path from src/bin/rabbit_consumer.rs
zephyranthes03 Sep 8, 2025
539e1a9
Remove crashed marker/Merge import block
zephyranthes03 Sep 8, 2025
ce980ac
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 8, 2025
fb632e8
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 8, 2025
f63361a
Bypass rabbit_consumer code
zephyranthes03 Sep 8, 2025
a53a060
Bypass rabbit_consumer code
zephyranthes03 Sep 8, 2025
e0fa20c
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 8, 2025
fc73fdd
Bypass rabbit_consumer code
zephyranthes03 Sep 8, 2025
12362cf
Update deploy procss
zephyranthes03 Sep 9, 2025
5fdd399
Update cosmic-sync-server health check
zephyranthes03 Sep 9, 2025
f19203b
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 9, 2025
6c879dc
Update cosmic-sync-server health check
zephyranthes03 Sep 9, 2025
1982e98
Update cosmic-sync-server health check
zephyranthes03 Sep 9, 2025
53745b6
Update service loading delay/ Update related service env
zephyranthes03 Sep 10, 2025
c55d84a
Fix build error
zephyranthes03 Sep 10, 2025
a43b5ac
Fix build error
zephyranthes03 Sep 10, 2025
15555aa
Update builder rs
zephyranthes03 Sep 10, 2025
37bc15c
Fix static library issue
zephyranthes03 Sep 10, 2025
987a6a9
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 10, 2025
7cdfe0e
Fix static library issue
zephyranthes03 Sep 10, 2025
12aa27f
Fix static library issue
zephyranthes03 Sep 10, 2025
d015f08
Fix static library issue
zephyranthes03 Sep 10, 2025
53c4809
Update secret location
zephyranthes03 Sep 11, 2025
3c1633f
Check system76/cosmic-sync-server repo
zephyranthes03 Sep 11, 2025
65174ca
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 11, 2025
ea38129
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 11, 2025
51c9b41
Check system76/cosmic-sync-server repo
zephyranthes03 Sep 11, 2025
f66baea
Fix Migration issue
zephyranthes03 Sep 12, 2025
c9b0ce4
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 12, 2025
9134c3c
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 12, 2025
cb41ab1
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 12, 2025
69c18c2
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 12, 2025
7a0ba3a
Fix Migration issue
zephyranthes03 Sep 12, 2025
5c7c781
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 12, 2025
00e2616
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 12, 2025
7b8f4ea
Fix Migration issue
zephyranthes03 Sep 13, 2025
77a767c
Update schema
zephyranthes03 Sep 14, 2025
b34ecc4
git Merge branch 'staging' of github.com:system76/cosmic-sync-server …
zephyranthes03 Sep 14, 2025
c8693d0
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 14, 2025
32dd2c7
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 15, 2025
da1dd7a
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 15, 2025
26bd72b
Fix grpc port connection
zephyranthes03 Sep 15, 2025
d03e4b8
Fix grpc port connection
zephyranthes03 Sep 15, 2025
cb2b8ca
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 15, 2025
f80a24b
Fix grpc port connection
zephyranthes03 Sep 15, 2025
1a07741
git Merge branch 'staging' of github.com:system76/cosmic-sync-server …
zephyranthes03 Sep 15, 2025
7e5baae
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 15, 2025
fb16db2
Fix grpc port connection
zephyranthes03 Sep 15, 2025
477969d
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 15, 2025
1cb4790
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 15, 2025
70f649c
Fix grpc port connection
zephyranthes03 Sep 15, 2025
44f5356
git Merge branch 'staging' of github.com:system76/cosmic-sync-server …
zephyranthes03 Sep 15, 2025
6cff219
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 15, 2025
beafa61
Fix grpc port connection
zephyranthes03 Sep 15, 2025
e7c62fd
Fix grpc port connection
zephyranthes03 Sep 15, 2025
c1d2bc1
Update login process - fix OAUTH infos
zephyranthes03 Sep 19, 2025
3f7b8e0
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 19, 2025
0f2edfd
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 19, 2025
c879fa1
Update login process - fix OAUTH infos
zephyranthes03 Sep 22, 2025
e14710e
Update login process - fix saving auth token
zephyranthes03 Sep 22, 2025
22fe3c8
Merge 443/50051
zephyranthes03 Sep 23, 2025
cae291a
Merge 443/50051
zephyranthes03 Sep 23, 2025
e55115d
Merge 443/50051
zephyranthes03 Sep 24, 2025
00ea3ef
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 24, 2025
1b86395
Merge 443/50051
zephyranthes03 Sep 24, 2025
4b8668a
Merge 443/50051
zephyranthes03 Sep 24, 2025
b05e032
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 24, 2025
24056be
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 24, 2025
c193115
Merge 443/50051
zephyranthes03 Sep 24, 2025
f85eae7
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 24, 2025
d1569a8
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 24, 2025
a035a88
Merge 443/50051
zephyranthes03 Sep 24, 2025
509b93c
Fix http size issue
zephyranthes03 Sep 26, 2025
bda4115
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 26, 2025
1dac212
Fix http size issue
zephyranthes03 Sep 26, 2025
18f0f72
Fix http size issue
zephyranthes03 Sep 26, 2025
2b6c550
Fix http size issue
zephyranthes03 Sep 26, 2025
ad42771
Fix http size issue
zephyranthes03 Sep 26, 2025
98dafbe
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 26, 2025
c652398
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 26, 2025
65c99f0
Fix http size issue
zephyranthes03 Sep 26, 2025
c26386d
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 26, 2025
d849e14
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 26, 2025
266d297
Fix http size issue
zephyranthes03 Sep 26, 2025
34e78d6
Fix http size issue
zephyranthes03 Sep 26, 2025
4331e95
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 26, 2025
aa8fb94
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 26, 2025
7b12ca4
Fix http size issue
zephyranthes03 Sep 27, 2025
2260296
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 27, 2025
26c05fc
Fix http size issue
zephyranthes03 Sep 27, 2025
9c2c299
Fix http size issue
zephyranthes03 Sep 27, 2025
4051873
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 27, 2025
cbfca95
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 27, 2025
c640456
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 27, 2025
f19baac
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 27, 2025
fbe4cc7
Fix http size issue
zephyranthes03 Sep 27, 2025
47ebffb
Fix http size issue
zephyranthes03 Sep 27, 2025
37e11f8
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 27, 2025
5098835
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 27, 2025
47ec562
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Sep 27, 2025
3324e59
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Sep 27, 2025
ca16552
Check point for 2024
zephyranthes03 Sep 27, 2025
b5068f1
Check point for 2024
zephyranthes03 Sep 27, 2025
875870b
Check point for 2024 - fmt
zephyranthes03 Sep 27, 2025
32fe89d
Check point for 2024 - dockerfile
zephyranthes03 Sep 27, 2025
c30060c
Check point for streaming/key_id patch
zephyranthes03 Sep 30, 2025
cbafc38
Fix starting process
zephyranthes03 Oct 1, 2025
948f090
Fix mysql auth_token mismatch
zephyranthes03 Oct 1, 2025
eee66c7
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Oct 1, 2025
c1ec243
Fix starting process
zephyranthes03 Oct 1, 2025
ebd3f03
Fix starting process
zephyranthes03 Oct 1, 2025
9e049c7
Migrate DB table
zephyranthes03 Oct 2, 2025
1e8395a
Merge branch 'staging' of github.com:system76/cosmic-sync-server into…
zephyranthes03 Oct 2, 2025
391cb6b
Merge branch 'staging' into fix_rabbit_consumer
zephyranthes03 Oct 2, 2025
508ef95
Update DELETE/UPDATE/MOVE
zephyranthes03 Nov 21, 2025
f1b587e
Update sync sequentional order
zephyranthes03 Nov 26, 2025
525b300
Merge branch 'origin' into update_rename_v2
zephyranthes03 Nov 26, 2025
f3892a2
Fix merge conflict
zephyranthes03 Nov 26, 2025
b115b89
cargo fmt
zephyranthes03 Nov 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions migrations/sql/20251119_add_deleted_file_id.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,3 @@ ADD COLUMN deleted_file_id BIGINT UNSIGNED NULL COMMENT 'Reference to original f

-- Add index for efficient lookup
CREATE INDEX idx_deleted_file_id ON files(deleted_file_id);







1 change: 1 addition & 0 deletions migrations/sql/20251119_add_deleted_file_id_down.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ ALTER TABLE files DROP COLUMN IF EXISTS deleted_file_id;




7 changes: 0 additions & 7 deletions migrations/sql/20251119_add_encrypted_data_to_files.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,3 @@

ALTER TABLE files
ADD COLUMN encrypted_data LONGBLOB NULL COMMENT 'Encrypted file data for recovery' AFTER key_id;







7 changes: 0 additions & 7 deletions migrations/sql/20251119_add_encrypted_data_to_files_down.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,3 @@

ALTER TABLE files
DROP COLUMN encrypted_data;







1 change: 1 addition & 0 deletions migrations/sql/20251119_migrate_operation_types.sql
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,4 @@ WHERE is_deleted = 0




1 change: 1 addition & 0 deletions migrations/sql/20251119_migrate_operation_types_down.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ WHERE operation_type IN ('CREATE', 'UPDATE', 'DELETE', 'RESTORE');




1 change: 1 addition & 0 deletions migrations/sql/20251119_redefine_operation_type.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ ALTER TABLE files
CHANGE COLUMN operation_type operation_type ENUM('CREATE', 'UPDATE', 'DELETE', 'RENAME', 'RESTORE', 'UPLOAD')
DEFAULT 'CREATE'
COMMENT 'File operation type: CREATE=new file, UPDATE=new version, DELETE=deleted, RENAME=renamed, RESTORE=restored from deletion, UPLOAD=legacy';

1 change: 1 addition & 0 deletions migrations/sql/20251119_redefine_operation_type_down.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ DEFAULT 'UPLOAD';




8 changes: 8 additions & 0 deletions migrations/sql/20251125_add_move_operation_type.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- Add MOVE operation type to support cross-watcher file movements
-- Date: 2025-11-25

-- Add MOVE to the operation_type ENUM
ALTER TABLE files
CHANGE COLUMN operation_type operation_type ENUM('CREATE', 'UPDATE', 'DELETE', 'RENAME', 'RESTORE', 'UPLOAD', 'MOVE')
DEFAULT 'CREATE'
COMMENT 'File operation type: CREATE=new file, UPDATE=new version, DELETE=deleted, RENAME=renamed within same watcher, RESTORE=restored from deletion, UPLOAD=legacy, MOVE=moved between watchers';
13 changes: 13 additions & 0 deletions migrations/sql/20251125_add_move_operation_type_down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-- Rollback: Remove MOVE operation type
-- Date: 2025-11-25

-- Before removing MOVE, migrate any MOVE operations back to RENAME
UPDATE files
SET operation_type = 'RENAME'
WHERE operation_type = 'MOVE';

-- Remove MOVE from the operation_type ENUM
ALTER TABLE files
CHANGE COLUMN operation_type operation_type ENUM('CREATE', 'UPDATE', 'DELETE', 'RENAME', 'RESTORE', 'UPLOAD')
DEFAULT 'CREATE'
COMMENT 'File operation type: CREATE=new file, UPDATE=new version, DELETE=deleted, RENAME=renamed, RESTORE=restored from deletion, UPLOAD=legacy';
143 changes: 143 additions & 0 deletions proto/sync.proto
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ service SyncService {
rpc RestoreFile(RestoreFileRequest) returns (RestoreFileResponse); // Restore deleted file
rpc DownloadFile(DownloadFileRequest) returns (DownloadFileResponse);
rpc ListFiles(ListFilesRequest) returns (ListFilesResponse);
// Batch operations for improved efficiency
rpc BatchOperations(BatchOperationsRequest) returns (BatchOperationsResponse);
// Streaming variants for large payloads (hybrid approach)
rpc UploadFileStream(stream UploadFileChunk) returns (UploadFileResponse);
rpc DownloadFileStream(DownloadFileRequest) returns (stream DownloadFileChunk);
Expand Down Expand Up @@ -392,13 +394,19 @@ message UploadFileRequest {
uint64 file_size = 13;
string key_id = 14;
optional uint32 unix_permissions = 15;
int64 expected_revision = 16; // Expected server revision (0 for new files, or current revision for updates)
ConflictInfo.ResolutionStrategy conflict_resolution = 17; // How to resolve conflicts (default: MANUAL)
int64 client_timestamp = 18; // Client file modification time (Unix epoch seconds)
}

message UploadFileResponse {
bool success = 1;
uint64 file_id = 2;
int64 new_revision = 3;
string return_message = 4;
optional ConflictInfo conflict = 5; // Revision conflict information
ErrorCode error_code = 6; // Standardized error code
int64 current_revision = 7; // Server's actual revision (populated on conflict)
}

// Client-streaming upload chunk (first chunk carries metadata)
Expand All @@ -422,6 +430,8 @@ message UploadFileChunk {
uint64 seq = 14; // sequential index starting at 0
bool last = 15; // true for the final chunk
optional uint32 unix_permissions = 16;
int64 expected_revision = 17; // Expected server revision for streaming uploads
optional int64 client_timestamp = 18; // Client modification time (first chunk only)
}

message DownloadFileRequest {
Expand Down Expand Up @@ -497,13 +507,19 @@ message DeleteFileRequest {
google.protobuf.Timestamp updated_time = 8;
int64 revision = 9;
string auth_token = 10;
ConflictInfo.ResolutionStrategy conflict_resolution = 11; // How to resolve conflicts (default: MANUAL)
int64 expected_revision = 12; // Expected current revision for validation
int64 client_timestamp = 13; // Client deletion decision time (Unix epoch seconds)
}

message DeleteFileResponse {
bool success = 1;
string return_message = 2;
uint64 delete_record_id = 3; // file_id of DELETE operation_type record (for recovery)
int64 new_revision = 4; // New revision after delete operation
optional ConflictInfo conflict = 5; // Conflict information (e.g., revision mismatch)
ErrorCode error_code = 6; // Standardized error code
int64 current_revision = 7; // Server's actual revision (populated on conflict)
}

// Restore deleted file request
Expand Down Expand Up @@ -532,6 +548,9 @@ message RenameFileRequest {
int32 group_id = 7; // Watcher group ID
int32 watcher_id = 8; // Watcher ID
int64 timestamp = 9; // Rename timestamp (Unix seconds)
int64 expected_revision = 10; // Expected server revision (0 to skip check, or current revision for validation)
ConflictInfo.ResolutionStrategy conflict_resolution = 11; // How to resolve conflicts (default: MANUAL)
google.protobuf.Timestamp updated_time = 12; // Client's last known update time for timestamp-based conflict resolution
}

// NEW: Rename file response
Expand All @@ -540,6 +559,8 @@ message RenameFileResponse {
string return_message = 2;
int64 new_revision = 3; // New revision after rename
optional ConflictInfo conflict = 4; // If rename conflicts with another device
ErrorCode error_code = 5; // Standardized error code
int64 current_revision = 6; // Server's actual revision (populated on conflict)
}

// NEW: Conflict information
Expand All @@ -550,11 +571,62 @@ message ConflictInfo {
CONCURRENT_RENAME = 2; // Another device renamed same file
CONCURRENT_MODIFY = 3; // File was modified during rename
PATH_MISMATCH = 4; // old_file_path doesn't match current path
REVISION_CONFLICT = 5; // Client revision outdated
STALE_OPERATION = 6; // Operation timestamp too old
}

enum ResolutionStrategy {
MANUAL = 0; // Require manual conflict resolution
LAST_WRITE_WINS = 1; // Use timestamp to auto-resolve (newest wins)
SERVER_WINS = 2; // Server version always wins
CLIENT_WINS = 3; // Client version always wins
}

ConflictType type = 1;
string conflicting_path = 2; // Path causing conflict
string conflicting_device = 3; // Device that caused conflict
int64 conflicting_revision = 4; // Revision causing conflict
google.protobuf.Timestamp server_timestamp = 5; // Server's last modification time
google.protobuf.Timestamp client_timestamp = 6; // Client's modification time
ResolutionStrategy suggested_resolution = 7; // Suggested resolution strategy
}

// Standardized error codes for all operations
enum ErrorCode {
SUCCESS = 0; // Operation successful
UNKNOWN_ERROR = 1; // Unknown or unclassified error

// Authentication & Authorization (10-19)
AUTH_FAILED = 10; // Authentication failed
AUTH_TOKEN_INVALID = 11; // Invalid or expired auth token
AUTH_ACCOUNT_MISMATCH = 12; // Account hash mismatch

// Validation Errors (20-29)
VALIDATION_FAILED = 20; // General validation error
INVALID_REQUEST = 21; // Invalid request parameters
FILE_SIZE_MISMATCH = 22; // Declared size doesn't match actual
PATH_INVALID = 23; // Invalid file path

// File Operation Errors (30-49)
FILE_NOT_FOUND = 30; // File doesn't exist
FILE_ALREADY_DELETED = 31; // File was already deleted
FILE_ALREADY_EXISTS = 32; // File already exists at target path

// Conflict Errors (50-69)
REVISION_CONFLICT = 50; // Client revision outdated
PATH_CONFLICT = 51; // Target path already exists
PATH_MISMATCH = 52; // Path doesn't match current file path
CONCURRENT_MODIFICATION = 53; // File modified by another device
STALE_OPERATION = 54; // Operation timestamp too old (Last Write Wins)

// Storage & Quota Errors (70-89)
STORAGE_FAILED = 70; // Storage operation failed
QUOTA_EXCEEDED = 71; // Storage quota exceeded
FILE_SIZE_LIMIT = 72; // File size exceeds tier limit

// Database Errors (90-99)
DB_ERROR = 90; // Database operation failed
DB_SCHEMA_ERROR = 91; // Database schema mismatch
}

// Individual Watcher management messages
Expand Down Expand Up @@ -821,6 +893,8 @@ message GetFileHistoryRequest {
optional int32 change_count_threshold = 9; // Change count threshold
int32 group_id = 10; // Group ID
optional int32 watcher_id = 11; // Watcher ID (optional)
optional string operation_type = 12; // Filter by operation type (UPLOAD, DELETE, RENAME, MOVE)
optional int32 offset = 13; // Number of records to skip for pagination (default: 0)
}

message GetFileHistoryResponse {
Expand Down Expand Up @@ -999,3 +1073,72 @@ message QuotaCheckResultProto {
bool in_grace_period = 7;
}

// ============================================================================
// Batch Operations
// ============================================================================

// Batch operation types
enum BatchOperationType {
BATCH_UPLOAD = 0;
BATCH_DELETE = 1;
BATCH_RENAME = 2;
}

// Single operation in a batch
message BatchOperation {
BatchOperationType type = 1;

// Only one of these should be set based on type
UploadFileRequest upload = 2;
DeleteFileRequest delete = 3;
RenameFileRequest rename = 4;

// Client-provided operation ID for matching request/response
string operation_id = 5;
}

// Batch operations request
message BatchOperationsRequest {
string auth_token = 1;
string account_hash = 2;
string device_hash = 3;

// List of operations to perform
repeated BatchOperation operations = 4;

// Transaction mode: if true, all operations succeed or all fail
bool atomic = 5;

// Stop on first error: if true, stop processing remaining operations after first failure
bool stop_on_error = 6;
}

// Single operation result in a batch
message BatchOperationResult {
string operation_id = 1; // Matches operation_id from request
bool success = 2;
string return_message = 3;
int32 error_code = 4;

// Operation-specific response data
oneof result {
UploadFileResponse upload_result = 5;
DeleteFileResponse delete_result = 6;
RenameFileResponse rename_result = 7;
}
}

// Batch operations response
message BatchOperationsResponse {
bool success = 1; // True if all operations succeeded
string return_message = 2;

// Individual operation results
repeated BatchOperationResult results = 3;

// Statistics
int32 total_operations = 4;
int32 successful_operations = 5;
int32 failed_operations = 6;
}

Loading