model

package
v0.14.13 Latest Latest
Warning

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

Go to latest
Published: Nov 29, 2016 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
	FolderSyncing
	FolderError
)

Variables

This section is empty.

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

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

type Holdable added in v0.14.11

type Holdable interface {
	Holders() string
}

type IndexSorter added in v0.14.1

type IndexSorter interface {
	Append(f protocol.FileInfo)
	Sorted(fn func(f protocol.FileInfo) bool)
	Close()
}

The IndexSorter sorts FileInfos based on their Sequence. You use it by first Append()ing all entries to be sorted, then calling Sorted() which will iterate over all the items in correctly sorted order.

func NewIndexSorter added in v0.14.1

func NewIndexSorter(location string) IndexSorter

NewIndexSorter returns a new IndexSorter that will start out in memory for efficiency but switch to on disk storage once the amount of data becomes large.

type Model

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

func NewModel

func NewModel(cfg *config.Wrapper, id protocol.DeviceID, deviceName, clientName, clientVersion string, ldb *db.Instance, 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, file string, version protocol.Vector, 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) CheckFolderHealth

func (m *Model) CheckFolderHealth(id string) error

CheckFolderHealth checks the folder for common errors and returns the current folder error, or nil if the folder is healthy.

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) ConnectedTo

func (m *Model) ConnectedTo(deviceID protocol.DeviceID) bool

ConnectedTo returns true if we are connected to the named device.

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) FolderStatistics

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

FolderStatistics returns statistics about each folder

func (*Model) GetHello added in v0.13.0

func (m *Model) GetHello(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) IsPaused added in v0.12.0

func (m *Model) IsPaused(device protocol.DeviceID) bool

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, int)

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) PauseDevice added in v0.12.0

func (m *Model) PauseDevice(device protocol.DeviceID)

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(folder string)

func (*Model) Request

func (m *Model) Request(deviceID protocol.DeviceID, folder, name string, offset int64, hash []byte, fromTemporary bool, buf []byte) 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(cfg config.FolderConfiguration)

func (*Model) ResumeDevice added in v0.12.0

func (m *Model) ResumeDevice(device protocol.DeviceID)

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) VerifyConfiguration

func (m *Model) VerifyConfiguration(from, to config.Configuration) 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