Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
88
native/desktop/maplefile/internal/domain/file/model.go
Normal file
88
native/desktop/maplefile/internal/domain/file/model.go
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
package file
|
||||
|
||||
import "time"
|
||||
|
||||
// File represents a file stored locally with sync capabilities.
|
||||
// This model combines cloud metadata with local storage tracking.
|
||||
type File struct {
|
||||
// Identifiers (from cloud)
|
||||
ID string `json:"id"`
|
||||
CollectionID string `json:"collection_id"`
|
||||
OwnerID string `json:"owner_id"` // UserID from cloud
|
||||
|
||||
// Encryption data (from cloud API response)
|
||||
EncryptedFileKey EncryptedFileKeyData `json:"encrypted_file_key"`
|
||||
FileKeyNonce string `json:"file_key_nonce"`
|
||||
EncryptedMetadata string `json:"encrypted_metadata"`
|
||||
MetadataNonce string `json:"metadata_nonce"`
|
||||
FileNonce string `json:"file_nonce"`
|
||||
|
||||
// File sizes (from cloud)
|
||||
EncryptedSizeInBytes int64 `json:"encrypted_file_size_in_bytes"`
|
||||
DecryptedSizeInBytes int64 `json:"decrypted_size_in_bytes,omitempty"`
|
||||
|
||||
// Local storage paths (local only)
|
||||
EncryptedFilePath string `json:"encrypted_file_path,omitempty"`
|
||||
FilePath string `json:"file_path,omitempty"`
|
||||
ThumbnailPath string `json:"thumbnail_path,omitempty"`
|
||||
|
||||
// Decrypted metadata (local only - populated after decryption)
|
||||
Name string `json:"name,omitempty"`
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
Metadata *FileMetadata `json:"metadata,omitempty"`
|
||||
|
||||
// Sync tracking (local only)
|
||||
SyncStatus SyncStatus `json:"sync_status"`
|
||||
LastSyncedAt time.Time `json:"last_synced_at,omitempty"`
|
||||
|
||||
// State from cloud
|
||||
State string `json:"state"` // pending, active, deleted
|
||||
StorageMode string `json:"storage_mode"` // encrypted_only, hybrid, decrypted_only
|
||||
Version int `json:"version"` // Cloud version for conflict resolution
|
||||
|
||||
// Timestamps (from cloud)
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
ModifiedAt time.Time `json:"modified_at"`
|
||||
|
||||
// Thumbnail URL (from cloud, for remote access)
|
||||
ThumbnailURL string `json:"thumbnail_url,omitempty"`
|
||||
}
|
||||
|
||||
// EncryptedFileKeyData matches the cloud API structure exactly
|
||||
type EncryptedFileKeyData struct {
|
||||
Ciphertext string `json:"ciphertext"`
|
||||
Nonce string `json:"nonce"`
|
||||
}
|
||||
|
||||
// FileMetadata represents decrypted file metadata (populated after decryption)
|
||||
type FileMetadata struct {
|
||||
Name string `json:"name"`
|
||||
MimeType string `json:"mime_type"`
|
||||
Size int64 `json:"size"`
|
||||
FileExtension string `json:"file_extension"`
|
||||
}
|
||||
|
||||
// IsCloudOnly returns true if the file only exists in the cloud
|
||||
func (f *File) IsCloudOnly() bool {
|
||||
return f.SyncStatus == SyncStatusCloudOnly
|
||||
}
|
||||
|
||||
// IsSynced returns true if the file is synchronized between local and cloud
|
||||
func (f *File) IsSynced() bool {
|
||||
return f.SyncStatus == SyncStatusSynced
|
||||
}
|
||||
|
||||
// IsLocalOnly returns true if the file only exists locally
|
||||
func (f *File) IsLocalOnly() bool {
|
||||
return f.SyncStatus == SyncStatusLocalOnly
|
||||
}
|
||||
|
||||
// HasLocalContent returns true if the file has local content (not just metadata)
|
||||
func (f *File) HasLocalContent() bool {
|
||||
return f.FilePath != "" || f.EncryptedFilePath != ""
|
||||
}
|
||||
|
||||
// IsDeleted returns true if the file is marked as deleted
|
||||
func (f *File) IsDeleted() bool {
|
||||
return f.State == StateDeleted
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue