model

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Dec 26, 2018 License: MPL-2.0 Imports: 36 Imported by: 0

Documentation

Overview

Package model implements folder abstraction and file pulling mechanisms

Index

Constants

View Source
const (
	FolderIdle folderState = iota
	FolderScanning
	FolderScanWaiting
	FolderSyncing
	FolderError
)

Variables

View Source
var (
	ErrFolderPaused = errors.New("folder is paused")
)

Functions

This section is empty.

Types

type Availability added in v0.13.0

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

type ConnectionInfo

type ConnectionInfo struct {
	protocol.Statistics
	Connected     bool
	Paused        bool
	Address       string
	ClientVersion string
	Type          string
}

func (ConnectionInfo) MarshalJSON

func (info ConnectionInfo) MarshalJSON() ([]byte, error)

type FileError added in v0.14.44

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 added in v0.14.5

type FolderCompletion struct {
	CompletionPct float64
	NeedBytes     int64
	NeedItems     int64
	GlobalBytes   int64
	NeedDeletes   int64
}

type Holdable added in v0.14.11

type Holdable interface {
	Holders() string
}

type Model

type Model struct {
	*suture.Supervisor
	// contains filtered or unexported fields
}

func NewModel

func NewModel(cfg *config.Wrapper, id protocol.DeviceID, clientName, clientVersion string, ldb *db.Lowlevel, protectedFiles []string) *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.

func (*Model) AddConnection

func (m *Model) AddConnection(conn connections.Connection, hello protocol.HelloResult)

AddConnection adds a new peer connection to the model. An initial index will be sent to the connected peer, thereafter index updates whenever the local folder changes.

func (*Model) AddFolder

func (m *Model) AddFolder(cfg config.FolderConfiguration)

func (*Model) Availability

func (m *Model) Availability(folder string, file protocol.FileInfo, block protocol.BlockInfo) []Availability

func (*Model) BringToFront

func (m *Model) BringToFront(folder, file string)

BringToFront bumps the given files priority in the job queue.

func (*Model) Closed added in v0.14.4

func (m *Model) Closed(conn protocol.Connection, err error)

Closed is called when a connection has been closed

func (*Model) ClusterConfig

func (m *Model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterConfig)

func (*Model) CommitConfiguration

func (m *Model) CommitConfiguration(from, to config.Configuration) bool

func (*Model) Completion

func (m *Model) Completion(device protocol.DeviceID, folder string) FolderCompletion

Completion returns the completion status, in percent, for the given device and folder.

func (*Model) Connection added in v0.14.41

func (m *Model) Connection(deviceID protocol.DeviceID) (connections.Connection, bool)

Connection returns the current connection for device, and a boolean whether a connection was found.

func (*Model) ConnectionStats

func (m *Model) ConnectionStats() map[string]interface{}

ConnectionStats returns a map with connection statistics for each device.

func (*Model) CurrentFolderFile

func (m *Model) CurrentFolderFile(folder string, file string) (protocol.FileInfo, bool)

func (*Model) CurrentGlobalFile

func (m *Model) CurrentGlobalFile(folder string, file string) (protocol.FileInfo, bool)

func (*Model) CurrentSequence added in v0.14.4

func (m *Model) CurrentSequence(folder string) (int64, bool)

CurrentSequence returns the change version for the given folder. This is guaranteed to increment if the contents of the local folder has changed.

func (*Model) DelayScan

func (m *Model) DelayScan(folder string, next time.Duration)

func (*Model) DeviceStatistics

func (m *Model) DeviceStatistics() map[string]stats.DeviceStatistics

DeviceStatistics returns statistics about each device

func (*Model) DownloadProgress added in v0.13.0

func (m *Model) DownloadProgress(device protocol.DeviceID, folder string, updates []protocol.FileDownloadProgressUpdate)

func (*Model) FolderErrors added in v0.14.53

func (m *Model) FolderErrors(folder string) ([]FileError, error)

func (*Model) FolderStatistics

func (m *Model) FolderStatistics() map[string]stats.FolderStatistics

FolderStatistics returns statistics about each folder

func (*Model) GetFolderVersions added in v0.14.44

func (m *Model) GetFolderVersions(folder string) (map[string][]versioner.FileVersion, error)

func (*Model) GetHello added in v0.13.0

func (m *Model) GetHello(id protocol.DeviceID) protocol.HelloIntf

GetHello is called when we are about to connect to some remote device.

func (*Model) GetIgnores

func (m *Model) GetIgnores(folder string) ([]string, []string, error)

func (*Model) GlobalDirectoryTree

func (m *Model) GlobalDirectoryTree(folder, prefix string, levels int, dirsonly bool) map[string]interface{}

func (*Model) GlobalSize

func (m *Model) GlobalSize(folder string) db.Counts

GlobalSize returns the number of files, deleted files and total bytes for all files in the global model.

func (*Model) Index

func (m *Model) Index(deviceID protocol.DeviceID, folder string, fs []protocol.FileInfo)

Index is called when a new device is connected and we receive their full index. Implements the protocol.Model interface.

func (*Model) IndexUpdate

func (m *Model) IndexUpdate(deviceID protocol.DeviceID, folder string, fs []protocol.FileInfo)

IndexUpdate is called for incremental updates to connected devices' indexes. Implements the protocol.Model interface.

func (*Model) LocalChangedFiles added in v1.0.0

func (m *Model) LocalChangedFiles(folder string, page, perpage int) []db.FileInfoTruncated

LocalChangedFiles returns a paginated list of currently needed files in progress, queued, and to be queued on next puller iteration, as well as the total number of files currently needed.

func (*Model) LocalSize

func (m *Model) LocalSize(folder string) db.Counts

LocalSize returns the number of files, deleted files and total bytes for all files in the local folder.

func (*Model) NeedFolderFiles

func (m *Model) NeedFolderFiles(folder string, page, perpage int) ([]db.FileInfoTruncated, []db.FileInfoTruncated, []db.FileInfoTruncated)

NeedFolderFiles returns paginated list of currently needed files in progress, queued, and to be queued on next puller iteration, as well as the total number of files currently needed.

func (*Model) NeedSize

func (m *Model) NeedSize(folder string) db.Counts

NeedSize returns the number and total size of currently needed files.

func (*Model) OnHello added in v0.13.0

func (m *Model) OnHello(remoteID protocol.DeviceID, addr net.Addr, hello protocol.HelloResult) error

OnHello is called when an device connects to us. This allows us to extract some information from the Hello message and add it to a list of known devices ahead of any checks.

func (*Model) Override

func (m *Model) Override(folder string)

func (*Model) ReceiveOnlyChangedSize added in v0.14.50

func (m *Model) ReceiveOnlyChangedSize(folder string) db.Counts

ReceiveOnlyChangedSize returns the number of files, deleted files and total bytes for all files that have changed locally in a receieve only folder.

func (*Model) RemoteNeedFolderFiles added in v0.14.43

func (m *Model) RemoteNeedFolderFiles(device protocol.DeviceID, folder string, page, perpage int) ([]db.FileInfoTruncated, error)

RemoteNeedFolderFiles returns paginated list of currently needed files in progress, queued, and to be queued on next puller iteration, as well as the total number of files currently needed.

func (*Model) RemoteSequence added in v0.14.4

func (m *Model) RemoteSequence(folder string) (int64, bool)

RemoteSequence returns the change version for the given folder, as sent by remote peers. This is guaranteed to increment if the contents of the remote or global folder has changed.

func (*Model) RemoveFolder added in v0.12.3

func (m *Model) RemoveFolder(cfg config.FolderConfiguration)

func (*Model) Request

func (m *Model) Request(deviceID protocol.DeviceID, folder, name string, size int32, offset int64, hash []byte, weakHash uint32, fromTemporary bool) (out protocol.RequestResponse, err error)

Request returns the specified data segment by reading it from local disk. Implements the protocol.Model interface.

func (*Model) ResetFolder

func (m *Model) ResetFolder(folder string)

func (*Model) RestartFolder added in v0.14.4

func (m *Model) RestartFolder(from, to config.FolderConfiguration)

func (*Model) RestoreFolderVersions added in v0.14.44

func (m *Model) RestoreFolderVersions(folder string, versions map[string]time.Time) (map[string]string, error)

func (*Model) Revert added in v0.14.50

func (m *Model) Revert(folder string)

func (*Model) ScanFolder

func (m *Model) ScanFolder(folder string) error

func (*Model) ScanFolderSubdirs added in v0.13.10

func (m *Model) ScanFolderSubdirs(folder string, subs []string) error

func (*Model) ScanFolders

func (m *Model) ScanFolders() map[string]error

func (*Model) SetIgnores

func (m *Model) SetIgnores(folder string, content []string) error

func (*Model) StartDeadlockDetector

func (m *Model) StartDeadlockDetector(timeout time.Duration)

StartDeadlockDetector starts a deadlock detector on the models locks which causes panics in case the locks cannot be acquired in the given timeout period.

func (*Model) StartFolder added in v0.13.0

func (m *Model) StartFolder(folder string)

StartFolder constructs the folder service and starts it.

func (*Model) State

func (m *Model) State(folder string) (string, time.Time, error)

func (*Model) String

func (m *Model) String() string

func (*Model) UsageReportingStats added in v0.14.40

func (m *Model) UsageReportingStats(version int, preview bool) map[string]interface{}

func (*Model) VerifyConfiguration

func (m *Model) VerifyConfiguration(from, to config.Configuration) error

func (*Model) WatchError added in v0.14.45

func (m *Model) WatchError(folder string) error

type ProgressEmitter

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

func NewProgressEmitter

func NewProgressEmitter(cfg *config.Wrapper) *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(from, 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()

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

func (*ProgressEmitter) Stop

func (t *ProgressEmitter) Stop()

Stop stops the emitter.

func (*ProgressEmitter) String

func (t *ProgressEmitter) String() string

func (*ProgressEmitter) VerifyConfiguration

func (t *ProgressEmitter) VerifyConfiguration(from, to config.Configuration) error

VerifyConfiguration implements the config.Committer interface

Jump to

Keyboard shortcuts

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