package form import ( "github.com/ulule/deepcopier" "github.com/photoprism/photoprism/internal/remote" ) // Service represents a remote service form for uploading, downloading or syncing media files. type Service struct { AccName string `json:"AccName"` AccOwner string `json:"AccOwner"` AccURL string `json:"AccURL"` AccType string `json:"AccType"` AccKey string `json:"AccKey"` AccUser string `json:"AccUser"` AccPass string `json:"AccPass"` AccTimeout string `json:"AccTimeout"` // Request timeout: default, high, medium, low, none AccError string `json:"AccError"` AccShare bool `json:"AccShare"` // Manual upload enabled, see SharePath, ShareSize, and ShareExpires. AccSync bool `json:"AccSync"` // Background sync enabled, see SyncDownload and SyncUpload. RetryLimit int `json:"RetryLimit"` // Maximum number of failed requests. SharePath string `json:"SharePath"` ShareSize string `json:"ShareSize"` ShareExpires int `json:"ShareExpires"` SyncPath string `json:"SyncPath"` SyncInterval int `json:"SyncInterval"` SyncUpload bool `json:"SyncUpload"` SyncDownload bool `json:"SyncDownload"` SyncFilenames bool `json:"SyncFilenames"` SyncRaw bool `json:"SyncRaw"` } // NewService creates a new service form. func NewService(m interface{}) (f Service, err error) { err = deepcopier.Copy(m).To(&f) return f, err } // Discovery performs automatic service discovery. func (f *Service) Discovery() error { acc, err := remote.Discover(f.AccURL, f.AccUser, f.AccPass) if err != nil { return err } err = deepcopier.Copy(acc).To(f) return err }