model

package
v0.0.0-...-b5ba5ed Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 31, 2024 License: MPL-2.0 Imports: 46 Imported by: 0

Documentation

Overview

Package model implements folder abstraction and file pulling mechanisms

Index

Constants

View Source
const (
	FolderIdle folderState = iota
	FolderScanning
	FolderScanWaiting
	FolderSyncWaiting
	FolderSyncPreparing
	FolderSyncing
	FolderCleaning
	FolderCleanWaiting
	FolderError
)

Variables

View Source
var (
	ErrFolderPaused     = errors.New("folder is paused")
	ErrFolderNotRunning = errors.New("folder is not running")
	ErrFolderMissing    = errors.New("no such folder")
)

Functions

This section is empty.

Types

type Availability

type Availability struct {
	ID            protocol.DeviceID `json:"id"`
	FromTemporary bool              `json:"fromTemporary"`
}

type ClusterConfigReceivedEventData

type ClusterConfigReceivedEventData struct {
	Device protocol.DeviceID `json:"device"`
}

type ConnectionInfo

type ConnectionInfo struct {
	protocol.Statistics
	Address string `json:"address"`
	Type    string `json:"type"`
	IsLocal bool   `json:"isLocal"`
	Crypto  string `json:"crypto"`
}

type ConnectionStats

type ConnectionStats struct {
	protocol.Statistics // Total for primary + secondaries

	Connected     bool   `json:"connected"`
	Paused        bool   `json:"paused"`
	ClientVersion string `json:"clientVersion"`

	Address string `json:"address"` // mirror values from Primary, for compatibility with <1.24.0
	Type    string `json:"type"`    // mirror values from Primary, for compatibility with <1.24.0
	IsLocal bool   `json:"isLocal"` // mirror values from Primary, for compatibility with <1.24.0
	Crypto  string `json:"crypto"`  // mirror values from Primary, for compatibility with <1.24.0

	Primary   ConnectionInfo   `json:"primary,omitempty"`
	Secondary []ConnectionInfo `json:"secondary,omitempty"`
}

type FileError

type FileError struct {
	Path string `json:"path"`
	Err  string `json:"error"`
}

A []FileError is sent as part of an event and will be JSON serialized.

type FolderCompletion

type FolderCompletion struct {
	CompletionPct float64
	GlobalBytes   int64
	NeedBytes     int64
	GlobalItems   int
	NeedItems     int
	NeedDeletes   int
	Sequence      int64
	RemoteState   remoteFolderState
}

func (*FolderCompletion) Map

func (comp *FolderCompletion) Map() map[string]interface{}

Map returns the members as a map, e.g. used in api to serialize as JSON.

type FolderSummary

type FolderSummary struct {
	Errors     int `json:"errors"`
	PullErrors int `json:"pullErrors"` // deprecated

	Invalid string `json:"invalid"` // deprecated

	GlobalFiles       int   `json:"globalFiles"`
	GlobalDirectories int   `json:"globalDirectories"`
	GlobalSymlinks    int   `json:"globalSymlinks"`
	GlobalDeleted     int   `json:"globalDeleted"`
	GlobalBytes       int64 `json:"globalBytes"`
	GlobalTotalItems  int   `json:"globalTotalItems"`

	LocalFiles       int   `json:"localFiles"`
	LocalDirectories int   `json:"localDirectories"`
	LocalSymlinks    int   `json:"localSymlinks"`
	LocalDeleted     int   `json:"localDeleted"`
	LocalBytes       int64 `json:"localBytes"`
	LocalTotalItems  int   `json:"localTotalItems"`

	NeedFiles       int   `json:"needFiles"`
	NeedDirectories int   `json:"needDirectories"`
	NeedSymlinks    int   `json:"needSymlinks"`
	NeedDeletes     int   `json:"needDeletes"`
	NeedBytes       int64 `json:"needBytes"`
	NeedTotalItems  int   `json:"needTotalItems"`

	ReceiveOnlyChangedFiles       int   `json:"receiveOnlyChangedFiles"`
	ReceiveOnlyChangedDirectories int   `json:"receiveOnlyChangedDirectories"`
	ReceiveOnlyChangedSymlinks    int   `json:"receiveOnlyChangedSymlinks"`
	ReceiveOnlyChangedDeletes     int   `json:"receiveOnlyChangedDeletes"`
	ReceiveOnlyChangedBytes       int64 `json:"receiveOnlyChangedBytes"`
	ReceiveOnlyTotalItems         int   `json:"receiveOnlyTotalItems"`

	InSyncFiles int   `json:"inSyncFiles"`
	InSyncBytes int64 `json:"inSyncBytes"`

	State        string    `json:"state"`
	StateChanged time.Time `json:"stateChanged"`
	Error        string    `json:"error"`

	Version  int64 `json:"version"` // deprecated
	Sequence int64 `json:"sequence"`

	IgnorePatterns bool   `json:"ignorePatterns"`
	WatchError     string `json:"watchError"`
}

FolderSummary replaces the previously used map[string]interface{}, and needs to keep the structure/naming for api backwards compatibility

type FolderSummaryEventData

type FolderSummaryEventData struct {
	Folder  string         `json:"folder"`
	Summary *FolderSummary `json:"summary"`
}

type FolderSummaryService

type FolderSummaryService interface {
	suture.Service
	Summary(folder string) (*FolderSummary, error)
	OnEventRequest()
}

func NewFolderSummaryService

func NewFolderSummaryService(cfg config.Wrapper, m Model, id protocol.DeviceID, evLogger events.Logger) FolderSummaryService

type Model

type Model interface {
	suture.Service

	connections.Model

	ResetFolder(folder string) error
	DelayScan(folder string, next time.Duration)
	ScanFolder(folder string) error
	ScanFolders() map[string]error
	ScanFolderSubdirs(folder string, subs []string) error
	State(folder string) (string, time.Time, error)
	FolderErrors(folder string) ([]FileError, error)
	WatchError(folder string) error
	Override(folder string)
	Revert(folder string)
	BringToFront(folder, file string)
	LoadIgnores(folder string) ([]string, []string, error)
	CurrentIgnores(folder string) ([]string, []string, error)
	SetIgnores(folder string, content []string) error

	GetFolderVersions(folder string) (map[string][]versioner.FileVersion, error)
	RestoreFolderVersions(folder string, versions map[string]time.Time) (map[string]error, error)

	DBSnapshot(folder string) (*db.Snapshot, error)
	NeedFolderFiles(folder string, page, perpage int) ([]db.FileInfoTruncated, []db.FileInfoTruncated, []db.FileInfoTruncated, error)
	RemoteNeedFolderFiles(folder string, device protocol.DeviceID, page, perpage int) ([]db.FileInfoTruncated, error)
	LocalChangedFolderFiles(folder string, page, perpage int) ([]db.FileInfoTruncated, error)
	FolderProgressBytesCompleted(folder string) int64

	CurrentFolderFile(folder string, file string) (protocol.FileInfo, bool, error)
	CurrentGlobalFile(folder string, file string) (protocol.FileInfo, bool, error)
	GetMtimeMapping(folder string, file string) (fs.MtimeMapping, error)
	Availability(folder string, file protocol.FileInfo, block protocol.BlockInfo) ([]Availability, error)

	Completion(device protocol.DeviceID, folder string) (FolderCompletion, error)
	ConnectionStats() map[string]interface{}
	DeviceStatistics() (map[protocol.DeviceID]stats.DeviceStatistics, error)
	FolderStatistics() (map[string]stats.FolderStatistics, error)
	UsageReportingStats(report *contract.Report, version int, preview bool)
	ConnectedTo(remoteID protocol.DeviceID) bool

	PendingDevices() (map[protocol.DeviceID]db.ObservedDevice, error)
	PendingFolders(device protocol.DeviceID) (map[string]db.PendingFolder, error)
	DismissPendingDevice(device protocol.DeviceID) error
	DismissPendingFolder(device protocol.DeviceID, folder string) error

	GlobalDirectoryTree(folder, prefix string, levels int, dirsOnly bool) ([]*TreeEntry, error)
}

func NewModel

func NewModel(cfg config.Wrapper, id protocol.DeviceID, ldb *db.Lowlevel, protectedFiles []string, evLogger events.Logger, keyGen *protocol.KeyGenerator) Model

NewModel creates and starts a new model. The model starts in read-only mode, where it sends index information to connected peers and responds to requests for file data without altering the local folder in any way.

type ProgressEmitter

type ProgressEmitter struct {
	// contains filtered or unexported fields
}

func NewProgressEmitter

func NewProgressEmitter(cfg config.Wrapper, evLogger events.Logger) *ProgressEmitter

NewProgressEmitter creates a new progress emitter which emits DownloadProgress events every interval.

func (*ProgressEmitter) BytesCompleted

func (t *ProgressEmitter) BytesCompleted(folder string) (bytes int64)

BytesCompleted returns the number of bytes completed in the given folder.

func (*ProgressEmitter) CommitConfiguration

func (t *ProgressEmitter) CommitConfiguration(_, to config.Configuration) bool

CommitConfiguration implements the config.Committer interface

func (*ProgressEmitter) Deregister

func (t *ProgressEmitter) Deregister(s *sharedPullerState)

Deregister a puller which will stop broadcasting pullers state.

func (*ProgressEmitter) Register

func (t *ProgressEmitter) Register(s *sharedPullerState)

Register a puller with the emitter which will start broadcasting pullers progress.

func (*ProgressEmitter) Serve

func (t *ProgressEmitter) Serve(ctx context.Context) error

serve starts the progress emitter which starts emitting DownloadProgress events as the progress happens.

func (*ProgressEmitter) String

func (t *ProgressEmitter) String() string

type TreeEntry

type TreeEntry struct {
	Name     string                `json:"name"`
	ModTime  time.Time             `json:"modTime"`
	Size     int64                 `json:"size"`
	Type     protocol.FileInfoType `json:"type"`
	Children []*TreeEntry          `json:"children,omitempty"`
}

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL