1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package bokoworker
- import (
- "os"
- "path/filepath"
- "strings"
- "imuslab.com/bokofs/bokofsd/mod/bokofs/bokofile"
- "imuslab.com/bokofs/bokofsd/mod/bokofs/bokothumb"
- )
- /*
- Boko Worker
- A boko worker is an instance of WebDAV file server that serves a specific
- disk partition or subpath in which the user can interact with the disk
- via WebDAV interface
- */
- type Options struct {
- NodeName string //The node name (also the id) of the directory tree, e.g. disk1
- ServePath string // The actual path to serve, e.g. /media/disk1/mydir
- ThumbnailStore string // The path to the thumbnail store, e.g. /media/disk1/thumbs
- }
- type Worker struct {
- /* Worker Properties */
- NodeName string //The node name (also the id) of the directory tree, e.g. disk1
- ServePath string // The actual path to serve, e.g. /media/disk1/mydir
- /* Runtime Properties */
- Filesystem *bokofile.RouterDir //The file system to serve
- Thumbnails *bokothumb.RouterDir //Thumbnail interface for this worker
- }
- // NewFSWorker creates a new file system worker from a directory
- func NewFSWorker(options *Options) (*Worker, error) {
- nodeName := options.NodeName
- mountPath := options.ServePath
- thumbnailStore := options.ThumbnailStore
- if !strings.HasPrefix(nodeName, "/") {
- nodeName = "/" + nodeName
- }
- mountPath, _ = filepath.Abs(mountPath)
- fs, err := bokofile.CreateRouterFromDir(mountPath, nodeName, false)
- if err != nil {
- return nil, err
- }
- //Create the thumbnail store if it does not exist
- os.MkdirAll(thumbnailStore, 0755)
- thumbrender, err := bokothumb.CreateThumbnailRenderer(thumbnailStore, mountPath, nodeName, false)
- if err != nil {
- return nil, err
- }
- return &Worker{
- NodeName: nodeName,
- ServePath: mountPath,
- Filesystem: fs,
- Thumbnails: thumbrender,
- }, nil
- }
|